legal note
IC Book © 2001

hardware
software

support
buy

Home page
   




Press
Memory-mapped Configuration
 


Известно, что организация PCI SIG, разрабатывающая системные шины ком­пью­те­ров, предоставляет доступ к стандартам и другой документации только для за­ре­ги­стрированных членов. Для небольших компаний и частных лиц, стоимость та­кой регистрации может оказаться "неподъемной", особенно если информация нуж­на для исследовательских работ, сроки окупаемости которых трудно про­гно­зи­ру­емы.

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

Существует и другой путь. Очевидно, что архитектура, схемотехника и прог­рам­мные модели контроллеров шин и конфигурационных регистров чипсетов ма­те­ринских плат строятся в соответствии со стандартами PCI SIG. Подробная до­ку­мен­та­ция на многие чипсеты доступна для свободной загрузки, например [9-11] и [14-15]. Напомним, что современные процессоры, построенные на основе ар­хи­тек­тур AMD64 и Intel Core i7, содержат контроллер оперативной памяти, блоки кон­фи­гу­ра­ци­он­ных регистров и ряд других узлов, ранее размещаемых в составе "се­вер­но­го моста" чипсета, архитектура которых также нормируется стандартами PCI SIG. Описание данных устройств можно найти в [5-8] и [12-13].

Тщательное изучение перечисленной открытой документации в сочетании с уме­ни­ем "читать между строк" в ряде случаев помогает устранить пробелы в зна­ни­ях, образующиеся из-за недоступности документов PCI SIG. Здесь уместно вспом­нить, что каждая точка пространства несет информацию обо всех ос­таль­ных и о том, что все тайное когда-нибудь становится явным.

Предлагаемый материал посвящен исследованию механизма MCFG (memory-map­ped configuration), предусматривающему доступ к конфигурационному про­стран­ству посредством "окна" в пространстве памяти. Этот механизм ис­поль­зу­ет­ся в системах с шинами PCI-X и PCI Express. Напомним, что в системах, под­дер­жи­ва­ю­щих только "старую" шину PCI (включая варианты PCI+AGP), для доступа к конфигурационному пространству используются порты ввода-вывода с ад­ре­сами 0CF8h и 0CFCh, работа с которыми поддерживается сервисными фун­к­ци­я­ми PCIBIOS.

Историческая справка

Очевидно, что все устройства, совместимые со спецификацией Plug and Play и под­дер­жи­вающие программное управление назначением системных ресурсов дол­жны иметь две группы регистров. Операционные регистры, предназначены для выполнения устройством своих обязанностей и используются во время ра­бо­че­го сеанса. Конфигурационные регистры, предназначены для под­го­тов­ки ус­трой­ства к работе и назначения устройству системных ресурсов (диапазона пор­тов, памяти, номеров линий запросов на прерывание и каналов DMA). Раз­ра­бот­чики спецификации PCI приняли решение выделить отдельное кон­фи­гу­ра­ци­онное пространство для размещения конфигурационных ре­гист­ров.

Архитектура x86 поддерживает всего лишь два адресуемых пространства – па­мять и ввод-вывод. Каких-либо специальных процессорных инструкций для до­сту­па к конфигурационному пространству не существует, поэтому чтение и за­пись регистров этого пространства базируется на использовании специальных "окон" в про­странствах ввода-вывода и памяти. Главным предметом рас­смот­ре­ния в дан­ной статье является усовершенствованный механизм доступа MCFG (memory-map­ped configuration), используемый в системах с шиной PCI Express.

Порты CONFIG_ADDRESS, CONFIG_DATA

Перед рассмотрением механизма MCFG, уместно вспомнить, как работает его предшественник – "старый" метод доступа, использующий порты ввода-вывода с адресами 0CF8h и 0CFCh (это 32-битные порты CON­FIG_ADDRESS и CON­FIG_DATA соответственно). Для чтения заданного конфигурационного ре­гист­ра программа записывает его 32-битный адрес в порт CONFIG_ADDRESS, затем считывает порт CONFIG_DATA. Для записи в регистр, его адрес также за­пи­сы­ва­ет­ся в порт CONFIG_ADDRESS, а данные для записи – в порт CONFIG_DATA.

32-битный адрес регистра содержит его координаты в конфигурационном пространстве: биты [0-7] = адрес регистра, биты [8-10] = адрес функции, биты [11-15] = адрес устройства, биты [16-23] = адрес шины, биты [24-30] за­ре­зер­ви­ро­ва­ны, бит 31 должен быть установлен в "1" для разрешения цикла обращения к заданному устройству. Из перечисленных разрядностей следует, что можно ад­ре­со­вать максимум 256 регистров на функцию, 8 функций на устройство, 32 ус­трой­ства на шину, 256 шин. Записываемый адрес регистра всегда кратен 4, то есть два его младших бита нулевые и он задает базовый адрес 32-битного слова, которое может быть прочитано инструкцией IN EAX,DX или записано инструкцией OUT DX,EAX по адресу CONFIG_DATA (0CFCh).

Напомним, что, как и в пространствах памяти и портов, в конфигурационном пространстве адресуемым элементом является 1 байт, а посредством 32-битного ре­гист­ра CONFIG_DATA доступно 4 байта. Поэтому, если необходима ин­ди­ви­ду­аль­ная адресация байтов или 16-битных слов внутри 32-битного слова, ис­поль­зу­ют­ся 8 и 16-битные формы указанных инструкций. При этом в зависимости от рас­по­ложения требуемого байта внутри 32-битного слова, адрес при обращении к регистру CONFIG_DATA может принимать значения 0CFCh,...,0CFFh. Под­роб­ности в [2].

Функции PCI BIOS

Для доступа к конфигурационному пространству были разработаны сервисные функции PCIBIOS. Модуль PCIBIOS входит в состав BIOS материнской платы. Номенклатура функций PCIBIOS обеспечивает 8, 16 и 32-битные операции чтения и записи, а также сканирование шины с поиском устройств, удовлетворяющих за­дан­ным критериям, генерацию специальных циклов и ряд дополнительных функ­ций. Процедуры PCIBIOS используют выше описанные порты CONFIG_ADDRESS и CONFIG_DATA и являются программным интерфейсом между ОС и указанными портами. Подробности в [1].

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





about
press


вверх