xref: /dflybsd-src/share/man/man9/rman.9 (revision 577cd717f614382e3c5441f14867b1fb207ad7d6)
196bce568SHiten Pandya.\"
29cca02b8SHiten Pandya.\" Copyright (c) 2004 The DragonFly Project.  All rights reserved.
39cca02b8SHiten Pandya.\"
49cca02b8SHiten Pandya.\" This code is derived from software contributed to The DragonFly Project
59cca02b8SHiten Pandya.\" by Hiten Pandya <hmp@backplane.com>.
69cca02b8SHiten Pandya.\"
79cca02b8SHiten Pandya.\" Redistribution and use in source and binary forms, with or without
89cca02b8SHiten Pandya.\" modification, are permitted provided that the following conditions
99cca02b8SHiten Pandya.\" are met:
109cca02b8SHiten Pandya.\"
119cca02b8SHiten Pandya.\" 1. Redistributions of source code must retain the above copyright
129cca02b8SHiten Pandya.\"    notice, this list of conditions and the following disclaimer.
139cca02b8SHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright
149cca02b8SHiten Pandya.\"    notice, this list of conditions and the following disclaimer in
159cca02b8SHiten Pandya.\"    the documentation and/or other materials provided with the
169cca02b8SHiten Pandya.\"    distribution.
179cca02b8SHiten Pandya.\" 3. Neither the name of The DragonFly Project nor the names of its
189cca02b8SHiten Pandya.\"    contributors may be used to endorse or promote products derived
199cca02b8SHiten Pandya.\"    from this software without specific, prior written permission.
209cca02b8SHiten Pandya.\"
219cca02b8SHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
229cca02b8SHiten Pandya.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
239cca02b8SHiten Pandya.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
249cca02b8SHiten Pandya.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
259cca02b8SHiten Pandya.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
269cca02b8SHiten Pandya.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
279cca02b8SHiten Pandya.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
289cca02b8SHiten Pandya.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
299cca02b8SHiten Pandya.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
309cca02b8SHiten Pandya.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
319cca02b8SHiten Pandya.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
329cca02b8SHiten Pandya.\" SUCH DAMAGE.
339cca02b8SHiten Pandya.\"
3496bce568SHiten Pandya.\" Copyright (c) 2003 Bruce M Simpson <bms@spc.org>
3596bce568SHiten Pandya.\" All rights reserved.
3696bce568SHiten Pandya.\"
3796bce568SHiten Pandya.\" Redistribution and use in source and binary forms, with or without
3896bce568SHiten Pandya.\" modification, are permitted provided that the following conditions
3996bce568SHiten Pandya.\" are met:
4096bce568SHiten Pandya.\" 1. Redistributions of source code must retain the above copyright
4196bce568SHiten Pandya.\"    notice, this list of conditions and the following disclaimer.
4296bce568SHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright
4396bce568SHiten Pandya.\"    notice, this list of conditions and the following disclaimer in the
4496bce568SHiten Pandya.\"    documentation and/or other materials provided with the distribution.
4596bce568SHiten Pandya.\"
4696bce568SHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
4796bce568SHiten Pandya.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4896bce568SHiten Pandya.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4996bce568SHiten Pandya.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
5096bce568SHiten Pandya.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
5196bce568SHiten Pandya.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
5296bce568SHiten Pandya.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5396bce568SHiten Pandya.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
5496bce568SHiten Pandya.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
5596bce568SHiten Pandya.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
5696bce568SHiten Pandya.\" SUCH DAMAGE.
5796bce568SHiten Pandya.\"
5896bce568SHiten Pandya.\" $FreeBSD: src/share/man/man9/rman.9,v 1.2 2003/05/30 21:13:32 ru Exp $
5901d6ccadSSascha Wildner.\" $DragonFly: src/share/man/man9/rman.9,v 1.4 2006/10/27 22:39:05 swildner Exp $
6096bce568SHiten Pandya.\"
6196bce568SHiten Pandya.Dd May 12, 2003
6296bce568SHiten Pandya.Dt RMAN 9
6396bce568SHiten Pandya.Os
6496bce568SHiten Pandya.Sh NAME
6596bce568SHiten Pandya.Nm rman ,
6696bce568SHiten Pandya.Nm rman_activate_resource ,
67*577cd717SSascha Wildner.\".Nm rman_await_resource ,
6896bce568SHiten Pandya.Nm rman_deactivate_resource ,
6996bce568SHiten Pandya.Nm rman_fini ,
7096bce568SHiten Pandya.Nm rman_init ,
7196bce568SHiten Pandya.Nm rman_manage_region ,
7296bce568SHiten Pandya.Nm rman_release_resource ,
7396bce568SHiten Pandya.Nm rman_reserve_resource ,
7496bce568SHiten Pandya.\".Nm rman_reserve_resource_bound ,
7596bce568SHiten Pandya.Nm rman_make_alignment_flags ,
7696bce568SHiten Pandya.Nm rman_get_start ,
7796bce568SHiten Pandya.Nm rman_get_end ,
7896bce568SHiten Pandya.Nm rman_get_device ,
7996bce568SHiten Pandya.Nm rman_get_size ,
8096bce568SHiten Pandya.Nm rman_get_flags ,
8196bce568SHiten Pandya.Nm rman_set_virtual ,
8296bce568SHiten Pandya.Nm rman_get_virtual ,
8396bce568SHiten Pandya.Nm rman_set_bustag ,
8496bce568SHiten Pandya.Nm rman_get_bustag ,
8596bce568SHiten Pandya.Nm rman_set_bushandle ,
8696bce568SHiten Pandya.Nm rman_get_bushandle ,
8796bce568SHiten Pandya.\".Nm rman_set_rid ,
8896bce568SHiten Pandya.\".Nm rman_get_rid
8996bce568SHiten Pandya.Nd resource management functions
9096bce568SHiten Pandya.Sh SYNOPSIS
9196bce568SHiten Pandya.In sys/param.h
9296bce568SHiten Pandya.In sys/rman.h
9396bce568SHiten Pandya.Ft int
9496bce568SHiten Pandya.Fn rman_activate_resource "struct resource *r"
95*577cd717SSascha Wildner.\".Ft int
96*577cd717SSascha Wildner.\".Fn rman_await_resource "struct resource *r" "int pri2" "int timo"
9796bce568SHiten Pandya.Ft int
9896bce568SHiten Pandya.Fn rman_deactivate_resource "struct resource *r"
9996bce568SHiten Pandya.Ft int
10096bce568SHiten Pandya.Fn rman_fini "struct rman *rm"
10196bce568SHiten Pandya.Ft int
10296bce568SHiten Pandya.Fn rman_init "struct rman *rm"
10396bce568SHiten Pandya.Ft int
10496bce568SHiten Pandya.Fn rman_manage_region "struct rman *rm" "u_long start" "u_long end"
10596bce568SHiten Pandya.Ft int
10696bce568SHiten Pandya.Fn rman_release_resource "struct resource *r"
10796bce568SHiten Pandya.Ft "struct resource *"
10896bce568SHiten Pandya.Fo rman_reserve_resource
10996bce568SHiten Pandya.Fa "struct rman *rm" "u_long start" "u_long end" "u_long count"
11096bce568SHiten Pandya.Fa "u_int flags" "struct device *dev"
11196bce568SHiten Pandya.Fc
11296bce568SHiten Pandya.\".Ft "struct resource *"
11396bce568SHiten Pandya.\".Fo rman_reserve_resource_bound
11496bce568SHiten Pandya.\".Fa "struct rman *rm" "u_long start" "u_long end" "u_long count"
11596bce568SHiten Pandya.\".Fa "u_long bound" "u_int flags" "struct device *dev"
11696bce568SHiten Pandya.\".Fc
11796bce568SHiten Pandya.Ft uint32_t
11896bce568SHiten Pandya.Fn rman_make_alignment_flags "uint32_t size"
11996bce568SHiten Pandya.Pp
12096bce568SHiten Pandya.Ft u_long
12196bce568SHiten Pandya.Fn rman_get_start "struct resource *r"
12296bce568SHiten Pandya.Ft u_long
12396bce568SHiten Pandya.Fn rman_get_end "struct resource *r"
12496bce568SHiten Pandya.Ft "struct device *"
12596bce568SHiten Pandya.Fn rman_get_device "struct resource *r"
12696bce568SHiten Pandya.Ft u_long
12796bce568SHiten Pandya.Fn rman_get_size "struct resource *r"
12896bce568SHiten Pandya.Ft u_int
12996bce568SHiten Pandya.Fn rman_get_flags "struct resource *r"
13096bce568SHiten Pandya.Ft void
13196bce568SHiten Pandya.Fn rman_set_virtual "struct resource *r" "void *v"
13296bce568SHiten Pandya.Ft "void *"
13396bce568SHiten Pandya.Fn rman_get_virtual "struct resource *r"
13496bce568SHiten Pandya.Ft void
13596bce568SHiten Pandya.Fn rman_set_bustag "struct resource *r" "bus_space_tag_t t"
13696bce568SHiten Pandya.Ft bus_space_tag_t
13796bce568SHiten Pandya.Fn rman_get_bustag "struct resource *r"
13896bce568SHiten Pandya.Ft void
13996bce568SHiten Pandya.Fn rman_set_bushandle "struct resource *r" "bus_space_handle_t h"
14096bce568SHiten Pandya.Ft bus_space_handle_t
14196bce568SHiten Pandya.Fn rman_get_bushandle "struct resource *r"
14296bce568SHiten Pandya.\".Ft void
14396bce568SHiten Pandya.\".Fn rman_set_rid "struct resource *r" "int rid"
14496bce568SHiten Pandya.\".Ft int
14596bce568SHiten Pandya.\".Fn rman_get_rid "struct resource *r"
14696bce568SHiten Pandya.Sh DESCRIPTION
14796bce568SHiten PandyaThe
14896bce568SHiten Pandya.Nm
14996bce568SHiten Pandyaset of functions provides a flexible resource management abstraction,
15096bce568SHiten Pandyathey are used extensively by the bus management code.
15196bce568SHiten PandyaIt implements the abstractions of region and resource.
15296bce568SHiten PandyaA region descriptor is used to manage a region; this could be memory or
15396bce568SHiten Pandyasome other form of bus space.
15496bce568SHiten Pandya.Pp
15596bce568SHiten PandyaEach region has a set of bounds.
15696bce568SHiten PandyaWithin these bounds, allocated segments may reside.
15796bce568SHiten PandyaEach segment, termed a resource, has several properties which are
15896bce568SHiten Pandyarepresented by a 16-bit flag register, as follows.
15996bce568SHiten Pandya.Bd -literal
16096bce568SHiten Pandya#define RF_ALLOCATED    0x0001 /* resource has been reserved */
16196bce568SHiten Pandya#define RF_ACTIVE       0x0002 /* resource allocation has been activated */
16296bce568SHiten Pandya#define RF_SHAREABLE    0x0004 /* resource permits contemporaneous sharing */
16396bce568SHiten Pandya#define RF_TIMESHARE    0x0008 /* resource permits time-division sharing */
16496bce568SHiten Pandya#define RF_WANTED       0x0010 /* somebody is waiting for this resource */
16596bce568SHiten Pandya#define RF_FIRSTSHARE   0x0020 /* first in sharing list */
16696bce568SHiten Pandya#define RF_PREFETCHABLE 0x0040 /* resource is prefetchable */
16796bce568SHiten Pandya.Ed
16896bce568SHiten Pandya.Pp
16996bce568SHiten PandyaThe remainder of the flag bits are used to represent the desired alignment
17096bce568SHiten Pandyaof the resource within the region.
17196bce568SHiten Pandya.Pp
17296bce568SHiten PandyaThe
17396bce568SHiten Pandya.Fn rman_init
17496bce568SHiten Pandyafunction initializes the region descriptor, pointed to by the
17596bce568SHiten Pandya.Fa rm
17696bce568SHiten Pandyaargument, for use with the resource management functions.
17796bce568SHiten PandyaIt also initializes any mutexes associated with the structure.
17896bce568SHiten Pandya.Pp
17996bce568SHiten PandyaThe
18096bce568SHiten Pandya.Fn rman_fini
18196bce568SHiten Pandyafunction frees any structures associated with the structure
18296bce568SHiten Pandyapointed to by the
18396bce568SHiten Pandya.Fa rm
18496bce568SHiten Pandyaargument.
18596bce568SHiten PandyaIf any of the resources within the managed region have the
18696bce568SHiten Pandya.Dv RF_ALLOCATED
18796bce568SHiten Pandyaflag set, it will return
18896bce568SHiten Pandya.Er EBUSY ;
18996bce568SHiten Pandyaotherwise, any mutexes associated with the structure will be released
19096bce568SHiten Pandyaand destroyed, and the function will return 0.
19196bce568SHiten Pandya.Pp
19296bce568SHiten PandyaThe
19396bce568SHiten Pandya.Fn rman_manage_region
19496bce568SHiten Pandyafunction establishes the concept of a region which is under
19596bce568SHiten Pandya.Nm
19696bce568SHiten Pandyacontrol.
19796bce568SHiten PandyaThe
19896bce568SHiten Pandya.Fa rman
19996bce568SHiten Pandyaargument points to the region descriptor.
20096bce568SHiten PandyaThe
20196bce568SHiten Pandya.Fa start
20296bce568SHiten Pandyaand
20396bce568SHiten Pandya.Fa end
20496bce568SHiten Pandyaarguments specify the bounds of the region.
20596bce568SHiten Pandya.Pp
20696bce568SHiten Pandya.Em NOTE :
20796bce568SHiten PandyaThis interface is not robust against programming errors which
20896bce568SHiten Pandyaadd multiple copies of the same region.
20996bce568SHiten Pandya.\".Pp
21096bce568SHiten Pandya.\"The
21196bce568SHiten Pandya.\".Fn rman_reserve_resource_bound
21296bce568SHiten Pandya.\"function is where the bulk of the
21396bce568SHiten Pandya.\".Nm
21496bce568SHiten Pandya.\"logic is located.
21596bce568SHiten Pandya.\"It attempts to reserve a contiguous range in the specified region
21696bce568SHiten Pandya.\".Fa rm
21796bce568SHiten Pandya.\"for the use of the device
21896bce568SHiten Pandya.\".Fa dev .
21996bce568SHiten Pandya.\"The caller can specify the
22096bce568SHiten Pandya.\".Fa start
22196bce568SHiten Pandya.\"and
22296bce568SHiten Pandya.\".Fa end
22396bce568SHiten Pandya.\"of an acceptable range, as well as
22496bce568SHiten Pandya.\"alignment, and the code will attempt to find a free segment which fits.
22596bce568SHiten Pandya.\"The default behavior is to allocate an exclusive segment, unless the
22696bce568SHiten Pandya.\".Dv RF_SHAREABLE
22796bce568SHiten Pandya.\"or
22896bce568SHiten Pandya.\".Dv RF_TIMESHARE
22996bce568SHiten Pandya.\"flags are set, in which case a shared
23096bce568SHiten Pandya.\"segment will be allocated.
23196bce568SHiten Pandya.\"If this shared segment already exists, the caller has its device
23296bce568SHiten Pandya.\"added to the list of consumers.
23396bce568SHiten Pandya.Pp
23496bce568SHiten PandyaThe
23596bce568SHiten Pandya.Fn rman_reserve_resource
23696bce568SHiten Pandyafunction is used to reserve resources within a previously established region.
23701d6ccadSSascha Wildner.\"It is a simplified interface to
23801d6ccadSSascha Wildner.\".Fn rman_reserve_resource_bound
23901d6ccadSSascha Wildner.\"which passes 0 for the
24001d6ccadSSascha Wildner.\".Fa flags
24101d6ccadSSascha Wildner.\"argument.
24296bce568SHiten Pandya.Pp
24396bce568SHiten PandyaThe
24496bce568SHiten Pandya.Fn rman_make_alignment_flags
24596bce568SHiten Pandyafunction returns the flag mask corresponding to the desired alignment
24696bce568SHiten Pandya.Fa size .
24701d6ccadSSascha Wildner.\"This should be used when calling
24801d6ccadSSascha Wildner.\".Fn rman_reserve_resource_bound .
24996bce568SHiten Pandya.Pp
25096bce568SHiten PandyaThe
25196bce568SHiten Pandya.Fn rman_release_resource
25296bce568SHiten Pandyafunction releases the reserved resource
25396bce568SHiten Pandya.Fa r .
25496bce568SHiten PandyaIt may attempt to merge adjacent free resources.
25596bce568SHiten Pandya.Pp
25696bce568SHiten PandyaThe
25796bce568SHiten Pandya.Fn rman_activate_resource
25896bce568SHiten Pandyafunction marks a resource as active, by setting the
25996bce568SHiten Pandya.Dv RF_ACTIVE
26096bce568SHiten Pandyaflag.
26196bce568SHiten PandyaIf this is a time shared resource, and the caller has not yet acquired
26296bce568SHiten Pandyathe resource, the function returns
26396bce568SHiten Pandya.Er EBUSY .
26496bce568SHiten Pandya.Pp
26596bce568SHiten PandyaThe
26696bce568SHiten Pandya.Fn rman_deactivate_resource
26796bce568SHiten Pandyafunction marks a resource
26896bce568SHiten Pandya.Fa r
26996bce568SHiten Pandyaas inactive, by clearing the
27096bce568SHiten Pandya.Dv RF_ACTIVE
27196bce568SHiten Pandyaflag.
27296bce568SHiten PandyaIf other consumers are waiting for this range, it will wakeup their threads.
27396bce568SHiten Pandya.Pp
274*577cd717SSascha Wildner.\"The
275*577cd717SSascha Wildner.\".Fn rman_await_resource
276*577cd717SSascha Wildner.\"function performs an asynchronous wait for a resource
277*577cd717SSascha Wildner.\".Fa r
278*577cd717SSascha Wildner.\"to become inactive, that is, for the
279*577cd717SSascha Wildner.\".Dv RF_ACTIVE
280*577cd717SSascha Wildner.\"flag to be cleared.
281*577cd717SSascha Wildner.\"It is used to enable cooperative sharing of a resource
282*577cd717SSascha Wildner.\"which can only be safely used by one thread at a time.
283*577cd717SSascha Wildner.\"The arguments
284*577cd717SSascha Wildner.\".Fa pri
285*577cd717SSascha Wildner.\"and
286*577cd717SSascha Wildner.\".Fa timo
287*577cd717SSascha Wildner.\"are passed to the
288*577cd717SSascha Wildner.\".Fn rman_await_resource
289*577cd717SSascha Wildner.\"function.
290*577cd717SSascha Wildner.\".Pp
29196bce568SHiten PandyaThe
29296bce568SHiten Pandya.Fn rman_get_start ,
29396bce568SHiten Pandya.Fn rman_get_end ,
29496bce568SHiten Pandya.Fn rman_get_size ,
29596bce568SHiten Pandyaand
29696bce568SHiten Pandya.Fn rman_get_flags
29796bce568SHiten Pandyafunctions return the bounds, size and flags of the previously reserved
29896bce568SHiten Pandyaresource
29996bce568SHiten Pandya.Fa r .
30096bce568SHiten Pandya.Pp
30196bce568SHiten PandyaThe
30296bce568SHiten Pandya.Fn rman_set_bustag
30396bce568SHiten Pandyafunction associates a
30496bce568SHiten Pandya.Vt bus_space_tag_t
30596bce568SHiten Pandya.Fa t
30696bce568SHiten Pandyawith the resource
30796bce568SHiten Pandya.Fa r .
30896bce568SHiten PandyaThe
30996bce568SHiten Pandya.Fn rman_get_bustag
31096bce568SHiten Pandyafunction is used to retrieve this tag once set.
31196bce568SHiten Pandya.Pp
31296bce568SHiten PandyaThe
31396bce568SHiten Pandya.Fn rman_set_bushandle
31496bce568SHiten Pandyafunction associates a
31596bce568SHiten Pandya.Vt bus_space_handle_t
31696bce568SHiten Pandya.Fa h
31796bce568SHiten Pandyawith the resource
31896bce568SHiten Pandya.Fa r .
31996bce568SHiten PandyaThe
32096bce568SHiten Pandya.Fn rman_get_bushandle
32196bce568SHiten Pandyafunction is used to retrieve this handle once set.
32296bce568SHiten Pandya.Pp
32396bce568SHiten PandyaThe
32496bce568SHiten Pandya.Fn rman_set_virtual
32596bce568SHiten Pandyafunction is used to associate a kernel virtual address with a resource
32696bce568SHiten Pandya.Fa r .
32796bce568SHiten PandyaThe
32896bce568SHiten Pandya.Fn rman_get_virtual
32996bce568SHiten Pandyafunction can be used to retrieve the KVA once set.
33096bce568SHiten Pandya.\".Pp
33196bce568SHiten Pandya.\"The
33296bce568SHiten Pandya.\".Fn rman_set_rid
33396bce568SHiten Pandya.\"function associates a resource identifier with a resource
33496bce568SHiten Pandya.\".Fa r .
33596bce568SHiten Pandya.\"The
33696bce568SHiten Pandya.\".Fn rman_get_rid
33796bce568SHiten Pandya.\"function retrieves this RID.
33896bce568SHiten Pandya.Pp
33996bce568SHiten PandyaThe
34096bce568SHiten Pandya.Fn rman_get_device
34196bce568SHiten Pandyafunction returns a pointer to the device which reserved the resource
34296bce568SHiten Pandya.Fa r .
34396bce568SHiten Pandya.Sh SEE ALSO
34496bce568SHiten Pandya.\".Xr bus_activate_resource 9 ,
34596bce568SHiten Pandya.Xr bus_alloc_resource 9
34696bce568SHiten Pandya.Xr bus_release_resource 9 ,
34796bce568SHiten Pandya.\".Xr bus_set_resource 9 ,
34896bce568SHiten Pandya.Sh AUTHORS
34996bce568SHiten Pandya.An -nosplit
35096bce568SHiten PandyaThis manual page was written by
35196bce568SHiten Pandya.An Bruce M Simpson Aq bms@spc.org ,
35296bce568SHiten Pandyalater revised by
35396bce568SHiten Pandya.An Hiten Pandya Aq hmp@backplane.com .
354