Чтение онлайн

на главную - закладки

Жанры

Аппаратные интерфейсы ПК. Энциклопедия

Гук Михаил Юрьевич

Шрифт:

Для работы механизма № 1 в пространстве ввода-вывода зарезервированы 32-битные порты с адресами 0CF8H и 0CFCh, входящие в главный мост. Для обращения к конфигурационному пространству в порт

CONFIG_ADDRESS
(RW, адрес CF8h) заносят 32-разрядный адрес, декодируемый в соответствии с рис. 6.9, а. После занесения адреса обращением к порту
CONFIG_DATA
(RW, адрес CFCh) можно прочитать или записать содержимое требуемого конфигурационного регистра. В регистре
CONFIG_ADDRESS
бит 31 является разрешением формирования конфигурационных и специальных циклов. В зависимости от номера шины, указанного в этом регистре, главный мост генерирует конфигурационные циклы одного из двух типов.

Для обращения к устройству, находящемуся на нулевой шине (подключенной к главному мосту), используется цикл типа 0 (биты 1:0=00). Главный мост декодирует поле номера устройства

в позиционный код, помещаемый на линии
AD[31:11]
; номер адресуемой функции, адрес регистра и биты 1:0=00 передаются на шину прозрачно (рис. 6.9, б). Устройству 0 соответствует бит AD11, устройству 1 — AD12, устройству 20 — AD31. Поскольку нулевым устройством является главный мост, который и осуществляет декодирование, на шину единичное значение AD11 в цикле типа 0 не выводится. Устройства PCI, расположенные в микросхеме главного моста, могут использовать номера 21–31, для которых линий AD уже не хватает. На системной плате вход
IDSEL
каждого слота или микросхемы PCI-устройства соединяется со своей линией адреса. Как правило, слоты подключаются, начиная с линии AD31 (и «вниз»), микросхемы устройств PCI, расположенные на системной плате, подключаются, начиная с AD12 (и «вверх»), но может быть и иной порядок. Цикл типа 0 игнорируется всеми другими мостами, подключенными к нулевой шине.

Для обращения к устройству, находящемуся на ненулевой шине, используется цикл типа 1. Здесь главный мост передает адресную часть регистра

CONFIG_ADDRESS
на главную шину PCI, обнуляя старшие биты (31:24) и устанавливая в битах 1:0 признак типа «01» (рис. 6.9, в). Мост, опознавший номер подключаемой им шины, передает транзакцию на эту шину, декодируя поле номера устройства в позиционный код (как это делал главный мост для своей шины) и обнуляя биты
AD[1:0]
.

Рис. 6.9. Адресация конфигурационных циклов: а — формат регистра

CONFIG_ADDRESS
, б — формат адреса на шине в цикле типа 0, в — формат адреса на шине в цикле типа 1

Если конфигурационный цикл не воспринимается ни одним из устройств, мосты могут эту ситуацию отрабатывать двояко: фиксировать отсутствие устройства (сработает Master Abort) или же выполнять операции вхолостую. Однако в любом случае чтение конфигурационного регистра несуществующего устройства (функции) должно возвращать значение FFFFFFFFh (это будет безопасной информацией, поскольку даст недопустимое значение идентификатора устройства).

Если главный мост подключает несколько равноранговых шин (peer buses), то одна из них назначается условно главной, так что вышеописанная логика сохраняется. Чтобы не заботиться об изучении реальной топологии шин, для конфигурационных обращений программам удобно использовать вызовы PCI BIOS, которые имеются для всех режимов процессора (оптимизировать быстродействие здесь не приходится, поскольку эти обращения выполняются не так уж и часто).

Специальный цикл генерируется при записи в

CONFIG_DATA
, когда в регистре
CONFIG_ADDRESS
все биты [15:8] единичные, [7:0] нулевые, номер шины, на которой формируется цикл, задается битами [23:16]. В специальном цикле адресная информация не передается (он широковещательный), но путем задания номера шины можно управлять его распространением. Если хост генерирует специальный цикл с нулевым адресом шины, то на главную шину этот цикл выйдет как цикл типа 0 и всеми остальными мостами распространяться не будет. Если требуется полная широковещательность, то хост должен записать ненулевой адрес шины; тогда на главную шину специальный цикл выйдет с типом 1, и все остальные мосты пропустят его на свои шины. Специальный цикл, генерируемый ведущим устройством шины, действует только на шине этого устройства и не распространяется через мосты. Если требуется полная широковещательность, это ведущее устройство должно генерировать специальный цикл посредством записей в регистры
CONFIG_ADDRESS
и
CONFIG_DATA
, задавая ненулевой номер шины.

Для работы механизма № 2 в пространстве ввода-вывода зарезервированы два 8-битных порта с адресами 0CF8H и 0CFAh, входящие в главный мост. Этот механизм использует отображение конфигурационного пространства устройств PCI на область C000-CFFF пространства ввода-вывода. Поскольку этой области (4 К портов) недостаточно для отображения конфигурационного пространства всех устройств всех шин PCI, формирование адреса выполняется весьма замысловатым образом. В регистре CSE (Configuration Space Enable) с адресом 0CFSh биты 7:4 являются ключом разрешения отображения: при нулевом ключе область С000-CFFFh остается нормальной частью пространства ввода-вывода, а при ненулевом — отображается на конфигурационное пространство. Биты [3:1] несут номер функции, к пространству которой адресуются

обращения. Единичное значение бита 1 вызывает формирование специального цикла (Special Cycle Enable, SCE). При обращении к конфигурационному пространству устройств нулевой шины чтение или запись двойного слова в порт по адресу C000-CFFCh генерирует конфигурационный цикл, в котором из адреса порта биты [2:7] поступают на шину AD[2:7] как индекс регистра конфигурационного пространства, а биты [11:8] декодируются в позиционный код выбора устройства (линии
IDSEL
) на линиях AD[31:16]. Номер функции на линии AD[10:8] поступает из регистра CSE, линии AD[1:0] нулевые. Для обращения к устройствам ненулевой шины служит регистр перенаправления (Forward Register) с адресом 0CFAh, в который помещают номер шины (по сбросу этот регистр обнуляется). Если номер шины ненулевой, то генерируется цикл типа 1 (см. рис. 6.9, в), в котором номер функции поступает из регистра CSE, младшие 4 бита номера устройства поступают с битов адреса (AD15=0), а номер шины — из регистра перенаправления (биты AD[1:0]=01 и AD[31:24]=0 формируются аппаратно).

Для генерации специального цикла по этому механизму в регистре CSE устанавливается ненулевой ключ, номер функции 111 и SCE=1, после чего выполняется запись по адресу порта CF00h. В зависимости от содержимого регистра перенаправления будет сгенерирован специальный цикл типа 0 или типа 1 (см. выше).

6.2.12. Конфигурирование устройств

В стандарт заложены возможности автоматического конфигурирования системных ресурсов (пространств памяти и ввода-вывода и линий запроса прерываний). Автоматическое конфигурирование устройств (выбор адресов и прерываний) поддерживается средствами BIOS и ориентировано на технологию PnP. Стандарт PCI определяет для каждого слота конфигурационное пространство размером до 256 регистров (8-битных), не приписанных ни к пространству памяти, ни к пространству ввода-вывода. Доступ к ним осуществляется по специальным циклам шины Configuration Read и Configuration Write, вырабатываемым с помощью одного из вышеописанных механизмов. В этом пространстве есть области, обязательные для всех устройств, и специфические. Конкретное устройство может иметь регистры не во всех адресах, но должно поддерживать нормальное завершение для адресуемых к ним операций. При этом чтение несуществующих регистров должно возвращать нули, а запись выполняться как холостая операция. После аппаратного сброса (или при включении питания) устройства PCI не отвечают на обращения к пространству памяти и ввода- вывода, они доступны только для операций конфигурационного считывания и записи. В этих операциях устройства выбираются по индивидуальным сигналам

IDSEL
и сообщают о потребностях в ресурсах и возможных вариантах конфигурирования. После распределения ресурсов, выполняемого программой конфигурирования (во время теста POST), в конфигурационные регистры устройства записываются параметры конфигурирования. Только после этого к устройствам становится возможным доступ по командам обращения к памяти и портам ввода-вывода. Для того чтобы всегда можно было найти работоспособную конфигурацию, все ресурсы, занимаемые картами, должны быть перемещаемыми в своих пространствах. Для многофункциональных карт каждая функция должна иметь собственное конфигурационное пространство.

Конфигурационное пространство устройства начинается со стандартного заголовка, в котором содержатся идентификаторы производителя, устройства и его класса, а также описание требуемых и занимаемых системных ресурсов. После заголовка могут располагаться регистры, специфичные для устройства; они могут занимать адреса конфигурационного пространства в пределах 40-FFh.

Формат заголовка приведен на рис. 6.10. Серым цветом здесь выделены поля, обязательные для всех устройств.

Рис. 6.10. Формат заголовка конфигурационного пространства устройства PCI

Перечисленные ниже поля идентификации допускают только чтение.

♦ 

Deviсе ID
— идентификатор устройства, назначаемый производителем.

♦ 

Vendor ID
— идентификатор производителя микросхемы PCI, назначенный PCI SIG. Идентификатор FFFFh является недопустимым; это значение должно возвращаться при чтении конфигурационного пространства несуществующего устройства.

♦ 

Revision ID
— версия продукта, назначенная производителем. Используется как расширение поля
Device ID
.

♦ 

Header Type
— тип заголовка (биты 6:0), определяющий формат ячеек в диапазоне 10-3Fh и несущий признак многофункционального устройства (если бит 7=1). На рисунке приведен формат заголовка типа 0, относящийся именно к устройствам PCI. Тип 01 относится к мостам PCI-PCI; тип 02 относится к мостам для CardBus.

♦ 

Class Code
— код класса, определяющий основную функцию устройства, а иногда и его программный интерфейс (см. п. 6.2.13). Старший байт (адрес 0Bh) определяет базовый класс, средний — подкласс, младший — программный интерфейс (если он стандартизован).

Поделиться:
Популярные книги

Мир-о-творец

Ланцов Михаил Алексеевич
8. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Мир-о-творец

Виконт. Книга 4. Колонист

Юллем Евгений
Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.50
рейтинг книги
Виконт. Книга 4. Колонист

Титан империи

Артемов Александр Александрович
1. Титан Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Титан империи

Запретный Мир

Каменистый Артем
1. Запретный Мир
Фантастика:
фэнтези
героическая фантастика
8.94
рейтинг книги
Запретный Мир

Ты предал нашу семью

Рей Полина
2. Предатели
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты предал нашу семью

Цеховик. Книга 2. Движение к цели

Ромов Дмитрий
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели

Сила рода. Том 3

Вяч Павел
2. Претендент
Фантастика:
фэнтези
боевая фантастика
6.17
рейтинг книги
Сила рода. Том 3

Проданная невеста

Wolf Lita
Любовные романы:
любовно-фантастические романы
5.80
рейтинг книги
Проданная невеста

Волк 7: Лихие 90-е

Киров Никита
7. Волков
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волк 7: Лихие 90-е

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

Приручитель женщин-монстров. Том 9

Дорничев Дмитрий
9. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 9

Ночь со зверем

Владимирова Анна
3. Оборотни-медведи
Любовные романы:
любовно-фантастические романы
5.25
рейтинг книги
Ночь со зверем

Я – Орк. Том 6

Лисицин Евгений
6. Я — Орк
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 6

Совок-8

Агарев Вадим
8. Совок
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Совок-8