bus_alloc_resource(9) FreeBSD 一般コマンドマニュアル

bus_alloc_resource

前のページ 上に戻る 次のページ

bus_alloc_resource


     #include <sys/bus.h>

     #include <machine/bus.h>
     #include <sys/rman.h>
     #include <machine/resource.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);


解説

     これは資源管理関数群への簡単なインタフェースです。親のメソッドテーブルを
     通る間接的な方法を隠蔽します。この関数は、一般的にアタッチ時に呼び出され
     るべきですが、 (競合状態の場合を除いて) 決してその前に呼び出してはなりま
     せん。

     引数は以下の通りです。

     dev は、資源の所有を要求するデバイスです。割り当て前は、資源は親のバスに
     よって所有されています。

     type は、割り当てたい資源の型です。以下の内の 1 つです。

     SYS_RES_IRQ     IRQ 用。

     SYS_RES_DRQ     ISA DMA ライン用。

     SYS_RES_IOPORT  入出力ポート用。

     SYS_RES_MEMORY  入出力メモリ用。

     rid は、割り当てている資源を識別する、バス固有のハンドルを指します。 ISA
     では、PnP の仕組みまたは hints の仕組みを通して、デバイスのためにセット
     アップされている資源の配列へのインデックスです。 PCCARD では、この文章を
     書いている現時点では同様ですが、将来の newcard では変わるかもしれません。
     PCI では、pci コンフィグ空間において、資源を記述するワードへのオフセット
     になっています。バスのメソッドは、引数として与えられている RID を無制限に
     変更します。以前に与えた時の値に依存してはなりません。

     start および end は資源の開始/終了アドレスです。 start に 0 の値を end に
     ~0 の値を指定した場合には、バスのためのデフォルト値が計算されます。

     count は資源の大きさで、例えば、入出力ポートの大きさです (これは大抵、PCI
     上では 1 で、ISA および PCCARD 上ではデバイス依存です)。 start および end
     にデフォルト値を指定した場合、 count がデフォルト値よりも小さいならばデ
     フォルト値が使用され、 count がデフォルト値以上ならば count が使用されま
     す。

     flags は資源のためのフラグを設定します。以下のフラグを 1 つ以上設定できま
     す。

     RF_ALLOCATED  資源は既に予約されています。資源は引続き
     ヌルポインタが返されます。


使用例

     これはあるサンプルのコードです。 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(dev, SYS_RES_IRQ, &irqid,
                             0ul, ~0ul, 1, RF_ACTIVE | RF_SHAREABLE);


関連項目

     bus_release_resource(9), device(9), driver(9)


作者

     このマニュアルページは Alexander Langer <alex@big.endian.de> が書き、部分
     的に
     Warner Losh <imp@FreeBSD.ORG> が書きました。

FreeBSD 4.4                      May 18, 2000                      FreeBSD 4.4

ABELNET VPSサービス