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 , 1
o vetor de interrupção correspondente será mascarado, se um bit tiver um valor de , o vetor de 0
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 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 |
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de