Espacio de configuración PCI

El mapa estándar del encabezado del espacio de configuración PCI (Type 0 Header), especificando el desplazamiento (offset) y tamaño de los registros principales en los primeros 64 bytes:

Mapa del Espacio de Configuración PCI (Header Type 0)

:widths: 15 15 30 40 :header-rows: 1

Offset (Hex)

Tamaño

Registro PCI

Descripción

0x00

2 Bytes

PCI_VENDOR_ID

Identificador del fabricante de la tarjeta

0x02

2 Bytes

PCI_DEVICE_ID

Identificador del dispositivo PCI

0x04

2 Bytes

PCI_COMMAND

Registro de control de funciones de E/S y MMIO

0x06

2 Bytes

PCI_STATUS

Registro de estado de eventos del bus PCI

0x08

1 Byte

PCI_REVISION_ID

Revisión de silicio del dispositivo

0x09

3 Bytes

PCI_CLASS_PROG / DEVICE_CLASS

Código de clase de dispositivo y programación de interfaz

0x0C

1 Byte

PCI_CACHE_LINE_SIZE

Tamaño de la línea de caché del sistema

0x0D

1 Byte

PCI_LATENCY_TIMER

Temporizador de latencia del bus en ciclos de reloj

0x0E

1 Byte

PCI_HEADER_TYPE

Tipo de cabecera (0x00 para endpoint, 0x01 para puente PCI-to-PCI)

0x0F

1 Byte

PCI_BIST

Registro de autocomprobación de encendido (Built-In Self Test)

0x10 - 0x27

24 Bytes

PCI_BASE_ADDRESS_0..5

Registros BAR (Mapeo de memoria MMIO y direcciones I/O)

0x2C

2 Bytes

PCI_SUBSYSTEM_VENDOR_ID

Identificador del ensamblador de la tarjeta (OEM)

0x2E

2 Bytes

PCI_SUBSYSTEM_ID

Identificador del modelo específico asignado por el ensamblador

0x30

4 Bytes

PCI_ROM_ADDRESS

Base de la ROM de expansión (Option ROM)

0x34

1 Byte

PCI_CAPABILITY_LIST

Puntero a la lista enlazada de capacidades extendidas (MSI, PCIe, Power Mgmt)

0x3C

1 Byte

PCI_INTERRUPT_LINE

Línea del controlador de interrupción IRQ asignada

0x3D

1 Byte

PCI_INTERRUPT_PIN

Pin de interrupción física (INTA#, INTB#, INTC#, INTD#)


Relación con la lógica actual de hwbus_pci_config_read()

Actualmente, el callback read expone únicamente los primeros 4 bytes del mapa (0x00 a 0x03):

En *f_pos == 0: Lee PCI_VENDOR_ID (2 Bytes en 0x00).
En *f_pos == 2: Lee PCI_DEVICE_ID (2 Bytes en 0x02).

Si en el futuro se condsidera ampliar el alcance del driver de inspección para recorrer más registros de la tabla (por ejemplo, leer PCI_COMMAND o los BARs), la estructura de lectura basada en desplazamientos de f_pos se podrá mapear directamente contra estos offsets estandarizados del bus PCI.