Аппаратные интерфейсы ПК

         

Программный доступ к конфигурационному пространству и генерация специальных циклов


Поскольку конфигурационное пространство PCI обособлено, в главный мост при­ходится вводить специальный механизм доступа к нему командами процессора, который «умеет» обращаться только к памяти или вводу-выводу. Этот же механизм используется и для генерации специальных циклов. Для PC-совместимых компью­теров предусмотрено два механизма, из которых в спецификации 2.2 оставлен только первый (Configuration Mechanism #1). Номер механизма, которым пользу­ется конкретная системная плата, можно узнать путем вызова PCI BIOS.

Конфигурационные циклы адресуются к конкретному устройству (микросхеме PCI), для которого должен быть сформирован сигнал выборки IDSEL (единичное значение). Номер функции и адрес регистра декодируется самим устройством. Поскольку сигнал IDSEL воспринимается устройством только в фазе адреса, для него используют позиционное кодирование в линиях старших битов шины AD (конфигурационное пространство всех устройств занимает лишь малую часть пространства с 32-битной адресацией). На этих линиях в фазе адреса конфигура­ционного обращения может быть лишь один единичный бит, остальные — нуле­вые. Таким образом, только одно устройство будет выбрано сигналом IDSEL.

Для работы механизма № 1 в пространстве ввода-вывода зарезервированы 32-бит­ные порты с адресами OCF8H и OCFCh, входящие в главный мост. Для обращения к конфигурационному пространству в порт 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 игнорируется всеми другими мостами, подключенными к нулевой шине.

6.2. Шина PCI

203

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

31



30             24

23

16

15

11

10

8

7

2

10

1

Резерв (0)

Номер шины

Номер устройства

Номер функции

Адрес регистра

00

а

31

11

10

8

7

2

10

Позиционный (только один Е

код выборки сигнала IDSEL бит может быть единичным)

Номер функции

Адрес регистра

00

б

31

24

23

16

15

11

10

8

7

2

10

0

Номер шины

Номер устройства

Номер функции

Адрес регистра

00

<


Рис. 6.9. Адресация конфигурационных циклов: а — формат регистра CONFIG_ADDRESS, б — формат адреса на шине в цикле типа 0, в — формат адреса на шине в цикле типа 1

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

Специальный цикл генерируется при записи в CON FI G_DATA, когда в регистре CONG I G_ ADDRESS все биты [15:8] единичные, [7:0] нулевые, номер шины, на которой форми­руется цикл, задается битами [23:16]. В специальном цикле адресная информация не передается (он широковещательный), но путем задания номера шины можно управлять его распространением. Если хост генерирует специальный цикл с нуле­вым адресом шины, то на главную шину этот цикл выйдет как цикл типа 0 и всеми остальными мостами распространяться не будет. Если требуется полная широ-

204_____________________________________ Глава 6. Шины и карты расширения

ковещательность, то хост должен записать ненулевой адрес шины; тогда на глав­ную шину специальный цикл выйдет с типом 1, и все остальные мосты пропустят его на свои шины. Специальный цикл1, генерируемый ведущим устройством шины, действует только на шине этого устройства и не распространяется через мосты.


Если требуется полная широковещательность, это ведущее устройство должно генерировать специальный цикл посредством записей в регистры CONG I G_ADDRE S 5 и CONFIG_DATA, задавая ненулевой номер шины.

Для работы механизма №2в пространстве ввода-вывода зарезервированы два 8-битных порта с адресами OCF8H и OCFAh, входящие в главный мост. Этот меха­низм использует отображение конфигурационного пространства устройств PCI на область COOO-CFFF пространства ввода-вывода. Поскольку этой области (4 К портов) недостаточно для отображения конфигурационного пространства всех устройств всех шин PCI, формирование адреса выполняется весьма замыслова­тым образом. В регистре CSE (Configuration Space Enable) с адресом OCFSh биты 7:4 являются ключом разрешения отображения: при нулевом ключе область СООО-CFFFh остается нормальной частью пространства ввода-вывода, а при ненуле­вом — отображается на конфигурационное пространство. Биты [3:1] несут номер функции, к пространству которой адресуются обращения. Единичное значение бита 1 вызывает формирование специального цикла (Special Cycle Enable, SCE). При обращении к конфигурационному пространству устройств нулевой шины чтение или запись двойного слова в порт по адресу COOO-CFFCh генерирует кон­фигурационный цикл, в котором из адреса порта биты [2:7] поступают на шину AD[2:7] как индекс регистра конфигурационного пространства, а биты [11:8] деко­дируются в позиционный код выбора устройства (линии IDSEL) на линиях AD [31:16]. Номер функции на линии AD[10:8] поступает из регистра CSE, линии AD[1:0] нулевые. Для обращения к устройствам ненулевой шины служит регистр перена­правления (Forward Register) с адресом OCFAh, в который помещают номер шины (по сбросу этот регистр обнуляется). Если номер шины ненулевой, то генерирует­ся цикл типа 1 (см. рис. 6.9, в), в котором номер функции поступает из регистра CSE, младшие 4 бита номера устройства поступают с битов адреса (AD15=0), а номер шины — из регистра перенаправления (биты AD[1:0]=01 и AD[31:24]=0 формируются аппаратно).

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


Содержание раздела