Partilhar via


estrutura NVME_CONTROLLER_REGISTERS (nvme.h)

Especifica o mapa de registro do 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 software.

As funcionalidades do controlador o registro cap começa em Deslocamento 00h.

VS

uma estrutura NVME_VERSION que indica a versão principal e secundária da especificação 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.

A versão registro do VS começa em Deslocamento 08h.

INTMS

Indica se um vetor de interrupção é mascarado por 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 Funcionalidades do MSI. Escrever 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 deste registro). Se um bit tiver um valor de 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 de MSI-X deve ser usada para mascarar interrupções. O software host não deve acessar esse registro quando ele está configurado para MSI-X; qualquer acesso quando configurado para MSI-X é indefinido.

O conjunto de máscaras de interrupção registro INTMS começa no 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. Escrever 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 deste registro). Se um bit tiver um valor de 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 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 de MSI-X deve ser usada para desmascarar interrupções. O software host não deve acessar esse registro quando ele está configurado para MSI-X; qualquer acesso quando configurado para MSI-X é indefinido.

O registro de Desmarcar 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 Mecanismo de Arbitragem (AMS), Tamanho da Página de Memória (MPS) e Conjunto de Comandos (CSS) em NVME_CONTROLLER_CONFIGURATION para valores válidos antes de habilitar o controlador definindo o campo Habilitar (EN) como 1.

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

Reserved0

O deslocamento 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 de 0h ser retornado.

CSTS

Uma estrutura NVME_CONTROLLER_STATUS que indica o status do controlador.

O registro de do CSTS status do controlador começa no 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 Redefinição de Subsistema NVM Compatível (NSSRS) no de Recursos do Controlador de. 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 Administradores para a Fila de Envio do Administrador e a Fila de Conclusão do Administrador.

Os atributos de fila de administrador registro de AQA começam 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 do Administrador.

O registro de Endereço Base da Fila de Envio de Administrador 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 do Administrador.

O registro de endereço base da fila de conclusão do administrador 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 do Local do Buffer de Memória do Controlador (Opcional) 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á liberado para 0h.

O registro tamanho do buffer de memória do controlador (opcional) começa em Deslocamento 3Ch.

Reserved2[944]

O 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 de 0h 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 de 0h ser retornado.

Doorbells[0]

Especifica o início do primeiro registro doorbell. O da Porta da Cauda da Fila de Envio do Administrador.

Observações

Os registros do controlador estão localizados nos registros MLBAR (Endereço Base Inferior) do Registro de Memória/MUBAR (Endereço Base Superior do Registro de Memória) (PCI BAR0 e BAR1) mapeados para um espaço de memória que dá suporte ao acesso em ordem e larguras de acesso variável. Para muitas arquiteturas de computador, especificar o espaço de memória como inacessí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 é iniciado após a última campainha com suporte pelo 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
de cliente com suporte mínimo Windows 10
cabeçalho nvme.h

Consulte também