· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Общение через PCI шинув ДОС

Посл.отвђт Сообщен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