aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man9/bus_alloc_resource.9
blob: 0fd99d4cb04e6064303cada8e00037933da3277a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
.\" -*- 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.2.2.2 2000/06/20 15:06:11 alex Exp %
.\"
.\" $FreeBSD$
.Dd May 18, 2000
.Dt BUS_ALLOC_RESOURCE 9
.Os FreeBSD
.Sh 名称
.Nm bus_alloc_resource
.Nd バス上の資源の割り当て
.Sh 書式
.Fd #include <sys/param.h>
.Fd #include <sys/bus.h>
.Fd #include <sys/rman.h>
.Fd #include <sys/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"
.Sh 解説
.Pp
これは資源管理関数群への簡単なインタフェースです。
親のメソッドテーブルを通る間接的な方法を隠蔽します。
この関数は、一般的にアタッチ時に呼び出されるべきですが、
(競合状態の場合を除いて) 決してその前に呼び出してはなりません。
.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
は資源の開始/終了アドレスです。
start に
.Dv 0
の値を end に
.Dv ~0
の値を指定した場合には、バスのためのデフォルト値が計算されます。
.It
.Fa count
は資源の大きさで、例えば、入出力ポートの大きさです
(これは大抵、PCI 上では
.Dv 1
で、ISA および PCCARD 上ではデバイス依存です)。
.Fa start
および
.Fa end
にデフォルト値を指定した場合、
.Fa count
がデフォルト値よりも小さいならばデフォルト値が使用され、
.Fa count
がデフォルト値以上ならば count が使用されます。
.It
.Fa flags
は資源のためのフラグを設定します。
以下のフラグを 1 つ以上設定できます。
.Bl -tag -width RF_SHAREABLE
.It Dv RF_ALLOCATED
資源は既に予約されています。
資源は引続き
.Xr rman_activate_resource 9
で活性化される必要があります。
.It Dv RF_ACTIVE
不可分に、資源を活性化します。
.It Dv RF_SHAREABLE
資源は同時共有を許可します。
その資源が共有不可であることを知らない場合、常に設定されるべきです。
バスが共有をサポートしていない場合、
このフラグを取り除くのはバスのコードの仕事です。この例として、
pccard/cardbus ではデバイスを共有できるかできないかは、バスに依存します。
.It Dv RF_TIMESHARE
資源は時分割共有を許可します。
.El
.El
.Sh 戻り値
成功時には
.Va struct resource
構造体へのポインタが返され、そうでない場合にはヌルポインタが返されます。
.Sh 使用例
これはあるサンプルのコードです。
.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(dev, SYS_RES_IRQ, &irqid, 
			0ul, ~0ul, 1, RF_ACTIVE | RF_SHAREABLE);
.Ed
.Sh 関連項目
.Xr driver 9 ,
.Xr device 9 ,
.Xr bus_release_resource 9
.Sh 作者
このマニュアルページは
.An Alexander Langer Aq alex@big.endian.de
が書き、部分的に
.An Warner Losh Aq imp@FreeBSD.ORG
が書きました。