SysFn62/ru: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
Line 3: | Line 3: | ||
=== Подфункция 0 - получить версию PCI-интерфейса. === | === Подфункция 0 - получить версию PCI-интерфейса. === | ||
Параметры: | ''Параметры:'' | ||
* eax = 62 - номер функции | |||
Возвращаемое значение: | * bl = 0 - номер подфункции | ||
''Возвращаемое значение:'' | |||
Замечания: | * eax = -1 - доступ к PCI запрещён; иначе | ||
* ah.al = версия PCI-интерфейса (ah=версия, al=подверсия) | |||
* старшее слово eax обнулено | |||
''Замечания:'' | |||
* Предварительно должен быть разрешён низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21. | |||
* Если PCI BIOS не поддерживается, то значение ax неопределено. | |||
=== Подфункция 1 - получить номер последней PCI-шины. === | === Подфункция 1 - получить номер последней PCI-шины. === |
Revision as of 15:30, 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)