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

目的

以前に開いたデバイス・インスタンスを閉じます。

構文

#include <sys/device.h>
#include <sys/types.h>
  
int ddclose ( devno,  chan)
dev_t devno;
chan_t chan;

パラメーター

項目 説明
devno クローズするデバイス・インスタンスの メジャーおよびマイナー・デバイス番号 を指定します。
Chan チャネル番号を指定します。

説明

ddclose エントリー・ポイントは、以前にオープンしたデバイス・インスタンスが 閉じる サブルーチンまたは Fp_CLOSE カーネル・サービスによってクローズされたときに呼び出されます。 カーネルは、多重化されていないデバイス・ドライバーおよび多重化されたデバイス・ドライバーの場合、さまざまな状況でルーチンを呼び出します。

多重化されていないデバイス・ドライバーの場合、カーネルは、デバイス・インスタンスが開かれている最後のプロセスがデバイス・ドライバーを閉じると、 ddclose ルーチンを呼び出します。 これにより、 g ノード 参照カウントが 0 に減分され、g ノードが割り振り解除されます。

多重化されたデバイス・ドライバーの場合、 ddclose ルーチンは、明示的なオープンに関連するクローズごとに呼び出されます。 つまり、チャネルに対して DDOPEN ルーチンが呼び出されるたびに、デバイス・ドライバーの ddclose ルーチンが 1 回呼び出されます。

場合によっては、 ddclose ルーチンから戻る前に、データ・バッファーを装置に書き込む必要があります。 これらは、デバイス・ドライバーによってキューに入れられたが、まだ書き込まれていないデバイスに書き込まれるデータを含むバッファーです。

多重化されていないデバイス・ドライバーは、関連するデバイスをアイドル状態にリセットし、デバイス・ドライバー・デバイスの状態を「クローズ」に変更する必要があります。 これには、 Fp_CLOSE カーネル・サービスを呼び出して、デバイスに関連するオープン・デバイス・ハンドラーに近いものを発行することが含まれます。 デバイスをアイドル状態に戻すと、デバイスは割り込みまたは直接メモリー・アクセス (DMA) 要求をこれ以上生成できなくなります。 このデバイスに割り振られている DMA チャネルおよび割り込みレベルは、デバイスが再オープンされるまで解放して、このデバイスが使用する重要なシステム・リソースを解放する必要があります。

多重化されたデバイス・ドライバーは、 ddclose ルーチンではなく、同じデバイス静止を提供する必要があります。 装置をアイドル状態に戻し、そのリソースを解放する処理は、装置に割り振られている最後のチャネルを割り振り解除するために DDMPX ルーチンが呼び出されるまで遅らせる必要があります。

いずれの場合も、ゼロ以外の戻りコードが返された場合でも、 ddclose ルーチンが呼び出し元に戻ると、デバイス・インスタンスはクローズされたと見なされます。

実行環境

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

戻り値

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

ゼロ以外の戻りコードが戻された場合でも、装置は常にクローズされたと見なされます。

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