structure NVME_CONTROLLER_REGISTERS (nvme.h)
Spécifie le mappage de registre pour le contrôleur.
Syntaxe
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;
Membres
CAP
Une structure NVME_CONTROLLER_CAPABILITIES qui indique les fonctionnalités de base du contrôleur pour héberger le logiciel.
Le registre CAP des fonctionnalités du contrôleur commence à décalage 00h.
VS
une structure NVME_VERSION qui indique la version principale et mineure de la spécification NVM Express prise en charge par l’implémentation du contrôleur. Les versions valides de la spécification sont : 1.0, 1.1 et 1.2.
Le registre Vs version démarre à décalage 08h.
INTMS
Indique si un vecteur d’interruption est masqué pour ne pas générer une interruption ou signaler une interruption en attente dans la structure de capacité MSI.
Lorsqu’une valeur de 1
est écrite sur un bit dans le champ, le vecteur d’interruption correspondant est masqué contre la génération d’une interruption ou le signalement d’une interruption en attente dans la structure de capacité MSI. L’écriture d’un 0
à un peu n’a aucun effet.
Lors de la lecture, ce champ retourne la valeur actuelle du masque d’interruption dans le contrôleur (et non la valeur de ce registre). Si un bit a la valeur d’un 1
, le vecteur d’interruption correspondant est masqué. Si un bit a la valeur 0
, le vecteur d’interruption correspondant n’est pas masqué.
Ce registre est utilisé pour masquer les interruptions lors de l’utilisation d’interruptions basées sur des broches, d’un MSI de message unique ou de plusieurs MSI de message. Lors de l’utilisation de MSI-X, la table de masque d’interruption définie dans le cadre de MSI-X doit être utilisée pour masquer les interruptions. Le logiciel hôte ne doit pas accéder à ce registre lorsqu’il est configuré pour MSI-X ; tout accès configuré pour MSI-X n’est pas défini.
Le registre INTMS du jeu de masque d’interruption commence à Offset 0Ch.
INTMC
Indique si un vecteur d’interruption est masqué.
Lorsqu’une valeur de 1
est écrite sur un bit dans le champ, le vecteur d’interruption correspondant est masqué. L’écriture d’un 0
à un peu n’a aucun effet.
Lors de la lecture, ce champ retourne la valeur actuelle du masque d’interruption dans le contrôleur (et non la valeur de ce registre). Si un bit a la valeur d’un 1
, le vecteur d’interruption correspondant est masqué. Si un bit a la valeur 0
, le vecteur d’interruption correspondant n’est pas masqué.
Ce registre est utilisé pour démasquer les interruptions lors de l’utilisation d’interruptions basées sur des broches, d’un MSI de message unique ou de PLUSIEURS MESSAGES MSI. Lors de l’utilisation de MSI-X, la table de masque d’interruption définie dans le cadre de MSI-X doit être utilisée pour démasquer les interruptions. Le logiciel hôte ne doit pas accéder à ce registre lorsqu’il est configuré pour MSI-X ; tout accès configuré pour MSI-X n’est pas défini.
Le registre INTMS effacer le masque d’interruption commence à Décalage 10h.
CC
Structure NVME_CONTROLLER_CONFIGURATION qui contient les paramètres de configuration en lecture/écriture du contrôleur.
Le logiciel hôte doit définir les champs Mécanisme d’arbitrage (AMS), Taille de page de mémoire (MPS) et Jeu de commandes (CSS) dans NVME_CONTROLLER_CONFIGURATION sur des valeurs valides avant d’activer le contrôleur en définissant le champ Activer (EN) sur 1
.
Le registre CC de configuration du contrôleur commence à Décalage 14h.
Reserved0
Le décalage de 18h est réservé.
Tous les registres réservés et tous les bits réservés dans les registres sont en lecture seule et retournés 0h
lors de la lecture. Toutefois, le logiciel ne doit pas s’appuyer sur le 0h
retour.
CSTS
Structure NVME_CONTROLLER_STATUS qui indique l’status du contrôleur.
Le registre CSTS d’état du contrôleur commence à Offset 1Ch.
NSSR
Une structure NVME_NVM_SUBSYSTEM_RESET qui fournit au logiciel hôte la possibilité d’initier une réinitialisation du sous-système NVM.
La prise en charge de ce registre facultatif est indiquée par l’état du champ NSSRS (NVM Subsystem Reset Supported) dans les fonctionnalités du contrôleur. Si le registre n’est pas pris en charge, la plage d’adresses occupée par le registre est réservée.
Le registre de réinitialisation du sous-système NVM (facultatif) démarre à décalage 20h.
AQA
Structure NVME_ADMIN_QUEUE_ATTRIBUTES qui spécifie les attributs de file d’attente Administration pour la file d’attente de soumission Administration et la file d’attente d’achèvement Administration.
Le registre AQA des attributs de file d’attente Administration commence à Offset 24h.
ASQ
Structure NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS qui spécifie l’adresse mémoire de base de la file d’attente de soumission Administration.
Le registre d’adresse de base de la file d’attente de soumission de Administration commence à décalage 28h.
ACQ
Structure NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS qui spécifie l’adresse mémoire de base de la file d’attente d’achèvement Administration.
Administration registre d’adresse de base de la file d’attente d’achèvement commence à décalage 30h.
CMBLOC
Structure NVME_CONTROLLER_MEMORY_BUFFER_LOCATION qui spécifie l’emplacement de la mémoire tampon du contrôleur.
Si la valeur de CMBSZ est 0
, ce registre est réservé.
Le registre (facultatif) emplacement de mémoire tampon du contrôleur commence à Décalage 38h.
CMBSZ
Une structure NVME_CONTROLLER_MEMORY_BUFFER_SIZE qui spécifie la taille de la mémoire tampon du contrôleur.
Si le contrôleur ne prend pas en charge la fonctionnalité Mémoire tampon du contrôleur, ce registre est effacé en 0h
.
Le registre (facultatif) de taille de mémoire tampon du contrôleur commence à Offset 3Ch.
Reserved2[944]
Le décalage de 40h vers EFFh est réservé.
Tous les registres réservés et tous les bits réservés dans les registres sont en lecture seule et retournés 0h
lors de la lecture. Toutefois, le logiciel ne doit pas s’appuyer sur le 0h
retour.
Reserved3[64]
Le décalage F00h vers FFFh est réservé aux registres spécifiques du jeu de commandes.
Tous les registres réservés et tous les bits réservés dans les registres sont en lecture seule et retournés 0h
lors de la lecture. Toutefois, le logiciel ne doit pas s’appuyer sur le 0h
retour.
Doorbells[0]
Spécifie le début du premier registre Doorbell. Sonnette de queue de la file d’attente Administration soumission.
Remarques
Les registres de contrôleur se trouvent dans les registres d’adresse de base inférieure (MLBAR)/MUBAR (Memory Register Memory Register Base Address) (PCI BAR0 et BAR1) mappés à un espace mémoire qui prend en charge l’accès dans l’ordre et les largeurs d’accès variables. Pour de nombreuses architectures d’ordinateurs, la spécification de l’espace mémoire comme non mis en cache génère ce comportement.
L’hôte ne doit pas émettre d’accès verrouillés et doit accéder aux registres dans leur largeur native ou dans des accès 32 bits alignés. La violation de l’une de ces exigences de l’hôte entraîne un comportement non défini.
La plage d’adresses spécifique au fournisseur commence après la dernière sonnette prise en charge par le contrôleur et continue jusqu’à la fin de la plage prise en charge par BAR0/1. Le début de la plage d’adresses propre au fournisseur commence au même emplacement et ne dépend pas du nombre de sonnettes allouées.
Les accès qui ciblent une partie quelconque de deux registres ou plus ne sont pas pris en charge.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 10 |
En-tête | nvme.h |
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour