Ru/api/kernel: Difference between revisions
Jump to navigation
Jump to search
Line 3,329: | Line 3,329: | ||
список вторых должен быть указан в документации по устройству. | список вторых должен быть указан в документации по устройству. | ||
=== подфункция 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) | |||
== Функция 63 - работа с доской отладки. == | == Функция 63 - работа с доской отладки. == |