pci_configuration_space
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| pci_configuration_space [2026/02/28 16:02] – msvoelker | pci_configuration_space [2026/02/28 16:47] (current) – [VirtIO: DeviceCfg] msvoelker | ||
|---|---|---|---|
| Line 31: | Line 31: | ||
| ===== Standardisierter Bereich ===== | ===== Standardisierter Bereich ===== | ||
| - | In der einfachen Variante zeigt pciconf nur einen kleinen Teil der Informationen an, die im Configuration Space stehen. Pro PCI-Gerät ist der Configuration Space 256 Byte groß. Die ersten 64 Byte sind standardisiert | + | In der einfachen Variante zeigt pciconf nur einen kleinen Teil der Informationen an, die im Configuration Space stehen. Pro PCI-Gerät ist der Configuration Space 256 Byte groß. Die ersten 64 Byte sind standardisiert |
| < | < | ||
| Line 83: | Line 83: | ||
| Die Bytes sind in Little Endian. Die ersten zwei Bytes sind also 0x1af4, die die Vendor ID angeben. | Die Bytes sind in Little Endian. Die ersten zwei Bytes sind also 0x1af4, die die Vendor ID angeben. | ||
| - | Interessant sind die Base Address | + | |
| + | ===== Base Address | ||
| + | |||
| + | In einer Base Address Register (BAR) Region, kann das PCI-Gerät weitere Informationen | ||
| Bei dem PCI-Gerät gibt es zwei BARs. Hier der Abschnitt vom Configuration Space zu den BARs. | Bei dem PCI-Gerät gibt es zwei BARs. Hier der Abschnitt vom Configuration Space zu den BARs. | ||
| Line 93: | Line 96: | ||
| </ | </ | ||
| - | BAR 1 hat Typ 1 (I/O) und Base Address 0. BAR 2 hat Typ 0 (Memory) und Base Address 0xe1856000. Die BARs lassen sich mit pciconf | + | BAR 1 hat Typ 1 (I/O) und Base Address 0. BAR 2 hat Typ 0 (Memory) und Base Address 0xe1856000. Die BARs lassen sich mit pciconf |
| < | < | ||
| Line 104: | Line 107: | ||
| Die Zahl in eckigen Klammern gibt über ein Byte-Offset hexadezimal an, wo im Configuration Space der BAR angegeben ist. | Die Zahl in eckigen Klammern gibt über ein Byte-Offset hexadezimal an, wo im Configuration Space der BAR angegeben ist. | ||
| - | VirtIO nutzt im legacy mode den BAR vom Typ I/O und im modern mode den BAR vom Typ Memory. Das PCI-Gerät, was VirtualBox bereistellt ist ein Transitional Device. Das heißt, es unterstützt beide Modi. FreeBSD hat einen Treiber pro Modus (src/ | + | VirtIO nutzt im Legacy Modus den BAR vom Typ I/O und im Modern Modus den BAR vom Typ Memory. Das PCI-Gerät, was VirtualBox bereistellt ist ein Transitional Device. Das heißt, es unterstützt beide Modi. FreeBSD hat einen Treiber pro Modus (src/ |
| - | Im Modern Mode zeigen die PCI Capabilities auf, wo sich in der BAR Region welche Informationen finden. Der Capabilities Pointer ist in dem PCI Configuration Space von oben auf 0x40 gesetzt. Das ist ein Pointer auf des erste Element in einer linked list von Capabilites. Die Capabtilites | + | Mit pciconf kann über den Parameter D eine BAR Region ausgelesen werden. |
| + | |||
| + | < | ||
| + | % sudo pciconf -D pci0:0:10:0 0x18 | hexdump -C | ||
| + | 00000000 | ||
| + | 00000010 | ||
| + | 00000020 | ||
| + | 00000030 | ||
| + | 00000040 | ||
| + | * | ||
| + | 00000060 | ||
| + | 00000070 | ||
| + | 00000080 | ||
| + | * | ||
| + | 00002000 | ||
| + | </ | ||
| + | |||
| + | Im Modern Mode zeigen die PCI Capabilities auf, wo sich in der BAR Region welche Informationen finden. | ||
| + | |||
| + | |||
| + | ===== Capabilities ===== | ||
| + | |||
| + | Zu einem PCI-Gerät können eine Reihe von Capabilities angegeben werden, die z. B. angeben können, in welchen BAR Regionen und wo darin weitere Informationen zu finden sind. Der Capabilities Pointer ist in dem PCI Configuration Space von oben auf 0x40 gesetzt. Das ist ein Pointer auf des erste Element in einer linked list von Capabilities. Die Capabilities | ||
| < | < | ||
| Line 118: | Line 143: | ||
| </ | </ | ||
| - | Der erste Wert nach cap gibt die Capability ID an. Der Wert in eckigen Klammern gibt über ein Byte-Offset hexadezimal an wo im Configuration Space die Capability beschrieben steht. Die erste Capability ist also 0x40 = 64 Byte hinter dem Start des Configuration Space zu finden, also direkt hinter dem eben angegebenen Format. Die Bytes lassen sich ebenfalls mit pciconf -rb auslesen. | + | Der erste Wert nach cap gibt die Capability ID an. Der Wert in eckigen Klammern gibt über ein Byte-Offset hexadezimal an, wo im Configuration Space die Capability beschrieben steht. Die erste Capability ist also 0x40 = 64 Byte hinter dem Start des Configuration Space zu finden, also direkt hinter dem standardisierten Bereich. Die Bytes lassen sich ebenfalls mit pciconf -rb auslesen. |
| < | < | ||
| Line 163: | Line 188: | ||
| </ | </ | ||
| - | Alle Capabilites | + | Alle Capabilities |
| - | Mit pciconf kann über den Parameter D eine BAR Region | + | ==== VirtIO: CommonCfg ==== |
| + | |||
| + | Die erste Capability vom Typ VirtIO: CommonCfg enthält VirtIO-Gerätunabhängige Einstellungen. Sie startet in der BAR Region | ||
| < | < | ||
| - | % sudo pciconf -D pci0:0:10:0 0x18 | hexdump -C | + | 00000000 |
| - | 00000000 | + | 00000010 |
| - | 00000010 | + | 00000020 |
| - | 00000020 | + | 00000030 |
| - | 00000030 | + | |
| - | 00000040 | + | |
| - | * | + | |
| - | 00000060 | + | |
| - | 00000070 | + | |
| - | 00000080 | + | |
| - | * | + | |
| - | 00002000 | + | |
| </ | </ | ||
| - | Die erste Capability vom Typ VirtIO: CommonCfg startet bei Byte 0 und ist 0x38 Byte groß, ist also der Bereich vor den ganzen 0xffff. | + | Beschrieben ist das Format in der VirtIO Spezifikation im Abschnitt [[https:// |
| < | < | ||
| Line 214: | Line 233: | ||
| </ | </ | ||
| - | Das VirtualBox PCI-Gerät gibt darüber also z. B. an, welche Features es unterstützt. Für die Features gibt es insgesamt 64 Bit. In device_feature_select wird geschrieben, | + | Das VirtualBox PCI-Gerät gibt darüber also z. B. an, welche Features es unterstützt. Für die Features gibt es insgesamt 64 Bit. In device_feature_select wird geschrieben, |
| Mit device_feature_select=0 und driver_feature_select=0 sieht die erste Zeile der Ausgabe so aus. | Mit device_feature_select=0 und driver_feature_select=0 sieht die erste Zeile der Ausgabe so aus. | ||
| Line 230: | Line 249: | ||
| Version1, | Version1, | ||
| - | ===== VirtIO: DeviceCfg | + | ==== VirtIO: DeviceCfg ==== |
| - | Die Capability VirtIO: DeviceCfg gibt VirtIO-Gerätspezifische Einstellungen an. Im BAR startet sie bei Byte-Offset 0x70 und ist 0xa = 10 Byte lang, was diesem | + | Die Capability VirtIO: DeviceCfg gibt VirtIO-Gerätspezifische Einstellungen an. In der BAR Region |
| < | < | ||
| Line 255: | Line 274: | ||
| </ | </ | ||
| - | Es sind jedoch nicht immer alle Werte angegeben. Hier ist lediglich die MAC Adresse 08: | + | Es sind jedoch nicht immer alle Werte angegeben. Welche Werte angegeben sind, hängt von den ausgehandelten Features ab. Hier sind lediglich die MAC-Adresse=08: |
pci_configuration_space.1772294521.txt.gz · Last modified: by msvoelker
