estrutura NVME_CONTROLLER_REGISTERS (nvme.h)

Especifica o mapa de registro para o controlador.

Sintaxe

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;

Membros

CAP

Uma estrutura NVME_CONTROLLER_CAPABILITIES que indica os recursos básicos do controlador para hospedar o software.

O registro CAP de Funcionalidades do Controlador começa em Deslocamento 00h.

VS

uma estrutura NVME_VERSION que indica a versão principal e secundária da especificação do NVM Express à qual a implementação do controlador dá suporte. As versões válidas da especificação são: 1.0, 1.1 e 1.2.

O registro vs de versão começa em Deslocamento 08h.

INTMS

Indica se um vetor de interrupção está mascarado de gerar uma interrupção ou relatar uma interrupção pendente na Estrutura de Funcionalidades do MSI.

Quando um valor de 1 é gravado em um bit no campo, o vetor de interrupção correspondente é mascarado de gerar uma interrupção ou relatar uma interrupção pendente na Estrutura de Funcionalidade msi. Gravar um 0 em um bit não tem efeito.

Quando lido, esse campo retorna o valor atual da máscara de interrupção dentro do controlador (não o valor desse registro). Se um bit tiver um valor de um 1, o vetor de interrupção correspondente será mascarado. Se um bit tiver um valor de 0, o vetor de interrupção correspondente não será mascarado.

Esse registro é usado para mascarar interrupções ao usar interrupções baseadas em pin, MSI de mensagem única ou MSI de várias mensagens. Ao usar MSI-X, a tabela de máscara de interrupção definida como parte do MSI-X deve ser usada para mascarar interrupções. O software host não deve acessar esse registro quando ele estiver configurado para MSI-X; qualquer acesso quando configurado para MSI-X é indefinido.

O registro INTMS do Conjunto de Máscaras de Interrupção começa em Deslocamento 0Ch.

INTMC

Indica se um vetor de interrupção está mascarado.

Quando um valor de 1 é gravado em um bit no campo, o vetor de interrupção correspondente é desmascarado. Gravar um 0 em um bit não tem efeito.

Quando lido, esse campo retorna o valor atual da máscara de interrupção dentro do controlador (não o valor desse registro). Se um bit tiver um valor de , 1o vetor de interrupção correspondente será mascarado, se um bit tiver um valor de , o vetor de 0interrupção correspondente não será mascarado.

Esse registro é usado para desmascarar interrupções ao usar interrupções baseadas em pin, MSI de mensagem única ou msi de várias mensagens. Ao usar MSI-X, a tabela de máscara de interrupção definida como parte do MSI-X deve ser usada para desmascarar interrupções. O software host não deve acessar esse registro quando ele estiver configurado para MSI-X; qualquer acesso quando configurado para MSI-X é indefinido.

O registro intms de máscara de interrupção começa em Deslocamento 10h.

CC

Uma estrutura NVME_CONTROLLER_CONFIGURATION que contém configurações de leitura/gravação para o controlador.

O software host deve definir os campos AMS (Mecanismo de Arbitragem), MPS (Tamanho da Página de Memória) e Conjunto de Comandos (CSS) em NVME_CONTROLLER_CONFIGURATION como valores válidos antes de habilitar o controlador definindo o campo Habilitar (EN) como 1.

O registro cc de configuração do controlador começa em Deslocamento 14h.

Reserved0

O deslocamento de 18h é reservado.

Todos os registros reservados e todos os bits reservados dentro dos registros são somente leitura e retornam 0h quando lidos, no entanto, o software não deve depender 0h de ser retornado.

CSTS

Uma estrutura NVME_CONTROLLER_STATUS que indica status do controlador.

O registro CSTS de Status do Controlador começa em Deslocamento 1Ch.

NSSR

Uma estrutura NVME_NVM_SUBSYSTEM_RESET que fornece software host com a capacidade de iniciar uma redefinição de subsistema NVM.

O suporte para esse registro opcional é indicado pelo estado do campo NSSRS (Subsistema NVM Com suporte) nas Funcionalidades do Controlador. Se não houver suporte para o registro, o intervalo de endereços ocupado pelo registro será reservado.

O registro de Redefinição de Subsistema NVM (opcional) começa em Deslocamento 20h.

AQA

Uma estrutura NVME_ADMIN_QUEUE_ATTRIBUTES que especifica os atributos de fila de Administração para a fila de envio de Administração e Administração fila de conclusão.

O registro AQA de atributos de fila de Administração começa em Deslocamento 24h.

ASQ

Uma estrutura NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS que especifica o endereço de memória base da fila de envio de Administração.

O registro Administração endereço base da fila de envio começa em Deslocamento 28h.

ACQ

Uma estrutura NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS que especifica o endereço de memória base da Fila de Conclusão Administração.

Administração registro de endereço base da fila de conclusão começa em Deslocamento 30h.

CMBLOC

Uma estrutura NVME_CONTROLLER_MEMORY_BUFFER_LOCATION que especifica o local do Buffer de Memória do Controlador.

Se o valor de CMBSZ for 0, esse registro será reservado.

O registro (opcional) do Local do Buffer de Memória do Controlador começa em Deslocamento 38h.

CMBSZ

Uma estrutura NVME_CONTROLLER_MEMORY_BUFFER_SIZE que especifica o tamanho do Buffer de Memória do Controlador.

Se o controlador não der suporte ao recurso Buffer de Memória do Controlador, esse registro será limpo para 0h.

O registro (opcional) do Tamanho do Buffer de Memória do Controlador começa em Deslocamento 3Ch.

Reserved2[944]

Deslocamento de 40h para EFFh é reservado.

Todos os registros reservados e todos os bits reservados dentro dos registros são somente leitura e retornam 0h quando lidos, no entanto, o software não deve depender 0h de ser retornado.

Reserved3[64]

Deslocamento F00h para FFFh é reservado para registros específicos do Conjunto de Comandos.

Todos os registros reservados e todos os bits reservados dentro dos registros são somente leitura e retornam 0h quando lidos, no entanto, o software não deve depender 0h de ser retornado.

Doorbells[0]

Especifica o início do primeiro registro doorbell. O Administração Fila de Envio Tail Doorbell.

Comentários

Os registros do controlador estão localizados nos registros MLBAR (Endereço Base Inferior do Registro de Memória)/Endereço Base Superior do Registro de Memória (MUBAR) (PCI BAR0 e BAR1) mapeados para um espaço de memória que dá suporte ao acesso em ordem e às larguras de acesso variável. Para muitas arquiteturas de computador, especificar o espaço de memória como incontestável produz esse comportamento.

O host não deve emitir acessos bloqueados e deve acessar registros em sua largura nativa ou acessos alinhados de 32 bits. A violação de qualquer um desses requisitos de host resulta em um comportamento indefinido.

O intervalo de endereços Específico do Fornecedor começa após a última campainha com suporte do controlador e continua até o final do intervalo com suporte de BAR0/1. O início do intervalo de endereços Específico do Fornecedor começa no mesmo local e não depende do número de campainhas alocadas.

Não há suporte para acessos direcionados a qualquer parte de dois ou mais registros.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10
Cabeçalho nvme.h