xref: /freebsd/share/man/man9/rman.9 (revision 3e1cee04f8b33031d7d2640344d5b93d45e21b8f)
15f616912SHiten Pandya.\"
25f616912SHiten Pandya.\" Copyright (c) 2003 Bruce M Simpson <bms@spc.org>
35f616912SHiten Pandya.\" All rights reserved.
45f616912SHiten Pandya.\"
55f616912SHiten Pandya.\" Redistribution and use in source and binary forms, with or without
65f616912SHiten Pandya.\" modification, are permitted provided that the following conditions
75f616912SHiten Pandya.\" are met:
85f616912SHiten Pandya.\" 1. Redistributions of source code must retain the above copyright
95f616912SHiten Pandya.\"    notice, this list of conditions and the following disclaimer.
105f616912SHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright
115f616912SHiten Pandya.\"    notice, this list of conditions and the following disclaimer in the
125f616912SHiten Pandya.\"    documentation and/or other materials provided with the distribution.
135f616912SHiten Pandya.\"
145f616912SHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
155f616912SHiten Pandya.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
165f616912SHiten Pandya.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
175f616912SHiten Pandya.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
185f616912SHiten Pandya.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
195f616912SHiten Pandya.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
205f616912SHiten Pandya.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
215f616912SHiten Pandya.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
225f616912SHiten Pandya.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
235f616912SHiten Pandya.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
245f616912SHiten Pandya.\" SUCH DAMAGE.
255f616912SHiten Pandya.\"
265f616912SHiten Pandya.\" $FreeBSD$
275f616912SHiten Pandya.\"
285f616912SHiten Pandya.Dd May 12, 2003
295f616912SHiten Pandya.Dt RMAN 9
305f616912SHiten Pandya.Os
315f616912SHiten Pandya.Sh NAME
325f616912SHiten Pandya.Nm rman ,
335f616912SHiten Pandya.Nm rman_activate_resource ,
345f616912SHiten Pandya.Nm rman_await_resource ,
355f616912SHiten Pandya.Nm rman_deactivate_resource ,
365f616912SHiten Pandya.Nm rman_fini ,
375f616912SHiten Pandya.Nm rman_init ,
385f616912SHiten Pandya.Nm rman_manage_region ,
395f616912SHiten Pandya.Nm rman_release_resource ,
405f616912SHiten Pandya.Nm rman_reserve_resource ,
415f616912SHiten Pandya.Nm rman_reserve_resource_bound ,
425f616912SHiten Pandya.Nm rman_make_alignment_flags ,
435f616912SHiten Pandya.Nm rman_get_start ,
445f616912SHiten Pandya.Nm rman_get_end ,
455f616912SHiten Pandya.Nm rman_get_size ,
465f616912SHiten Pandya.Nm rman_get_flags ,
475f616912SHiten Pandya.Nm rman_set_virtual ,
485f616912SHiten Pandya.Nm rman_get_virtual ,
495f616912SHiten Pandya.Nm rman_set_bustag ,
505f616912SHiten Pandya.Nm rman_get_bustag ,
515f616912SHiten Pandya.Nm rman_set_bushandle ,
525f616912SHiten Pandya.Nm rman_get_bushandle ,
535f616912SHiten Pandya.Nm rman_set_rid ,
545f616912SHiten Pandya.Nm rman_get_rid
555f616912SHiten Pandya.Nd resource management functions
565f616912SHiten Pandya.Sh SYNOPSIS
575f616912SHiten Pandya.In sys/rman.h
585f616912SHiten Pandya.Ft int
595f616912SHiten Pandya.Fn rman_activate_resource "struct resource *r"
605f616912SHiten Pandya.Ft int
615f616912SHiten Pandya.Fn rman_await_resource "struct resource *r" "int pri2" "int timo"
625f616912SHiten Pandya.Ft int
635f616912SHiten Pandya.Fn rman_deactivate_resource "struct resource *r"
645f616912SHiten Pandya.Ft int
655f616912SHiten Pandya.Fn rman_fini "struct rman *rm"
665f616912SHiten Pandya.Ft int
675f616912SHiten Pandya.Fn rman_init "struct rman *rm"
685f616912SHiten Pandya.Ft int
695f616912SHiten Pandya.Fn rman_manage_region "struct rman *rm" "u_long start" "u_long end"
705f616912SHiten Pandya.Ft int
715f616912SHiten Pandya.Fn rman_release_resource "struct resource *r"
723e1cee04SRuslan Ermilov.Ft "struct resource *"
733e1cee04SRuslan Ermilov.Fo rman_reserve_resource
743e1cee04SRuslan Ermilov.Fa "struct rman *rm" "u_long start" "u_long end" "u_long count"
753e1cee04SRuslan Ermilov.Fa "u_int flags" "struct device *dev"
763e1cee04SRuslan Ermilov.Fc
773e1cee04SRuslan Ermilov.Ft "struct resource *"
783e1cee04SRuslan Ermilov.Fo rman_reserve_resource_bound
793e1cee04SRuslan Ermilov.Fa "struct rman *rm" "u_long start" "u_long end" "u_long count"
803e1cee04SRuslan Ermilov.Fa "u_long bound" "u_int flags" "struct device *dev"
813e1cee04SRuslan Ermilov.Fc
825f616912SHiten Pandya.Ft uint32_t
835f616912SHiten Pandya.Fn rman_make_alignment_flags "uint32_t size"
845f616912SHiten Pandya.Ft u_long
853e1cee04SRuslan Ermilov.Fn rman_get_start "struct resource *r"
865f616912SHiten Pandya.Ft u_long
873e1cee04SRuslan Ermilov.Fn rman_get_end "struct resource *r"
885f616912SHiten Pandya.Ft u_long
893e1cee04SRuslan Ermilov.Fn rman_get_size "struct resource *r"
905f616912SHiten Pandya.Ft u_int
913e1cee04SRuslan Ermilov.Fn rman_get_flags "struct resource *r"
925f616912SHiten Pandya.Ft void
933e1cee04SRuslan Ermilov.Fn rman_set_virtual "struct resource *r" "void *v"
943e1cee04SRuslan Ermilov.Ft "void *"
953e1cee04SRuslan Ermilov.Fn rman_get_virtual "struct resource *r"
965f616912SHiten Pandya.Ft void
973e1cee04SRuslan Ermilov.Fn rman_set_bustag "struct resource *r" "bus_space_tag_t t"
985f616912SHiten Pandya.Ft bus_space_tag_t
993e1cee04SRuslan Ermilov.Fn rman_get_bustag "struct resource *r"
1005f616912SHiten Pandya.Ft void
1013e1cee04SRuslan Ermilov.Fn rman_set_bushandle "struct resource *r" "bus_space_handle_t h"
1025f616912SHiten Pandya.Ft bus_space_handle_t
1033e1cee04SRuslan Ermilov.Fn rman_get_bushandle "struct resource *r"
1045f616912SHiten Pandya.Ft void
1053e1cee04SRuslan Ermilov.Fn rman_set_rid "struct resource *r" "int rid"
1065f616912SHiten Pandya.Ft int
1073e1cee04SRuslan Ermilov.Fn rman_get_rid "struct resource *r"
1085f616912SHiten Pandya.Sh DESCRIPTION
1095f616912SHiten PandyaThe
1105f616912SHiten Pandya.Nm
1115f616912SHiten Pandyaset of functions provides a flexible resource management abstraction.
1125f616912SHiten PandyaIt is used extensively by the bus management code.
1135f616912SHiten PandyaIt implements the abstractions of region and resource.
1145f616912SHiten PandyaA region descriptor is used to manage a region; this could be memory or
1155f616912SHiten Pandyasome other form of bus space.
1165f616912SHiten Pandya.Pp
1175f616912SHiten PandyaEach region has a set of bounds.
1185f616912SHiten PandyaWithin these bounds, allocated segments may reside.
1195f616912SHiten PandyaEach segment, termed a resource, has several properties which are
1205f616912SHiten Pandyarepresented by a 16-bit flag register, as follows.
1215f616912SHiten Pandya.Bd -literal
1225f616912SHiten Pandya#define RF_ALLOCATED    0x0001 /* resource has been reserved */
1235f616912SHiten Pandya#define RF_ACTIVE       0x0002 /* resource allocation has been activated */
1245f616912SHiten Pandya#define RF_SHAREABLE    0x0004 /* resource permits contemporaneous sharing */
1255f616912SHiten Pandya#define RF_TIMESHARE    0x0008 /* resource permits time-division sharing */
1265f616912SHiten Pandya#define RF_WANTED       0x0010 /* somebody is waiting for this resource */
1275f616912SHiten Pandya#define RF_FIRSTSHARE   0x0020 /* first in sharing list */
1285f616912SHiten Pandya#define RF_PREFETCHABLE 0x0040 /* resource is prefetchable */
1295f616912SHiten Pandya.Ed
1305f616912SHiten Pandya.Pp
1315f616912SHiten PandyaThe remainder of the flag bits are used to represent the desired alignment
1325f616912SHiten Pandyaof the resource within the region.
1335f616912SHiten Pandya.Pp
1345f616912SHiten PandyaThe
1355f616912SHiten Pandya.Fn rman_init
1365f616912SHiten Pandyafunction initializes the region descriptor, pointed to by the
1375f616912SHiten Pandya.Fa rm
1385f616912SHiten Pandyaargument, for use with the resource management functions.
1395f616912SHiten PandyaIt also initializes any mutexes associated with the structure.
1405f616912SHiten Pandya.Pp
1415f616912SHiten PandyaThe
1425f616912SHiten Pandya.Fn rman_fini
1435f616912SHiten Pandyafunction frees any structures associated with the structure
1445f616912SHiten Pandyapointed to by the
1455f616912SHiten Pandya.Fa rm
1463e1cee04SRuslan Ermilovargument.
1473e1cee04SRuslan ErmilovIf any of the resources within the managed region have the
1485f616912SHiten Pandya.Dv RF_ALLOCATED
1495f616912SHiten Pandyaflag set, it will return
1505f616912SHiten Pandya.Er EBUSY ;
1515f616912SHiten Pandyaotherwise, any mutexes associated with the structure will be released
1525f616912SHiten Pandyaand destroyed, and the function will return 0.
1535f616912SHiten Pandya.Pp
1545f616912SHiten PandyaThe
1555f616912SHiten Pandya.Fn rman_manage_region
1565f616912SHiten Pandyafunction establishes the concept of a region which is under
1575f616912SHiten Pandya.Nm
1585f616912SHiten Pandyacontrol.
1595f616912SHiten PandyaThe
1605f616912SHiten Pandya.Fa rman
1615f616912SHiten Pandyaargument points to the region descriptor.
1623e1cee04SRuslan ErmilovThe
1633e1cee04SRuslan Ermilov.Fa start
1643e1cee04SRuslan Ermilovand
1653e1cee04SRuslan Ermilov.Fa end
1663e1cee04SRuslan Ermilovarguments specify the bounds of the region.
1675f616912SHiten Pandya.Pp
1685f616912SHiten Pandya.Em NOTE :
1695f616912SHiten PandyaThis interface is not robust against programming errors which
1705f616912SHiten Pandyaadd multiple copies of the same region.
1715f616912SHiten Pandya.Pp
1725f616912SHiten PandyaThe
1735f616912SHiten Pandya.Fn rman_reserve_resource_bound
1745f616912SHiten Pandyafunction is where the bulk of the
1753e1cee04SRuslan Ermilov.Nm
1763e1cee04SRuslan Ermilovlogic is located.
1775f616912SHiten PandyaIt attempts to reserve a contiguous range in the specified region
1785f616912SHiten Pandya.Fa rm
1795f616912SHiten Pandyafor the use of the device
1805f616912SHiten Pandya.Fa dev .
1813e1cee04SRuslan ErmilovThe caller can specify the
1823e1cee04SRuslan Ermilov.Fa start
1833e1cee04SRuslan Ermilovand
1843e1cee04SRuslan Ermilov.Fa end
1853e1cee04SRuslan Ermilovof an acceptable range, as well as
1865f616912SHiten Pandyaalignment, and the code will attempt to find a free segment which fits.
1875f616912SHiten PandyaThe default behavior is to allocate an exclusive segment, unless the
1885f616912SHiten Pandya.Dv RF_SHAREABLE
1895f616912SHiten Pandyaor
1905f616912SHiten Pandya.Dv RF_TIMESHARE
1915f616912SHiten Pandyaflags are set, in which case a shared
1925f616912SHiten Pandyasegment will be allocated.
1935f616912SHiten PandyaIf this shared segment already exists, the caller has its device
1945f616912SHiten Pandyaadded to the list of consumers.
1955f616912SHiten Pandya.Pp
1965f616912SHiten PandyaThe
1975f616912SHiten Pandya.Fn rman_reserve_resource
1985f616912SHiten Pandyafunction is used to reserve resources within a previously established region.
1995f616912SHiten PandyaIt is a simplified interface to
2005f616912SHiten Pandya.Fn rman_reserve_resource_bound
2015f616912SHiten Pandyawhich passes 0 for the
2025f616912SHiten Pandya.Fa flags
2035f616912SHiten Pandyaargument.
2045f616912SHiten Pandya.Pp
2055f616912SHiten PandyaThe
2065f616912SHiten Pandya.Fn rman_make_alignment_flags
2075f616912SHiten Pandyafunction returns the flag mask corresponding to the desired alignment
2085f616912SHiten Pandya.Fa size .
2095f616912SHiten PandyaThis should be used when calling
2105f616912SHiten Pandya.Fn rman_reserve_resource_bound .
2115f616912SHiten Pandya.Pp
2125f616912SHiten PandyaThe
2135f616912SHiten Pandya.Fn rman_release_resource
2145f616912SHiten Pandyafunction releases the reserved resource
2155f616912SHiten Pandya.Fa r .
2165f616912SHiten PandyaIt may attempt to merge adjacent free resources.
2175f616912SHiten Pandya.Pp
2185f616912SHiten PandyaThe
2195f616912SHiten Pandya.Fn rman_activate_resource
2205f616912SHiten Pandyafunction marks a resource as active, by setting the
2215f616912SHiten Pandya.Dv RF_ACTIVE
2225f616912SHiten Pandyaflag.
2235f616912SHiten PandyaIf this is a time shared resource, and the caller has not yet acquired
2245f616912SHiten Pandyathe resource, the function returns
2255f616912SHiten Pandya.Er EBUSY .
2265f616912SHiten Pandya.Pp
2275f616912SHiten PandyaThe
2285f616912SHiten Pandya.Fn rman_deactivate_resource
2295f616912SHiten Pandyafunction marks a resource
2305f616912SHiten Pandya.Fa r
2315f616912SHiten Pandyaas inactive, by clearing the
2325f616912SHiten Pandya.Dv RF_ACTIVE
2335f616912SHiten Pandyaflag.
2345f616912SHiten PandyaIf other consumers are waiting for this range, it will wakeup their threads.
2355f616912SHiten Pandya.Pp
2365f616912SHiten PandyaThe
2375f616912SHiten Pandya.Fn rman_await_resource
2385f616912SHiten Pandyafunction performs an asynchronous wait for a resource
2395f616912SHiten Pandya.Fa r
2405f616912SHiten Pandyato become inactive, that is, for the
2415f616912SHiten Pandya.Dv RF_ACTIVE
2425f616912SHiten Pandyaflag to be cleared.
2435f616912SHiten PandyaIt is used to enable cooperative sharing of a resource
2445f616912SHiten Pandyawhich can only be safely used by one thread at a time.
2455f616912SHiten PandyaThe arguments
2465f616912SHiten Pandya.Fa pri
2475f616912SHiten Pandyaand
2485f616912SHiten Pandya.Fa timo
2495f616912SHiten Pandyaare passed to the
2505f616912SHiten Pandya.Fn rman_await_resource
2515f616912SHiten Pandyafunction.
2525f616912SHiten Pandya.Pp
2535f616912SHiten PandyaThe
2545f616912SHiten Pandya.Fn rman_get_start ,
2555f616912SHiten Pandya.Fn rman_get_end ,
2563e1cee04SRuslan Ermilov.Fn rman_get_size ,
2573e1cee04SRuslan Ermilovand
2585f616912SHiten Pandya.Fn rman_get_flags
2595f616912SHiten Pandyafunctions return the bounds, size and flags of the previously reserved
2605f616912SHiten Pandyaresource
2615f616912SHiten Pandya.Fa r .
2625f616912SHiten Pandya.Pp
2635f616912SHiten PandyaThe
2645f616912SHiten Pandya.Fn rman_set_bustag
2653e1cee04SRuslan Ermilovfunction associates a
2663e1cee04SRuslan Ermilov.Vt bus_space_tag_t
2675f616912SHiten Pandya.Fa t
2685f616912SHiten Pandyawith the resource
2695f616912SHiten Pandya.Fa r .
2705f616912SHiten PandyaThe
2715f616912SHiten Pandya.Fn rman_get_bustag
2725f616912SHiten Pandyafunction is used to retrieve this tag once set.
2735f616912SHiten Pandya.Pp
2745f616912SHiten PandyaThe
2755f616912SHiten Pandya.Fn rman_set_bushandle
2763e1cee04SRuslan Ermilovfunction associates a
2773e1cee04SRuslan Ermilov.Vt bus_space_handle_t
2785f616912SHiten Pandya.Fa h
2795f616912SHiten Pandyawith the resource
2805f616912SHiten Pandya.Fa r .
2815f616912SHiten PandyaThe
2825f616912SHiten Pandya.Fn rman_get_bushandle
2835f616912SHiten Pandyafunction is used to retrieve this handle once set.
2845f616912SHiten Pandya.Pp
2855f616912SHiten PandyaThe
2865f616912SHiten Pandya.Fn rman_set_virtual
2875f616912SHiten Pandyafunction is used to associate a kernel virtual address with a resource
2885f616912SHiten Pandya.Fa r .
2895f616912SHiten PandyaThe
2905f616912SHiten Pandya.Fn rman_get_virtual
2915f616912SHiten Pandyafunction can be used to retrieve the KVA once set.
2925f616912SHiten Pandya.Pp
2935f616912SHiten PandyaThe
2945f616912SHiten Pandya.Fn rman_set_rid
2955f616912SHiten Pandyafunction associates a resource identifier with a resource
2965f616912SHiten Pandya.Fa r .
2973e1cee04SRuslan ErmilovThe
2983e1cee04SRuslan Ermilov.Fn rman_get_rid
2993e1cee04SRuslan Ermilovfunction retrieves this RID.
3005f616912SHiten Pandya.Pp
3015f616912SHiten PandyaThe
3025f616912SHiten Pandya.Fn rman_get_device
3035f616912SHiten Pandyafunction returns a pointer to the device which reserved the resource
3045f616912SHiten Pandya.Fa r .
3055f616912SHiten Pandya.Pp
3065f616912SHiten Pandya.Sh SEE ALSO
3075f616912SHiten Pandya.Xr bus_activate_resource 9 ,
3085f616912SHiten Pandya.Xr bus_alloc_resource 9 ,
3095f616912SHiten Pandya.Xr bus_release_resource 9 ,
3105f616912SHiten Pandya.Xr bus_set_resource 9 ,
3115f616912SHiten Pandya.Xr mutex 9
3125f616912SHiten Pandya.Sh AUTHORS
3135f616912SHiten PandyaThis man page was written by
3145f616912SHiten Pandya.An Bruce M Simpson Aq bms@spc.org .
315