Peripheral Component Interconnect
Peripheral Component Interconnect (kurz PCI) ist ein Bus zur leichten Verbindung von Peripheriegeräten mit der CPU.
Die Informationen in diesem Artikel beziehen sich auch auf die vom klassischen PCI-Bus abgeleiteten Bus-Standards: PCI-Express, Hypertransport, PCI-X und AGP. Diese Busse basieren vom logischen Protokoll her auf PCI aber benutzen andere physikalische Daten-Übertragungsmechanismen bzw. andere Topologien.
Inhaltsverzeichnis
- 1 Konfigurations-Register
- 2 Classcodes
- 2.1 Class 0x00 - Pre 2.0
- 2.2 Class 0x01 - Massenspeicher
- 2.3 Class 0x02 - Netzwerk-Controller
- 2.4 Class 0x03 - Bildschirm-Controller
- 2.5 Class 0x04 - Multimedia-Geräte
- 2.6 Class 0x05 - Speicher-Controller
- 2.7 Class 0x06 - Bridge-Geräte
- 2.8 Class 0x07 - Controller zur einfachen Kommunikation
- 2.9 Class 0x08 - System-Peripherie
- 2.10 Class 0x09 - Input-Geräte
- 2.11 Class 0x0A - Docking-Stationen
- 2.12 Class 0x0B - Prozessoren
- 2.13 Class 0x0C - Serielle Buscontroller
- 2.14 Class 0x0D - Wireless-Controller
- 2.15 Class 0x0E - Intelligente Controller
- 2.16 Class 0x0F - Satelliten-Kommunikations-Controller
- 2.17 Class 0x10 - Encryption/Decryption-Controller
- 2.18 Class 0x11 - Datenerfassungs- und Signalprozessor-Controller
- 3 Weblinks
Konfigurations-Register
Jedes PCI-Gerät besitzt einen eigenen Konfigurations-Adressraum, welcher 256 Byte groß ist. Bei PCI-Express, Hypertransport und PCI-X ist der Konfigurations-Adress-Raum 4096 Byte groß. Auf den Konfigurations-Adressraum kann immer Zugegriffen werden, unabhängig vom Zustand des PCI-Geräts. Für den Zugriff auf den Konfigurations-Adressraum werden die PCI-Geräte über ihre Bus-Nummer, Device-Nummer und Function-Nummer angesprochen, dazu müssen eventuelle PCI-2-PCI-Bridges korrekt konfiguriert sein.
Zugriff auf den Konfigurations-Adressraum
Gelesen und beschrieben wird der Konfigurations-Adressraum, bei PCs, 32bit-weise mithilfe eines Adress-I/O-Ports (0xCF8) und eines Daten-I/O-Ports (0xCFC).
Aufbau des Adress-I/O-Ports
| 31 | 30-24 | 23-16 | 15-11 | 10-8 | 7-0 |
|---|---|---|---|---|---|
| Enable Bit | Reserviert | Busnummer | Gerätenummer | Funktionsnummer | Registernummer bit0 u. bit1 sind 0 |
Aufbau des Konfigurations-Adressraum
Im Konfigurations-Adressraum sind die ersten 64 Byte fest für den Basis-Header reserviert. Die restlichen Bytes stehen zur freien Nutzung durch das Gerät zur Verfügung, in diesem Bereich sind auch die Capabilities untergebracht.
Im Basis-Header sind die Bytes 0x000 – 0x00F, 0x034, 0x03C und 0x03D für alle PCI-Geräte identisch definiert. Diese Bytes dienen dazu, das PCI-Gerät zu klassifizieren und identifizieren.
| Register | 31-24 | 23-16 | 15-8 | 7-0 |
|---|---|---|---|---|
| 0x000 | Device ID | Vendor ID | ||
| 0x004 | Status | Command | ||
| 0x008 | Classcode | Revision ID | ||
| 0x00C | BIST | Header Type | Latency Timer | Cache Line Size |
| 0x010 | Header Type Specific | |||
| 0x014 | Header Type Specific | |||
| 0x018 | Header Type Specific | |||
| 0x01C | Header Type Specific | |||
| 0x020 | Header Type Specific | |||
| 0x024 | Header Type Specific | |||
| 0x028 | Header Type Specific | |||
| 0x02C | Header Type Specific | |||
| 0x030 | Header Type Specific | |||
| 0x034 | Header Type Specific | Capabilities Pointer | ||
| 0x038 | Header Type Specific | |||
| 0x03C | Header Type Specific | Interrupt Pin | Interrupt Line | |
- Die Vendor IDs werden von PCI-SIG verwaltet und den Herstellern zugewiesen. Der Wert 0xffff ist für den Fall reserviert, dass an dieser Stelle kein Gerät vorhanden ist.
- Die Device IDs verwalten die Hardwarehersteller selbst. Sie dient zusammen mit der Vendor ID der eindeutigen Identifikation des Gerätes.
- Im Status-Register werden verschiedene Basis-Status und Gerät-Fähigkeiten angezeigt.
- Im Command-Register werden verschiedene Basis-Konfigurationen vorgenommen.
- Classcode ist noch einmal geteilt. Die oberen 8 Bit (Byte 0x00B) repräsentieren die Base Class. Die mittleren 8 Bit (Byte 0x00A) stehen für die Subclass und die unter 8 Bit (Byte 0x009) für das Programming Interface.
- Die Revision ID wird vom Hardwarehersteller selbst verwaltet.
- Mit dem BIST-Register kann ein gerätespezifischer Selbsttest ausgelöst und ausgewertet werden. Diese Funktion ist optional und wird nur von wenigen PCI-Geräten unterstützt.
- Header Type spezifiziert den Inhalt der Register 0x010 – 0x03F. Dabei gibt Bit 7 an, ob es sich um ein Multifunction-Device handelt oder nicht, in dem Fall muss das Bit 7 in allen vorhandenen Funktionen gesetzt sein.
| Header Type | Kurze Beschreibung |
|---|---|
| 0x00 | Standard |
| 0x01 | PCI/PCI-Bridge |
| 0x02 | CardBus-Bridge |
- Der Capabilities Pointer zeigt, falls er gültig ist, auf die erste Capability-Struktur, welche der Start einer verketteten Liste ist. Für gültige Capabilities Pointer sind nur Werte von 0x40 bis 0xF0 erlaubt.
- Im Interrupt Pin-Register wird angegeben, welches Interrupt-Pin das Gerät verwendet. 0x00 steht für kein Interrupt-Signal, trotzdem kann noch MSI(-X) benutzt werden. Die Werte 0x01 bis 0x04 stehen für #INTA bis #INTD, alle anderen Werte sind nicht erlaubt. Bei Singlefunction-Devices ist nur Pin #INTA erlaubt. Bei Multifunction-Devices dürfen auch #INTB bis #INTD benutzt werden, es dürfen auch mehrere Funktionen in einem PCI-Gerät sich eine Interrupt-Leitung teilen.
- Im Interrupt Line-Register legt das BIOS die zugewiesene x86-Interrupt-Nummer ab, welche das #INT?-Signal des betreffendem PCI-Geräts auslöst.
Header Type 0x00
| Register | 31-24 | 23-16 | 15-8 | 7-0 |
|---|---|---|---|---|
| 0x010 | Base Address 0 (BAR0) | |||
| 0x014 | Base Address 1 (BAR1) | |||
| 0x018 | Base Address 2 (BAR2) | |||
| 0x01C | Base Address 3 (BAR3) | |||
| 0x020 | Base Address 4 (BAR4) | |||
| 0x024 | Base Address 5 (BAR5) | |||
| 0x028 | Cardbus CIS Pointer | |||
| 0x02C | Subsystem ID | Subsystem Vendor ID | ||
| 0x030 | Expansion ROM base address | |||
| 0x034 | Reserviert | Capabilities Pointer | ||
| 0x038 | Reserviert | |||
| 0x03C | Max Latency | Min Grant | Interrupt Pin | Interrupt Line |
Header Type 0x01
| Register | 31-24 | 23-16 | 15-8 | 7-0 |
|---|---|---|---|---|
| 0x010 | Base address 0 | |||
| 0x014 | Base address 1 | |||
| 0x018 | Secondary latency timer | Subordinate bus № | Secondary bus № | Primary bus № |
| 0x01C | Secondary Status | I/O Limit | I/O base | |
| 0x020 | Memory limit | Memory base | ||
| 0x024 | Prefetchable memory limit | Prefetchable memory base | ||
| 0x028 | Prefetchable base upper 32 bits | |||
| 0x02C | Prefetchable limit upper 32 bits | |||
| 0x030 | I/O limit upper 16 bits | I/O base upper 16 bits | ||
| 0x034 | Reserviert | Capabilities pointer | ||
| 0x038 | Extension ROM base address | |||
| 0x03C | Bridge control | Interrupt pin | Interrupt line | |
Bedeutung einiger Register
Status-Register
| Bit | Name | Bedeutung |
|---|---|---|
| 3 | Interrupt Status | TODO |
| 4 | Capabilities List | TODO |
| 5 | 66 MHz Capable | TODO |
| 7 | Fast Back-to-Back Transactions Capable | TODO |
| 8 | Master Data Parity Error | TODO |
| 10-9 | DEVSEL Timing | TODO |
| 11 | Signalled Target-Abort | TODO |
| 12 | Received Target-Abort | TODO |
| 13 | Received Master-Abort | TODO |
| 14 | Signalled System Error | TODO |
| 15 | Detected Parity Error | TODO |
Nicht beschriebene Bits sind reserviert und liefern beim lesen eine 0.
Command-Register
| Bit | Name | Bedeutung |
|---|---|---|
| 0 | IO Space | Nur wenn dieses Bit gesetzt ist, kann der I/O-Raum des Geräts verwendet werden, sonst ist er deaktiviert. Falls das Gerät keine IO-Ports anbietet, ist dieses Bit fest auf 0 geklemmt. |
| 1 | Memory Space | Nur wenn dieses Bit gesetzt ist, können MMIO-Register verwendet werden, sonst sind diese deaktiviert. Falls das Gerät kein MMIO (oder andere Speicherbereiche) anbietet, ist dieses Bit fest auf 0 geklemmt. |
| 2 | Bus Master | Ist dieses Bit gesetzt, so darf das Gerät als Busmaster auf dem PCI-Bus arbeiten. Das ist z. B. für PCI-DMA notwendig (wird u. a. von Netzwerkkarten und (S)ATA-Host-Controllern verwendet). Falls das Gerät nicht busmasterfähig ist, ist dieses Bit fest auf 0 geklemmt. Wenn dieses Bit auf 0 steht, wird damit auch MSI(-X) unterbunden. |
| 3 | Special Cycles | Wenn dieses Bit gelöscht ist, dann muss das Gerät alle Special Cycles auf dem PCI-Bus ignorieren. Special Cycles werden zum Broadcasten von speziellen Nachrichten an alle PCI-Geräte benutzt. Es gibt nur wenige PCI-Geräte, bei denen dieses Bit überhaupt beschreibbar ist, bei den meisten ist es fest auf 0 geklemmt. Bei PCI-Express ist es immer fest auf 0 geklemmt. |
| 4 | Memory Write and Invalidate Enable | Falls gesetzt, kann das Gerät diesen Befehl (Memory Write and Invalidate) ausführen, sonst muss es sich mit einem einfachen Memory Write begnügen. Bei PCI-Express ist dieses Bit immer fest auf 0 geklemmt. |
| 5 | VGA Palette Snoop | Dieses Bit ist nur für VGA-kompatible Geräte interessant (ist es gesetzt, so werden Zugriffe auf die VGA-Palettenregister gesondert behandelt), auf allen anderen Geräten ist es immer fest auf 0 geklemmt. Bei PCI-Express und Hypertransport ist dieses Bit immer fest auf 0 geklemmt, dort wird sowas in den Bridges konfiguriert. |
| 6 | Parity Error Response | Ist dieses Bit gesetzt, so wird bei Parityfehlern auf dem PCI-Bus das Detected-Parity-Error-Statusbit im Statusregister gesetzt. Nicht jede PCI-Hardware unterstützt die Generierung und Prüfung des Paritybits auf dem PCI-Bus, sodass dieses Bit dann fest auf 0 geklemmt ist. Daher sollte dieses Bit nur dann auf 1 gesetzt werden, wenn alle PCI-Geräte auf dem betreffenden physischen PCI-Bus-Segment die Parity-Bit-Generierung unterstützen. Bei PCI-Express und Hypertransport gibt es leistungsfähigere Fehlererkennungsmechanismen, deren Benutzung zu bevorzugen ist. |
| 7 | IDSEL Stepping / Wait Cycle Control |
Dieses Bit war nur in den ersten PCI-Spezifikationen gültig (vor 2.0) und muss immer auf 0 gesetzt werden. Auf allen PCI-Geräten seit der PCI-Spezifikation 2.0 (ab 1993) ist dieses Bit immer fest auf 0 geklemmt. |
| 8 | SERR# Enable | Wenn dieses Bit gesetzt ist darf/soll das Gerät erkannte schwerwiegende Fehler (z. B. Parityfehler während der Adressierungsphase oder ungültige Kommandos) über die extra #SERR-Leitung, oder bei PCI-Express über spezielle Messages, melden. Solche Fehler lösen für gewöhnlich einen NMI oder eine Machine-Check-Exception aus. Bei PCI-Express und Hypertransport gibt es leistungsfähigere Fehlererkennungsmechanismen, deren Benutzung zu bevorzugen ist. |
| 9 | Fast Back-to-Back Enable | Wenn dieses Bit auf 1 gesetzt ist soll das PCI-Gerät Back-to-Back-Zugriffe (als Target)unterstützen und darf auch solche Zugriffe (als Master) ausführen. Dieses Bit lässt sich nur auf 1 setzen, wenn das zugehörige Bit im Status-Register diese Fähigkeit signalisiert, andernfalls ist es fest auf 0 geklemmt. Dieses Bit darf nur dann auf 1 gesetzt werden wenn alle PCI-Geräte auf dem betreffenden physischen PCI-Bus-Segment Back-to-Back-Zugriffe unterstützen. Wenn alle Geräte diesen Modus unterstützen, kann die Idle-Phase zwischen zwei PCI-Zyklen entfallen. Das erhöht etwas den Datendurchsatz auf dem PCI-Bus. Bei PCI-Express, Hypertransport und PCI-X ist es immer fest auf 0 geklemmt. |
| 10 | Interrupt Disable | Ist dieses Flag gesetzt, dann kann das entsprechende Gerät keine IRQs auslösen. Nach dem Hardware-Reset muss dieses Bit dummerweise immer gelöscht sein, sodass IRQs anfangs nicht verboten sind. MSI(-X) ist davon unabhängig, dafür gibt es spezielle Interrupt-Enable-Bits in den entsprechenden Capabilities. |
Bit 7 ist auf 0 zu setzen, Bits 11 bis 15 sind reserviert (und undefiniert) und müssen ebenfalls immer auf 0 gesetzt werden. Nach dem Reset des Geräts sind alle hier aufgeführten Bits auf 0 gesetzt (wobei das BIOS wohl einige davon setzen wird). Die Software sollte immer prüfen, ob sich die gewünschten Bits auch wirklich auf 1 setzen lassen, einige Bits sind eben fest auf 0 geklemmt.
Base-Address-Register
TODO
Codebeispiel
<c>
- define PCI_CONFIG_DATA 0xCFC
- define PCI_CONFIG_ADDRESS 0xCF8
/**
* Liest ein Dword aus einem PCI-Konfigurations-Register * @param bus Bus * @param dev Gerät * @param func Funktion * @param offset Registernummer * @return Register content */
int pci_config_readd(int bus,int dev,int func,int offset) {
int val; int address = 0x80000000|(bus<<16)|(dev<<11)|(func<<8)|(offset&0xFC); outl(PCI_CONFIG_ADDRESS,address); val = inl(PCI_CONFIG_DATA); return val;
}
/**
* Schreibt ein Dword in in ein PCI-Konfigurations-Register * @param bus Bus * @param dev Gerät * @param func Funktion * @param offset Registernummer * @param val Wert zum Schreiben */
void pci_config_writed(int bus,int dev,int func,int offset,int val) {
int address = 0x80000000|(bus<<16)|(dev<<11)|(func<<8)|(offset&0xFC); outl(PCI_CONFIG_ADDRESS,address); outl(PCI_CONFIG_DATA,val);
} </c>
Classcodes
| Class | Beschreibung |
|---|---|
| 0x00 | Alle Geräte die gebaut wurden bevor Classcodes eingeführt wurden |
| 0x01 | Massenspeicher |
| 0x02 | Netzwerk-Controller |
| 0x03 | Bildschirm-Controller |
| 0x04 | Multimedia-Geräte |
| 0x05 | Speicher-Controller |
| 0x06 | Bridge-Geräte |
| 0x07 | Controller zur einfachen Kommunikation |
| 0x08 | System-Peripherie |
| 0x09 | Input-Geräte |
| 0x0A | Docking-Stationen |
| 0x0B | Prozessoren |
| 0x0C | Serielle Buscontroller |
| 0x0D | Wireless-Controller |
| 0x0E | Intelligente Controller |
| 0x0F | Satelliten-Kommunikations-Controller |
| 0x10 | Encryption/Decryption-Controller |
| 0x11 | Datenerfassungs- und Signalprozessor-Controller |
| 0x12-0xFE | Reserviert |
| 0xFF | Sonstige |
Class 0x00 - Pre 2.0
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | Alle nicht- VGA-Geräte |
| 0x01 | 0x00 | VGA-Geräte |
Class 0x01 - Massenspeicher
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | SCSI |
| 0x01 | 0x?? | IDE |
| 0x02 | 0x00 | Floppy |
| 0x03 | 0x00 | IPI |
| 0x04 | 0x00 | RAID |
| 0x05 | 0x20 | ATA-Controller (Single DMA) |
| 0x05 | 0x30 | ATA-Controller (Chained DMA) |
| 0x80 | 0x00 | Anderer Massenspeicher |
Class 0x02 - Netzwerk-Controller
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | Ethernet |
| 0x01 | 0x00 | Token Ring |
| 0x02 | 0x00 | FDDI |
| 0x03 | 0x00 | ATM |
| 0x04 | 0x00 | ISDN |
| 0x05 | 0x00 | World FIP (Feldbus) |
| 0x06 | 0x?? | PICMG 2.14, Multi-Computing |
| 0x80 | 0x00 | Anderer Netzwerk-Controller |
Class 0x03 - Bildschirm-Controller
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | VGA |
| 0x00 | 0x01 | 8514 |
| 0x01 | 0x00 | XGA |
| 0x02 | 0x00 | 3D |
| 0x80 | 0x00 | Anderer Bildschirm-Controller |
Class 0x04 - Multimedia-Geräte
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | Video-Gerät |
| 0x01 | 0x00 | Audio-Gerät |
| 0x02 | 0x00 | Telefonie |
| 0x80 | 0x00 | Anderes Multimedia-Gerät |
Class 0x05 - Speicher-Controller
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | RAM |
| 0x01 | 0x00 | Flash-Speicher |
| 0x80 | 0x00 | Anderer Speicher |
Class 0x06 - Bridge-Geräte
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | Host/PCI-Bridge |
| 0x01 | 0x00 | PCI/ISA-Bridge |
| 0x02 | 0x00 | PCI/EISA-Bridge |
| 0x03 | 0x00 | PCI/MicroChannel-Bridge |
| 0x04 | 0x00 | PCI/PCI-Bridge (hat Header Type 0x01) |
| 0x04 | 0x01 | PCI/PCI-Bridge (Subtractive Decode, hat Header Type 0x01) |
| 0x05 | 0x00 | PCI/PCMCIA-Bridge |
| 0x06 | 0x00 | PCI/NuBus-Bridge |
| 0x07 | 0x00 | PCI/CardBus-Bridge |
| 0x08 | 0x?? | Raceway, Switched Fabric |
| 0x09 | 0x40 | Semitransparente PCI/PCI-Bridge
(primär zum Host) |
| 0x09 | 0x80 | Semitransparente PCI/PCI-Bridge (sekundär zum Host) |
| 0x0A | 0x00 | InfiniBand/PCI-Brige |
| 0x80 | Anderer Bridge-Typ |
Class 0x07 - Controller zur einfachen Kommunikation
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | Serielle Schnittstelle
(XT-kompatibel) |
| 0x00 | 0x01 | Serielle Schnittstelle (16450) |
| 0x00 | 0x02 | Serielle Schnittstelle (16550) |
| 0x00 | 0x03 | Serielle Schnittstelle (16650) |
| 0x00 | 0x04 | Serielle Schnittstelle (16750) |
| 0x00 | 0x05 | Serielle Schnittstelle (16850) |
| 0x00 | 0x06 | Serielle Schnittstelle (16950) |
| 0x01 | 0x00 | Parallelport
(Standard) |
| 0x01 | 0x01 | Parallelport (Bidirektional) |
| 0x01 | 0x02 | Parallelport (ECP 1.0) |
| 0x01 | 0x03 | Parallelport (IEEE 1284) |
| 0x01 | 0xFE | IEEE-1284-Gerät, Target |
| 0x02 | 0x00 | Multiport Serial Controller |
| 0x03 | 0x00 | Standard-Modem |
| 0x03 | 0x01 | Hayes-kompatibles Modem (16450) |
| 0x04 | 0x00 | GPIB (IEEE488.1/2) Controller |
| 0x04 | 0x02 | Hayes-kompatibles Modem (16550) |
| 0x04 | 0x03 | Hayes-kompatibles Modem (16650) |
| 0x04 | 0x04 | Hayes-kompatibles Modem (16750) |
| 0x05 | 0x00 | SmartCard |
| 0x80 | 0x00 | Andere
Controller |
Class 0x08 - System-Peripherie
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | 8259- PIC |
| 0x00 | 0x01 | ISA-PIC |
| 0x00 | 0x02 | EISA-PIC |
| 0x00 | 0x10 | IO- APIC (EISA) |
| 0x00 | 0x20 | IOx-APIC |
| 0x01 | 0x00 | 8237-DMA-Controller |
| 0x01 | 0x01 | ISA-DMA-Controller |
| 0x01 | 0x02 | EISA-DMA-Controller |
| 0x02 | 0x00 | Standard-8254-Timer |
| 0x02 | 0x01 | ISA-System-Timer |
| 0x02 | 0x02 | EISA-System-Timer |
| 0x03 | 0x00 | Standard Real Time Clock |
| 0x03 | 0x01 | ISA Real Time Clock |
| 0x04 | 0x00 | PCI Hot Plug Controller |
| 0x80 | 0x00 | Andere System-Peripherie |
Class 0x09 - Input-Geräte
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | Tastatur |
| 0x01 | 0x00 | Digitizer (Stift) |
| 0x02 | 0x00 | Maus |
| 0x03 | 0x00 | Scanner |
| 0x04 | 0x00 | Standard-Gameport |
| 0x04 | 0x10 | Gameport |
| 0x80 | 0x00 | Anderes Input-Gerät |
Class 0x0A - Docking-Stationen
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | Normale Docking-Station |
| 0x80 | 0x00 | Andere Docking-Station |
Class 0x0B - Prozessoren
| Subclass | Programming-Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | 386 |
| 0x01 | 0x00 | 486 |
| 0x02 | 0x00 | Pentium |
| 0x10 | 0x00 | Alpha |
| 0x20 | 0x00 | PowerPC |
| 0x30 | 0x00 | MIPS |
| 0x40 | 0x00 | Coprozessor |
Class 0x0C - Serielle Buscontroller
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | Firewire (IEEE 1394) |
| 0x00 | 0x10 | Firewire (OHCI) |
| 0x01 | 0x00 | ACCESS-Bus |
| 0x02 | 0x00 | SSA (Serial Storage Architecture) |
| 0x03 | 0x00 | USB-Host (UHCI) |
| 0x03 | 0x10 | USB-Host (OHCI) |
| 0x03 | 0x20 | USB-Host (EHCI) |
| 0x03 | 0x80 | USB-Host (kein HCI) |
| 0x03 | 0xFE | USB-Gerät |
| 0x04 | 0x00 | Fibre Channel |
| 0x05 | 0x00 | SMB (System Management Bus) |
| 0x06 | 0x00 | InfiniBand |
| 0x07 | 0x00 | IPMI SMIC Interface |
| 0x07 | 0x01 | IPMI Keyboard Style Interface |
| 0x07 | 0x02 | IPMI Block Transfer Device |
| 0x08 | 0x00 | SERCOS Interface |
| 0x09 | 0x00 | CANBus |
Class 0x0D - Wireless-Controller
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | iRDA |
| 0x01 | 0x00 | Consumer Infrared |
| 0x10 | 0x00 | Radio Frequency |
| 0x11 | 0x00 | Bluetooth |
| 0x12 | 0x00 | Broadband |
| 0x80 | 0x00 | Anderer Wireless-Controller |
Class 0x0E - Intelligente Controller
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x?? | I²O-Architektur |
| 0x00 | 0x00 | Message FIFO |
Class 0x0F - Satelliten-Kommunikations-Controller
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x01 | 0x00 | TV |
| 0x02 | 0x00 | Audio |
| 0x03 | 0x00 | Sprache |
| 0x04 | 0x00 | Daten |
Class 0x10 - Encryption/Decryption-Controller
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x01 | 0x00 | Netzwerk |
| 0x10 | 0x00 | Entertainment |
| 0x80 | 0x00 | Anderer Controller |
Class 0x11 - Datenerfassungs- und Signalprozessor-Controller
| Subclass | Programming Interface | Beschreibung |
|---|---|---|
| 0x00 | 0x00 | Digital Input/Output Module |
| 0x01 | 0x00 | Zähler |
| 0x10 | 0x00 | Synchronisation und Frequenzmessung |
| 0x20 | 0x00 | Management Card |
| 0x80 | 0x00 | Anderer Controller |
Weblinks
- Linux PCI ID Repositorium - Enthält viele VendorIDs und die dazugehörigen DeviceIDs