Spațiu de configurare PCI

Spațiul de configurare PCI este spațiul de  adrese pentru configurația PCI , în plus față de memoria tipică și spațiile de adrese I/O.

Una dintre îmbunătățirile majore aduse magistralei PCI față de alte arhitecturi I/O este mecanismul său de configurare, care are un spațiu de adresă de configurare de 256 de octeți care poate fi adresat cunoscând numărul magistralei PCI, numărul dispozitivului și numărul funcției dispozitivului. Primii 64 de octeți din 256 sunt standardizați, iar restul registrelor pot fi utilizate la discreția producătorului dispozitivului.

Registre standardizate

Registrele Vendor ID și Device ID identifică dispozitivul și sunt denumite în mod obișnuit PCI ID . Registrul de identificare a furnizorului de șaisprezece biți este emis de PCI SIG . Registrul de identificare a dispozitivului de șaisprezece biți este atribuit de producătorul dispozitivului. Există un proiect pentru a crea o bază de date cu toate valorile de registru cunoscute ID- ul furnizorului și ID- ul dispozitivului . (Vezi lista de referințe .)

Primele 16 cuvinte duble din spațiul de adrese de configurare (conform specificației PCI Local Bus Specification 2.2 ):

Abordare 31      ...      24 23      ...      16 15      ...       8 7       ...       0
0x00 Identificatorul dispozitivului ID furnizor
0x04 stare comanda
0x08 codul clasei ID-ul reviziei
0x0C BIST Tip antet Temporizator de latență Dimensiunea liniei cache
0x10 Registrul de adresă de bază 0
0x14 Registrul de adrese de bază 1
0x18 Registrul de adrese de bază 2
0x1C Registrul de adrese de bază 3
0x20 Registrul de adrese de bază 4
0x24 Registrul de adrese de bază 5
0x28 Pointer Cardbus CIS
0x2C ID-ul subsistemului ID-ul furnizorului subsistemului
0x30 Adresa de bază ROM de expansiune
0x34 Rezervat
Indicator de capabilități
0x38 Rezervat
0x3C Max_Lat Min_Gnt Pin de întrerupere Linie de întrerupere

Registrele DeviceID , VendorID , Status , Command , Class Code , Revision ID , Header Type sunt necesare pentru toate dispozitivele PCI (pentru multe tipuri de dispozitive, sunt necesare și registrele Subsystem ID și Subsystem Vendor ID ).

Toate celelalte registre sunt opționale.

Inițializare hardware automată cu spațiu de configurare

Pentru a accesa dispozitivul prin spațiul de adresă al memoriei sau I/O, software-ul de sistem sau OS programează registrele de adrese de bază ( în engleză  Base Address Registers , numite și BAR-uri), trimițând comenzi de configurare către controlerul PCI. La începutul pornirii sistemului, toate dispozitivele PCI sunt într-o stare inactivă, nu li se atribuie adrese prin care driverele de dispozitiv pot comunica cu ele. Fie BIOS -ul, fie sistemul de operare însuși accesează sloturile PCI și setează BAR-urile în spațiul de adrese de configurare. Valorile BAR sunt valabile atâta timp cât sistemul este pornit. Când alimentarea este oprită, valorile acestor registre se pierd până la următoarea pornire, timp în care se repetă procedura de configurare. Deoarece acest proces este complet automatizat, utilizatorul computerului este eliberat de sarcina dificilă de a configura noul hardware conectat la magistrala PCI (spre deosebire de, de exemplu, magistrala ISA , adresele de bază ale dispozitivelor conectate la care trebuiau configurate cu jumperi sau întrerupătoare).

Orice dispozitiv PCI non-bridge (vezi Specificația arhitecturii de punte PCI-la-PCI. Revizia 1.1 ) poate avea până la șase BAR-uri, fiecare dintre acestea fiind responsabilă pentru o gamă specifică de adrese din memorie sau spațiul de adrese I/O. În plus, dispozitivul poate avea firmware ).

Acces PCI prin porturile I/O

Pentru a lucra cu magistrala PCI în PC-AT și mașini compatibile, sunt alocate două porturi principale.
0CF8h -W adresă port Adresă
0CFCh RW date port date
Ambele porturi au 32 de biți.
Portul de adresă este următoarea structură pe 32 de biți: Portul de adresă specifică adresa de magistrală, dispozitiv și registru în spațiul de configurare a dispozitivului. În linii mari, un dispozitiv este un dispozitiv prezent fizic. O funcție este o unitate logică. С  — steag de acces la dispozitiv. Cei doi biți mai puțin semnificativi din portul de adresă sunt întotdeauna 0. Când ați terminat de lucrat cu dispozitivul, resetați adresa la 0.

+---+---------+-------+----------+--------+---------------+-+-+
|31 |30     24|23   16|15      11|10     8|7             2|1|0|
+---+---------+-------+----------+--------+---------------+-+-+
| с | резерв  |шина   |устройство| функция|Индекс регистра|0|0|
+---+---------+-------+----------+--------+---------------+-+-+



Dacă 0FFFFh este returnat ca răspuns la o interogare de registru zero, atunci dispozitivul nu există. ID-ul furnizorului (ID-ul producătorului) - pentru Intel este 8086h, dar nu poate fi 0FFFFh.
Device ID (device ID) - ia diverse valori

Revision ID (revision ID) - indică numărul de revizuire al dispozitivului, atribuit de producător.

Cod de clasă (Cod de clasă) - constă din trei părți

+---------------+--------------+---------------------+
|23           16|15           8|7                   0|
+---------------+--------------+---------------------+
|Base Class Code|Sub Class Code|Programming Interface|
+---------------+--------------+---------------------+

Codul clasei de bază - clasa de bază, prescurtat ca BCC.
Sub Class Code - o subclasă, abreviată ca SCC.
Interfață de programare - interfață, prescurtată ca PI.

Tip antet - Dacă bitul 7 este 1, atunci dispozitivul conține mai multe funcții.
Dacă bitul 6 este 0, atunci antetul este standard. Antete standard:
00 - vezi standardul de mai sus.
01 - standard pentru puntea PCI-la-PCI
02 - standard pentru puntea CardBus.

Link -uri