NVMe コントローラー・デバイス・ドライバー

目的

Non-Volatile Memory Express (NVMe) コントローラーをサポートします。

構文

<#include /usr/include/sys/nvme.h>
<#include /usr/include/sys/devinfo.h>

説明

/dev/nvmen スペシャル・ファイルは、NVMe コントローラー・デバイス・ドライバーへのインターフェースを提供します。

装置依存のサブルーチン

NVMe コントローラー・デバイス・ドライバーは、 openclose、および ioctl サブルーチンのみをサポートします。 read および write サブルーチンは、NVMe コントローラー・スペシャル・ファイルではサポートされません。

ioctl サブルーチン

IOCINFO 操作とともに、NVMe コントローラー・デバイス・ドライバーは NVMe コントローラー・デバイスの操作を定義します。

IOCINFO 操作は、 ioctl サブルーチンを使用するすべてのデバイス・ドライバーに対して次のように定義されます。
  • IOCINFO 操作は、 devinfo 構造体を戻します。 devinfo 構造体は、 /usr/include/sys/devinfo.h ヘッダー・ファイルで定義されます。 この構造体の装置タイプは DD_BUS で、サブタイプは DS_NVME です。 flags フィールドは使用されず、0 に設定されます。
  • devinfo 構造体には、バージョン情報や、最大イニシエーター・モードで許可されるデータ転送サイズなどの固有のデータが含まれます。 転送サイズはバイト単位で指定します。

NVMe コントローラーの ioctl 操作

NVMe コントローラー・デバイスでは、以下の 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_10dword_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 構造体に記載されています。