Konfigurační prostor PCI - PCI configuration space

Konfigurační prostor PCI je základním způsobem, jakým konvenční PCI , PCI-X a PCI Express provádějí automatickou konfiguraci karet vložených do jejich sběrnice.

Přehled

Zařízení PCI mají sadu registrů označovanou jako konfigurační prostor a PCI Express zavádí rozšířený konfigurační prostor pro zařízení. Registry konfiguračního prostoru jsou mapovány do paměťových míst. Ovladače zařízení a diagnostický software musí mít přístup do konfiguračního prostoru a operační systémy k povolení přístupu do konfiguračního prostoru zařízení obvykle používají rozhraní API. Pokud operační systém nemá definovány přístupové metody nebo API pro požadavky na konfigurační prostor mapované paměti, ovladač nebo diagnostický software má zátěž pro přístup do konfiguračního prostoru způsobem, který je kompatibilní se základními pravidly přístupu operačního systému. Ve všech systémech se ovladačům zařízení doporučuje používat rozhraní API poskytovaná operačním systémem pro přístup do konfiguračního prostoru zařízení.

Technické informace

Jedním z hlavních vylepšení, které PCI Local Bus oproti jiným I/O architekturám měl, byl jeho konfigurační mechanismus. Kromě normálních prostorů paměti mapovaných a I/O portů má každá funkce zařízení na sběrnici konfigurační prostor , který je 256 bajtů dlouhý, adresovatelný pomocí znalosti osmibitové sběrnice PCI , pětibitového zařízení a tří- čísla bitových funkcí pro zařízení (běžně označovaná jako BDF nebo B/D/F , ve zkratce ze sběrnice/zařízení/funkce ). To umožňuje až 256 autobusů, každý s až 32 zařízeními, z nichž každý podporuje osm funkcí. Jedna rozšiřující karta PCI může reagovat jako zařízení a musí implementovat alespoň funkční číslo nula. Prvních 64 bajtů konfiguračního prostoru je standardizováno; zbývající část je k dispozici pro účely definované prodejcem.

Aby bylo možné standardizovat více částí konfiguračního prostoru, aniž by došlo ke konfliktu se stávajícím použitím, může existovat seznam možností definovaných ve zbývajících 192 bajtech konfiguračního prostoru PCI. Každá schopnost má jeden bajt, který popisuje, o kterou schopnost se jedná, a jeden bajt směřující k další schopnosti. Počet dalších bajtů závisí na ID schopnosti. Pokud se používají funkce, je nastaven bit ve stavovém registru a v Cap je k dispozici ukazatel na první v propojeném seznamu schopností . registr ukazatelů definovaný ve standardizovaných registrech.

PCI-X 2.0 a PCI Express představily rozšířený konfigurační prostor, až 4096 bajtů. Jedinou standardizovanou částí rozšířeného konfiguračního prostoru jsou první čtyři bajty o velikosti 0x100, které jsou začátkem seznamu rozšířených schopností. Rozšířené možnosti jsou velmi podobné běžným funkcím, kromě toho, že se mohou vztahovat na jakýkoli bajt v rozšířeném konfiguračním prostoru (pomocí 12 bitů místo osmi), mají číslo čtyřbitové verze a 16bitové ID schopnosti. ID rozšířených schopností se překrývají s ID běžných schopností, ale neexistuje šance na záměnu, protože jsou v samostatných seznamech.

Standardizované registry

Standardní registry konfiguračního prostoru záhlaví PCI typu 0 (bez můstku)

ID zařízení (DID) a ID dodavatele (VID) registry identifikaci zařízení (jako je IC ), a jsou běžně nazývá ID PCI . 16bitové ID dodavatele je přidělováno PCI-SIG . 16bitové ID zařízení je pak přiřazeno prodejcem. Existuje neaktivní projekt ke shromažďování všech známých ID dodavatele a zařízení. (Viz níže uvedené externí odkazy .)

Status registr se používá pro zprávy, které jsou podporovány funkce a zda jsou určité druhy chyb došlo. Příkazový registr obsahuje bitovou masku funkcí, které mohou být individuálně zapínat a vypínat. Hodnoty registru typu záhlaví určují různá rozložení zbývajících 48 bajtů (64–16) záhlaví v závislosti na funkci zařízení. To znamená, že záhlaví typu 1 pro Root Complex, přepínače a mosty. Potom zadejte 0 pro koncové body. Velikost Cache linka registr musí být naprogramovány před zařízení je řečeno, že lze použít paměťové-write-and-vyvrátit transakci. Normálně by to mělo odpovídat velikosti řádku mezipaměti CPU , ale správné nastavení závisí na systému. Tento registr se nevztahuje na PCI Express.

Subsystému ID (SSID) a (SVID) ID dodavatele podsystému Rozlišovat modelu specifické (například přídavné karty). Zatímco ID dodavatele je ID výrobce čipové sady , ID dodavatele subsystému je ID výrobce karty. ID subsystému přiděluje prodejce subsystému ze stejného číselného prostoru jako ID zařízení. Například v případě bezdrátových síťových karet může být výrobcem čipové sady Broadcom nebo Atheros a výrobcem karet může být Netgear nebo D-Link . Kombinace ID dodavatele - ID zařízení obecně určuje, který ovladač by měl hostitel načíst, aby mohl zařízení zpracovat, protože všechny karty se stejnou kombinací VID: DID může zpracovávat stejný ovladač. Kombinace ID dodavatele subsystému a ID subsystému identifikuje kartu, což je druh informací, které může řidič použít k provedení drobné změny specifické pro svou funkci.

Výčet autobusů

Chcete-li adresovat zařízení PCI, musí být povoleno mapováním do adresního prostoru portů systému I/O nebo adresního prostoru mapovaného paměti. Firmware systému, ovladače zařízení nebo operační systém programují základní adresní registry (běžně nazývané BAR), aby informovaly zařízení o mapování jeho adresy zápisem konfiguračních příkazů do řadiče PCI. Protože všechna zařízení PCI jsou po resetování systému v neaktivním stavu, nebudou jim přiřazeny žádné adresy, pomocí kterých by s nimi mohl komunikovat operační systém nebo ovladače zařízení . Buď BIOS nebo operační systém geograficky řeší PCI sloty (například první PCI slot, druhý výřez PCI nebo štěrbina třetí PCI, atd., Na základní desce ) prostřednictvím řídicí jednotky s použitím PCI za štěrbinou IDSEL (inicializace Device Select).

Bity PCI BAR
Bity Popis Hodnoty
Pro všechny PCI BAR
0 Typ regionu 0 = paměť
1 = I/O
Pro paměťové tyče
2-1 Lokalizovatelný 0 = libovolný 32bitový
1 = <1  MB
2 = libovolný 64bitový
3 Předběžně načíst 0 = ne
1 = ano
31-4 Základní adresa přirozeně zarovnáno na 16 bajtů
Pro I/O BAR
1 Rezervováno
31-2 Základní adresa přirozeně zarovnané na 4 bajty

Protože neexistuje žádná přímá metoda pro BIOS nebo operační systém k určení, které sloty PCI mají nainstalovaná zařízení (ani určit, které funkce zařízení implementuje), musí být sběrnice (sběrnice) PCI vyjmenovány . Výčet sběrnic se provádí pokusem o čtení registru dodavatele a ID zařízení (VID/DID) pro každou kombinaci čísla sběrnice a čísla zařízení ve funkci zařízení #0. Všimněte si toho, že číslo zařízení, odlišné od DID, je pouze pořadové číslo zařízení na této sběrnici. Navíc poté, co je detekován nový most, je definováno nové číslo sběrnice a výčet zařízení se restartuje na čísle zařízení nula.

Pokud z funkce zařízení č. 0 nepřijde žádná odpověď, master sběrnice provede přerušení a vrátí hodnotu všech bitů ( FFFFFFFF v šestnáctkové soustavě), což je neplatná hodnota VID/DID, takže ovladač zařízení může říci, že zadaná kombinace sběrnice/číslo_zařízení/funkce (B/D/F) není k dispozici. Když tedy načtení funkce s nulovým ID pro danou sběrnici/zařízení způsobí přerušení masteru (iniciátoru), musí se pak předpokládat, že na této sběrnici neexistuje žádné pracovní zařízení, protože zařízení jsou povinna implementovat číslo funkce nula. V tomto případě nejsou načtení zbývajících funkcí čísla (1–7) nutná, protože také nebudou existovat.

Když je úspěšné načtení zadané kombinace B/D/F pro registr ID dodavatele, ovladač zařízení ví, že existuje; zapíše všechny do svých BARů a načte zpět požadovanou velikost paměti zařízení v kódované podobě. Z návrhu vyplývá, že všechny velikosti adresního prostoru jsou mocninou dvou a jsou přirozeně zarovnány.

V tomto okamžiku systém BIOS nebo operační systém naprogramují adresy mapované paměti a I/O portů do konfiguračního registru BAR zařízení. Tyto adresy zůstávají v platnosti, dokud je systém zapnutý. Po vypnutí jsou všechna tato nastavení ztracena a postup se opakuje při příštím zapnutí systému. Protože je celý tento proces plně automatizovaný, uživatel je ušetřen úlohy ručně konfigurovat jakýkoli nově přidaný hardware změnou přepínačů DIP na samotných kartách. Toto automatické zjišťování zařízení a přiřazování adresního prostoru je způsob implementace plug and play .

Pokud je nalezen most PCI-to-PCI, musí systém přiřadit sekundární sběrnici PCI za most číslo sběrnice jiné než nula a poté vyčíslit zařízení na této sekundární sběrnici. Pokud je nalezeno více můstků PCI, zjišťování pokračuje rekurzivně, dokud nejsou zkontrolovány všechny možné kombinace doména/sběrnice/zařízení.

Každá funkce zařízení PCI bez můstku může implementovat až 6 BARů, z nichž každý může reagovat na různé adresy v I/O portu a paměťovém mapovaném adresním prostoru. Každý BAR popisuje oblast, která má velikost mezi 16 bajty a 2 gigabajty a nachází se pod limitem adresního prostoru 4 gigabajty. Pokud platforma podporuje v systémovém firmwaru možnost „Above 4G“, lze použít 64bitové pruhy.

Zařízení PCI může mít také volitelnou ROM, která může obsahovat kód ovladače nebo informace o konfiguraci.

Hardwarová implementace

Při provádění přístupu do konfiguračního prostoru zařízení PCI nedekóduje adresu, aby určilo, zda by mělo reagovat, ale místo toho se dívá na signál IDSEL ( Initialization Device Select ). Pro každý signál IDSEL existuje jedinečná aktivační metoda v celém systému. Zařízení PCI musí dekódovat pouze 11 bitů adresního/datového signálu nejnižšího řádu adresního prostoru (AD [10] až AD [0]) a může ignorovat dekódování 21 A/D signálů vysokého řádu (AD [31] k AD [11]), protože implementace přístupu do konfiguračního prostoru má pin IDSEL každého slotu připojený k jiné AD/11/datové linii AD [11] až AD [31]. Signál IDSEL je pro každý slot zařízení/adaptéru PCI jiný pin.

Ke konfiguraci karty ve slotu n provede sběrnice PCI sběrnicový přístupový cyklus s registrem zařízení PCI, který bude adresován na řádcích AD [7: 2] (AD [1: 0] jsou vždy nulové, protože registry jsou dvojslovná (32 bitů)) a číslo funkce PCI uvedené na bitech AD [10: 8], přičemž jako signál IDSEL v daném slotu jsou použity všechny bity vyšších řádů kromě AD [ n +11].

Aby se snížilo elektrické zatížení sběrnice AD ​​[] kritické (a tedy elektricky citlivé), je signál IDSEL na konektoru slotu PCI obvykle připojen k jeho přiřazenému kolíku AD [ n +11] přes odpor. To způsobí, že signál IDSEL PCI dosáhne aktivního stavu pomaleji než ostatní signály sběrnice PCI (kvůli časové konstantě RC rezistoru a vstupní kapacitě pinu IDSEL). Tak Configuration Space jsou přístupy prováděny pomaleji, aby čas pro IDSEL signál k dosažení platné úrovně.

Skenování na sběrnici se provádí na platformě Intel přístupem ke dvěma definovaným standardizovaným portům . Těmito porty jsou I/O port adresy konfiguračního prostoru ( 0xCF8 ) a I/O portu konfiguračního prostoru ( 0xCFC ). Hodnota zapsaná na I/O port adresy konfiguračního prostoru je vytvořena kombinací hodnot B/D/F a hodnoty adresy registrů do 32bitového slova.

Implementace softwaru

Konfigurační čtení a zápis lze z CPU iniciovat dvěma způsoby: jednou starší metodou přes I/O adresy 0xCF8 a 0xCFC a druhou s názvem konfigurace mapovaná v paměti.

Původní metoda byla přítomna v původním PCI a nazývá se CAM (Configuration Access Mechanism). Umožňuje nepřímo dosáhnout 256 bajtů adresního prostoru zařízení prostřednictvím dvou 32bitových registrů s názvem PCI CONFIG_ADDRESS a PCI CONFIG_DATA. Tyto registry jsou na adresách 0xCF8 a 0xCFC v adresním prostoru x86 I/O. Například softwarový ovladač (firmware, jádro OS nebo ovladač jádra) může pomocí těchto registrů konfigurovat zařízení PCI zapsáním adresy registru zařízení do CONFIG_ADDRESS a vložením dat, která mají být do zařízení zapsána, CONFIG_DATA. Protože tento proces vyžaduje zápis do registru, aby mohl zapsat registr zařízení, je označován jako "indirection".

Formát CONFIG_ADDRESS je následující:

0x80000000 | bus << 16 | device << 11 | function <<  8 | offset

Jak již bylo vysvětleno dříve, adresování zařízení prostřednictvím sběrnice, zařízení a funkce (BDF) se také označuje jako „geografické adresování zařízení“. Viz arch/x86/pci/early.cv Linux kernel kód je uveden příklad kódu, který využívá geografické adresování.

Když je na některých CPU AMD použit rozšířený konfigurační prostor, extra bity 11: 8 ofsetu jsou zapsány na bity 27:24 registru CONFIG_ADDRESS:

0x80000000 | (offset & 0xf00) << 16 | bus << 16 | device << 11 | function <<  8 | (offset & 0xff)

Druhá metoda byla vytvořena pro PCI Express. Říká se mu mechanismus vylepšeného přístupu k konfiguraci (ECAM). Rozšiřuje konfigurační prostor zařízení na 4 kB, přičemž spodních 256 bajtů překrývá původní (starší) konfigurační prostor v PCI. Sekce adresovatelného prostoru je „ukradena“, aby přístupy z CPU nešly do paměti, ale spíše se dostaly k danému zařízení v tkanině PCI Express. Během inicializace systému firmware určuje základní adresu pro tuto „ukradenou“ oblast adres a sděluje ji kořenovému komplexu a operačnímu systému. Tato komunikační metoda je specifická pro implementaci a není definována ve specifikaci PCI Express.

Každé zařízení má svůj vlastní prostor 4 kB a informace o každém zařízení jsou přístupné prostřednictvím jednoduchého pole, dev[bus][device][function]takže pro toto použití je „ukradeno“ 256 MB fyzického sousedícího prostoru (256 autobusů × 32 zařízení × 8 funkcí × 4 KB = 256 MB). Základní fyzická adresa tohoto pole není uvedena. Například na moderních systémech x86 obsahují tabulky ACPI potřebné informace.

Viz také

Reference

externí odkazy