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