estructura NVME_CONTROLLER_REGISTERS (nvme.h)

Especifica la asignación de registro para el controlador.

Sintaxis

typedef struct {
  NVME_CONTROLLER_CAPABILITIES             CAP;
  NVME_VERSION                             VS;
  ULONG                                    INTMS;
  ULONG                                    INTMC;
  NVME_CONTROLLER_CONFIGURATION            CC;
  ULONG                                    Reserved0;
  NVME_CONTROLLER_STATUS                   CSTS;
  NVME_NVM_SUBSYSTEM_RESET                 NSSR;
  NVME_ADMIN_QUEUE_ATTRIBUTES              AQA;
  NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS ASQ;
  NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS ACQ;
  NVME_CONTROLLER_MEMORY_BUFFER_LOCATION   CMBLOC;
  NVME_CONTROLLER_MEMORY_BUFFER_SIZE       CMBSZ;
  ULONG                                    Reserved2[944];
  ULONG                                    Reserved3[64];
  ULONG                                    Doorbells[0];
} NVME_CONTROLLER_REGISTERS, *PNVME_CONTROLLER_REGISTERS;

Miembros

CAP

Estructura de NVME_CONTROLLER_CAPABILITIES que indica las funcionalidades básicas del controlador para hospedar software.

El registro CAP de capacidades del controlador se inicia a las 00h de desplazamiento.

VS

estructura NVME_VERSION que indica la versión principal y secundaria de la especificación NVM Express que admite la implementación del controlador. Las versiones válidas de la especificación son: 1.0, 1.1 y 1.2.

El registro vs de versión comienza en Offset 08h.

INTMS

Indica si un vector de interrupción se enmascara para generar una interrupción o notificar una interrupción pendiente en la estructura de funcionalidad msi.

Cuando un valor de 1 se escribe en un bit en el campo, el vector de interrupción correspondiente se enmascara para generar una interrupción o notificar una interrupción pendiente en la estructura de funcionalidad msi. Escribir en 0 un bit no tiene ningún efecto.

Cuando se lee, este campo devuelve el valor de máscara de interrupción actual dentro del controlador (no el valor de este registro). Si un bit tiene un valor de , se enmascara el vector de 1interrupción correspondiente. Si un bit tiene un valor de 0, el vector de interrupción correspondiente no se enmascara.

Este registro se usa para enmascarar interrupciones cuando se usan interrupciones basadas en patillas, MSI de mensaje único o msi de varios mensajes. Cuando se usa MSI-X, la tabla de máscara de interrupción definida como parte de MSI-X se debe usar para enmascarar las interrupciones. El software host no debe acceder a este registro cuando está configurado para MSI-X; cualquier acceso cuando está configurado para MSI-X no está definido.

El registro INTMS del conjunto de máscaras de interrupción comienza en Offset 0Ch.

INTMC

Indica si se enmascara un vector de interrupción.

Cuando se escribe un valor de 1 en un bit en el campo, el vector de interrupción correspondiente se desmascara. Escribir en 0 un bit no tiene ningún efecto.

Cuando se lee, este campo devuelve el valor de máscara de interrupción actual dentro del controlador (no el valor de este registro). Si un bit tiene un valor de 1, se enmascara el vector de interrupción correspondiente, Si un bit tiene un valor de 0, el vector de interrupción correspondiente no se enmascara.

Este registro se usa para desenmascarar las interrupciones cuando se usan interrupciones basadas en patillas, MSI de mensaje único o msi de varios mensajes. Cuando se usa MSI-X, la tabla de máscara de interrupción definida como parte de MSI-X debe usarse para desenmascarar las interrupciones. El software host no debe acceder a este registro cuando está configurado para MSI-X; cualquier acceso cuando está configurado para MSI-X no está definido.

La máscara de interrupción borra el registro INTMS comienza en offset 10h.

CC

Estructura de NVME_CONTROLLER_CONFIGURATION que contiene opciones de configuración de lectura y escritura para el controlador.

El software host debe establecer los campos Mecanismo de arbitraje (AMS), Tamaño de página de memoria (MPS) y Conjunto de comandos (CSS) en NVME_CONTROLLER_CONFIGURATION en valores válidos antes de habilitar el controlador estableciendo el campo 1Habilitar (EN) en .

El registro CC de configuración del controlador comienza en desplazamiento 14h.

Reserved0

El desplazamiento 18h está reservado.

Todos los registros reservados y todos los bits reservados dentro de los registros son de solo lectura y se devuelven 0h cuando se leen, sin embargo, el software no debe confiar en 0h que se devuelva.

CSTS

Estructura NVME_CONTROLLER_STATUS que indica el estado del controlador.

El registro CSTS de estado del controlador se inicia en offset 1Ch.

NSSR

Estructura NVME_NVM_SUBSYSTEM_RESET que proporciona software host con la capacidad de iniciar un restablecimiento del subsistema NVM.

La compatibilidad con este registro opcional se indica mediante el estado del campo Compatible con el restablecimiento del subsistema NVM (NSSRS) en las funcionalidades del controlador. Si no se admite el registro, se reserva el intervalo de direcciones ocupado por el registro.

El registro de restablecimiento del subsistema NVM (opcional) comienza en Offset 20h.

AQA

Estructura NVME_ADMIN_QUEUE_ATTRIBUTES que especifica los atributos de cola de Administración para la cola de envío de Administración y Administración cola de finalización.

El registro AQA de atributos de cola de Administración comienza en Offset 24h.

ASQ

Estructura NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS que especifica la dirección de memoria base de la cola de envío de Administración.

El registro de dirección base de cola de envío Administración comienza a las 28h de desplazamiento.

ACQ

Estructura NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS que especifica la dirección de memoria base de la cola de finalización de Administración.

Administración registro de dirección base de cola de finalización comienza a las 30h de desplazamiento.

CMBLOC

Estructura NVME_CONTROLLER_MEMORY_BUFFER_LOCATION que especifica la ubicación del búfer de memoria del controlador.

Si el valor de CMBSZ es 0, este registro está reservado.

El registro de ubicación del búfer de memoria del controlador (opcional) comienza en desplazamiento 38h.

CMBSZ

Estructura NVME_CONTROLLER_MEMORY_BUFFER_SIZE que especifica el tamaño del búfer de memoria del controlador.

Si el controlador no admite la característica Búfer de memoria del controlador, este registro se borra en 0h.

El registro tamaño del búfer de memoria del controlador (opcional) comienza en offset 3Ch.

Reserved2[944]

Se reserva el desplazamiento de 40h a EFFh.

Todos los registros reservados y todos los bits reservados dentro de los registros son de solo lectura y se devuelven 0h cuando se leen, sin embargo, el software no debe confiar en 0h que se devuelva.

Reserved3[64]

El desplazamiento F00h a FFFh está reservado para registros específicos del conjunto de comandos.

Todos los registros reservados y todos los bits reservados dentro de los registros son de solo lectura y se devuelven 0h cuando se leen, sin embargo, el software no debe confiar en 0h que se devuelva.

Doorbells[0]

Especifica el inicio del primer registro doorbell. La cola de cola de envío Administración timbre de cola de envío.

Comentarios

Los registros del controlador se encuentran en los registros de dirección base inferior del registro de memoria (MLBAR)/Registros de memoria de direcciones base superiores (MUBAR) (PCI BAR0 y BAR1) que se asignan a un espacio de memoria que admite el acceso en orden y los anchos de acceso variable. Para muchas arquitecturas de equipo, especificar el espacio de memoria como no accesible genera este comportamiento.

El host no debe emitir accesos bloqueados y debe tener acceso a los registros en su ancho nativo o accesos alineados de 32 bits. La infracción de cualquiera de estos requisitos de host da como resultado un comportamiento indefinido.

El intervalo de direcciones específicas del proveedor se inicia después del último timbre admitido por el controlador y continúa hasta el final del intervalo admitido BAR0/1. El inicio del intervalo de direcciones específico del proveedor comienza en la misma ubicación y no depende del número de timbres asignados.

No se admiten los accesos que tienen como destino cualquier parte de dos o más registros.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10
Encabezado nvme.h