SysFn62/ru

From KolibriOS wiki
Revision as of 13:42, 18 January 2016 by IgorA (talk | contribs)
Jump to navigation Jump to search

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

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

Параметры:

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

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

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

Замечания:

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

Константы для регистров:

eax - SF_PCI (62)
ebx - SSF_GET_VERSION (0)

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

Параметры:

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

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

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

Замечания:

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

Константы для регистров:

eax - SF_PCI (62)
ebx - SSF_GET_LAST_BUS (1)

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

Параметры:

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

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

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

Замечания:

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

Константы для регистров:

eax - SF_PCI (62)
ebx - SSF_GET_ADRR_MODE (2)

подфункции 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 ([1], [2]); список вторых должен быть указан в документации по устройству.

Константы для регистров:

eax - SF_PCI (62)
ebx - SSF_READ_BYTE (4), SSF_READ_WORD (5), SSF_READ_DWORD (6)

подфункции 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; список вторых должен быть указан в документации по устройству.

Константы для регистров:

eax - SF_PCI (62)
ebx - SSF_WRITE_BYTE (8), SSF_WRITE_WORD (9), SSF_WRITE_DWORD (10)