PCI -konfigurationsutrymmet är adressutrymmet för PCI - konfigurationen , förutom de typiska minnes- och I/O-adressutrymmena.
En av de stora förbättringarna av PCI-bussen jämfört med andra I/O-arkitekturer är dess konfigurationsmekanism, som har ett konfigurationsadressutrymme på 256 byte som kan adresseras genom att känna till PCI-bussens nummer, enhetsnummer och enhetsfunktionsnummer. De första 64 byten av 256 är standardiserade, och resten av registren kan användas efter enhetstillverkarens gottfinnande.
Leverantörs-ID och enhets-ID- registren identifierar enheten och kallas vanligtvis för PCI-ID . Sexton -bitars leverantörs-ID -registret utfärdas av PCI SIG . Det sexton bitars enhets- ID -registret tilldelas av enhetstillverkaren. Det finns ett projekt för att skapa en databas med alla kända registervärden Leverantörs-ID och Enhets-ID . (Se referenslistan .)
De första 16 dubbla orden i konfigurationsadressutrymmet (enligt PCI Local Bus Specification 2.2 ):
Adress | 31 ... 24 | 23 ... 16 | 15 ... 8 | 7 ... 0 |
---|---|---|---|---|
0x00 | Enhets-ID | Leverantörs-ID | ||
0x04 | Status | kommando | ||
0x08 | klasskod | revisions-ID | ||
0x0C | BIST | Typ av rubrik | Latency Timer | Cachelinjestorlek |
0x10 | Basadressregister 0 | |||
0x14 | Basadressregister 1 | |||
0x18 | Basadressregister 2 | |||
0x1C | Basadressregister 3 | |||
0x20 | Basadressregister 4 | |||
0x24 | Basadressregister 5 | |||
0x28 | Cardbus CIS-pekare | |||
0x2C | SubsystemID | Delsystems leverantörs-ID | ||
0x30 | Expansions-ROM-basadress | |||
0x34 | Reserverad | Kapacitetspekare _ | ||
0x38 | Reserverad | |||
0x3C | Max_Lat | Min_Gnt | Avbryt Pin | Avbryt linje |
DeviceID , VendorID , Status , Command , Class Code , Revision ID , Header Type registers krävs för alla PCI-enheter (för många enhetstyper krävs även registren Subsystem ID och Subsystem Vendor ID ).
Alla andra register är valfria.
För att komma åt enheten via adressutrymmet i minnet eller I/O, programmerar systemprogramvaran eller OS basadressregistren ( engelska basadressregistren , även kallade BAR), och skickar konfigurationskommandon till PCI-styrenheten. I början av systemstarten är alla PCI-enheter i ett inaktivt tillstånd, de tilldelas inte adresser genom vilka drivrutiner kan kommunicera med dem. Antingen BIOS eller själva operativsystemet kommer åt PCI-platserna och ställer in BAR:erna i konfigurationsadressutrymmet. BAR-värden är giltiga så länge som systemet är påslaget. När strömmen stängs av går värdena för dessa register förlorade tills nästa start, under vilken installationsproceduren upprepas. Eftersom denna process är helt automatiserad frigörs datoranvändaren från den svåra uppgiften att konfigurera ny hårdvara ansluten till PCI-bussen (till skillnad från till exempel ISA-bussen , basadresserna för enheter som är anslutna till vilka måste konfigureras med byglar eller omkopplare).
Alla icke-brygga PCI-enheter (se PCI-till-PCI Bridge Architecture Specification. Revision 1.1 ) kan ha upp till sex BAR, som var och en är ansvarig för ett specifikt adressintervall i minnet eller I/O-adressutrymmet. Dessutom kan enheten ha firmware ).
För att arbeta med PCI-bussen i PC-AT och kompatibla maskiner är två huvudportar tilldelade.
0CF8h -W adressport Adress
0CFCh RW dataport Data
Båda portarna är 32 bitar.
Adressporten har följande 32-bitarsstruktur: Adressporten anger buss-, enhets- och registeradressen i enhetens konfigurationsutrymme. Grovt sett är en enhet en fysiskt närvarande enhet. En funktion är en logisk enhet. С — flagga för enhetsåtkomst.
De minst signifikanta två bitarna i adressporten är alltid 0.
När du har arbetat klart med enheten återställer du adressen till 0.
+---+---------+-------+----------+--------+---------------+-+-+
|31 |30 24|23 16|15 11|10 8|7 2|1|0|
+---+---------+-------+----------+--------+---------------+-+-+
| с | резерв |шина |устройство| функция|Индекс регистра|0|0|
+---+---------+-------+----------+--------+---------------+-+-+
Om 0FFFFh returneras som svar på en nollregisterförfrågan, så existerar inte enheten. Leverantörs-ID (tillverkare-ID) - för Intel är detta 8086h, men kan inte vara 0FFFFh.
Enhets-ID (enhets-ID) - tar olika värden
Revisions-ID (revisions-ID) - anger enhetens revisionsnummer, tilldelat av tillverkaren.
Klasskod (Klasskod) - består av tre delar
+---------------+--------------+---------------------+
|23 16|15 8|7 0|
+---------------+--------------+---------------------+
|Base Class Code|Sub Class Code|Programming Interface|
+---------------+--------------+---------------------+
Base Class Code - basklass, förkortat BCC.
Sub Class Code - en underklass, förkortad SCC.
Programmeringsgränssnitt - gränssnitt, förkortat PI.
Header Type - Om bit 7 är 1, så innehåller enheten flera funktioner.
Om bit 6 är 0, är rubriken standard. Standardhuvuden:
00 - se standard ovan.
01 - standard för PCI-till-PCI-
brygga 02 - standard för CardBus-brygga.