![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 09.12.2009
Сообщений: 25
|
![]()
Для устройств PCI необходимо прочитать содержимое регистров Vendor ID, Device ID, Revision ID,Class ID и т.д.
Сначала в порт CONFIG_ADDRESS (0x0CF8) записал 32-разрядный адрес регистра.. адрес вроде как разбирается мостом.. Проверил порт CONFIG_DATA (0x0CFC) на возвращение значения 0x0FFFFFFFF (случай чтения конфиг. регистра несуществующего устройства). Код:
![]() Как я понял, доступ к конфигурационным блокам осуществляется по неким циклам шины configuration read, configuration write. Вот с этим-то и возникли сложности из-за непонимания матчасти.. погуглил, почитал, все равно не въехал.. Каким же образом можно прочитать содержимое регистров конфигурационного блока устройства PCI? p.s. виндус, ms visual studio
Удел сильных - уделывать слабых
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 09.12.2009
Сообщений: 25
|
![]()
Как оказалось, всё чертовски просто. Скажу пару слов по этому вопросу, может кому пригодится.
В порт CONFIG_ADDRESS мы записываем 32-разрядный адрес. Формат: 10000000 | номер шины | номер устр-ва | номер функции | 00000000 если адрес верный, прочитав порт 0x0CFC, мы обнаруживаем некое значение, отличное от 0x0FFFFFFFF (все единицы). Далее для того, чтобы узнать DeviceID, VendorID, Status и т.д. мы просто в младшие 8 бит записываем необходимое нам смещение (указано в таблице выше). К примеру: 10000000 | номер шины | номер устр-ва | номер функции | 00001000 - смещение 8 Теперь посылаем эту бороду в порт 0x0CF8, и имеем в 0x0CFC 32-битное значение, находящееся по смещение 0х08 (ClassID + RevisionID). Соответственно, чтобы получить ClassID - выделяем старшие 24 бита, для RevisionID - младшие 8 бит. Таки дела.
Удел сильных - уделывать слабых
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Содержимое регистров | maxwelldream | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 15.01.2011 09:28 |
Инициализация теневых регистров | kot111 | Помощь студентам | 0 | 03.11.2009 16:58 |
состояние регистров клавиатуры | olen` | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 10 | 05.06.2009 22:34 |
PCI. Чтение множества данных подряд | Min | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 07.04.2009 03:40 |
много регистров | nntpaha | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 22.12.2007 19:01 |