|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Дек 27, 2003 20:29:56 Хочу задать вопрос о алгоритме :) Алгоритм который я использовал (пытаюсь использовать) таков: 1. проверяю есть ли PCI БСВВ. INT 1A (AX = B101h) 2. по Vendor ID и Device ID устройства (вообщето их список лежит на www.pcisig.com, но его дают только членам и только за 3000$ ;( ) ищу номер шины , номер устройства, и номер функции. (пространство ввода-вывода устройства?) Это позволяет адресовать его на PCI шине. INT 1A (AX = B102h) 3. получив номер шины , номер устройства, и номер функции я могу передавать байт(8) слово(16) или двойное слово (32) в заданый регистр устройства. INT 1A (AX = B108h - AX = B10Fh) Вопрос собственно в том правильно ли я все это понял и действительно ли в INT 1A (AX = B108h - AX = B10Fh) номер регистра, это внутренний регистр контроллера на шине? 1911414576__INT1ah.txt |
|
|
Дата: Дек 27, 2003 21:23:30 Raven Я на мыло пример отправил, здесь не помещается :) |
|
|
Дата: Дек 27, 2003 21:56:40 Письмо получил. Спасибо. Замечательный листинг. Похоже я прав, только остался один, даже 2 вопроса. Буду очень благодарен, за ответ на них :) 1. Что делать если "смещение" регистра более 100h? (Насколько я понял DI = register number (0000h-00FFh) это именно смещение регистра, описываемое в спецификации контроллера) По идее, кроме INT 1A (AX = B108h - AX = B10Fh)есть еще набор ф-й INT 1A (AX = B181h - AX = B18Dh) надо использовать его? 2. Не могу понять, что в фях INT 1A (AX = B18Сh - AX = B18Dh) значит DI = register number (multiple of 4 less than 0100h) ????? DI - 16 битный регистр... Например в контроллере УСБ регистр 1 буфера 15ой конечной точки имеет смещение 13с... Как мне к нему обратиться? Помогите, если кто знает, пожалуста. Ворон. |
|
|
Дата: Дек 30, 2003 13:51:37 Обращение к конфигурационному пространству PCI устройства происходит через порты 0CF8 и 0CFC. Обращение только двойными словами. В стандартной плате две PCI шины, собственно в которую вставляют платы(BUS 0) и AGP порт(BUS 1). Вот макрос чтения регистра: ConfRead macro bus,dev,func,reg mov eax,80000000h or (bus shl 16) or ((dev and 1Fh) shl 11) or ((func and 07h) shl 8) or (reg and 0FCh) mov dx,0CF8h out dx,eax mov dx,0CFCh in eax,dx endm Запись в регистр соответсвенно - "out dx, eax" >> Что делать если "смещение" регистра более 100h? смещение регистра более FC не может быть в принципе, так как по стандарту PCI определено 256 байт для конфигурационного пространства. http://www.skunksworks.net/doc/rea/pci_bus_spec22.zip Раздел 6.1 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.086 |