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 レジスタはオフセット 00h から始まります。
VS
コントローラーの実装でサポートされている NVM Express 仕様のメジャー バージョンとマイナー バージョンを示す NVME_VERSION 構造体。 仕様の有効なバージョンは、1.0、1.1、1.2 です。
バージョン VS レジスタはオフセット 08h から開始します。
INTMS
割り込みベクトルが、割り込みの生成からマスクされるか、MSI 機能構造で保留中の割り込みを報告するかを示します。
の 1
値がフィールド内のビットに書き込まれると、対応する割り込みベクトルは、割り込みの生成または MSI 機能構造体の保留中の割り込みの報告からマスクされます。
0
ビットに を書き込む場合、効果はありません。
読み取ると、このフィールドはコントローラー内の現在の割り込みマスク値を返します (このレジスタの値ではありません)。 ビットに の 1
値がある場合、対応する割り込みベクトルがマスクされます。 ビットの値が の 0
場合、対応する割り込みベクトルはマスクされません。
このレジスタは、ピンベースの割り込み、単一メッセージ MSI、または複数のメッセージ MSI を使用する場合に割り込みをマスクするために使用されます。 MSI-X を使用する場合、MSI-X の一部として定義されている割り込みマスク テーブルを使用して割り込みをマスクする必要があります。 MSI-X 用に構成されている場合、ホスト ソフトウェアはこのレジスタにアクセスしないでください。MSI-X 用に構成されている場合のアクセスは未定義です。
割り込みマスク セット INTMS レジスタはオフセット 0Ch から開始されます。
INTMC
割り込みベクトルがマスクされているかどうかを示します。
の 1
値が フィールド内のビットに書き込まれると、対応する割り込みベクトルがマスク解除されます。
0
ビットに を書き込む場合、効果はありません。
読み取ると、このフィールドはコントローラー内の現在の割り込みマスク値を返します (このレジスタの値ではありません)。 ビットに の 1
値がある場合、対応する割り込みベクトルがマスクされます。ビットの値が の 0
場合、対応する割り込みベクトルはマスクされません。
このレジスタは、ピンベースの割り込み、単一メッセージ MSI、または複数のメッセージ MSI を使用する場合に割り込みのマスクを解除するために使用されます。 MSI-X を使用する場合は、MSI-X の一部として定義されている割り込みマスク テーブルを使用して割り込みのマスクを解除する必要があります。 MSI-X 用に構成されている場合、ホスト ソフトウェアはこのレジスタにアクセスしないでください。MSI-X 用に構成されている場合のアクセスは未定義です。
割り込みマスククリア INTMS レジスタはオフセット 10h から開始します。
CC
コントローラーの読み取り/書き込み構成設定を含む NVME_CONTROLLER_CONFIGURATION 構造体。
ホスト ソフトウェアでは、コントローラーを有効にする前に、有効 (EN) フィールドを に設定して、NVME_CONTROLLER_CONFIGURATIONのアービトレーション メカニズム (AMS)、メモリ ページ サイズ (MPS)、およびコマンド セット (CSS) フィールドを有効な値に1
設定する必要があります。
コントローラー構成 CC レジスタはオフセット 14h から開始します。
Reserved0
オフセット 18h は予約されています。
予約済みレジスタとレジスタ内のすべての予約済みビットは読み取り専用であり、読み取り時に返 0h
されますが、ソフトウェアは返されることに依存 0h
しないでください。
CSTS
コントローラーの状態を示す NVME_CONTROLLER_STATUS 構造体。
コントローラーの状態 CSTS レジスタはオフセット 1Ch から開始されます。
NSSR
NVM サブシステム リセットを開始する機能をホスト ソフトウェアに提供する NVME_NVM_SUBSYSTEM_RESET 構造。
このオプション レジスタのサポートは、コントローラー機能の NVM サブシステム リセット サポート (NSSRS) フィールドの状態によって示されます。 レジスタがサポートされていない場合は、レジスタが占有するアドレス範囲が予約されます。
(省略可能) NVM サブシステム リセット レジスタはオフセット 20h から開始されます。
AQA
管理送信キューと管理完了キューの管理 キュー属性を指定するNVME_ADMIN_QUEUE_ATTRIBUTES構造体。
管理 キュー属性 AQA レジスタはオフセット 24h から始まります。
ASQ
管理送信キューの基本メモリ アドレスを指定するNVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS構造体。
管理送信キューのベース アドレス レジスタは、オフセット 28h から開始します。
ACQ
管理完了キューの基本メモリ アドレスを指定するNVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS構造体。
管理完了キューのベース アドレス レジスタはオフセット 30h から開始します。
CMBLOC
コントローラー メモリ バッファーの場所を指定する NVME_CONTROLLER_MEMORY_BUFFER_LOCATION 構造体。
CMBSZ の値が の場合、0
このレジスタは予約されています。
(省略可能) コントローラーのメモリ バッファーの位置レジスタは、オフセット 38h から開始します。
CMBSZ
コントローラー メモリ バッファーのサイズを指定する NVME_CONTROLLER_MEMORY_BUFFER_SIZE 構造体。
コントローラーがコントローラー メモリ バッファー機能をサポートしていない場合、このレジスタは に 0h
クリアされます。
(省略可能) コントローラーのメモリ バッファー サイズ レジスタは、オフセット 3Ch から開始します。
Reserved2[944]
EFFh へのオフセット 40h は予約されています。
予約済みレジスタとレジスタ内のすべての予約済みビットは読み取り専用であり、読み取り時に返 0h
されますが、ソフトウェアは返されることに依存 0h
しないでください。
Reserved3[64]
F00h から FFFh へのオフセットは、コマンド セット固有のレジスタ用に予約されています。
予約済みレジスタとレジスタ内のすべての予約済みビットは読み取り専用であり、読み取り時に返 0h
されますが、ソフトウェアは返されることに依存 0h
しないでください。
Doorbells[0]
最初の Doorbell レジスタの開始位置を指定します。 管理送信キュー Tail Doorbell。
注釈
コントローラー レジスタは、インオーダー アクセスと可変アクセス幅をサポートするメモリ空間にマップされるメモリ レジスタの下位ベース アドレス (MLBAR)/メモリ レジスタの上位ベース アドレス (MUBAR) レジスタ (PCI BAR0 および BAR1) にあります。 多くのコンピューター アーキテクチャでは、キャッシュ不可能としてメモリ領域を指定すると、この動作が生成されます。
ホストはロックされたアクセスを発行せず、ネイティブ幅またはアラインされた 32 ビット アクセスのレジスタにアクセスする必要があります。 これらのホスト要件のいずれかに違反すると、未定義の動作が発生します。
ベンダー固有のアドレス範囲は、コントローラーでサポートされている最後のドアベルの後から始まり、BAR0/1 でサポートされている範囲の末尾まで続きます。 ベンダー固有のアドレス範囲の開始は同じ場所から開始され、割り当てられたドアベルの数には依存しません。
2 つ以上のレジスタの任意の部分を対象とするアクセスはサポートされていません。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 |
Header | nvme.h |