stringtranslate.com

Конфигурационное пространство PCI

Пространство конфигурации PCI — это основной способ, с помощью которого обычные PCI , PCI-X и PCI Express выполняют автоматическую настройку карт, вставленных в их шину.

Обзор

Устройства PCI имеют набор регистров, называемый пространством конфигурации , а PCI Express предоставляет расширенное пространство конфигурации для устройств. Регистры пространства конфигурации сопоставлены с ячейками памяти. Драйверы устройств и диагностическое программное обеспечение должны иметь доступ к пространству конфигурации, а операционные системы обычно используют API для обеспечения доступа к пространству конфигурации устройства. Если в операционной системе не определены методы доступа или API для запросов пространства конфигурации, отображаемого в памяти, драйвер или диагностическое программное обеспечение несут ответственность за доступ к пространству конфигурации способом, совместимым с базовыми правилами доступа операционной системы. Во всех системах драйверам устройств рекомендуется использовать API, предоставляемые операционной системой, для доступа к пространству конфигурации устройства.

Техническая информация

Одним из основных улучшений локальной шины PCI по сравнению с другими архитектурами ввода-вывода был ее механизм конфигурации. В дополнение к обычным пространствам, отображаемым в памяти и портам ввода-вывода, каждая функция устройства на шине имеет пространство конфигурации длиной 256 байт, адресация которого осуществляется путем знания восьмибитной шины PCI , пятибитного устройства и трехбитной шины. номера битовых функций для устройства (обычно называемые BDF или B/D/F , сокращенно от bus/device/function ). Это позволяет использовать до 256 шин, каждая из которых может содержать до 32 устройств, каждое из которых поддерживает восемь функций. Одна карта расширения PCI может работать как устройство и должна реализовывать как минимум функцию с нулевым номером. Первые 64 байта конфигурационного пространства стандартизированы; остальные доступны для целей, определенных поставщиком. Некоторые компьютеры высокого класса поддерживают более одного домена PCI (или сегмента PCI); каждый домен PCI поддерживает до 256 шин.

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

PCI-X 2.0 и PCI Express представили расширенное пространство конфигурации до 4096 байт. Единственная стандартизированная часть расширенного пространства конфигурации — это первые четыре байта по адресу 0x100 , которые являются началом расширенного списка возможностей. Расширенные возможности очень похожи на обычные возможности, за исключением того, что они могут ссылаться на любой байт в расширенном пространстве конфигурации (используя 12 бит вместо восьми), имеют четырехбитный номер версии и 16-битный идентификатор возможности. Идентификаторы расширенных возможностей совпадают с идентификаторами обычных возможностей, но путаницы не возникает, поскольку они находятся в отдельных списках.

Стандартизированные регистры

Стандартные регистры заголовка конфигурационного пространства PCI Type 0 (Non-Bridge)

Регистры Device ID (DID) и Vendor ID (VID) идентифицируют устройство (например, IC ) и обычно называются PCI ID . 16-битный идентификатор поставщика выделяется PCI-SIG . Затем поставщик назначает 16-битный идентификатор устройства. Существует неактивный проект по сбору всех известных идентификаторов поставщиков и устройств. (См. внешние ссылки ниже.)

Регистр состояния используется для сообщения о том, какие функции поддерживаются и произошли ли определенные виды ошибок. Регистр команд содержит битовую маску функций, которые можно индивидуально включать и отключать. Значения регистра типа заголовка определяют различные макеты оставшихся 48 байтов (64–16) заголовка в зависимости от функции устройства. То есть заголовки типа 1 для корневого комплекса, коммутаторов и мостов. Затем введите 0 для конечных точек. Регистр размера строки кэша должен быть запрограммирован до того, как устройству будет сообщено, что оно может использовать транзакцию записи и аннулирования памяти. Обычно это значение должно соответствовать размеру строки кэша ЦП , но правильная настройка зависит от системы. Этот регистр не применяется к PCI Express.

Идентификатор подсистемы (SSID) и идентификатор поставщика подсистемы (SVID) различают конкретную модель (например, карту расширения). Идентификатор поставщика соответствует производителю набора микросхем , а идентификатор поставщика подсистемы соответствует производителю карты. Идентификатор подсистемы назначается поставщиком подсистемы, идентификатор устройства назначается производителем набора микросхем. Например, в случае беспроводных сетевых карт производителем чипа может быть Intel , Broadcom или Atheros , а производителем карты может быть Netgear или Hewlett-Packard . Как правило, комбинация идентификатора поставщика и идентификатора устройства определяет, какой драйвер должен загрузить хост для управления устройством, поскольку все карты с одинаковой комбинацией VID:DID могут обрабатываться одним и тем же драйвером. Комбинация идентификатора поставщика подсистемы и идентификатора подсистемы идентифицирует карту, что представляет собой тип информации, которую драйвер может использовать для внесения незначительных изменений, специфичных для карты, в ее работе.

Перечень автобусов

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

Когда компьютер включен, шины PCI и устройства должны быть пронумерованы BIOS или операционной системой. Перебор шин выполняется путем попытки доступа к регистрам пространства конфигурации PCI для каждой шины, устройства и функции. Обратите внимание, что номер устройства, отличный от VID и DID, представляет собой просто порядковый номер устройства на этой шине. Более того, после обнаружения нового моста определяется новый номер шины, и нумерация устройств возобновляется с нулевого номера устройства.

Если от функции устройства № 0 не получен ответ, мастер шины выполняет отмену и возвращает значение со всеми битами ( FFFFFFFF в шестнадцатеричном формате), которое является недопустимым значением VID/DID, поэтому BIOS или операционная система могут определить это. что указанная комбинация шина/номер_устройства/функция (B/D/F) отсутствует. Таким образом, когда чтение нулевого идентификатора функции для данной шины/устройства приводит к прерыванию работы ведущего устройства (инициатора), следует предположить, что на этой шине не существует работающего устройства, поскольку устройства должны реализовывать функцию с нулевым номером. В этом случае чтение остальных номеров функций (1–7) не требуется, поскольку их тоже не будет.

Когда чтение указанной комбинации B/D/F для регистра идентификатора поставщика завершается успешно, встроенное ПО системы или операционная система узнает, что он существует; он записывает все единицы в свои BAR и считывает запрошенный объем памяти устройства в закодированной форме. Конструкция подразумевает, что все размеры адресного пространства являются степенью двойки и естественным образом выровнены. [1]

На этом этапе BIOS или операционная система запрограммирует отображаемые в памяти адреса и адреса портов ввода-вывода в регистры конфигурации BAR устройства. Эти адреса остаются действительными до тех пор, пока система остается включенной. При выключении питания эти настройки теряются, и процедура повторяется при следующем включении системы. BIOS или операционная система также программируют некоторые другие регистры пространства конфигурации PCI для каждого устройства PCI, например запрос прерывания . Поскольку весь этот процесс полностью автоматизирован, пользователь избавлен от необходимости вручную настраивать любое вновь добавленное оборудование путем изменения DIP-переключателей на самих картах. Автоматическое обнаружение устройств и назначение адресного пространства — это то, как реализуется технология Plug and Play .

Если мост PCI-PCI найден, система должна назначить вторичной шине PCI за мостом номер шины, отличный от нуля, а затем перечислить устройства на этой вторичной шине. Если обнаружено больше мостов PCI, обнаружение продолжается рекурсивно до тех пор, пока не будут проверены все возможные комбинации домен/шина/устройство.

Каждая функция немостового устройства PCI может реализовать до 6 BAR, каждый из которых может отвечать на разные адреса в порте ввода-вывода и адресном пространстве, отображаемом в памяти. Каждый BAR описывает область [2] [1] размером от 16 байт до 2 гигабайт, расположенную ниже предела адресного пространства в 4 гигабайта. Если платформа поддерживает опцию «Выше 4G» в прошивке системы, можно использовать 64-битные BAR. Изменяемый размер BAR (также известный как Re-Size BAR , AMD Smart Access Memory (SAM), [3] или ASRock Clever Access Memory (CAM)) [4] — это возможность, которую устройство PCIe может использовать для согласования большего размера BAR. [5] Традиционно размер BAR был ограничен 256 МБ, но современные видеокарты имеют кадровые буферы гораздо большего размера. [3] Это несоответствие привело к неэффективности доступа ЦП к кадровому буферу. [3] Изменяемый размер BAR позволяет процессору получить доступ ко всему кадровому буферу одновременно, тем самым повышая производительность. [3]

Устройство PCI также может иметь дополнительное ПЗУ .

Аппаратная реализация

При доступе к пространству конфигурации устройство PCI не декодирует адрес, чтобы определить, должно ли оно ответить, а вместо этого просматривает сигнал выбора устройства инициализации (IDSEL). Для каждого сигнала IDSEL существует уникальный общесистемный метод активации. Устройство PCI должно декодировать только 11 битов младшего порядка адресного пространства (AD[10] до AD[0]) сигналов адреса/данных и может игнорировать декодирование 21 сигнала A/D высокого порядка (AD[31] до AD[11]), поскольку реализация доступа к пространству конфигурации имеет вывод IDSEL каждого слота, подключенный к разным линиям адреса/данных старшего порядка от AD[11] до AD[31]. Сигнал IDSEL представляет собой отдельный контакт для каждого устройства/адаптера/слота PCI.

Чтобы настроить карту в слоте n , мост шины PCI выполняет цикл доступа к пространству конфигурации, обращаясь к регистру устройства PCI по линиям AD[7:2] (AD[1:0] всегда равны нулю, поскольку регистры представляют собой двойные слова). (32-бита)), а номер функции PCI указан в битах AD[10:8], при этом все нули старшего порядка, за исключением AD[ n +11], используются в качестве сигнала IDSEL в данном слоте/устройстве.

Чтобы уменьшить электрическую нагрузку на критическую по времени (и, следовательно, чувствительную к электрической нагрузке) шину AD[], сигнал IDSEL на разъеме слота PCI обычно подключается к назначенному ему выводу AD[ n +11] через резистор. Это приводит к тому, что сигнал IDSEL PCI достигает своего активного состояния медленнее, чем другие сигналы шины PCI (из-за постоянной времени RC как резистора, так и входной емкости контакта IDSEL). Таким образом, доступ к пространству конфигурации выполняется медленнее, чтобы дать сигналу IDSEL время достичь допустимого уровня.

Сканирование шины выполняется на платформе Intel путем доступа к двум определенным стандартизированным портам. Этими портами являются порт ввода -вывода адреса пространства конфигурации ( 0xCF8 ) и порт ввода -вывода данных пространства конфигурации ( 0xCFC ). Значение, записываемое в порт ввода-вывода адреса конфигурационного пространства, создается путем объединения значений B/D/F и значения адреса регистров в 32-битное слово.

Программная реализация

Чтение и запись конфигурации может быть инициирована из ЦП двумя способами: один устаревший метод через адреса ввода-вывода 0xCF8 и 0xCFC , а другой называется конфигурацией с отображением в памяти. [6]

Устаревший метод присутствовал в исходном PCI и называется механизмом доступа к конфигурации (CAM). Он позволяет косвенно получить доступ к 256 байтам адресного пространства устройства через два 32-битных регистра, называемых PCI CONFIG_ADDRESS и PCI CONFIG_DATA. Эти регистры находятся по адресам 0xCF8 и 0xCFC в адресном пространстве ввода-вывода x86. [7] Например, программный драйвер (прошивка, ядро ​​ОС или драйвер ядра) может использовать эти регистры для настройки устройства PCI, записывая адрес регистра устройства в CONFIG_ADDRESS и помещая данные, которые должны быть записаны в устройство в CONFIG_DATA. Поскольку для записи в регистр устройства этот процесс требует записи в регистр, он называется «косвенным».

Формат CONFIG_ADDRESS следующий:

0x80000000 | автобус << 16 | устройство << 11 | функция << 8 | компенсировать              

Как объяснялось ранее, адресация устройства через шину, устройство и функцию (BDF) также называется «географической адресацией устройства». См. arch/x86/pci/early.cв коде ядра Linux пример кода, использующего географическую адресацию. [8]

Когда на некоторых процессорах AMD используется расширенное конфигурационное пространство, дополнительные биты смещения 11:8 записываются в биты 27:24 регистра CONFIG_ADDRESS: [9] [10]

0x80000000 | ( смещение & 0xf00 ) << 16 | автобус << 16 | устройство << 11 | функция << 8 | ( смещение и 0xff )                      

Второй метод был создан для PCI Express. Это называется механизмом расширенного доступа к конфигурации (ECAM). Он расширяет пространство конфигурации устройства до 4 КБ, при этом нижние 256 байт перекрывают исходное (устаревшее) пространство конфигурации в PCI. Часть адресного пространства «украдена», так что доступ со стороны ЦП не идет к памяти, а достигает данного устройства в структуре PCI Express. Во время инициализации системы BIOS определяет базовый адрес для этой «украденной» адресной области и сообщает его корневому комплексу и операционной системе.

Каждое устройство имеет собственное пространство размером 4 КБ, и информация о каждом устройстве доступна через простой массив, dev[bus][device][function]так что для этого использования «украдено» 256 МБ физического непрерывного пространства (256 шин × 32 устройства × 8 функций × 4 КБ = 256 МБ). Базовый физический адрес этого массива не указан. Например, в современных системах x86 таблицы ACPI содержат необходимую информацию. [11]

Смотрите также

Рекомендации

  1. ^ ab «Регистры базового адреса». PCI . osdev.org. 24 декабря 2013 г. Проверено 17 апреля 2014 г.
  2. ^ «Методы настройки PCI». прочтите.seas.hardvard.edu. 22 ноября 2011 г. Проверено 27 сентября 2021 г.
  3. ^ abcd Арчер, Джеймс (07 декабря 2021 г.). «Что такое Resizable BAR и стоит ли его использовать?». Каменный бумажный дробовик . Проверено 26 марта 2024 г.
  4. ^ Рэйвенлорд (04 декабря 2020 г.). «ASRock реализует CAM (память с интеллектуальным доступом) на материнской плате Intel Z490 Taichi». TechPowerUp . Проверено 26 марта 2024 г.
  5. ^ «Что такое панель изменяемого размера и как ее включить?». intel.com . Корпорация Интел. 18 апреля 2023 г. Проверено 26 марта 2024 г.
  6. ^ «Доступ к регистрам конфигурации PCI Express * с использованием наборов микросхем Intel» (PDF) . Корпорация Интел . Проверено 27 сентября 2018 г.
  7. ^ «Механизм конфигурации PCI № 1» . osdev.org . 01.01.2015 . Проверено 1 января 2015 г.
  8. ^ "kernel/git/stable/linux-stable.git:arch/x86/pci/early.c (дерево стабильных версий ядра Linux, версия 3.12.7)" . ядро.орг . Проверено 10 января 2014 г.
  9. ^ "kernel/git/stable/linux-stable.git:arch/x86/pci/direct.c (дерево стабильных версий ядра Linux, версия 3.12.7)" . ядро.орг . Проверено 11 сентября 2017 г.
  10. ^ Рихтер, Роберт. «x86: добавьте доступ к расширенному конфигурационному пространству PCI для AMD Barcelona». ядро.орг . Проверено 26 сентября 2018 г.
  11. ^ "XSDT — OSDev Wiki" . Проверено 30 апреля 2017 г.

Внешние ссылки