struttura NVME_CONTROLLER_REGISTERS (nvme.h)

Specifica la mappa di registrazione per il controller.

Sintassi

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;

Members

CAP

Struttura NVME_CONTROLLER_CAPABILITIES che indica le funzionalità di base del controller per ospitare il software.

Il registro CAP funzionalità controller inizia all'offset 00h.

VS

struttura NVME_VERSION che indica la versione principale e secondaria della specifica NVM Express supportata dall'implementazione del controller. Le versioni valide della specifica sono: 1.0, 1.1 e 1.2.

Il registro di Visual Studio versione inizia all'offset 08h.

INTMS

Indica se un vettore di interrupt viene mascherato dalla generazione di un interrupt o dalla segnalazione di un interrupt in sospeso nella struttura di funzionalità MSI.

Quando un valore di 1 viene scritto in un bit nel campo, il vettore di interrupt corrispondente viene mascherato dalla generazione di un interrupt o dalla segnalazione di un interrupt in sospeso nella struttura di funzionalità MSI. La scrittura di un oggetto 0 in un po ' non ha alcun effetto.

Quando si legge, questo campo restituisce il valore della maschera di interruzione corrente all'interno del controller (non il valore di questo registro). Se un bit ha un valore di 1, il vettore di interrupt corrispondente viene mascherato. Se un bit ha un valore pari 0a , il vettore di interrupt corrispondente non viene mascherato.

Questo registro viene usato per mascherare gli interrupt quando si usano interrupt basati su pin, MSI a messaggio singolo o più messaggi MSI. Quando si usa MSI-X, la tabella di interrupt mask definita come parte di MSI-X deve essere usata per mascherare gli interrupt. Il software host non deve accedere a questo registro quando è configurato per MSI-X; qualsiasi accesso quando configurato per MSI-X non è definito.

Il registro Interrupt Mask Set INTMS inizia a Offset 0Ch.

INTMC

Indica se un vettore di interrupt è mascherato.

Quando un valore di 1 viene scritto in un bit nel campo, il vettore di interrupt corrispondente viene mascherato. La scrittura di un oggetto 0 in un po ' non ha alcun effetto.

Quando si legge, questo campo restituisce il valore della maschera di interruzione corrente all'interno del controller (non il valore di questo registro). Se un bit ha un valore di 1, il vettore di interrupt corrispondente viene mascherato, se un bit ha un valore pari 0a , il vettore di interrupt corrispondente non viene mascherato.

Questo registro viene usato per annullare il mascheramento degli interrupt quando si usano interrupt basati su pin, msi a messaggio singolo o msi di più messaggi. Quando si usa MSI-X, la tabella di interrupt mask definita come parte di MSI-X deve essere usata per annullare il mascheramento degli interrupt. Il software host non deve accedere a questo registro quando è configurato per MSI-X; qualsiasi accesso quando configurato per MSI-X non è definito.

Il registro Interrupt Mask Clear INTMS inizia all'offset 10h.

CC

Struttura NVME_CONTROLLER_CONFIGURATION che contiene le impostazioni di configurazione di lettura/scrittura per il controller.

Il software host deve impostare i campi Arbitration Mechanism (AMS), Memory Page Size (MPS) e Command Set (CSS) in NVME_CONTROLLER_CONFIGURATION su valori validi prima di abilitare il controller impostando il campo Abilita (EN) su 1.

Il registro CC configurazione controller inizia all'offset 14h.

Reserved0

Offset 18h è riservato.

Tutti i registri riservati e tutti i bit riservati all'interno dei registri sono di sola lettura e restituiscono 0h quando in lettura, tuttavia, il software non deve basarsi sulla 0h restituzione.

CSTS

Struttura NVME_CONTROLLER_STATUS che indica lo stato del controller.

Il registro CSTS stato controller inizia all'offset 1Ch.

NSSR

Struttura NVME_NVM_SUBSYSTEM_RESET che fornisce al software host la possibilità di avviare una reimpostazione del sottosistema NVM.

Il supporto per questo registro facoltativo è indicato dallo stato del campo NSSRS supportato dal sottosistema NVM nelle funzionalità del controller. Se il registro non è supportato, l'intervallo di indirizzi occupato dal registro è riservato.

Il registro di reimpostazione del sottosistema NVM (facoltativo) inizia all'offset 20h.

AQA

Struttura NVME_ADMIN_QUEUE_ATTRIBUTES che specifica gli attributi della coda di Amministrazione per la coda di invio Amministrazione e Amministrazione coda di completamento.

Il registro AQA degli attributi della coda Amministrazione inizia all'offset 24h.

ASQ

Struttura NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS che specifica l'indirizzo di memoria di base della coda di invio Amministrazione.

Il registro dell'indirizzo di base della coda di invio Amministrazione inizia all'offset 28h.

ACQ

Struttura NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS che specifica l'indirizzo di memoria di base della coda di completamento Amministrazione.

Amministrazione registro dell'indirizzo di base della coda di completamento inizia all'offset 30h.

CMBLOC

Struttura NVME_CONTROLLER_MEMORY_BUFFER_LOCATION che specifica la posizione del buffer di memoria del controller.

Se il valore di CMBSZ è 0, questo registro è riservato.

Il registro del buffer di memoria del controller (facoltativo) inizia all'offset 38h.

CMBSZ

Struttura NVME_CONTROLLER_MEMORY_BUFFER_SIZE che specifica le dimensioni del buffer di memoria del controller.

Se il controller non supporta la funzionalità Buffer memoria controller, questo registro viene cancellato in 0h.

Il registro delle dimensioni del buffer di memoria del controller (facoltativo) inizia a Offset 3Ch.

Reserved2[944]

Offset da 40h a EFFh riservato.

Tutti i registri riservati e tutti i bit riservati all'interno dei registri sono di sola lettura e restituiscono 0h quando in lettura, tuttavia, il software non deve basarsi sulla 0h restituzione.

Reserved3[64]

Offset F00h a FFFh è riservato per registri specifici del set di comandi.

Tutti i registri riservati e tutti i bit riservati all'interno dei registri sono di sola lettura e restituiscono 0h quando in lettura, tuttavia, il software non deve basarsi sulla 0h restituzione.

Doorbells[0]

Specifica l'inizio del primo registro doorbell. Campanello coda coda di invio Amministrazione.

Commenti

I registri dei controller si trovano nei registri DI REGISTRAZIONE MEMORIA INFERIORE (MLBAR)/Registro di memoria (MUBAR) registri (PCI BAR0 e BAR1) mappati a uno spazio di memoria che supporta l'accesso in ordine e la larghezza di accesso variabile. Per molte architetture di computer, specificando lo spazio di memoria come non modificabile, questo comportamento viene generato.

L'host non deve rilasciare accessi bloccati e deve accedere ai registri nella larghezza nativa o negli accessi a 32 bit allineati. La violazione di uno di questi requisiti host comporta un comportamento non definito.

L'intervallo di indirizzi Specifico fornitore inizia dopo l'ultimo campanello supportato dal controller e continua fino alla fine dell'intervallo supportato BAR0/1. L'inizio dell'intervallo di indirizzi specifico fornitore inizia nella stessa posizione e non dipende dal numero di campanelli allocati.

Gli accessi destinati a qualsiasi parte di due o più registri non sono supportati.

Requisiti

Requisito Valore
Client minimo supportato Windows 10
Intestazione nvme.h