Espacio de configuración PCI

El espacio de configuración PCI es el  espacio de direcciones para la configuración PCI , además de los espacios de direcciones de memoria y E/S típicos.

Una de las principales mejoras del bus PCI con respecto a otras arquitecturas de E/S es su mecanismo de configuración, que tiene un espacio de direcciones de configuración de 256 bytes que se puede abordar conociendo el número de bus PCI, el número de dispositivo y el número de función del dispositivo. Los primeros 64 bytes de 256 están estandarizados y el resto de los registros se pueden utilizar a discreción del fabricante del dispositivo.

Registros estandarizados

Los registros ID de proveedor e ID de dispositivo identifican el dispositivo y se conocen comúnmente como ID de PCI . El registro de ID de proveedor de dieciséis bits es emitido por PCI SIG . El registro de ID de dispositivo de dieciséis bits lo asigna el fabricante del dispositivo. Existe un proyecto para crear una base de datos de todos los valores de registro conocidos ID de proveedor e ID de dispositivo . (Ver lista de referencias ).

Las primeras 16 palabras dobles del espacio de direcciones de configuración (según PCI Local Bus Specification 2.2 ):

Dirección 31      ...      24 23      ...      16 15      ...       8 7       ...       0
0x00 Identificación del dispositivo Id. de proveedor
0x04 Estado dominio
0x08 código de clase identificación de revisión
0x0C BIST Tipo de encabezado Temporizador de latencia Tamaño de línea de caché
0x10 Registro de dirección base 0
0x14 Registro de dirección base 1
0x18 Registro de dirección base 2
0x1C Registro de dirección base 3
0x20 Registro de dirección base 4
0x24 Registro de dirección base 5
0x28 Puntero Cardbus CIS
0x2C ID del subsistema ID del proveedor del subsistema
0x30 Dirección base de ROM de expansión
0x34 Reservado
Puntero de capacidades
0x38 Reservado
0x3C Max_Lat Min_Gnt Pin de interrupción Línea de interrupción

Los registros DeviceID , VendorID , Status , Command , Class Code , Revision ID , Header Type son necesarios para todos los dispositivos PCI (para muchos tipos de dispositivos, también se requieren los registros de ID de subsistema e ID de proveedor de subsistema ).

Todos los demás registros son opcionales.

Inicialización automática de hardware con espacio de configuración

Para acceder al dispositivo a través del espacio de direcciones de la memoria o E/S, el software del sistema o el sistema operativo programa los registros de direcciones base ( inglés  Base Address Registers , también llamados BAR), enviando comandos de configuración al controlador PCI. Al comienzo del arranque del sistema, todos los dispositivos PCI están en un estado inactivo, no se les asignan direcciones mediante las cuales los controladores de dispositivos puedan comunicarse con ellos. El BIOS o el propio sistema operativo acceden a las ranuras PCI y configuran las BAR en el espacio de direcciones de configuración. Los valores BAR son válidos mientras el sistema esté encendido. Cuando se apaga la alimentación, los valores de estos registros se pierden hasta el siguiente arranque, durante el cual se repite el procedimiento de configuración. Dado que este proceso está completamente automatizado, el usuario de la computadora se libera de la difícil tarea de configurar nuevo hardware conectado al bus PCI (a diferencia, por ejemplo, del bus ISA , cuyas direcciones base de los dispositivos conectados tenían que configurarse con puentes o interruptores).

Cualquier dispositivo PCI que no sea puente (consulte Especificación de arquitectura de puente PCI a PCI. Revisión 1.1 ) puede tener hasta seis BAR, cada una de las cuales es responsable de un rango específico de direcciones en la memoria o espacio de direcciones de E/S. Además, el dispositivo puede tener firmware ).

Acceso PCI a través de puertos de E/S

Para trabajar con el bus PCI en PC-AT y máquinas compatibles, se asignan dos puertos principales.
0CF8h -W puerto de dirección Dirección
0CFCh RW puerto de datos Datos
Ambos puertos son de 32 bits.
El puerto de dirección tiene la siguiente estructura de 32 bits: El puerto de dirección especifica el bus, el dispositivo y la dirección de registro en el espacio de configuración del dispositivo. En términos generales, un dispositivo es un dispositivo físicamente presente. Una función es una unidad lógica. С  — indicador de acceso al dispositivo. Los dos bits menos significativos en el puerto de dirección siempre son 0. Cuando termine de trabajar con el dispositivo, restablezca la dirección a 0.

+---+---------+-------+----------+--------+---------------+-+-+
|31 |30     24|23   16|15      11|10     8|7             2|1|0|
+---+---------+-------+----------+--------+---------------+-+-+
| с | резерв  |шина   |устройство| функция|Индекс регистра|0|0|
+---+---------+-------+----------+--------+---------------+-+-+



Si se devuelve 0FFFFh en respuesta a una consulta de registro cero, entonces el dispositivo no existe. ID del proveedor (ID del fabricante): para Intel, es 8086h, pero no puede ser 0FFFFh.
Device ID (identificación del dispositivo): toma varios valores

ID de revisión (revision ID): indica el número de revisión del dispositivo, asignado por el fabricante.

Class Code (Código de clase): consta de tres partes

+---------------+--------------+---------------------+
|23           16|15           8|7                   0|
+---------------+--------------+---------------------+
|Base Class Code|Sub Class Code|Programming Interface|
+---------------+--------------+---------------------+

Código de clase base: clase base, abreviada como BCC.
Código de subclase: una subclase, abreviada como SCC.
Interfaz de programación: interfaz, abreviada como PI.

Tipo de encabezado: si el bit 7 es 1, el dispositivo contiene varias funciones.
Si el bit 6 es 0, entonces el encabezado es estándar. Encabezados estándar:
00 - consulte el estándar anterior.
01 - estándar para puente PCI a PCI
02 - estándar para puente CardBus.

Enlaces