PCIe Series — PCIe-21: Capability Structures — VLSI Trainers
PCIe Series · PCIe-21

Capability Structures

The PCI capability linked list, how software walks it, the four mandatory capability structures every PCIe device must implement — Power Management, PCIe Capability, MSI, MSI-X — plus all their register fields, configuration sequences, and how they evolve in Gen 6.

📋 What Capability Structures Are

The 64-byte PCI-compatible header (Type 0 or Type 1) covers identification, command/status, BARs, and interrupt routing. Everything beyond basic device identification and address assignment lives in capability structures — self-describing register blocks that extend the configuration space in a standardised, forward-compatible way.

Capability structures occupy the 192-byte device-specific region of PCI-compatible configuration space (offsets 40h–FFh), chained together as a linked list. Each structure begins with two bytes: a Capability ID that identifies the type, and a Next Pointer byte that gives the offset of the next structure in the chain. The chain ends when Next Pointer = 00h.

This design means software does not need prior knowledge of a device’s capabilities. It reads the Capabilities Pointer from offset 34h, follows the list, and discovers whatever is present. A device can implement any subset of capabilities and they appear in the list in whatever order the designer chose.

Capability Structure — Universal 2-byte Header Format Capability ID Byte 0 — 8 bits, read-only Next Capability Pointer Byte 1 — offset of next structure, 00h = end Capability-specific registers Size and content defined per capability ID. Software knows the layout from the ID.
Figure 1 — Every PCI capability structure begins with the same two bytes: Capability ID (which type this is) and Next Capability Pointer (DWORD-aligned offset to the next entry). All remaining bytes in the structure are capability-specific. Software must never assume any capability starts at a fixed offset — always walk the linked list.

📋 The Capability Linked List

The Capabilities Pointer at offset 34h in the Type 0 or Type 1 header holds the offset of the first capability structure. Software follows the chain until it reaches a structure whose Next Pointer is 00h.

Typical Endpoint Capability Chain — Four Mandatory Structures Type 0 Header Cap Ptr=40h PM Cap ID = 01h @40h · Next=60h MSI Cap ID = 05h @60h · Next=80h MSI-X Cap ID = 11h @80h · Next=90h PCIe Cap ID = 10h @90h · Next=00h Next=00h → end of list All four structures — PM (01h), MSI (05h), PCIe Capability (10h), MSI-X (11h) — are mandatory for all PCIe endpoints. Actual offsets vary by implementation. Software must always walk the list — never hardcode offsets.
Figure 2 — Typical endpoint capability chain. The header’s Capabilities Pointer starts the chain at offset 40h. Each structure’s Next byte advances to the next. The final structure has Next=00h. Offsets and ordering are implementation-defined — software must always discover them by walking the list from offset 34h.
Status register bit 20 must be 1. Status register bit 20 (Capabilities List, offset 04h bit 20) indicates that the capability linked list is present. For all PCIe devices this must always be 1 because the PCIe Capability structure (ID 10h) is mandatory. Software should check this bit before walking the list, but in practice every PCIe device will have it set.

Walking the List — Software Algorithm

The algorithm for walking the capability linked list:

  1. Read the Status register (offset 04h). Check bit 20 (Capabilities List). If 0 — no capabilities, stop.
  2. Read the Capabilities Pointer at offset 34h bits [7:0]. Mask off bits [1:0] (must be zero, but mask for safety). This is the offset of the first structure.
  3. At that offset, read a 32-bit DW. Byte 0 is the Capability ID. Byte 1 is the Next Capability Pointer.
  4. Process the current structure based on its Capability ID.
  5. If Next Pointer ≠ 00h, jump to that offset and repeat from step 3. Otherwise stop.
DWORD alignment required. The Next Capability Pointer value is always DWORD-aligned — bits [1:0] are hardwired to 00b. Always mask off bits [1:0] before using the pointer value as an offset. A Next Pointer of 00h means end of list — not offset 0 (which is the Vendor ID register, not a capability structure).

📋 Power Management Capability (ID 01h)

The Power Management Capability structure is mandatory for all PCIe devices. It provides the standard software interface for transitioning a device between its power states (D0 through D3). Software reads the Power Management Capabilities (PMC) register to learn which states and features the device supports, then uses the PM Control/Status Register (PMCSR) to change the state.

Power Management Capability Structure Layout PMC — Power Mgmt Capabilities [31:16] Next Cap Ptr [15:8] Cap ID = 01h [7:0] DW0 PMCSR — PM Control/Status Register [31:0] PMCSR_BSE (bridge only) DW1 Data [7:0] Reserved DW2 PMC[2:0] Version=010 PMC[3] PME Clock PMC[8] D1 Supported PMC[9] D2 Supported PMC[15:11] PME Support
Figure 3 — Power Management Capability structure. DW0 contains the Capability ID (01h), Next Pointer, and the 16-bit PMC register. DW1 contains the 16-bit PMCSR (the primary runtime control register) plus the optional PMCSR_BSE for bridges. The PMC register is read-only and set by the device designer. PMCSR is the register software writes to change power states.

PMC — Power Management Capabilities register (bits [31:16] of DW0)

PMC BitsFieldAccessMeaning
[2:0]VersionROPower Management spec version. Must be 010b for PCIe 2.0+ compliance.
[3]PME ClockROUnused in PCIe (0). PCI legacy field — clock needed for PME signalling on PCI bus.
[4]Immediate Readiness on Return to D0ROWhen 1: device is immediately operational when transitioning to D0 (no software init needed). When 0: software must re-initialise the device after D3→D0.
[8]D1 SupportROWhen 1: device supports the optional D1 power state.
[9]D2 SupportROWhen 1: device supports the optional D2 power state.
[15:11]PME SupportROBitmask of power states from which the device can generate a PME (Power Management Event) message. Bit 11=D0, 12=D1, 13=D2, 14=D3hot, 15=D3cold.

📋 Device Power States D0–D3

Device Power States — Power vs Recovery Latency Trade-off D0 Fully operational Full power No recovery needed PMCSR[1:0] = 00b Mandatory D1 Light sleep Context may be kept Low recovery latency PMCSR[1:0] = 01b Optional D2 Deeper sleep Context may be lost Higher recovery latency PMCSR[1:0] = 10b Optional D3 D3hot / D3cold Context likely lost Power may be removed (D3cold) PMCSR[1:0] = 11b Mandatory
Figure 4 — Four device power states. D0 and D3 are mandatory; D1 and D2 are optional. The PMCSR Power State field [1:0] holds the current state and is written by software to request a transition. D3hot keeps power applied but device is in lowest power. D3cold removes main power — recovery requires re-enumeration when power returns.

D1 and D2 have no standard definition beyond “less power than D0, more than D3.” Their specific behaviour is device-class specific. In practice most PCIe devices only implement D0 and D3hot — D1 and D2 are rarely used. The device advertises which states it supports in the PMC register, and software must not attempt to transition to an unsupported state.

📋 PMCSR Register

The PM Control/Status Register (PMCSR) at DWORD offset 1 within the PM Capability structure is the primary runtime control register. Software writes to it to change the device’s power state and reads it to monitor PME events.

PMCSR BitsFieldAccessMeaning
[1:0]Power StateRWCurrent/requested power state. 00b=D0, 01b=D1, 10b=D2, 11b=D3hot. Software writes here to transition states. Hardware resets to 00b (D0).
[2]No Soft ResetROWhen 1: device preserves register context across D3hot→D0 transitions. When 0: software must treat the device as reset after D3hot→D0 and re-initialise it.
[8]PME EnableRWWhen 1: device is allowed to assert PME to request wake-up from a low-power state. PME signalling uses an in-band TLP message in PCIe (not a pin).
[12:9]Data SelectRWSelects what data the Data register reports (power consumption, heat dissipation, etc.). Legacy PCI field — rarely used in PCIe.
[14:13]Data ScaleROScale factor for the Data register value. Legacy PCI field.
[15]PME StatusRW1CWhen 1: device has generated a PME message (or is requesting PME). Software clears by writing 1. Sticky — stays set until explicitly cleared.
D3hot → D0 transition and context. When a device is in D3hot and is powered back up, software must check the No Soft Reset bit (PMCSR bit 2). If 0, the device has lost all register state — software must treat it as a hardware reset and re-program all configuration registers including BARs. If No Soft Reset = 1, the device promises to retain its PCI configuration space context, and only device-specific registers may need re-initialisation.

📋 PCIe Capability Structure (ID 10h)

The PCIe Capability structure (Capability ID 10h) is the most important capability for PCIe-specific features. It is mandatory for all PCIe devices and is the structure that distinguishes a native PCIe device from a legacy PCI device. It contains Device Capabilities/Control/Status registers and Link Capabilities/Control/Status registers.

PCIe Capability Structure — Register Map PCIe Capabilities Register [31:16] Next Cap Ptr [15:8] Cap ID = 10h [7:0] DW0 Device Capabilities Register [31:0] — Max Payload, Phantom Funcs, L0s/L1 latencies, FLR DW1 Device Status [31:16] Device Control [15:0] DW2 Link Capabilities Register [31:0] — Max Link Speed, Width, ASPM support, L0s/L1 exit latency DW3 Link Status [31:16] Link Control [15:0] DW4 DW5+ — Slot Capabilities/Control/Status (if slot present) · Root Control/Status (Root Complex only) · Device Capabilities 2 / Control 2 / Status 2 · Link Capabilities 2 / Control 2 / Status 2
Figure 5 — PCIe Capability structure register map. The PCIe Capabilities register in DW0 identifies the device/port type (endpoint, root port, upstream switch port, etc.). Device Capabilities/Control/Status handle per-function settings. Link Capabilities/Control/Status handle link-level settings. Gen 3+ adds Device/Link Capabilities 2 / Control 2 / Status 2 for extended features.

PCIe Capabilities Register — DW0 bits [31:16]

BitsFieldValues
[3:0]Capability VersionMust be 2h for PCIe 2.0 and later
[7:4]Device/Port Type0000b=Endpoint · 0001b=Legacy Endpoint · 0100b=Root Port · 0101b=Upstream Switch Port · 0110b=Downstream Switch Port · 1001b=Root Complex Event Collector
[8]Slot Implemented1=this port has a slot connector (hot-plug capable ports)
[13:9]Interrupt Message NumberMSI/MSI-X vector number used by this port for PCIe events (hot-plug, power management, etc.)

📋 Device Control and Device Status

The Device Control register (DW2 bits [15:0]) controls per-function behaviour. The Device Status register (DW2 bits [31:16]) reports sticky error and capability flags.

Dev Control Bit(s)FieldAccessPurpose
0Correctable Error Reporting EnableRWEnables ERR_COR messages for correctable errors. Must be set to make AER correctable errors visible to the Root Complex.
1Non-Fatal Error Reporting EnableRWEnables ERR_NONFATAL messages.
2Fatal Error Reporting EnableRWEnables ERR_FATAL messages.
3Unsupported Request Reporting EnableRWEnables URs to be reported as Non-Fatal errors. If 0, URs are silently ignored (no message sent).
4Relaxed Ordering EnableRWEnables device to set the RO bit in TLPs it generates. Default typically 1 (enabled).
[7:5]Max Payload SizeRWSets the Maximum Payload Size for TLPs from this device. Must not exceed the value in Device Capabilities Max Payload Size Supported. 000b=128B · 001b=256B · 010b=512B · 011b=1KB · 100b=2KB · 101b=4KB.
8Extended Tag Field EnableRWEnables use of 8-bit tags (allowing 256 outstanding transactions) vs 5-bit tags (32 outstanding). Requires both sides to support extended tags.
9Phantom Functions EnableRWEnables use of phantom function numbers in the tag field to increase outstanding transaction count.
10Auxiliary Power PM EnableRWEnables auxiliary power to remain powered for PME generation from D3cold.
11No Snoop EnableRWEnables device to set the NS (No Snoop) bit in TLPs — allows CPU cache snooping to be bypassed for DMA buffers that software manages explicitly.
[14:12]Max Read Request SizeRWMaximum size of read requests from this device. 000b=128B · 001b=256B · 010b=512B · 011b=1KB · 100b=2KB · 101b=4KB. Should not be set higher than Max Payload Size for efficiency.
15Initiate FLRRWFunction Level Reset — writing 1 initiates a self-reset of this function only (not the entire device). Completes within 100ms. Only valid if Device Capabilities FLR Capable bit is set.
Dev Status Bit(s)FieldAccessMeaning
0Correctable Error DetectedRW1CSet when a correctable error was detected. Sticky — clear by writing 1.
1Non-Fatal Error DetectedRW1CSet when a non-fatal uncorrectable error was detected.
2Fatal Error DetectedRW1CSet when a fatal uncorrectable error was detected.
3Unsupported Request DetectedRW1CSet when this function was the source of an Unsupported Request.
4AUX Power DetectedROHardware sets this when auxiliary power (Vaux) is present. Read-only snapshot.
5Transactions PendingROWhen 1: function has non-posted requests with completions pending. Software should wait for this to clear before removing power or initiating FLR.

📋 MSI Capability Structure (ID 05h)

Message Signaled Interrupts replace the legacy INTx interrupt pin mechanism with in-band Memory Write TLPs. A device signals an interrupt by writing a specific data value to a specific memory address — both programmed by software during configuration. The Root Complex or IOAPIC detects this write and delivers the interrupt to the appropriate CPU core.

MSI Capability Structure — 32-bit and 64-bit variants 32-bit Address Variant (4 DWs) Message Control [31:16] Next Ptr [15:8] ID=05h [7:0] Message Address [31:0] (bits[1:0] always 0 — DWORD aligned) Not present in 32-bit variant (Message Upper Address only in 64-bit) Message Data [15:0] Reserved [31:16] Mask/Pending Bits DW (if Per-Vector Masking Capable) 64-bit Address Variant (5 DWs) Message Control [31:16] Next Ptr [15:8] ID=05h Message Address [31:0] Message Upper Address [63:32] ← extra DW for 64-bit Message Data [15:0] Reserved Mask/Pending Bits DW (if Per-Vector Masking Capable)
Figure 6 — MSI Capability in 32-bit (left) and 64-bit (right) variants. The 64-bit Address Capable bit in Message Control determines which layout is present. The Message Address is the MMIO address of the interrupt controller (APIC) — written there by software. Message Data is the specific interrupt vector value — also written by software.

Message Control register key bits

Bit(s)FieldAccessMeaning
0MSI EnableRWWhen 1: device uses MSI for interrupts. INTx and MSI-X are automatically disabled. Software sets this after programming Message Address and Message Data.
[3:1]Multiple Message CapableROHow many interrupt vectors the device wants. 000b=1, 001b=2, 010b=4, 011b=8, 100b=16, 101b=32. Always a power of two.
[6:4]Multiple Message EnableRWHow many vectors software actually allocated. Same encoding as Capable field. Must be ≤ Capable. Device varies the lower N bits of Message Data to generate different vectors.
764-bit Address CapableROWhen 1: Message Upper Address register is present. Device can be assigned a 64-bit interrupt address. All native PCIe endpoints must set this.
8Per-Vector Masking CapableROWhen 1: Mask Bits and Pending Bits registers are present, enabling individual interrupt vector masking.

📋 MSI Multiple Messages

MSI can deliver up to 32 interrupt vectors per function. When more than one vector is allocated (Multiple Message Enable ≥ 1), the device signals different events by modifying the lower N bits of the Message Data value before writing. If 4 messages are allocated (Enable = 010b), bits [1:0] of Message Data are variable — the device sends Data, Data+1, Data+2, or Data+3 for its four events.

MSI vector numbers must be contiguous. The vectors allocated to a function must be consecutive in the interrupt controller’s numbering, because MSI only has a single base Message Data value. If software allocated base vector 0x49A0 and enabled 4 messages, the device uses 0x49A0, 0x49A1, 0x49A2, 0x49A3. Software cannot assign non-contiguous vectors to a single MSI function. This is one reason MSI-X was introduced.

MSI Configuration Sequence

The complete sequence for enabling MSI on a device:

  1. Walk the Capabilities list from offset 34h, looking for ID = 05h.
  2. Read Message Control — note Multiple Message Capable (bits [3:1]) and 64-bit Capable (bit 7).
  3. Decide allocation — allocate a power-of-two count of vectors (≤ what device requested) from the interrupt controller (e.g. allocate N vectors starting at base vector V).
  4. Write Multiple Message Enable (bits [6:4]) with the count actually allocated.
  5. Write Message Address — the MMIO address of the APIC or MSI remapping table entry (platform-specific, typically FEEx_xxxxh on x86).
  6. Write Message Upper Address (if 64-bit Capable) — bits [63:32] of the address (often 0 on x86 platforms).
  7. Write Message Data — the base interrupt vector value (lower bits will be varied by device for multiple messages).
  8. Set MSI Enable (bit 0 = 1) and simultaneously set Interrupt Disable in Command register (bit 10 = 1) to prevent INTx from being asserted.

📋 MSI-X Capability Structure (ID 11h)

MSI-X overcomes the three key limitations of MSI: it supports up to 2048 vectors per function (vs 32 for MSI), each vector can target a different CPU/APIC address (enabling optimal interrupt distribution), and vectors do not need to be contiguous. The interrupt vector table is stored in device MMIO space (pointed to by a BAR) rather than in configuration space, making it easily extensible.

MSI-X Capability Structure — 3 DWs (compact, table lives in MMIO) Message Control [31:16] — Table Size, Function Mask, MSI-X Enable Next Cap Ptr [15:8] Cap ID = 11h [7:0] MSI-X Table Offset [31:3] — byte offset within BAR of MSI-X table Table BIR [2:0] PBA Offset [31:3] — byte offset within BAR of Pending Bit Array PBA BIR [2:0] BIR (BAR Index Register) = which BAR holds the table. Table Size = number of vectors – 1 (N-1 encoding).
Figure 7 — MSI-X Capability structure. Only 3 DWs in configuration space — compact by design because all per-vector data lives in MMIO space. Table BIR identifies which BAR (0–5) contains the MSI-X Table. PBA BIR identifies which BAR contains the Pending Bit Array. Table Offset and PBA Offset give the byte offsets within those BARs.

MSI-X Message Control bits

Bit(s)FieldAccessMeaning
[10:0]Table SizeRON–1 encoding of total number of vectors supported. A value of 7 means 8 vectors. Maximum is 2047 (meaning 2048 vectors). Hardware sets this.
[13:11]ReservedROAlways 0.
14Function MaskRWGlobal mask — when 1, all interrupt vectors from this function are masked regardless of individual per-vector mask bits. Allows atomic masking of all interrupts during driver updates.
15MSI-X EnableRWWhen 1: MSI-X is enabled. MSI and INTx are disabled. Software sets this after programming all table entries.

📋 MSI-X Table and PBA

The MSI-X Table lives in the device’s MMIO space (in the BAR identified by Table BIR). It contains one 128-bit entry per supported vector. Each entry has its own Address, Data, and Vector Control registers — enabling fully independent configuration of each interrupt.

MSI-X Table — One 128-bit Entry per Vector Bits: 127:96 95:64 63:32 31:0 Msg Address Upper [63:32] Msg Address Lower [31:0] Message Data [31:0] Vector Control [31:0] Entry 0 Msg Address Upper Msg Address Lower Message Data Vector Control Entry 1 · · · (up to 2048 entries) Pending Bit Array (PBA) — one bit per vector, in BAR identified by PBA BIR If a masked vector’s interrupt fires, PBA bit = 1. When unmasked, device sends the pending interrupt. Read-only from software perspective.
Figure 8 — MSI-X Table entry layout. Each entry is 128 bits (4 DWs). Software independently programs each entry’s Message Address (64-bit — can target different CPUs), Message Data (interrupt vector), and Vector Control (bit 0 = Mask). The PBA (Pending Bit Array) records pending interrupts for masked vectors — one bit per entry, also in MMIO space.

Vector Control register bit 0 — Mask Bit

Each MSI-X table entry has a Vector Control register. Bit 0 is the Mask bit. When 1, the associated interrupt vector is masked — the device cannot send the corresponding MSI-X write, and if the event fires the corresponding PBA bit is set instead. When the mask is cleared, if the PBA bit is set the device must send the interrupt immediately. This per-vector masking is far more granular than MSI, where masking applies to all allocated vectors simultaneously.

📋 MSI vs MSI-X — Which to Use

PropertyMSIMSI-X
Maximum vectors per function322048
Vector addressesAll share one address; data lower bits varyEach vector has its own independent address
CPU targetingAll vectors go to the same CPUEach vector can target a different CPU (ideal for multi-core IRQ affinity)
Vector numberingMust be contiguous (base + offset)Fully independent — any vector number in any order
Per-vector maskingOptional (Per-Vector Masking Capable bit)Always present (bit 0 of each table entry’s Vector Control)
Configuration space footprint3–5 DWs in config space3 DWs in config space; table in MMIO BAR space
Typical useSimpler devices (NVMe with few queues, USB, audio)High-performance devices (GPUs, 100GbE NICs, AI accelerators, NVMe with many queues)
Required to implementYes (for all PCIe functions)Optional (but strongly preferred for high-queue-count devices)
Driver best practice: always prefer MSI-X over MSI if both are present. MSI-X enables one vector per CPU core (reducing lock contention in multi-queue drivers), non-contiguous vector assignments (better NUMA affinity), and per-vector masking without disabling all interrupts. Modern NVMe, GPU, and NIC drivers all use MSI-X with one vector per submission/completion queue pair.

📋 Legacy INTx — Interrupt Disable and Emulation

INTx (legacy interrupt pin signalling) is emulated in PCIe via two in-band TLPs: Assert_INTx and Deassert_INTx. These are Message TLPs (Type = 10100b with specific message codes). PCIe does not have physical interrupt wires — the message TLPs mimic the edge/level behaviour of legacy PCI interrupt pins.

The Interrupt Pin register at offset 3Ch [15:8] declares which legacy pin (INTA# through INTD#) the function emulates. The Interrupt Disable bit in the Command register (bit 10) globally enables or disables INTx signalling for the function.

Correct interrupt enable sequence: (1) Disable INTx (Interrupt Disable = 1) in Command register. (2) Configure MSI or MSI-X registers. (3) Enable MSI or MSI-X (set Enable bit). Never have both INTx and MSI/MSI-X enabled simultaneously — the results are undefined.

Capability Structures in Gen 6

All four mandatory capability structures — PM (01h), PCIe Capability (10h), MSI (05h), MSI-X (11h) — are unchanged in Gen 6. Their formats, register layouts, and software interfaces are identical across all PCIe generations. This is the whole point of the capability mechanism: new features are added as new capability IDs in the extended config space (offset 100h+), not by changing the existing structures.

What Gen 6 adds in the context of these structures:

📋 Quick Reference

ItemValue / Rule
Capability structure headerByte 0 = Capability ID · Byte 1 = Next Pointer (DWORD-aligned, 00h = end)
List startRead offset 34h bits [7:0], mask bits [1:0]. Check Status bit 20 first.
PM Capability ID01h — mandatory for all PCIe functions
PMC VersionMust be 010b for PCIe 2.0+ compliance
PMC D1/D2 Support bitsBits 8 and 9 — optional states, rarely used in PCIe
PMC PME Support [15:11]Bitmask of D-states from which PME can be sent (D0/D1/D2/D3hot/D3cold)
PMCSR Power State [1:0]Software writes: 00b=D0 · 01b=D1 · 10b=D2 · 11b=D3hot
PMCSR PME Enable [8]Write 1 to allow device to send PME messages when in low-power state
PMCSR PME Status [15]RW1C — sticky flag that device sent a PME. Write 1 to clear.
PMCSR No Soft Reset [2]When 0: software must re-initialise device after D3hot→D0. When 1: context preserved.
PCIe Capability ID10h — mandatory for all PCIe functions
Device/Port Type [7:4]0000b=EP · 0001b=Legacy EP · 0100b=Root Port · 0101b=USP · 0110b=DSP
Device Control MPS [7:5]Max Payload Size. Must be ≤ Device Capabilities MPS Supported. 000b=128B … 101b=4KB.
Device Control FLR [15]Writing 1 triggers Function Level Reset if Device Capabilities FLR Capable is set. Completes ≤100ms.
Link Control ASPM [1:0]00b=off · 01b=L0s · 10b=L1 · 11b=L0s+L1. Both endpoints must agree.
Link Status Current Link Speed [3:0]0001b=2.5GT/s · 0010b=5GT/s · 0011b=8GT/s · 0100b=16GT/s · 0101b=32GT/s · 0110b=64GT/s
Link Status DL Link Active [12]1 = DLL active, TLPs can flow. The definitive “link is up” indicator.
MSI Capability ID05h — mandatory. Max 32 vectors per function, contiguous, one shared address.
MSI Enable sequenceSet Interrupt Disable → program address+data → set MME → set MSI Enable
MSI-X Capability ID11h — optional. Max 2048 vectors, independent address/data/mask per vector.
MSI-X Table BIR3-bit field identifying which BAR (0–5) holds the MSI-X table in MMIO
MSI-X per-vector maskBit 0 of Vector Control in each entry. PBA records pending masked interrupts.
INTx Interrupt DisableCommand bit 10. Must be 1 before enabling MSI or MSI-X.
Gen 6 additionsLink Speed encoding 0110b=64GT/s in Link Status · 64GT/s in Link Capabilities 2 · no format changes to any of the four mandatory structures.
Scroll to Top