doc/ja_JP.eucJP/man/man9/bus_alloc_resource.9
SUZUKI Koichi b3aee9efe3 Catch up with 5.4-Release.
Submitted by: Nobuyuki Koganemaru <n-kogane at syd odn ne jp>
Reviewed by: kano at na rim or jp
             Yoshihiko Sarumaru <mistral at imasy or jp>
2005-07-11 13:46:23 +00:00

182 lines
5.2 KiB
Groff

.\" -*- nroff -*-
.\"
.\" Copyright (c) 2000 Alexander Langer
.\"
.\" All rights reserved.
.\"
.\" This program is free software.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/bus_alloc_resource.9,v 1.19.2.1 2005/03/14 07:19:03 jmg Exp %
.\"
.\" $FreeBSD$
.Dd May 18, 2000
.Dt BUS_ALLOC_RESOURCE 9
.Os
.Sh 名称
.Nm bus_alloc_resource ,
.Nm bus_alloc_resource_any
.Nd 親のバスからの資源の割り当て
.Sh 書式
.In sys/param.h
.In sys/bus.h
.Pp
.In machine/bus.h
.In sys/rman.h
.In machine/resource.h
.Ft struct resource *
.Fn bus_alloc_resource "device_t dev" "int type" "int *rid" "u_long start" "u_long end" "u_long count" "u_int flags"
.Ft struct resource *
.Fn bus_alloc_resource_any "device_t dev" "int type" "int *rid" "u_int flags"
.Sh 解説
これは資源管理関数群への簡単なインタフェースです。
親のメソッドテーブルを通る間接的な方法を隠蔽します。
この関数は、一般的にアタッチ時に呼び出されるべきですが、
(幾つかの稀な場合を除いて) 決してその前に呼び出してはなりません。
.Pp
.Fn bus_alloc_resource_any
関数は
.Fn bus_alloc_resource
のための簡単なラッパです。
これは
.Fa start ,
.Fa end
および
.Fa count
の値としてデフォルトのリソース (下記の
.Fa start
の解説を参照してください) を設定します。
.Pp
引数は以下の通りです。
.Bl -item
.It
.Fa dev
は、資源の所有を要求するデバイスです。
割り当て前は、資源は親のバスによって所有されています。
.It
.Fa type
は、割り当てたい資源の型です。
以下の内の 1 つです。
.Bl -tag -width SYS_RES_MEMORY
.It Dv SYS_RES_IRQ
IRQ 用。
.It Dv SYS_RES_DRQ
ISA DMA ライン用。
.It Dv SYS_RES_IOPORT
入出力ポート用。
.It Dv SYS_RES_MEMORY
入出力メモリ用。
.El
.It
.Fa rid
は、割り当てている資源を識別する、バス固有のハンドルを指します。
ISA では、PnP の仕組みまたは hints の仕組みを通して、デバイスのために
セットアップされている資源の配列へのインデックスです。
PCCARD では、この文章を書いている現時点では同様ですが、
将来の newcard では変わるかもしれません。
PCI では、pci コンフィグ空間において、
資源を記述するワードへのオフセットになっています。
バスのメソッドは、引数として与えられている RID を無制限に変更します。
以前に与えた時の値に依存してはなりません。
.It
.Fa start
および
.Fa end
は資源の開始/終了アドレスです。
.Fa start
に 0ul を、
.Fa end
に ~0ul を、
.Fa count
に 1 を指定した場合には、バスのためのデフォルト値が計算されます。
.It
.Fa count
は資源の大きさです。
例えば、入出力ポートの大きさは通常 1 バイトです (しかし、
幾つかのデバイスはこれを上書きします)。
.Fa start
および
.Fa end
にデフォルト値を指定した場合、
.Fa count
がデフォルト値よりも小さいならばデフォルト値が使用され、
.Fa count
がデフォルト値以上ならば count が使用されます。
.It
.Fa flags
は資源のためのフラグを設定します。
以下のフラグを 1 つ以上設定できます。
.Bl -tag -width RF_SHAREABLE
.It Dv RF_ALLOCATED
資源は既に予約されています。
資源は引続き
.Xr bus_activate_resource 9
で活性化される必要があります。
.It Dv RF_ACTIVE
不可分に、資源を活性化します。
.It Dv RF_SHAREABLE
資源は同時共有を許可します。
その資源が共有不可であることを知らない場合、常に設定されるべきです。
そのバスが共有をサポートしていない場合、
このフラグを取り除くのはバスドライバの仕事です。
例えば、
.Xr pccard 4
は IRQ を共有できませんが、一方
.Xr cardbus 4
は共有できます。
.It Dv RF_TIMESHARE
資源は時分割共有を許可します。
.El
.El
.Sh 戻り値
成功時には
.Va struct resource
構造体へのポインタが返され、そうでない場合にはヌルポインタが返されます。
.Sh 使用例
これは 32 バイトの I/O ポート範囲と IRQ を割り当てるサンプルのコードです。
.Va portid
および
.Va irqid
の値はこれらの呼び出しの後で、デバイスの softc の中に保存されるはずです。
.Bd -literal
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);
.Ed
.Sh 関連項目
.Xr bus_activate_resource 9 ,
.Xr bus_release_resource 9 ,
.Xr device 9 ,
.Xr driver 9
.Sh 作者
.An -nosplit
このマニュアルページは
.An Alexander Langer Aq alex@big.endian.de
によって書かれ、部分的に
.An Warner Losh Aq imp@FreeBSD.org
によって書かれました。