NVMe コントローラー・デバイス・ドライバー
目的
Non-Volatile Memory Express (NVMe) コントローラーをサポートします。
構文
<#include /usr/include/sys/nvme.h>
<#include /usr/include/sys/devinfo.h>
説明
/dev/nvmen スペシャル・ファイルは、NVMe コントローラー・デバイス・ドライバーへのインターフェースを提供します。
装置依存のサブルーチン
NVMe コントローラー・デバイス・ドライバーは、 open、 close、および ioctl サブルーチンのみをサポートします。 read および write サブルーチンは、NVMe コントローラー・スペシャル・ファイルではサポートされません。
ioctl サブルーチン
IOCINFO 操作とともに、NVMe コントローラー・デバイス・ドライバーは NVMe コントローラー・デバイスの操作を定義します。
ioctl サブルーチンを使用するすべてのデバイス・ドライバーに対して次のように定義されます。- IOCINFO 操作は、
devinfo構造体を戻します。devinfo構造体は、 /usr/include/sys/devinfo.h ヘッダー・ファイルで定義されます。 この構造体の装置タイプは DD_BUS で、サブタイプは DS_NVME です。flagsフィールドは使用されず、0 に設定されます。 devinfo構造体には、バージョン情報や、最大イニシエーター・モードで許可されるデータ転送サイズなどの固有のデータが含まれます。 転送サイズはバイト単位で指定します。
NVMe コントローラーの ioctl 操作
ioctl 操作がサポートされます。- NVME パスSTHRU
- passthru コマンドを NVMe コントローラー・デバイスに送信するためのオプションを提供します。
NVME_PASSTHRU操作の arg パラメーターは、 /usr/include/sys/nvme.h ヘッダー・ファイルに定義されているNVME_PASSTHRU構造体のアドレスです。注: admin コマンドはアダプター・デバイスにのみ送信でき、 NVM コマンドはストレージ (hdisk) デバイスにのみ送信できます。 そうしないと、コマンドの結果として、データ破損などの未定義の動作が発生する可能性があります。 すべての NVMe コマンドの命令コードは、コマンド・セット内でのみ固有であり、命令コード値は、異なるコマンド・セット内の異なる操作に使用できます。NVMe コントローラー・デバイスに対して NVMe passthru コマンドを発行する場合、特定の
path_idを指定できます。 passthru コマンドに特定のpath_idを使用する場合は、flagsフィールドの NVME_PASS_PASSTHRU フラグとpath_idフィールドで使用するpath_idの両方を構成する必要があります。ホストが使用するエンディアン形式で
dword_10をdword_15データに書き込むことができます。この形式では、NVMe 仕様に従って、(左端の) ビット 31 が最上位ビットで、(右端の) ビット 0 が最下位ビットになります。 例えば、 0xAC ブロックを読み取って FUA を設定するには、passthru構造内のdword_10を 0x400000ABに設定します。passthru コマンドを使用して転送されるデータ内のすべてのフィールドを バイト反転 する必要があります。 例えば、Identify Namespace によって返されるデータから名前空間サイズ (NSZE) を読み取るには、データ・バッファーのバイト 0 から 7 が バイト反転でなければなりません。
のpassthruコマンドが失敗した場合、
ioctlサブルーチンの戻り-1 。 戻り値-1ドライバーがコントローラーにコマンドを送信できなかったか、タイムアウトが発生する前にコントローラーが応答しなかったことを示します。errnoフラグがEINVAL値に設定されている場合、 resp.status パラメーターには、無効なフィールドを示すコードが含まれます。passthru コマンドが正常に実行されるのは、
ioctlサブルーチンが 0 を戻し、 resp.status パラメーターが 0 を含んでいる場合です。 passthru コマンドは、読み取り操作または書き込み操作を実行することによって別のユーザーによって開始されたコマンドと並行して実行されます。 - NVME_CNTL
- NVMe コントローラー・デバイス・ドライバーに制御要求を送信するオプションを提供します。 NVME_CNTL 操作の arg パラメーターは、 /usr/include/sys/nvme.h ヘッダー・ファイルに定義されている
nvme_cntl構造体のアドレスです。 NVMe コントローラー・デバイス・ドライバーに対してサポートされる制御操作のタイプは、nvme_cntl構造体に記載されています。