マシン・デバイス・ドライバー

マシン・デバイス・ドライバーは、システム構成および信頼性、可用性、保守性 (RAS) サブシステム用のプラットフォーム固有のハードウェアへのインターフェースを提供します。 マシン・デバイス・ドライバーは、ユーザー・モードからこのハードウェアにアクセスするために、 特殊ファイル /dev/nvram および /dev/bus0 ... /dev/busN をサポートします。ここで、 N はバス番号です。 /dev/nvram スペシャル・ファイル は、エラー情報およびシステム・ブート情報を保管または検索する目的で、特殊な不揮発性ランダム・アクセス・メモリー (RAM) へのアクセスを提供します。 /dev/busN スペシャル・ファイルは、システム構成および診断の目的で入出力バスへのアクセスを提供します。 このデバイス・ドライバーとその関連特殊ファイルの存在と使用はプラットフォーム固有であり、汎用アプリケーションで使用してはなりません。

プログラムには、特殊ファイル /dev/nvram または /dev/busNをオープンするための適切な特権が必要です。 また、共通ハードウェア参照プラットフォーム (CHRP) バス特殊ファイル /dev/pciNまたは /dev/isaNを開くための適切な特権も必要です。

ドライバーの初期化および終了

マシン・デバイス・ドライバーには、特殊な初期化要件および終了要件はありません。 このドライバーは、オペレーティング・システム・カーネルに静的にバインドされ、カーネルの初期化時に初期化されます。 このデバイス・ドライバーは終了をサポートしていないため、アンロードできません。

/dev/nvram スペシャル・ファイル・サポート

サブルーチンのオープンとクローズ

マシン・デバイス・ドライバーは、 /dev/nvram スペシャル・ファイルをマルチプレクス文字スペシャル・ファイルとしてサポートします。 このスペシャル・ファイルおよび NVRAM のサポートは、システム構成および RAS サブシステムをサポートするために、このハードウェア・プラットフォーム上でのみ提供されます。 これらのサブシステムは、アクセスするデータ域を指定して、チャネル名 nを持つ /dev/nvram/n スペシャル・ファイルをオープンします。 例外は、チャネルが指定されていない /dev/nvram ファイルです。このファイルは、一般的な NVRAM 制御機能およびフロント・パネル上の LED 表示へのアクセスを提供します。

ベース という特殊なチャネル名を使用して、ブート・レコードの一部として保管されている基本カスタマイズ情報を読み取ることができます。 この情報は、最初に セーブベース コマンドによってディスクにコピーされ、ブート時にのみドライバーによってコピーされます。 ベース カスタマイズ情報は、一度だけ読み取ることができます。 /dev/nvram/base ファイルが初めてクローズされると、基本カスタマイズ情報を含むバッファーが解放されます。 後続のオープンでは、 ENOENT (E) エラー・コードが返されます。

読み取りおよび書き込みサブルーチン

書き込み サブルーチンはサポートされておらず、 ENODEV (E) エラー・コードを返します。 読み取り サブルーチンは、 ベース チャネルが正常にオープンされた後でのみサポートされます。 読み取り サブルーチンは、指定されたチャネルに関連付けられたデータ域からデータを転送します。 転送は、以下によって指定されたオフセット (チャネルのデータ域内) から開始されます。offsetサブルーチン呼び出しで使用されるファイル・ポインターに関連したフィールド。

読み取り サブルーチンでは、転送カウントに達する前にデータ域の終わりに到達すると、データ域の終わりに達する前に読み取られたバイト数が戻されます。 読み取り サブルーチンがデータ域の終わりから始まる場合は、ゼロ・バイトが読み取られます。 読み取り サブルーチンがデータ域の終わりの後で開始すると、ドライバーによって ENXIO (X) エラー・コードが戻されます。

シーク サブルーチンを使用すると、後続の 読み取り 呼び出しで使用される開始データ域オフセットを変更できます。

ioctl 操作

/dev/nvram/ 特殊ファイルが正常にオープンした後、マシン・デバイス・ドライバーに対して以下の ioctl 操作を発行できます。

操作 説明
IOCINFO マシン・デバイス・ドライバー情報を呼び出し側の デバイス情報 構造 ( 引数 パラメーターによって指し示される) に戻します。 この構造体は、 /usr/include/sys/devinfo.h ファイルに定義されています。 このデバイス・ドライバーの装置タイプは D_PSEU (D)です。
ミオGETKEY キーロックの状況を戻します。 引数 パラメーターは、 マシンの入出力 構造体を指す必要があります。 このmd_dataフィールドは整数を指している必要があります。このフィールドには、戻り時のキーロックの状況が含まれます。
注: すべてのプラットフォームに、ソフトウェアが読み取ることができる物理的なキーロックがあるわけではありません。 これらのプラットフォームの場合、状況はブート時に設定されます。
MIOGETPS (M) 電源状況を戻します。 引数 パラメーターは、 マシンの入出力 構造体を指す必要があります。 このmd_dataフィールドは整数を指している必要があります。このフィールドには、戻り時の電源状況が含まれます。
注: すべてのプラットフォームが電源状況を提供するわけではありません。
IOIPLCB (MIOIPLCB) ブート制御ブロックの内容を戻します。 引数 パラメーターは、 マシンの入出力 構造体を指すように設定されます。この構造体は、ブート制御ブロックが置かれるデータ域を記述します。 この制御ブロックのフォーマットは /usr/include/sys/iplcb.h ファイルに指定され、 mach_dd_io 構造体は /usr/include/sys/mdio.h ファイルに定義されます。 この Ioctl 命令は、 マシンの入出力 構造内の以下のフィールドを使用します。
md_data
少なくとも、バッファー内の値のサイズを指します。md_size設定します。
md_size
システムが指すバッファーのサイズ (バイト単位) を指定します。md_dataこのフィールドは、ブート制御ブロックから戻されるバイト数です。
md_addr
データが取得されるブート制御ブロックへのオフセットを指定します。
この制御ブロック内の 注: 領域はプラットフォームに依存します。
MIONVGET (M) NVRAM アドレスからデータを読み取り、呼び出し元によって提供されるバッファーにデータを返します。 この操作は、NVRAM の ROS 領域を読み取る場合に役立ちます。 この領域を定義する構造体は、 /usr/include/sys/mdio.h ファイルにあります。

このioctl操作の使用は、PowerPCReference Platform または Common Hardware Reference Platform に準拠したシステムではサポートされておらず、AIX® 4.2.1以降ではEINVALエラー・コードで操作に失敗します。

MIONVLED (M) 引数 パラメーターで検出された値をシステムのフロント・パネル LED ディスプレイに書き込みます。 このパネルでは、3 桁の数字が使用可能であり、 引数 パラメーター値の範囲は 0 から 16 進数の FFF です。 LED コードの説明については、 /usr/include/sys/mdio.h ファイルを参照してください。
注: すべてのプラットフォームに LED が備わっているわけではありません。
MIONVPUT (T) 呼び出し元によって提供されるバッファーから NVRAM アドレスにデータを書き込みます。 この操作は、NVRAM の ROS 領域を更新するためにのみ、およびシステム・コマンドによってのみ使用されます。 NVRAM の他の領域でこの操作を使用すると、予測不能な結果が生じる可能性があります。 指定された NVRAM アドレスが ROS 領域内にある場合は、ROS 領域の新しい巡回冗長コード (CRC) が生成されます。

この ioctl 操作の使用は、 PowerPC Reference Platform または Common Hardware Reference Platform に準拠し、操作が EINVAL エラー・コードで失敗する原因となるシステムではサポートされていません。

システムの ioctl 操作

以下の 4 つのioctl操作は、POWER® プロセッサベースのアーキテクチャでのみ使用できます。 他のシステムで使用された場合、または無効なオフセット・アドレス、サイズ、またはスロット番号が指定された場合、これらの操作は エインヴァル エラー・コードを返します。

これらの Ioctl 操作は、ユーザー・スペースまたはカーネル・スペースから ( fp_ioctl カーネル・サービスを使用して) 呼び出すことができますが、プロセス環境でのみ使用可能です。

Ioctl 引数は、 マシンの入出力 構造体へのポインターでなければなりません。

ロックは、バス・スロット構成レジスターへのアクセスをシリアライズするために取得されます。

MIOVPDGET

この Ioctl 操作により、VPD/ROM アドレス・スペースへの読み取りアクセスが可能になります。

以下の構造体メンバーを指定する必要があります。

構造体メンバー (structure member) 説明
ulong md_addr 読み取りを開始するフィーチャーまたは VPD アドレス・スペースへのオフセットを指定します。
ulong md_size 転送するバイト数を指定します。
CHAR md_data データのユーザー・バッファーへのポインターを指定します。
INT md_sla スロット番号を指定します (バス・スロット構成の選択)。
INT md_incr バイト・アクセスが必要 (MV バイト)。

読み取りは基底アドレス 0xFFA00000から始まります。 読み取り用の開始アドレスを取得するために、オフセットが基底アドレスに追加されます。

ワード増分値を取得するには、選択したバス・スロットの バッファー情報 構造体を使用します。 この値は、データを読み取るときに正しいアドレッシングを行います。

MIOCFGGET

この Ioctl 操作により、設計済み構成レジスターへの読み取りアクセスが許可されます。

以下の構造体メンバーを指定する必要があります。

構造体メンバー (structure member) 説明
ulong md_addr 構成レジスター・アドレス・スペースへのオフセットを指定します。
ulong md_size 値 1 を指定します。
CHAR md_data データのユーザー・バッファーへのポインターを指定します。
INT md_sla スロット番号を指定します (バス・スロット構成の選択)。
INT md_incr バイト・アクセスまたはワード・アクセス (MV バイトMV_SHORT (短)、または MV ワード) が必要です。

読み取り用のアドレスを取得するために、基底アドレス 0xFF200000 がオフセットに追加されます。

ミオCFGPUT

この Ioctl 操作により、設計済み構成レジスターへの書き込みアクセスが可能になります。

以下の構造体メンバーを指定する必要があります。

構造体メンバー (structure member) 説明
ulong md_addr 構成レジスター・アドレス・スペースへのオフセットを指定します。
ulong md_size 値 1 を指定します。
CHAR md_data 書き込むデータのユーザー・バッファーへのポインターを指定します。
INT md_sla スロット番号を指定します (バス・スロット構成の選択)。
INT md_incr バイト・アクセスまたはワード・アクセス (MV バイトMV_SHORT (短)、または MV ワード) が必要です。

読み取り用のアドレスを取得するために、基底アドレス 0xFF200000 がオフセットに追加されます。

ミオリセット

この Ioctl 操作により、設計済みバス・スロット・リセット・レジスターへのアクセスが可能になります。

以下の構造体メンバーを指定する必要があります。

構造体メンバー (structure member) 説明
ulong md_addr リセット保留時間 (ナノ秒) を指定します。
ulong md_size 使用されません。
CHAR md_data 使用されません。
INT md_sla スロット番号を指定します (バス・スロット構成の選択)。
INT md_incr 使用されません。

指定されたバス・スロットに対応するバス・スロット・リセット・レジスター・ビットが 0 に設定されます。 指定された遅延の後、ビットは 1 に戻され、制御は呼び出し側プログラムに戻されます。

リセット保留時間 0 が渡されると、呼び出しプロセスに戻るときにバス・スロットはリセットされたままになります。

PowerPC® Reference Platform Specification および Common Hardware Reference Platform 用の ioctl 操作

以下の 4 つの ioctl 操作は、 PowerPC Reference Platform および Common Hardware Reference Platform でのみ使用できます。

ミオゲード

グローバル環境域内の変数名をスキャンし、検出された場合は、ヌル終了ストリングが呼び出し元に戻されます。 グローバル変数の形式は、"variablename=「 返されるストリングの形式は、"variablename=string「 指定されたグローバル変数が「* =」の場合、グローバル環境域内のすべての変数ストリングが戻されます。

以下の構造体メンバーを指定する必要があります。

構造体メンバー (structure member) 説明
ulong md_addr 最後の非ヌル文字として等号で終了するヌル終了のグローバル変数ストリングへのポインター。
ulong md_size データ・バッファー内のバイト数。
INT md_incr 使用されません。
CHAR md_data データ・バッファーへのポインター。
INT md_sla 使用されません。
ulong md_length これは、NULL 終止符を含む、戻されたグローバル変数ストリングの長さへのポインターです。md_length非ゼロです。

ミオゲアUPD

指定されたグローバル変数が存在しない場合は、グローバル環境域に追加されます。 指定された変数がグローバル環境域に存在する場合は、サイズの差分を調整した後で、新しい内容によって古い内容が置き換えられます。 さらに、下位アドレスに向かって移動された情報は、元の領域がゼロになります。 変数名と等号の後にストリングがない場合、指定された変数は削除されます。 削除する変数が見つからない場合は、成功の戻りコードが返されます。 新しい情報は NVRAMに書き込まれます。 さらに、 NVRAM 操作のヘッダーが更新され、グローバル環境域の更新時刻が組み込まれ、CRC 値が再計算されます。

以下の構造体メンバーを指定する必要があります。

構造体メンバー (structure member) 説明
ulong md_addr ヌル終了のグローバル変数ストリングへのポインター。
ウロン md_size 使用されません。
INT md_incr 使用されません。
CHAR md_data 使用されません。
INT md_sla 使用されません。
ulong md_length これは、更新後にグローバル環境域に残されるスペースの量を指すポインターです。 これは、領域のサイズから、すべてのグローバル変数ストリングの長さからしきい値を引いた値として計算されます。

ミオゲAST

指定されたしきい値は、行われた更新がグローバル環境域のサイズからしきい値を引いた値を超えないように設定されます。 MDIO 構造体の代わりに、整数値を使用してしきい値を指定します。 このしきい値は、IPL が実行されても保持されません。

ミオゲアルダ

グローバル環境域の属性は、呼び出し側によって指定されたデータ域に戻されます。 gea_attrib 構造体が mdio.hに追加されました。 これには以下の情報が含まれます。

構造体メンバー (structure member) 説明
long gea_length NVRAMのグローバル環境域のバイト数。
long gea_used グローバル環境域で使用されるバイト数。
long gea_thresh グローバル環境域のしきい値。
ulong md_addr 使用されません。
ulong md_size データ・バッファーのサイズ。 これは、(Gea_attrib) のサイズ以上でなければなりません。
INT md_incr 使用されません。
文字 md_data Gea_attrib 構造体をコピーするバッファーのアドレス。
INT md_sla 使用されません。
ウロン md_length 使用されません。

VPARTLEN (長さ)

CHRP NVRAM 区画の長さは、呼び出し側によって指定されたデータ域に戻されます。 以下の構造体メンバーを指定する必要があります。

構造体メンバー (structure member) 説明
ulong md_addr パーティション・シグニチャーを指定します。
ウロン *md_length 区画の名前へのポインターを指定します。
INT md_incr 使用されません。
ウロン md_size 戻されるパーティション長のデータ域を指定します。
CHAR *md_data 使用されません。
INT md_sla 使用されません。

VPARTRD の定義

VPARTRD の定義 は、CHRP NVRAM 区画に対して読み取りアクションを実行します。 以下の構造体メンバーを指定する必要があります。

構造体メンバー (structure member) 説明
ulong md_addr パーティション・シグニチャーを指定します。
ウロン *md_length 区画の名前へのポインターを指定します。
INT md_incr 区画への開始オフセットを指定します。
ウロン md_size 読み取るバイト数を指定します。
CHAR *md_data データがコピーされるユーザー・バッファーを指すポインターを指定します。
INT md_sla 使用されません。

VPARTUPD (D)

VPARTUPD (D) は、CHRP NVRAM 区画に対して書き込みアクションを実行します。 以下の構造体メンバーを指定する必要があります。

構造体メンバー (structure member) 説明
ulong md_addr パーティション・シグニチャーを指定します。
ウロン *md_length 区画の名前へのポインターを指定します。
INT md_incr 区画への開始オフセットを指定します。
ウロン md_size 読み取るバイト数を指定します。
CHAR *md_data 書き込むデータのユーザー・バッファーへのポインターを指定します。
INT md_sla 使用されません。

エラー・コード

/dev/nvram/n 特殊ファイルを使用してマシン・デバイス・ドライバーにアクセスすると、以下のエラー条件が返される場合があります。

エラー状態 説明
EACCES 読み取りアクセス専用としてオープンされたファイルに対して書き込みが要求されました。
ENOENT 最初のクローズ後に、 /dev/nvram/base のオープンが試行されました。
EFAULT 呼び出し側によって指定されたバッファーが、 読み取り書き込み、または Ioctl サブルーチン呼び出しでは無効でした。
EINVAL 無効な Ioctl 操作が発行されました。
ENXIO チャネルによって指定されたデータ域の終わりを超えて読み取りが試みられました。
ENODEV 書き込みが試行されました。
ENOMEM ユーザー提供のバッファーが要求されましたが、要求されたデータには小さすぎるか、要求を完了するために十分なメモリーを割り振ることができません。

バス特殊ファイル・サポート

すべてのモデルに少なくとも 1 つのバスがあります。 非 CHRP システムの場合、名前の形式は /dev/busNです。 CHRP システムの形式は、 /dev/pciN および /dev/isaNです。

サブルーチンのオープンとクローズ

マシン・デバイス・ドライバーは、キャラクター・スペシャル・ファイルとしてバス・スペシャル・ファイルをサポートします。 これらの特殊ファイル、および入出力バスとコントローラーへのアクセスのサポートは、システム構成および診断サブシステムを排他的にサポートするために、このハードウェア・プラットフォームで提供されます。 構成サブシステムは、マシン・デバイス・ドライバーを介して入出力バスおよびコントローラーにアクセスし、システムの入出力構成を判別します。 また、このドライバーを使用して、適切なシステム操作の必要に応じて入出力制御装置および入出力装置を構成することもできます。 システム診断テストが、デバイス自体のデバイス・ドライバーによって提供される診断機能を介してデバイスにアクセスできない場合、マシン・デバイス・ドライバーを使用して、さらに障害分離を試みることができます。

読み取りおよび書き込みサブルーチン

読み取り および 書き込み サブルーチンは、バス特殊ファイルを介してマシン・デバイス・ドライバーによってサポートされず、呼び出された場合は、 ENOENT (E) 戻りコードを エラー番号 グローバル変数に返します。

ioctl 操作

バス Ioctl 操作により、システム入出力コントローラーまたはシステム入出力バスと呼び出し側提供のデータ域との間でデータを転送することができます。 これらの Ioctl 命令は マシンの入出力 構造体を使用するため、 Ioctl サブルーチンの 引数 パラメーターはそのような構造体を指す必要があります。 バス・アドレス、呼び出し元のバッファーへのポインター、および転送の数と長さは、すべて マシンの入出力 構造体で指定されます。 mach_dd_io 構造体は、 /usr/include/sys/mdio.h ファイルに定義され、以下の情報を提供します。

  • このmd_addr入出力制御装置または入出力バス・アドレスが入っています。
  • このmd_dataフィールドは、少なくとも値のサイズをバッファーに指し示します。md_size設定します。
  • このmd_sizeフィールドには、転送される項目の数が含まれます。
  • このmd_incrフィールドは、転送される項目の長さを指定します。 MV バイトMV_SHORT (短)、または MV ワードに設定する必要があります。

バス・スペシャル・ファイルが正常にオープンされた後、マシン・デバイス・ドライバーに対して以下のコマンドを発行できます。

コマンド 説明
IOCINFO 引数 パラメーターで指定された呼び出し側の デバイス情報 構造体に、マシン・デバイス・ドライバー情報を戻します。 この構造体は、 /usr/include/sys/devinfo.h ファイルに定義されています。 このデバイス・ドライバーの装置タイプは D_PSEU (D)です。
MIOBUSGET バス入出力スペースからデータを読み取り、それを呼び出し側提供のバッファーに戻します。
MIOBUSPUT (M) 呼び出し側のバッファーに提供されたデータをバス入出力スペースに書き込みます。
MIOMEMGET (IOMEMGET) バス・メモリー・スペースからデータを読み取り、それを呼び出し側提供のバッファーに戻します。
MIOMEMPUT 呼び出し側提供のバッファーで提供されるデータをバス・メモリー・スペースに書き込みます。
ミオCFGET PCI バス構成スペースからデータを読み取り、それを呼び出し側提供のバッファーに戻します。 マシンの入出力 構造化フィールド md_sla には、アクセスする装置の装置番号と機能番号が含まれている必要があります。
ミオCFPUT 呼び出し側のバッファーに提供されたデータを PCI バス構成スペースに書き込みます。 マシンの入出力 構造化フィールド md_sla には、アクセスする装置の装置番号と機能番号が含まれている必要があります。

エラー・コード

項目 説明
EFAULT 呼び出し側によって指定されたバッファーが、 Ioctl 呼び出しでは無効でした。
EIO 要求されたデータ転送でリカバリー不能な入出力エラーが発生しました。
ENOMEM データ転送で使用するためにマシン・デバイス・ドライバーがメモリーを割り振ることはできません。

ファイル

項目 説明
/dev/pciN 入出力バス (CHRP および AIX オペレーティング・システム) へのアクセスを提供します。
/dev/isaN 入出力バス (CHRP および AIX オペレーティング・システム) へのアクセスを提供します。
/dev/nvram プラットフォーム固有の不揮発性 RAM へのアクセスを提供します。
/dev/nvram/base ブート・レコードの一部として保管されている基本カスタマイズ情報への読み取りアクセスを許可します。