Главная » Ассемблер, Железо » Поиск устройства PCI по коду класса

0

Поиск устройства определенного типа можно осуществлять по коду класса. Код класса состоит из трех байтов (рис. 3.3): старший байт задает базовый класс (Base Class), средний байт — подкласс (Sub- Class), младший байт — интерфейс (Interface). В таблице 3.3 приведен перечень базовых классов устройств PCI, а табл. 3.4 содержит полное описание кодов классов.

Рис. 3.3. Общая структура поля кода класса Таблица 3.3. Коды базовых классов

 


Код класса

Тип устройства

 

00h

Устройство было изготовлено до введения стандарта

 

 

на коды классов

 

01 h

Контроллер устройства массовой памяти

 

02h

Сетевой контроллер

 

03h

В идеоконтроллер

 

04h

Устройство мультимедиа

05 h

Контроллер памяти

06h

Устройство типа «мост»

07h

Простой коммуникационный контроллер

08h

Основная системная периферия

09h

Устройство ввода

OAh

Стыковочная станция

OBh

Процессор

OCh

Контроллер последовательной шины

ODh

Контроллер устройства беспроводной передачи данных

OEh

Интеллектуальный контроллер ввода-вывода

OFh

Сопутствующий коммуникационный контроллер

10h

Контроллер устройства шифрации/дешифрации

11h

Контроллер устройства сбора и обработки сигналов

12h-FEh

Зарезервированы

FFh

Устройство не подходит ни к одному из перечисленных классов

 

Таблица 3.4. Полное описание кодов классов устройств

Базовый

Подкласс

Интерфейс

Значение

класс

 

 

 

00h

00h

OOh

Все устройства, выпущенные до принятия стандарта, за исключением VGA-совместимых

 

01 h

OOh

VGA-совместимые устройства

01 h

00 h

OOh

SCSI-контроллер

 

01h

xxh(рис 3 4)

IDE-контроллер

 

02h

OOh

Контроллер дисковода гибких дисков

 

03h

OOh

IPI-контроллер

 

04h

OOh

RAID-контроллер

 

80h

OOh

Устройство массовой памяти другого типа

02h

OOh

OOh

Контроллер Ethernet

 

01h

OOh

Контроллер Token Ring

 

02h

OOh

Контроллер FDDI

 

03h

OOh

Контроллер ATM

 

04h

OOh

Контроллер ISDN

 

80h

OOh

Сетевой контроллер другого типа

Таблица 3.4 (продолжение)

Базовый класс Подкласс

Интерфейс

Значение

03h

OOh

OOh 01h

VGA-совместимый контроллер 8514-совместимый контроллер

 

01h

OOh

Контроллер XGA

 

02h

OOh

ЗО-контроллер

 

8ph

OOh

Другой видеоконтроллер

04h

OOh

OOh

Видеоустройство

 

01h

OOh

Аудиоустройство

 

02h

OOh

Устройство для компьютерной телефонии

 

80h

OOh

Мультимедиа-устройство другого типа

05h

OOh

OOh

Контроллер оперативной памяти

 

01h

OOh

Контроллер Flash-пэмяти

 

80 h

OOh

Контроллер памяти другого типа

06h

OOh

OOh

Мост хоста

 

01h

OOh

Мост ISA

 

02h

OOh

Мост EISA

 

03h

OOh

Мост МСА

 

04h

OOh . 01h

Мост PCI-to-PCI Мост PCI-to-PCI, поддерживающий вычитающее декодирование

 

05h

OOh

Мост PCMCIA

 

06h

OOh

Мост NuBus

 

07h

OOh

Мост CardBus

 

08h

OOh 01h

Мост RACEway в режиме прозрачности Мост RACEway в режиме оконечного узла

 

09 h

40h

80 h

Полупрозрачный мост PCI-to-PCI, обращенный к хост-процессору «основной» стороной Полупрозрачный мост PCI-to-PCI, обращенный к хост-процессору «вторичной» стороной

 

80h

OOh

Мост другого типа

07h

OOh

OOh

Стандартный ХТ-совместимый контроллер последовательного порта

Базовый класс Подкласс Интерфейс Значение

 

01h

16450-совместимый контроллер последовательного порта

 

02h

16550-совместимый контроллер последовательного порта

 

03h

16650-совместимый контроллер последовательного порта

 

04h

16750-совместимый контроллер последовательного порта

 

05h

16850-совместимый контроллер последовательного порта

 

06 h

16950-совместимый контроллер последовательного порта

01h

OOh

Параллельный порт

 

01h

Двунаправленный параллельный порт

 

02h

Параллельный порт типа ECP1.X

 

03h

КонтроллерIEEE1284

 

FEh

Целевое устройство IEEE1284 (не контроллер)

02h

OOh

Многопортовый последовательный контроллер

03h

OOh

Стандартный модем

 

Olh

Hayes-совместимый модем, 16450-совместимый интерфейс

 

02h

Hayes-совместимый модем, 16550-совместимый интерфейс

 

03h

Hayes-совместимый модем, 16650-совместимый интерфейс

 

04h

Hayes-совместимый модем, 16750-совместимый интерфейс

80h

OOh

Другое коммуникационное устройство

08h OOh

OOh

Стандартный контроллер прерываний типа 8259

 

01h

Контроллер прерываний ISA

 

02h

Контроллер прерываний EISA

 

10h

Контроллер прерываний ввода-вывода APIC

 

20h

Контроллер прерываний ввода-вывода APIC

Таблица 3.4 (продолжение)


Базовый класс

Подкласс

Интерфейс

Значение

 

01h

OOh

01h 02 h

Стандартный контроллер ПДП типа 8237

ISA-контроллер ПДП EISA-контроллер ПДП

 

02 h

OOh

01h 02h

Стандартный системный таймер типа 8254

Системный таймер ISA

Системные таймеры EISA (два таймера)

 

03h

OOh 01h

Стандартный контроллер часов реального времени

Контроллер часов реального времени ISA

 

04h

OOh

Стандартный контроллер «горячего подключения» PCI

 

80h

OOh

Системная периферия другого типа

09h

OOh

OOh

Контроллер клавиатуры

 

01h

OOh

Контроллер дигитайзера

 

02h

OOh

Контроллер мыши

 

03h

OOh

Контроллер сканера

 

04h

OOh 01h

Стандартный контроллер игрового порта

Контроллер игрового порта с программируемым интерфейсом

 

80h

OOh

Контроллер другого устройства ввода данных

OAh

OOh

OOh

Стандартная станция подключения

 

8 Oh

OOh

Нестандартная станция подключения

OBh

OOh

OOh

Процессор типа 386

 

01h

OOh

Процессор типа 486

 

02 h

OOh,

Процессор типа Pentium

 

10h

OOh

Процессор типа Alpha

 

2 Oh

OOh

Процессор типа Power PC

 

30h

OOh

Процессор типа MIPS

 

40h

OOh

Сопроцессор

OCh

OOh

OOh

IEEE1394 (FireWire)

Базовый класс

Подкласс

Интерфейс

Значение

 

 

 

10h

IEEE1394, следующий за спецификацией 1394 OpenHCI

 

 

01h

OOh

ACCESS.bus

 

 

02h

OOh

SSA

 

 

03h

OOh 10h 80 h FEh

Устройство USB, следующее за спецификацией Universal Host Controller

Устройство USB, следующее за спецификацией Open Host Controller

Устройство USB без определенного программного интерфейса

Устройство USB (не хост-контроллер)

 

 

04h

OOh

Fibre Channel

 

 

05h

OOh

SMBus

 

ODh

OOh

OOh

IRDA-совместимый контроллер

 

 

01h

OOh

IR-контроллер потребителя

 

 

10h

OOh

RF-контроллер

 

 

80h

OOh

Другой тип контроллере беспроводной связи

 

OEh

OOh

xxh OOh

Интеллектуальный контроллер ввода-вывода (I20) с архитектурой, соответствующей спецификации 1.0 Буфер сообщений FIFO со смещением 040h

 

OFh

01h

OOh

TV-контроллер

 

 

02h

OOh

Аудиоконтроллер

 

 

03h

OOh

Голосовой контроллер

 

 

04h

OOh

Контроллер данных

 

10h

OOh

OOh

Сетевой или компьютерный шифратор/дешифратор

 

 

10h

OOh

Игровой шифратор/дешифратор

 

 

80h

OOh

Шифратор/дешифратор другого типа

 

11h

OOh

OOh

DPIO-модуль

 

 

80h

OOh

Контроллер устройства сбора и обработки сигналов другого типа

 

В программе PCITest, приведенной в листинге 3.1, поиск VGA-cob- местимого видеоконтроллера осуществляется по коду класса, присвоенному устройствам такого типа (030000И). Обнаружив первое устройство с соответствующим кодом (в системе, вообще говоря, может быть несколько видеоконтроллеров), программа прекращает поиск и выводит на экран значения некоторых полей конфигурационного пространства. Для запуска данного примера пригоден любой компьютер с шиной PCI и PCI- или AGP-видеоконтроллером.

Рис. 3.4. Формат байта интерфейса кода класса ЮЕ-контроллера

Листинг 3.1. Поиск видеоконтроллера, определение кода

изготовителя, используемого адресного пространства и номера прерывания IRQ

IDEAL

Р386

LOCALS

MODEL MEDIUM

; Подключить файл инеионических обозначений

; кодов управляющих клавиш и цветовых кодов

Include "listl_03.inc"

; Подключить файл макросов

Include "listl_04.inc"

SEGMENT sseg para stack ‘STACK’

DB 400h DUP(?)

ENDS

DATASEG

; Параметры устройства PCI

VendorlD DW ? идентификатор изготовителя

DevicelD DW ? идентификатор устройства

ClassCode DD ? :тип устройства

BaseAddressO DD ? ;базовый адрес О

BaseAddressl DD ? ;базовый адрес 1

BaseAddress2 DD ? :базовый адрес 2

BaseAddress3 DD ? -.базовый адрес 3

BaseAddress4 DD ? ;базовый адрес 4

BaseAddress5 DD ? :базовый адрес 5

InterruptLine

DB ? ;номер используемого прерывания IRQ

: Координаты устройства PCI

BusNumber

DB ? ;номер шины

DeviceNumber

DB ? ;номер устройства и номер функции

; Счетчик операций нажатия/отпускания клавиш

PressCounter DW ?

; Текстовые сообщения

PCI

DB 0,25,"ТЕСТИРОВАНИЕ ФУНКЦИЙ PCI BIOS’.O

DB 4,26,"ПАРАМЕТРЫ ВИДЕОКОНТРОЛЛЕРА",0

DB 6,28."Номер шины:".0

DB 7,22,"Номер устройства:",0

DB 8,25,"Номер функции:",0

DB 9.12,"Идентификатор изготовителя:",0

DB 10,14, "Идентификатор устройства:".0

DB 11.24,"Тип устройства:",0

DB 12,23."Базовый адрес 0:",0

DB 13,23."Базовый адрес 1:".0

DB 14,23,"Базовый адрес 2:",0

DB 15.23,"Базовый адрес 3:".0

DB 16.23."Базовый адрес 4:".О

DB 17,23."Базовый адрес 5:",0

DB 18.8,"Номер используемого прерывания:",0 NoIRQ

DB IB.40,"не используется".0 AnyK

DB YELLOW.24,29,"Нажмите любую клавишу".0 : Сообщения об ошибках

NoPCI

DB 12.18,"Система не поддерживает PCI BI0S",0 NoSVGA

DB 12.23,"Видеоконтроллер SVGA PCI не найден".0 BadReg

DB 12,28,"Неверный номер регистра",0 ENDS

C0DESEG

;* Основной модуль программы *

PROC PCITest

mov AX.DGROUP

mov DS.AX

mov [CS:MainDataSeg],AX : Установить текстовый режим и очистить экран

mov АХ.З int 10h

Листинг 3.1(продолжение)

: Скрыть курсор – убрать за нижнюю границу экрана

mov [ScreenStri ng].25

mov [ScreenColumn],О call SetCursorPosition

; Установить зеленый цвет символов и черный фон

mov [TextColorAndBackground],LIGHTGREEN

; Вывести текстовые сообщения на экран

MShowText 15,PCI

; Установить желтый цвет символов и черный фон

mov [TextColorAndBackground],YELLOW

; Опрос PCI-устройств

; Проверить наличие PCI BIOS

mov AX.OBlOlh int lAh

jc

@@PCIBIOSNotFound cmp EDX,20494350h jne

@@pCIBIOSNotFound : Найти видеоконтроллер (первое устройство

; типа 30000h)

mov AX,0Bl()3h

mov ECX.030000h

mov SI.O int lAh

jc

@@DeviceNotFound

mov [BusNumber],BH

mov [Devi ceNumber].BL

; Получить идентификатор изготовителя

mov AX,0B109h :читать слово

mov DI,0 ;смещение слова int lAh

jc

@@BadRegisterNumber

mov [VendorID],CX

; Получить идентификатор устройства

mov AX.0B109h ;читать слово

mov DI.2 :смещение слова int lAh

jc POBadRegisterNumber

mov [DeviceID].CX

; Получить тип устройства (самопроверка)

mov AX.OBlOAh ;читать двойное слово

mov DI,B ;смещение слова int lAh

jc

@@BadRegisterNumber shr ECX.B

mov [ClassCode],ECX

; Получить базовый адрес О

mov АХ,OBlOAh ;читать двойное слово

mov Dl.lOh ;смещение слова

intlAh

jc@@BadRegisterNumber

mov[BaseAddressO],ECX

; Получить базовый адрес 1

movAX.OBlOAh :читать двойное слово

movDI,14h ;смещение слова

intlAh

jc@@BadRegisterNumber

mov[BaseAddressl],ECX

; Получить базовый адрес 2

movAX.OBlOAh ;читать двойное слово

movDI,18h ;смещение слова

intlAh

jc@@BadRegisterNumber

mov[BaseAddress2],ECX

; Получить базовый адрес 3

movAX.OBlOAh .-читать двойное слово

movDl.lCh ;смещение слова

intlAh

jc@@BadRegisterNumber

mov[BaseAddress3],ECX

; Получить базовый адрес 4

movAX.OBlOAh ;читать двойное слово

movDI,20h ;смещение слова

intlAh

jc@@BadRegisterNumber

mov[BaseAddress4],ECX

; Получить базовый адрес 5

movAX.OBlOAh ;читать двойное слово

movDI,24h ;смещение слова

intlAh

jcPOBadRegisterNumber

mov[BaseAddress5].ECX

; Получить номер используемого устройством

; прерыванияIRQ

movAX,0B108h ;читать байт

movDI,3Ch ;смещение байта

intlAh

jc@@BadRegisterNumber

mov[InterruptLine],CL

; Вывести полученные данные на экран в

; шестнадцатеричном коде

; Отобразить основные параметры устройства MShowHexByte 6. 40, [BusNumber]

mov АН,[Devi ceNumber] shr AH.3

MShowHexByte 7, 40, AH

mov AH,[Devi ceNumber] and AH.111b

Листинг 3.1(продолжение)

MShowHexByte 8, 40, АН MShowHexWord 9. 40, [VendorlD] MShowHexWord 10, 40, [DevicelD] MShowHexDWord 11, 40, [ClassCode]

; Отобразить базовые адреса MShowHexDWord 12, 40, [BaseAddressO] MShowHexDWord 13, 40. [BaseAddressl] MShowHexDWord 14. 40, [BaseAddress2] MShowHexDWord 15. 40. [BaseAddress3] MShowHexDWord 16. 40. [BaseAddress4] MShowHexDWord 17. 40, [BaseAddress5]

; Прерывание используется? crop [InterruptLine].0FFh

je

@@IRQNotUsed

; Вывести номер используемого прерывания IRQ MShowHexByte 18, 40, [InterruptLine]

jmp short

@@End

@@IRQNotUsed:

MShowString NoIRQ

; Окончание работы

@@End: MShowColorString AnyK

cal1 GetChar : Переустановить текстовый режим и очистить экран

mov АХ.З int 10h

; Выход в DOS

mov AH,4Ch int 21h

; Обработка ошибок POBadRegi sterNumber:

MFatalError BadReg ;неверный номер регистра

@@DeviceNotFound:

MFatalError NoSVGA ;не найден видеоконтроллер

@@PCIВIOSNot Fou nd:

MFatalError NoPCI :не поддерживается PCI BIOS ENDP PCITest ENDS

; Подключить процедуры вывода данных на экран

Include "listl_02.inc"

END

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии