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