Freigeben über


NVME_CONTROLLER_REGISTERS Struktur (nvme.h)

Gibt die Registerzuordnung für den Controller an.

Syntax

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;

Angehörige

CAP

Eine NVME_CONTROLLER_CAPABILITIES Struktur, die die grundlegenden Funktionen des Controllers zum Hosten von Software angibt.

Die Controllerfunktionen CAP Register beginnt bei Offset 00h.

VS

eine NVME_VERSION Struktur, die die Haupt- und Nebenversion der NVM Express-Spezifikation angibt, die von der Controllerimplementierung unterstützt wird. Gültige Versionen der Spezifikation sind: 1.0, 1.1 und 1.2.

Die Version VS Register beginnt bei Offset 08h.

INTMS

Gibt an, ob ein Interruptvektor maskiert wird, um einen Interrupt zu generieren oder einen ausstehenden Interrupt in der MSI-Funktionsstruktur zu melden.

Wenn ein Wert von 1 in ein Bit im Feld geschrieben wird, wird der entsprechende Interruptvektor maskiert, um einen Interrupt zu generieren oder einen ausstehenden Interrupt in der MSI-Funktionsstruktur zu melden. Das Schreiben einer 0 auf ein bisschen hat keine Auswirkung.

Beim Lesen gibt dieses Feld den aktuellen Interruptformatwert innerhalb des Controllers zurück (nicht den Wert dieses Registers). Wenn ein Bit einen Wert eines 1hat, wird der entsprechende Interruptvektor maskiert. Wenn ein Bit einen Wert von 0hat, wird der entsprechende Unterbrechungsvektor nicht maskiert.

Dieses Register wird verwendet, um Unterbrechungen zu maskieren, wenn pinbasierte Interrupts, einzelne Nachrichten-MSI oder mehrere Nachrichten-MSI verwendet werden. Bei Verwendung von MSI-X sollte die als Teil von MSI-X definierte Interruptmaskentabelle zum Maskieren von Unterbrechungen verwendet werden. Hostsoftware sollte nicht auf dieses Register zugreifen, wenn sie für MSI-X konfiguriert ist; jeder Zugriff, wenn für MSI-X konfiguriert ist, ist nicht definiert.

Der Interrupt Mask Set INTMS Register beginnt bei Offset 0Ch.

INTMC

Gibt an, ob ein Unterbrechungsvektor maskiert ist.

Wenn ein Wert von 1 in ein Bit im Feld geschrieben wird, wird der entsprechende Interruptvektor entmasket. Das Schreiben einer 0 auf ein bisschen hat keine Auswirkung.

Beim Lesen gibt dieses Feld den aktuellen Interruptformatwert innerhalb des Controllers zurück (nicht den Wert dieses Registers). Wenn ein Bit einen Wert einer 1hat, wird der entsprechende Interruptvektor maskiert, Wenn ein Bit einen Wert von 0hat, wird der entsprechende Interruptvektor nicht maskiert.

Dieses Register wird verwendet, um Unterbrechungen beim Verwenden von pinbasierten Interrupts, einzelner Nachrichten-MSI oder mehreren Nachrichten-MSI-Nachrichten aufzuheben. Bei Verwendung von MSI-X sollte die als Teil MSI-X definierte Interruptmaskentabelle verwendet werden, um Unterbrechungen zu entmasken. Hostsoftware sollte nicht auf dieses Register zugreifen, wenn sie für MSI-X konfiguriert ist; jeder Zugriff, wenn für MSI-X konfiguriert ist, ist nicht definiert.

Die Interruptmaske clear INTMS Register beginnt bei Offset 10h.

CC

Eine NVME_CONTROLLER_CONFIGURATION Struktur, die Konfigurationseinstellungen für Lese-/Schreibzugriff für den Controller enthält.

Hostsoftware muss den Vermittlungsmechanismus (AMS), Memory Page Size (MPS) und Befehlssatz (CSS-) felder in NVME_CONTROLLER_CONFIGURATION auf gültige Werte festlegen, bevor der Controller aktiviert wird, indem das Feld "Enable (EN) auf 1festgelegt wird.

Die Controllerkonfiguration CC Registrierung beginnt bei Offset 14h.

Reserved0

Offset 18h ist reserviert.

Alle reservierten Register und alle reservierten Bits innerhalb von Registern sind schreibgeschützt und geben 0h zurück, wenn sie gelesen werden, software sollte sich jedoch nicht darauf verlassen, 0h zurückgegeben werden.

CSTS

Eine NVME_CONTROLLER_STATUS Struktur, die den Controllerstatus angibt.

Der Controllerstatus CSTS Register beginnt bei Offset 1Ch.

NSSR

Eine NVME_NVM_SUBSYSTEM_RESET Struktur, die Hostsoftware mit der Funktion zum Initiieren einer NVM-Subsystemzurücksetzung bereitstellt.

Die Unterstützung für dieses optionale Register wird durch den Status des NVM Subsystem Reset Supported (NSSRS) Feld im Controller Capabilitiesangegeben. Wenn das Register nicht unterstützt wird, ist der vom Register belegte Adressbereich reserviert.

Das (Optionale) NVM Subsystem Reset-Register beginnt bei Offset 20h.

AQA

Eine NVME_ADMIN_QUEUE_ATTRIBUTES Struktur, die die Administratorwarteschlangenattribute für die Administratorübermittlungswarteschlange und die Vervollständigungswarteschlange des Administrators angibt.

Die Attribute der Administratorwarteschlange AQA Registrierung beginnt bei Offset 24h.

ASQ

Eine NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS Struktur, die die Basisspeicheradresse der Administratorübermittlungswarteschlange angibt.

Das Basisadressenregister für die Administratorübermittlungswarteschlange beginnt bei Offset 28h.

ACQ

Eine NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS Struktur, die die Basisspeicheradresse der Administratorabschlusswarteschlange angibt.

Das Basisadressenregister für die Administratorabschlusswarteschlange beginnt bei Offset 30h.

CMBLOC

Eine NVME_CONTROLLER_MEMORY_BUFFER_LOCATION Struktur, die die Position des Controllerspeicherpuffers angibt.

Wenn der Wert von CMBSZ-0ist, ist dieses Register reserviert.

Das Register für den Speicherpuffer des Controllers beginnt bei Offset 38h.

CMBSZ

Eine NVME_CONTROLLER_MEMORY_BUFFER_SIZE Struktur, die die Größe des Controllerspeicherpuffers angibt.

Wenn der Controller die Controllerspeicherpufferfunktion nicht unterstützt, wird dieses Register für 0hgelöscht.

Das Register für die Speicherpuffergröße des Controllers beginnt bei Offset 3Ch.

Reserved2[944]

Offset 40h bis EFFh ist reserviert.

Alle reservierten Register und alle reservierten Bits innerhalb von Registern sind schreibgeschützt und geben 0h zurück, wenn sie gelesen werden, software sollte sich jedoch nicht darauf verlassen, 0h zurückgegeben werden.

Reserved3[64]

Offset F00h auf FFFh ist für "Command Set"-spezifische Register reserviert.

Alle reservierten Register und alle reservierten Bits innerhalb von Registern sind schreibgeschützt und geben 0h zurück, wenn sie gelesen werden, software sollte sich jedoch nicht darauf verlassen, 0h zurückgegeben werden.

Doorbells[0]

Gibt den Anfang des ersten Doorbell-Registers an. Der Administrator Übermittlungswarteschlange Tail Doorbell.

Bemerkungen

Controllerregister befinden sich in der Memory Register Lower Base Address (MLBAR)/Memory Register Upper Base Address (MUBAR) Register (PCI BAR0 und BAR1), die einem Speicherbereich zugeordnet sind, der in der Reihenfolge zugriff und variable Zugriffsbreiten unterstützt. Für viele Computerarchitekturen erzeugt die Angabe des Speicherplatzes als nicht zwischenspeicherbar dieses Verhalten.

Der Host darf keine gesperrten Zugriffe ausstellen und muss auf Register in ihrer systemeigenen Breite oder ausgerichteten 32-Bit-Zugriffen zugreifen. Die Verletzung einer dieser Hostanforderungen führt zu einem nicht definierten Verhalten.

Der Anbieterspezifische Adressbereich beginnt nach der letzten von dem Controller unterstützten Türglocke und fährt am Ende des unterstützten BAR0/1-Bereichs fort. Der Anfang des Anbieterspezifischen Adressbereichs beginnt an demselben Ort und hängt nicht von der Anzahl der zugeteilten Türteln ab.

Zugriffe, die auf einen Teil von mindestens zwei Registern abzielen, werden nicht unterstützt.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 10
Header- nvme.h

Siehe auch