Перечисление PCI устройств

Тема в разделе "WASM.ELECTRONICS", создана пользователем SpiritFire, 15 май 2008.

  1. SpiritFire

    SpiritFire New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    31
    Скажите пожалуйста, каким образом можно (интересует "технология") перечислить все устройства PCI, установленные на компе? Знаю, сорцы в инете есть, но нужно понять сам процесс нахождения устройств. На данный момент ничего вразумительного не нашел.
    Целевая ОС - ДОС или Вин98. Для ВинХР есть выход н нулевое кольцо для работы с портами, важен сам процесс перебора.
    Если можно, с удовольствием почитаю ссылки по теме, где более-менее доходчиво это объясняется.

    P.S. Вещи Вроде (...) вот кусок кода на 98 для поиска чего-то [ code ]...[ /code ] А вот, для работы с ним [ code ]...[ /code] видел. ХЗ что там...
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    SpiritFire
    Скачай спецификацию PCI и почитай.
    Можно через порты и прерывания.
    Для работы с PCI устройствами есть два пути через сервис BIOSa или через порты ввода/вывода. Вернее не самими устройствами, а с их конфигурационными пространствами этих устройств. Конфигурационное адресное пространство это 256 байт в каждом PCI устройстве. Предназначенные для идентификации устройства и его настройки. Для доступа к конфигурационному адресному пространству в PC-AT и совместимых машинах выделено два основных порта.
    0CF8h -W порт адреса Address
    0CFCh RW порт данных Data
    Оба порта являются 32 битными.
    Порт адреса представляет собой следующую 32 битную структуру
    Код (Text):
    1. +---+---------+-------+----------+--------+---------------+-+-+
    2. |31 |30     24|23   16|15      11|10     8|7             2|1|0|
    3. +---+---------+-------+----------+--------+---------------+-+-+
    4. | С | резерв  |шина   |устройство| функция|Индекс регистра|0|0|
    5. +---+---------+-------+----------+--------+---------------+-+-+
    Порт адреса задает шину, устройства, и адрес регистра в конфигурационном пространстве устройства. Грубо говоря, устройство - это физически присутствующее устройство. А функция - это логическое устройство. Пусть вас не удивляет, но большая
    часть PCI устройств это системные устройства, а не платы расширения PCI.
    С - флаг доступа к устройству. Выставляется по завершению установки адресса.


    Карта конфигурационного пространства. Представляет собой 256 байт различной информации. Описание нужно смотреть в соответствующих спецификациях.

    Если в ответ на запрос нулевого регистра возвращается значение 0FFFFh, то устройства не существует. Vendor ID (ID производителя) - для Intel это 8086h, но не может принимать значение 0FFFFh.

    Header Type (тип заголовка) – если бит 7 равен 1 то устройство содержит несколько функций.
    Если бит 6 равен 0 то заголовок стандартный. Стандартные заголовки
    00 – стандартный смотри выше.
    01 – стандартный для моста PCI-to-PCI
    02 – стандартный для моста CardBus.

    Число шин определяется числом мостов PCI-to-PCI плюс одна главная. Если не путаю то в ранних спецификациях все мосты должны были быть на главной шине, а в последующих не обязательно. Если используешь Int 1ah, то там есть информация о числе шин.

    Функции следует проверять вначале нуливую и смотерть заголовок если установлин бит 7 то надо перебирать все функции иначи ненадо.


    Вот и сканируй перебирая все адресса.
    1 Читаешь функцию 0, если нулевой регистр(Vendor ID) имеет младшее слово равное 0FFFFh то устройство отсутствует 4.
    2 Если есть функция 0 то проверяем тип заголовка на содержание дополнительных функций
    3. Да существуют другии функции пробуем читать нулевой регистр с кажой функции.
    4. увеличиваем счетчик устрпойств.
    5. Если переполнился счетчик устрпойств, то увеличиваем счетчик шин.
    6. Проверяем на число шин если меньше переходим на 1 если больше то выходим.


    На виндоусе уже это все проделанно только бери и читай список. Название функций не помню, но думаю ты найдешь.
     
  3. SpiritFire

    SpiritFire New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    31
    Надо руками - это в учебных целях. Буду через порты -- чтобы не зависить от оси.

    Спасибо, качаю спецификацию, буду разбираться)