legal note
IC Book © 2001

hardware
software

support
buy

Home page
   




Press
Memory-mapped Configuration
 


Memory-mapped Configuration Space

Технология MCFG использует метод "плоского" доступа к конфигурационному пространству, при котором все регистры всех устройств доступны внутри "окна" раз­мером до 256 Мегабайт, расположенного в адресном пространстве памяти. До­пол­ни­тель­ным новшеством является использование 4-килобайтных ре­гист­ро­вых блоков для каждой PCI-функции, вместо 256-байтных. Очевидно, что для на­пи­са­ния программы, использующей эту технологию, нам требуется ответить на два во­про­са: как определить базовый адрес и размер "окна", и по какому прин­ци­пу ад­ре­су­ют­ся ячейки внутри "окна".

Базовый адрес и размер "окна" декларируется в ACPI таблице с сигнатурой "MCFG". Процедуры детектирования поддержки ACPI и поиска заданной таблицы опи­саны в [4] и рассмотрены ниже, при описании работы программы. Таблица со­дер­жит 36-байтный заголовок и основной блок. Заголовок содержит сигнатуру таблицы, байт контрольной суммы, длину таблицы, информацию о поставщике таблицы и компиляторе, с помощью которого она создана. Назначение полей за­го­лов­ка нормировано спецификацией ACPI, одинаково для всех ACPI таблиц и описано в [4]. Основной блок таблицы MCFG начинается с 8-байтного поля, обыч­но содержащего нули. Точные сведения о назначении этого поля отсутствуют. Да­лее располагается последовательность дескрипторов, описывающая "окна" для доступа в конфигурационное пространство. Платформы типовых пер­со­наль­ных компьютеров поддерживают только одно "окно" и, следовательно, таблица MCFG бу­дет содержать один дескриптор. Количество дескрипторов можно определить, прочитав длину таблицы из заголовка. Длина таблицы указана с учетом длины заголовка. Формат дескриптора показан в таблице 1.

Байты

Длина

Назначение

0-3

4

Базовый адрес "окна", младшая часть 64-битного адреса

4-7

4

Базовый адрес "окна", старшая часть 64-битного адреса

8-9

2

Номер окна (bus segment)

10

1

Стартовый номер шины (start bus)

11

1

Конечный номер шины (end bus)

12-15

4

Зарезервировано, не используется


Из дескриптора мы можем взять базовый адрес и длину региона памяти, ис­поль­зу­емого для доступа в конфигурационное пространство.

Существует альтернативный путь определения базового адреса без ис­поль­зо­ва­ния ACPI – прямое считывание регистров чипсета. Но при этом потребуется на­пи­сать раздельные процедуры поддержки под каждый чипсет, так как ар­хи­тек­ту­ра ин­те­ре­су­ющих нас регистров не стандартизована. Например, чипсет Intel 915, а именно "северный мост" Intel 82915 поддерживает регистр PCIEXBAR (PCI Ex­press Range Base Address Register) имеющий координаты в конфигурационном пространстве Bus=0, Device=0, Function=0, Register=48h. Регистр 32-битный, доступен для чтения и записи. Его значение численно равно базовому фи­зи­чес­ко­му адресу "окна" доступа в конфигурационное пространство. Подробности в [14]. Инициализация этого регистра входит в обязанности BIOS.

Мы рассмотрели методы определения базового адреса 256-мегабайтного "ок­на". Далее рассмотрим адресацию внутри "окна". Напомним, что иерархия кон­фи­гу­ра­ци­он­ного пространства предусматривает 256 шин, 32 устройства на шину, 8 функций на устройство, 4096 байт регистров на функцию. Отсюда следует размер окна: 256 x 32 x 8 x 4096 = 268435456 байт = 256 Мбайт.

Большинство платформ используют менее 256 шин, поэтому в целях эко­но­мии адресного пространства, размер окна может быть сокращен и выбран в со­от­вет­ствии с реальным количеством шин. Адрес байта внутри "окна" формируется в соответствии с иерархией конфигурационного пространства. Биты адреса 0-27, выбирающие байт в пределах 256-мегабайтного "окна" используются согласно таблице 2.

Байты

Длина

Назначение

0-11

12

Адрес регистра, для адресации требуется 12 бит

12-14

3

Адрес функции, для адресации 8 функций требуется 3 бита

15-19

5

Адрес устройства, для адресации 32 устройств требуется 5 бит

20-27

8

Адрес шины, для адресации 256 шин требуется 8 бит


Формализуем сказанное. Для доступа к регистру конфигурационного про­стран­ства с заданными координатами Bus, Device, Function, Register, требуется об­ра­тить­ся по адресу

Address = MCFG_Base+1048576 * Bus+32768*Device+4096*Function+Register,

где MCFG_Base - базовый адрес "окна", полученный методами, рассмотренными выше (посредством ACPI или прямым чтением регистров чипсета).

Почти все современные платформы, использующие механизм MCFG, также под­дер­жи­ва­ют порты CONFIG_ADDRESS, CONFIG_DATA и функции PCIBIOS в це­лях совместимости со "старым" программным обеспечением. При этом, ис­поль­зуя "старый" протокол можно обратиться только к 256 младшим регистрам 4-ки­ло­байт­ных регистровых блоков "новых" устройств.

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

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

Избежать проблем, подобных рассмотренной, помогают регистры MTRR (Memory Type Range Registers), входящие в состав процессора и позволяющие назначать различные статусы заданным регионам адресного пространства па­мя­ти. При этом кэширование и другая оптимизация разрешаются или запрещаются в зависимости от статуса региона, к которому обращается процессор. Вопросы ор­га­ни­за­ции регистров, отображенных на память (Memory-Mapped I/O) рас­смот­ре­ны в ранее опубликованной статье "Устройства системной поддержки. Ис­сле­до­ва­тель­ская работа N[7-9]".

Продолжение…





about
press


вверх