Difference between revisions of "SysFn62/ru"

From KolibriOS wiki
Jump to navigation Jump to search
Line 38: Line 38:
 
=== Подфункция 2 - Получить механизм обращения к конфигурационному пространству PCI. ===
 
=== Подфункция 2 - Получить механизм обращения к конфигурационному пространству PCI. ===
  
Параметры:
+
''Параметры:''
  * eax = 62 - номер функции
 
  * bl = 2 - номер подфункции
 
Возвращаемое значение:
 
  * eax = -1 - доступ к PCI запрещён; иначе
 
  * al = механизм (1 или 2); прочие байты eax разрушаются
 
Замечания:
 
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
 
    для приложений подфункцией 12 функции 21.
 
  * Механизм обращения выбирается в соответствии
 
    с характеристиками оборудования.
 
  * Подфункции чтения и записи автоматически работают
 
    с выбранным механизмом.
 
  
 +
* eax = 62 - номер функции
 +
* bl = 2 - номер подфункции
 +
 +
''Возвращаемое значение:''
 +
 +
* eax = -1 - доступ к PCI запрещён; иначе
 +
* al = механизм (1 или 2); прочие байты eax разрушаются
 +
 +
''Замечания:''
 +
 +
* Предварительно должен быть разрешён низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21.
 +
* Механизм обращения выбирается в соответствии с характеристиками оборудования.
 +
* Подфункции чтения и записи автоматически работают с выбранным механизмом.
  
 
=== подфункции 4,5,6 - прочитать PCI-регистр. ===
 
=== подфункции 4,5,6 - прочитать PCI-регистр. ===

Revision as of 15:31, 10 April 2010

Функция 62 - пользовательский доступ к PCI.

Подфункция 0 - получить версию PCI-интерфейса.

Параметры:

  • eax = 62 - номер функции
  • bl = 0 - номер подфункции

Возвращаемое значение:

  • eax = -1 - доступ к PCI запрещён; иначе
  • ah.al = версия PCI-интерфейса (ah=версия, al=подверсия)
  • старшее слово eax обнулено

Замечания:

  • Предварительно должен быть разрешён низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21.
  • Если PCI BIOS не поддерживается, то значение ax неопределено.

Подфункция 1 - получить номер последней PCI-шины.

Параметры:

  • eax = 62 - номер функции
  • bl = 1 - номер подфункции

Возвращаемое значение:

  • eax = -1 - доступ к PCI запрещён; иначе
  • al = номер последней PCI-шины; оставшиеся байты eax разрушаются

Замечания:

  • Предварительно должен быть разрешён низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21.
  • Если PCI BIOS не поддерживается, то значение al неопределено.

Подфункция 2 - Получить механизм обращения к конфигурационному пространству PCI.

Параметры:

  • eax = 62 - номер функции
  • bl = 2 - номер подфункции

Возвращаемое значение:

  • eax = -1 - доступ к PCI запрещён; иначе
  • al = механизм (1 или 2); прочие байты eax разрушаются

Замечания:

  • Предварительно должен быть разрешён низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21.
  • Механизм обращения выбирается в соответствии с характеристиками оборудования.
  • Подфункции чтения и записи автоматически работают с выбранным механизмом.

подфункции 4,5,6 - прочитать PCI-регистр.

Параметры:

 * eax = 62 - номер функции
 * bl = 4 - читать байт
 * bl = 5 - читать слово
 * bl = 6 - читать двойное слово
 * bh = номер PCI-шины
 * ch = dddddfff, где ddddd = номер устройства на шине,
   fff = номер функции устройства
 * cl = номер регистра (должен быть чётным для bl=5,
   делиться на 4 для bl=6)

Возвращаемое значение:

 * eax = -1 - ошибка (запрещён доступ к PCI или
   неподдерживаемые параметры); иначе
 * al/ax/eax (в зависимости от запрошенного размера) содержит данные;
   оставшаяся часть регистра eax разрушается

Замечания:

 * Предварительно должен быть разрешён низкоуровневый доступ к PCI
   для приложений подфункцией 12 функции 21.
 * Механизм доступа 2 поддерживает только 16 устройств на шине и
   игнорирует номер функции. Получить механизм доступа можно вызовом
   подфункции 2.
 * Некоторые регистры стандартны и существуют для всех устройств,
   некоторые определяются конкретным устройством. Список первых
   входит, например, в известный Interrupt List by Ralf Brown
   (http://www.pobox.com/~ralf/files.html,
   ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
   список вторых должен быть указан в документации по устройству.


подфункции 8,9,10 - записать в PCI-регистр.

Параметры:

 * eax = 62 - номер функции
 * bl = 8 - писать байт
 * bl = 9 - писать слово
 * bl = 10 - писать двойное слово
 * bh = номер PCI-шины
 * ch = dddddfff, где ddddd = номер устройства на шине,
   fff = номер функции устройства
 * cl = номер регистра (должен быть чётным для bl=9,
   делиться на 4 для bl=10)
 * dl/dx/edx (в зависимости от запрошенного размера) содержит
   данные для записи

Возвращаемое значение:

 * eax = -1 - ошибка (запрещён доступ к PCI или
   неподдерживаемые параметры)
 * eax = 0 - успешно

Замечания:

 * Предварительно должен быть разрешён низкоуровневый доступ к PCI
   для приложений подфункцией 12 функции 21.
 * Механизм доступа 2 поддерживает только 16 устройств на шине и
   игнорирует номер функции. Получить механизм доступа можно вызовом
   подфункции 2.
 * Некоторые регистры стандартны и существуют для всех устройств,
   некоторые определяются конкретным устройством. Список первых
   входит, например, в известный Interrupt List by Ralf Brown;
   список вторых должен быть указан в документации по устройству.

подфункция 11 - инициализировать доступ к MMIO

Параметры:

 * eax = 62 - номер функции
 * bl = 11 - номер подфункции
 * cx = адрес PCI-устройства 

Возвращаемое значение:

 * eax = -1 - доступ к PCI запрещён; 
 * eax = -2 - доступ к MMIO-блокам устройства не разрешён; 
 * eax = -3 - ошибка аллокации пользовательской дин. памяти; иначе
 * eax = размер доступной динамической памяти.

Замечания:

 * Предварительно должен быть разрешён низкоуровневый доступ к PCI
   для приложений подфункцией 12 функции 21.
 * адрес PCI-устройства должен совпадать с системной переменной
   mmio_pci_addr

подфункция 12 - получить линейный адрес MMIO-блока

Параметры:

 * eax = 62 - номер функции
 * bl  = 12 - номер подфункции
 * bh  = номер BAR-регистра в конфигурационной зоне PCI
 * ecx = размер MMIO-блока (в байтах)
 * edx = смещение относительно начала MMIO-блока (в 4K-страницах!)

Возвращаемое значение:

 * eax = -1 - доступ к PCI запрещён; 
 * eax = -2 - неверный номер BAR-регистра; 
 * eax = -3 - BAR не содержит адреса IO;
 * eax = -4 - BAR адресует порты IO;
 * eax = -5 - ошибка аллокации; иначе
 * eax = начальный адрес MMIO в адресном пространстве приложения.

Замечания:

 * Предварительно должен быть разрешён низкоуровневый доступ к PCI
   для приложений подфункцией 12 функции 21.
 * Адрес PCI-устройства задается системной переменной mmio_pci_addr.
 * Предоставленный диапазон линейных адресов должен освобождаться
   посредством вызова функции 62:13

подфункция 13 - освободить линейные адреса MMIO

Параметры:

 * eax = 62 - номер функции
 * bl  = 12 - номер подфункции
 * ecx = начальный адрес освобождаемого MMIO-блока в адресном
   пространстве приложения

Возвращаемое значение:

 * eax = 1 - блок успешно освобожден; 

Замечания:

 * Предварительно приложению должен быть выделен uMMIO-блок (fn62:12)