| Zeile 18: | Zeile 18: | ||
=== Aufbau des Konfigurations-Adressraum === | === 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. | ||
{| {{Prettytable}} | {| {{Prettytable}} | ||
|- align="center" | |- align="center" | ||
| Zeile 29: | Zeile 32: | ||
|- align="center" | |- align="center" | ||
| 0x0C || BIST || Header Type || Latency Timer || Cache Line Size | | 0x0C || BIST || Header Type || Latency Timer || Cache Line Size | ||
| + | |- align="center" | ||
| + | | 0x10 || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x14 || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x18 || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x1C || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x20 || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x24 || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x28 || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x2C || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x30 || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x34 || colspan="3" bgcolor="#bbb" | Header Type Specific || Capabilities Pointer | ||
| + | |- align="center" | ||
| + | | 0x38 || colspan="4" bgcolor="#bbb" | Header Type Specific | ||
| + | |- align="center" | ||
| + | | 0x3C || colspan="2" bgcolor="#bbb" | Header Type Specific || Interrupt Pin || Interrupt Line | ||
|} | |} | ||
| − | |||
| − | |||
*Die ''Vendor ID''s 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 ''Vendor ID''s 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 ID''s verwalten die Hardwarehersteller selbst. Sie dient zusammen mit der ''Vendor ID'' der eindeutigen Identifikation des Gerätes. | *Die ''Device ID''s verwalten die Hardwarehersteller selbst. Sie dient zusammen mit der ''Vendor ID'' der eindeutigen Identifikation des Gerätes. | ||
| − | *''Classcode'' ist noch einmal geteilt. Die oberen 8 Bit repräsentieren die ''Base Class''. Die mittleren 8 Bit stehen für die ''Subclass'' und die unter 8 Bit für das ''Programming Interface''. | + | *Im ''Status''-Register werden verschiedene Basis-Statuse 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. | *Die ''Revision ID'' wird vom Hardwarehersteller selbst verwaltet. | ||
| − | *''Header Type'' spezifiziert den Inhalt der Register | + | *Mit dem ''BIST''-Register kann ein Geräte-Spezifischer Selbst-Test 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. | ||
{| {{Prettytable}} | {| {{Prettytable}} | ||
|- align="center" | |- align="center" | ||
| Zeile 47: | Zeile 75: | ||
| 0x02 || CardBus-Bridge | | 0x02 || CardBus-Bridge | ||
|} | |} | ||
| + | *Der ''Capabilities Pointer'' zeigt, falls er gültig ist, auf die erste Capabilitie-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==== | ====Header Type 0x00==== | ||