NVME_CONTROLLER_REGISTERS 結構 (nvme.h)

指定控制器的緩存器對應。

語法

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;

成員

CAP

NVME_CONTROLLER_CAPABILITIES 結構,指出裝載軟體之控制器的基本功能。

控制器功能 CAP 快取器從 Offset 00h 開始。

VS

NVME_VERSION 結構,表示控制器實作支援之 NVM Express 規格的主要和次要版本。 規格的有效版本包括:1.0、1.1 和 1.2。

版本 VS 快取器從 Offset 08h 開始。

INTMS

指出中斷向量是否會遮罩,使其無法產生中斷,或報告 MSI 功能結構中的擱置中斷。

當的值 1 寫入欄位中的某個位時,對應的中斷向量會遮罩,使其無法產生中斷,或報告 MSI 功能結構中的擱置中斷。 0將寫入位沒有任何作用。

讀取時,此欄位會傳回控制器內的目前中斷遮罩值, (不是這個緩存器的值) 。 如果位具有的值 1,則對應的插斷向量會遮罩。 如果位的值為 0,則對應的插斷向量不會遮罩。

此快取器可用來遮罩使用針腳型中斷、單一訊息 MSI 或多個訊息 MSI 時的中斷。 使用 MSI-X 時,應該使用定義為 MSI-X 一部分的中斷遮罩表來遮罩中斷。 當主機軟體設定為 MSI-X 時,不應存取此緩存器;未定義 MSI-X 設定時的任何存取。

中斷遮罩集 INTMS 快取器從 Offset 0Ch 開始。

INTMC

指出中斷向量是否已遮罩。

當的值 1 寫入欄位時,對應的插斷向量會取消遮罩。 0將寫入位沒有任何作用。

讀取時,此欄位會傳回控制器內的目前中斷遮罩值, (不是這個緩存器的值) 。 如果位具有的值 1,則對應的插斷向量會遮罩,如果某個位的值 0為 ,則對應的插斷向量不會遮罩。

此快取器可用來在使用釘選式中斷、單一訊息 MSI 或多個訊息 MSI 時解除遮罩中斷。 使用 MSI-X 時,應該使用定義為 MSI-X 一部分的中斷遮罩數據表來解除遮罩中斷。 當主機軟體設定為 MSI-X 時,不應存取此緩存器;未定義 MSI-X 設定時的任何存取。

中斷遮罩清除 INTMS 快取器從 Offset 10h 開始。

CC

包含控制器讀取/寫入組態設定 的NVME_CONTROLLER_CONFIGURATION 結構。

主機軟體必須先將AMS (AMS) 、記憶體頁面大小 (MPS) 和命令集 (CSS) 字段設定為有效值,再將 [啟用 (EN) NVME_CONTROLLER_CONFIGURATION] 字段1設定為 ,才能啟用控制器。

控制器設定 CC 快取器從 Offset 14h 開始。

Reserved0

位移 18 小時保留。

所有保留緩存器和緩存器內的所有保留位都是唯讀的,但在讀取時會傳回,不過,軟體不應依賴0h傳回0h

CSTS

表示控制器狀態 的NVME_CONTROLLER_STATUS 結構。

控制器狀態 CSTS 快取器從 Offset 1Ch 開始。

NSSR

提供主機軟體的 NVME_NVM_SUBSYSTEM_RESET 結構,能夠起始 NVM 子系統重設。

此選擇性註冊的支援會以控制器功能中的 NSSRS (NSSRS) 欄位的狀態來指出。 如果不支援快取器,則會保留緩存器所佔用的位址範圍。

(選擇性) NVM 子系統重設緩存器從 Offset 20h 開始。

AQA

NVME_ADMIN_QUEUE_ATTRIBUTES 結構,指定 管理員 提交佇列和 管理員 完成佇列的 管理員 佇列屬性。

管理員 佇列屬性 AQA 快取器從 Offset 24h 開始。

ASQ

NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS 結構,指定 管理員 提交佇列的基底記憶體位址。

管理員 提交佇列基位址緩存器從 Offset 28h 開始。

ACQ

NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS 結構,指定 管理員 完成佇列的基底記憶體位址。

管理員 完成佇列基位址緩存器從 Offset 30h 開始。

CMBLOC

指定控制器記憶體緩衝區位置 的NVME_CONTROLLER_MEMORY_BUFFER_LOCATION 結構。

如果 CMBSZ 的值是 0,則會保留此快取器。

(選擇性) 控制器記憶體緩衝區位置緩存器會在 Offset 38h 開始。

CMBSZ

指定控制器記憶體緩衝區大小的 NVME_CONTROLLER_MEMORY_BUFFER_SIZE 結構。

如果控制器不支援控制器記憶體緩衝區功能,則會將此快取器清除為 0h

(選擇性) 控制器記憶體緩衝區大小緩存器會從 Offset 3Ch 開始。

Reserved2[944]

會保留 40h 到 EFFh 的位移。

所有保留緩存器和緩存器內的所有保留位都是唯讀的,但在讀取時會傳回,不過,軟體不應依賴0h傳回0h

Reserved3[64]

位移 F00h 至 FFFh 會保留給命令集特定緩存器。

所有保留緩存器和緩存器內的所有保留位都是唯讀的,但在讀取時會傳回,不過,軟體不應依賴0h傳回0h

Doorbells[0]

指定第一個 Doorbell 快取器開始。 管理員 提交佇列 Tail Doorbell

備註

控制器快取器位於記憶體緩存器下層基位址 (MLBAR) /Memory Register Upper Base Address (MUBAR) registers (PCI BAR0 和 BAR1) 對應至支援順序存取和可變存取寬度的記憶體空間。 對於許多計算機架構,將記憶體空間指定為無法快取會產生此行為。

主機不得發出鎖定的存取權,而且必須存取其原生寬度或對齊 32 位存取的緩存器。 違反上述任一主機需求會導致未定義的行為。

廠商特定位址範圍會在控制器支援的最後一個門鈴之後開始,並繼續到 BAR0/1 支援範圍的結尾。 廠商特定位址範圍的開頭會從相同的位置開始,而且不相依於配置門鈴的數目。

不支援以兩個或多個緩存器的任何部分為目標的存取。

規格需求

需求
最低支援的用戶端 Windows 10
標頭 nvme.h