BUS_ALLOC_RESOURCE(9) FreeBSD カーネル開発者マニュアル BUS_ALLOC_RESOURCE(9)
名称
bus_alloc_resource, bus_alloc_resource_any − 親のバスからの資源の割り当て |
書式
#include <sys/param.h> #include <machine/bus.h> struct resource * |
bus_alloc_resource(device_t dev, int type, int *rid, u_long start, u_long end, u_long count, u_int flags); struct resource * |
bus_alloc_resource_any(device_t dev, int type, int *rid, u_int flags); |
解説 |
これは資源管理関数群への簡単なインタフェースです。親のメソッドテーブルを 通る間接的な方法を隠蔽します。この関数は、一般的にアタッチ時に呼び出され るべきですが、 (幾つかの稀な場合を除いて) 決してその前に呼び出してはなり ません。 bus_alloc_resource_any() 関数は bus_alloc_resource() のための簡単なラッパ です。これは start, end および count の値としてデフォルトのリソース (下記 の start の解説を参照してください) を設定します。 引数は以下の通りです。 dev は、資源の所有を要求するデバイスです。割り当て前は、資源は親のバスに よって所有されています。 type は、割り当てたい資源の型です。以下の内の 1 つです。 |
SYS_RES_IRQ
IRQ 用。 SYS_RES_DRQ SYS_RES_IOPORT SYS_RES_MEMORY rid は、割り当てている資源を識別する、バス固有のハンドルを指します。 ISA では、PnP の仕組みまたは hints の仕組みを通して、デバイスのためにセット アップされている資源の配列へのインデックスです。 PCCARD では、この文章を 書いている現時点では同様ですが、将来の newcard では変わるかもしれません。 PCI では、pci コンフィグ空間において、資源を記述するワードへのオフセット になっています。バスのメソッドは、引数として与えられている RID を無制限に 変更します。以前に与えた時の値に依存してはなりません。 start および end は資源の開始/終了アドレスです。 start に 0ul を、 end に ~0ul を、 count に 1 を指定した場合には、バスのためのデフォルト値が計算さ れます。 count は資源の大きさです。例えば、入出力ポートの大きさは通常 1 バイトです (しかし、幾つかのデバイスはこれを上書きします)。 start および end にデ フォルト値を指定した場合、 count がデフォルト値よりも小さいならばデフォル ト値が使用され、 count がデフォルト値以上ならば count が使用されます。 flags は資源のためのフラグを設定します。以下のフラグを 1 つ以上設定できま す。 RF_ALLOCATED RF_ACTIVE RF_SHAREABLE RF_TIMESHARE 戻り値 |
成功時には struct resource 構造体へのポインタが返され、そうでない場合には ヌルポインタが返されます。 |
使用例
これは 32 バイトの I/O ポート範囲と IRQ を割り当てるサンプルのコードで す。 portid および irqid の値はこれらの呼び出しの後で、デバイスの softc の中に保存されるはずです。 struct resource *portres, irqres; |
int portid, irqid; |
||||
portid = 0; |
||||
irqid = 0; |
||||
portres = bus_alloc_resource(dev, SYS_RES_IOPORT, &portid, |
||||
0ul, ~0ul, 32, RF_ACTIVE); |
||||
irqres = bus_alloc_resource_any(dev, SYS_RES_IRQ, &irqid, |
||||
RF_ACTIVE | RF_SHAREABLE); |
関連項目
bus_activate_resource(9), bus_release_resource(9), device(9), driver(9) |
作者
このマニュアルページは Alexander Langer 〈alex@big.endian.de〉 によって書か れ、部分的に Warner Losh 〈imp@FreeBSD.org〉 によって書かれました。 FreeBSD 10.0 May 18, 2000 FreeBSD 10.0 |