Совершенно необходимая книга по "железу".

Ответы на ваши вопросы по тех.средствам

The Indispensable PC Hardware Book

Your Hardware Questions Answered
Hans- Peter Messmer
[Где купить "железо"] [Что еще почитать] [Оглавление] [Назад] [Вперед]

24.7. Область адресов конфигурации

Каждому устройству PCI (и каждой отдельной функции многофункционального устройства) отводится область конфигурации емкостью 256 байт; таким образом, она подразделяется на 64 регистра по 32 разряда. В начале области располагается фиксированный заголовок длиной в 64 байта, содержимое которого является фиксированным для всех устройств PCI. Использование остальных 192 байт зависит от свойств каждого отдельного устройства PCI. Содержимое этой области распознается программным обеспечением устройства. На рисунке 24.7 показано строение области конфигурации и заголовка.

Допустимыми значениями идентификатора устройства являются величины от 0000h до fffeh; значение ffffh показывает, что устройство PCI не подключено. Это позволяет стартовой процедуре PCI BIOS идентифицировать все устройства PCI. Заголовок делится на два раздела - первые 16 байт (00h-0fh) одинаковы для всех устройств PCI; структура следующих 48 байт для различных устройств PCI может быть различной. Структура этого участка заголовка определяется элементом "заголовок" (смещение 0eh). В настоящее время определен только один тип заголовка (заголовок=0); именно он показан на рисунке в интервале смещений с 10h до 3fh. Старший бит 7 заголовка указывает на то, является ли устройство многофункциональным (бит 7=1) или монофункциональным (бит 7=1). Заметим, что по спецификация РСI обязательно должны задаваться только элементы, описывающие идентификатор изготовителя, идентификатор устройства, команду и статус. Идентификатор изготовителя присваивается PCI SIG (правительственной организацией, разработавшей стандарт PCI). Идентификатор устройства и версия присваиваются изготовителем.

Рисунок 24.7. 256-байтная область конфигурации и 64-байтный заголовок.

"Код класса" показывает тип устройства PCI. Эта область делится на три однобайтных раздела. Старший байт (смещение 0bh) содержит базовый код класса, средний байт (смещение 0аh) определяет код подкласса, а младший байт (смещение 09h) обеспечивает программный интерфейс с соответствующим устройством. Допустимые коды базовых классов и подклассов приведены в таблице 24.3.

Базовый код Значение Подкласс Значение
00h Устройство было выпущено до определения кода класса 00h Все блоки, кроме VGA
    01h VGA
01h Контроллер массовой памяти 00h Контроллер SCSI
    01h Контроллер IDE
    02h Контроллер гибких дисков
    03h Контроллер IDE
    80h Другой контроллер
02h Контроллер сети 00h Ethernet
    01h Token ring
    02h FDDI
    80h Другой контроллер
03h Видеоконтроллер 00h VGA
    01h XGA
    80h Другой контроллер
04h Контроллер мультимедиа 00h Видео
    01h Аудио
    80h Другое устройство
05h Контроллер памяти 00h RAM
    01h Флэш-память
    80h Другой контроллер
06h Шлюз 00h Host
    01h ISA
    02h EISA
    03h MCA
    04h PCI-PCI
    05h PCMCIA
    80h Другой шлюз
07h-eh Резерв    
ffh Устройство не относится к классам 00h-feh нет  

Таблица 24.3. Коды базовых классов и подклассов

Многие базовые классы и подклассы имеют достаточно хорошо проработанные программные интерфейсы (например, VGA и SCSI), поэтому им не требуется использовать для программного интерфейса младший байт (смещение 09h) элемента кода класса. По этой причине в поле программного интерфейса известных классов содержится код 00h. Элемент "команда" в заголовке делает возможным управление устройством, т.е. определяет его реакцию на циклы PCI. На рисунке 24.8 показана структура этого элемента. Если в регистр команды записать код 000h, то соответствующее устройство PCI будет деактивировано и будет потом реагировать только на циклы конфигурации.

Рисунок 24.8. Регистр команды

Взведенный бит ВВЕ разрешает так называемые быстрые "каскадные" циклы. Они требуют меньшего числа пустых циклов между двумя операциями PCI. Бит SEE активирует (SEE=1) или деактивирует (SEE=0) драйвер для обработки сигнала SERR. Чтобы предоставить информацию об ошибке четности при адресации также и управляющим блокам системы, должны быть установлены оба бита SEE и PER. Бит WC должен быть установлен для тех устройств, которые выполняют пошаговую обработку адреса/данных. Пошаговая обработка означает, что требуемые адресно-информационные сигналы активируются не одновременно. Чтобы снизить нагрузку на внутренний драйвер при активировании строк, их высокий уровень устанавливается блоками в течение нескольких циклов таймера. При этом устройство PCI в течение некоторого короткого времени ожидает стабилизации всех потенциалов. Если бит PER установлен, устройство PCI реагирует на ошибку четности; если он сброшен, то все ошибки четности будут игнорироваться. Установка бита VPS приводит к тому, что VGA-совместимые устройства PCI игнорируют обращения к регистру палитры. Если VPS=0, реакция устройства будет нормальной. Установка бита MWI разрешает устройству выдавать запросы на запись в память с аннулированием; если MWI сброшен, устройство выполняет нормальный доступ к памяти на запись. Сброс SC приводит к тому, что устройство игнорирует специальные циклы; если SC=1, устройство будет распознавать специальные циклы и реагировать на них соответствующим образом. Если устройство должно выполнять функции главного абонента шины, следует установить бит ВМ. Когда установлен бит MAR, устройство реагирует на запросы к области адресов памяти; если установлен бит IOR, он реагирует на циклы ввода-вывода. Помимо регистра команды, предусматривается также регистр статуса; он показывает состояние соответствующего устройства PCI при выполнении операции шины PCI. Структура регистра показана на рисунке 24.9.

Рисунок 24.9. Регистр статуса

Если устройство распознает ошибку четности, оно устанавливает бит PER. Бит SER устанавливается в том случае, если устройство выдает сигнал SERR. Когда устройство, выполняющее функции главного абонента шины, прекращает сеанс, оно устанавливает бит МАВ. Аналогично, когда операция прекращается по инициативе устройства-цели, должен устанавливаться бит ТАВ. МАВ и ТАВ устанавливаются главным абонентом шины. С другой стороны, STA устанавливается устройством, работающим в качестве цели, в том случае, если оно вызвало прерывание (прерывание по инициативе устройства-цели). Два бита DEVTIM задают временные характеристики сигнала DEVSEL. Бит DP управляется только главным абонентом шины и устанавливается в том случае, если активирован бит PERR, устройство работает как главный абонент шины и бит PER в регистре команды взведен. Наконец, бит FBB, отведенный для устройства-цели, показывает, поддерживает ли устройство быстрые каскадные циклы (FBB=1) или нет (FBB=0).

Элемент CLS (размер кэш-строки) заголовка определяет длину кэш-строки системы в единицах по 32 байта. Это требуется, например, при выполнении записи с аннулированием. Элемент "задержка" показывает длительность операции шины PCI: эффективное время определяется как задержка+8 циклов таймера PCI. Старший бит регистра BIST (Built-In Self Test – встроенный тест) показывает, выполняет ли устройство самопроверку (бит 7=1). Если это так, то можно запустить BIST, задав 1 в бите 6. После выполнения BIST возвращает код завершения в 4 младших разрядах BIST - разряды 3-0. Все коды, кроме 0, означают ошибку. Элемент INT-line заголовка в AT PC показывает, какая строка аппаратных прерываний IRQx связана с контактом прерывания устройства или его отдельного функционального блока. Допустимыми являются значения 0-15, соответствующие IRQ0-IRQ15. Эта информация предназначена для логических схем шлюза PCI, осуществляющих маршрутизацию прерываний, которые запускают соответствующее устройство PCI. Какой контакт линии прерываний реально используется устройством или функцией, определяется элементом INT-pin: 1 означает INTA, 2 - INTB и т.д. Если устройство не использует прерываний, надо задать значение 0. В регистрах MinGNT и MaxLat, предназначенных только для чтения, определяются минимальное и максимальное значения времени ожидания, которые задаются в соответствии с требованиями изготовителя устройства PCI и позволяют устройству использовать шину PCI оптимальным образом. Адаптеры и устройства PCI достаточно часто имеют собственное пространство ввода-вывода или памяти, которое используется, например, для хранения данных, для выполнения программ и т.п. При помощи регистров базового адреса PCI позволяет располагать эти области памяти и ввода-вывода в любой области адресов памяти или ввода-вывода. На рисунке 24.10 можно видеть структуру регистра базового адреса для 32/64-разрядной базы памяти и для 32-разрядной базы ввода-вывода. Область адресов памяти содержит, в зависимости от аппаратной реализации, 32 или 64 разряда; область адресов ввода-вывода, однако, может состоять только из 32 разрядов (из которых процессоры 80х86 используют пока только младшие слова адреса AD15-AD0).

Рисунок 24.10. Регистр базового адреса памяти, портов ввода-вывода и базового адреса расширенной ROM

Бит 0 предназначен для того, чтобы отличить базовый адрес памяти (бит 0=0) от базового адреса ввода-вывода (бит 0=1). В зависимости от длины адреса, может быть от трех до шести адресов базы; соответствующий элемент заголовка содержит 24 разряда. Прежде всего хотелось бы рассказать об элементе, описывающем базу памяти. Для переназначения адресного пространства программа POST, естественно, должна иметь сведения о том, какого размера должна быть формируемая область. Для этого все разряды соответствующего регистра базы, которые в действительности представляют собой смещение внутри формируемой области адресов, аппаратно устанавливаются в 0. В результате программа POST может легко определить размер области, заполняя базовый адрес последовательностью единиц и считывая затем обратно значение базового адреса. Все разряды, с которых читается "0", располагаются внутри формируемой области адресов; разряды, результатьр чтения которых является "1", подлежат переназначению. Если, например, разряды с 15 по 4 возвращают значение 0, а разряды с 31 (или 63) по 16 возвращают значение 1, то отводимая область охватывает 64 килобайта, поскольку 16 младших разрядов могут использоваться для адресации 216 байт=64 килобайт (четыре младших разряда 3-0 не подлежат изменению, но участвуют в определении размеров области). Процедура переназначения, при которой адресные разряды, возвращающие значение 1, заменяются при записи соответствующим базовым адресом, выполняется программой POST. Заметим, что переназначение выполняется блоками по 16 байт, 32 байта, 64 байта,…, 1 килобайт, 2 килобайта и т.д. Поскольку элемент заголовка, отведенный для базового адреса, может включать в себя несколько значений базовых адресов, он позволяет также реализовать фрагментарное переназначение. Если установлен бит PRF, устройство допускает опережающее чтение, т.е. шлюз может заранее считать информацию, поставляемую устройством, в буфер, не мешая работе устройства и не вызывая нежелательных побочных эффектов. Элемент "тип" размером в 2 байта указывает на область адресов, в которой может выполняться назначение. Значение 00b показывает, что 32-разрядный регистр может быть назначен в любом месте 32-разрядной адресной области; величина 10b означает то же самое, только в этом случае и регистр, и область адресов состоят из 64 разрядов. Значение 0b отводится для 32-разрядных регистров, которые должны быть сформированы в виде 20-разрядных адресов меньше 1М.

Переназначение адресов ввода-вывода выполняется аналогичным способом, за исключением того, что здесь остаются без изменения только два младших бита 1 и 0 (если бит 0=1, то это означает, что назначение будет выполняться в области адресов ввода-вывода). Таким образом, область адресов может назначаться в единицах по 2 байта, 4 байта и т.п. Переназначение 2 байт обычно означает, что в соответствующем элементе в области адресов ввода-вывода будет размещен один 32-разрядный порт ввода-вывода.

Последним элементом заголовка является базовый адрес расширенной ROM. Посредством этого элемента можно переместить расширение ROМ в любое место 32-разрядной области адресов памяти. Переназначение выполняется аналогично тому, как это делается для 32-разрядного базового адреса, только в этом случае для переназначения используется 21 старший разряд. При этом ROM может переназначаться блоками по 2 байта, 4 байта и т.д. Установив AD, вы активируете расширение ROM, что вызывает декодирование адресов; нулевое значение деактивирует расширение ROM. Таким путем устройство PCI может осуществлять операции как с расширением ROM, так и без него. Адрес переназначения, расположенный в разрядах 32-11, имеет смысл только в том случае, если AD взведен.

[Где купить "железо"] [Что еще почитать] [Оглавление] [Назад] [Вперед]

Copyright  ТОО ИВО " Модуль", сентябрь 1998г.
Addison Wesley Longman 1997.

Все права защищены.

Будем признательны за комментарии и пожелания: Administrator