ddread デバイス・ドライバー・エントリー・ポイント

目的

キャラクター型デバイスからデータを読み込みます。

構文

#include <sys/device.h>
#include <sys/types.h>

int ddread ( devno,  uiop,  chan,  ext)
dev_t devno;
struct uio *uiop;
chan_t chan;
int ext;

パラメーター

項目 説明
devno メジャー・デバイス番号とマイナー・デバイス番号を指定します。
UIOP 書き込まれるデータ域 (複数可) を記述する UIO 構造体を指します。
Chan チャネル番号を指定します。
エクステンド 拡張パラメーターを指定します。

説明

プログラムが 読み取り または Readx サブルーチン呼び出しを発行するか、 fp_rwuio カーネル・サービスが使用されると、カーネルは DDREAD エントリー・ポイントを呼び出します。

このエントリー・ポイントは、データ転送操作を指定するために使用される変数を提供する UIO 構造体へのポインターを受け取ります。

文字デバイス・ドライバーは、 UREADC および ウィオモヴェ カーネル・サービスを使用して、 読み取り サブルーチン呼び出し時にユーザー・バッファー域との間でデータを転送することができます。 これらのサービスは、 UIO 構造体へのポインターを受け取り、転送されたバイト数だけ構造体のフィールドを更新します。 データ転送によって変更できない UIO 構造内のフィールドは、以下のフィールドのみです。uio_fmodeおよびuio_segflgフィールド

ほとんどのデバイスの場合、 DDREAD ルーチンは要求をデバイス・ハンドラーに送信し、終了するまで待機します。 待機は、 スリープ カーネル・サービスを呼び出すことによって行うことができます。 このサービスは、ドライバーおよびドライバーを呼び出したプロセスを中断し、指定されたイベントが発生するまで他のプロセスの実行を許可します。

入出力操作が完了すると、装置は通常割り込みを発行し、デバイス・ドライバーの割り込みハンドラーが呼び出されます。 次に、割り込みハンドラーは、待機イベントを指定して ウェイクアップ カーネル・サービスを呼び出します。これにより、 DDREAD ルーチンを再開することができます。

このuio_residフィールドには、最初は装置から読み取る合計バイト数が含まれています。 デバイス・ドライバーがサポートしている場合は、uio_offsetフィールドは、読み取りを開始する装置上のバイト・オフセットを示します。

このuio_offsetフィールドは 64 ビット整数 (offset_t)これにより、ファイル・システムは、2 ギガバイトを超える論理オフセットを持つデバイス・ドライバーの読み取り & 書き込みエントリー・ポイントに入出力要求を送信することができます。 デバイス・ドライバーは、オフセットを 32 ビット変数に割り当てるか、または 32 ビット変数をオーバーフローさせる計算に使用することによって、重要度が失われないように注意する必要があります。

エラーが発生しない場合は、uio_resid要求されたすべてのバイトが読み取られたことを示すには、 DDREAD ルーチンからの戻り時にフィールドが 0 になっている必要があります。 エラーが発生した場合、このフィールドには、エラーが発生したときに読み取られる残りのバイト数が含まれている必要があります。

読み取り要求が有効な装置オフセットで開始されたが、装置の機能の終わりを超えて拡張された場合には、エラーは戻されません。 However, theuio_residフィールドは、転送されなかったバイト数を示す必要があります。 読み取りが装置の機能の終わりから開始される場合には, エラーは戻されません。 However, theuio_residフィールドを変更してはなりません。これは、転送されたバイトがないことを示します。 読み取りがデバイスの機能の終わりを超えて開始された場合は、以下を変更せずに ENXIO (X) 戻りコードを返す必要があります。uio_resid設定します。

DDREAD エントリー・ポイントがブロック・デバイスへのロー入出力用に提供されている場合、このルーチンは通常、 ウフィシオ カーネル・サービスを使用して、要求をブロック入出力要求に変換します。

実行環境

DDREAD ルーチンは、プロセス環境でのみ実行されます。 これは、ドライバーで定義された専用ロック・ワードとともにロッキング・カーネル・サービスを使用して、必要なデータ構造のシリアライゼーションを提供する必要があります。

戻り値

DDREAD エントリー・ポイントは、ゼロ以外の戻りコードを戻すことによって、呼び出し側にエラー状態を示すことができます。 これにより、サブルーチン呼び出しは次の値を返します。-1 。 また、 エラー番号 グローバル変数でユーザー・モード・プログラムが戻りコードを使用できるようにします。 使用されるエラーコードは、/usr/include/sys/errno.hファイル。

該当する場合は、 read サブルーチンの POSIX 1003.1 標準で定義されている戻り値を使用する必要があります。