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 $ 5996bce568SHiten Pandya.\" 6008931e35SSascha Wildner.Dd November 29, 2016 6196bce568SHiten Pandya.Dt RMAN 9 6296bce568SHiten Pandya.Os 6396bce568SHiten Pandya.Sh NAME 6496bce568SHiten Pandya.Nm rman , 6596bce568SHiten Pandya.Nm rman_activate_resource , 66577cd717SSascha Wildner.\".Nm rman_await_resource , 6796bce568SHiten Pandya.Nm rman_deactivate_resource , 6896bce568SHiten Pandya.Nm rman_fini , 6996bce568SHiten Pandya.Nm rman_init , 7096bce568SHiten Pandya.Nm rman_manage_region , 7196bce568SHiten Pandya.Nm rman_release_resource , 7296bce568SHiten Pandya.Nm rman_reserve_resource , 7396bce568SHiten Pandya.\".Nm rman_reserve_resource_bound , 7496bce568SHiten Pandya.Nm rman_make_alignment_flags , 7596bce568SHiten Pandya.Nm rman_get_start , 7696bce568SHiten Pandya.Nm rman_get_end , 7796bce568SHiten Pandya.Nm rman_get_device , 7896bce568SHiten Pandya.Nm rman_get_size , 7996bce568SHiten Pandya.Nm rman_get_flags , 8096bce568SHiten Pandya.Nm rman_set_virtual , 8196bce568SHiten Pandya.Nm rman_get_virtual , 8296bce568SHiten Pandya.Nm rman_set_bustag , 8396bce568SHiten Pandya.Nm rman_get_bustag , 8496bce568SHiten Pandya.Nm rman_set_bushandle , 855700433eSFranco Fichtner.Nm rman_get_bushandle 8696bce568SHiten Pandya.\".Nm rman_set_rid , 8796bce568SHiten Pandya.\".Nm rman_get_rid 8896bce568SHiten Pandya.Nd resource management functions 8996bce568SHiten Pandya.Sh SYNOPSIS 9096bce568SHiten Pandya.In sys/param.h 9196bce568SHiten Pandya.In sys/rman.h 9296bce568SHiten Pandya.Ft int 9396bce568SHiten Pandya.Fn rman_activate_resource "struct resource *r" 94577cd717SSascha Wildner.\".Ft int 95577cd717SSascha Wildner.\".Fn rman_await_resource "struct resource *r" "int pri2" "int timo" 9696bce568SHiten Pandya.Ft int 9796bce568SHiten Pandya.Fn rman_deactivate_resource "struct resource *r" 9896bce568SHiten Pandya.Ft int 9996bce568SHiten Pandya.Fn rman_fini "struct rman *rm" 10096bce568SHiten Pandya.Ft int 10146a468d4SSascha Wildner.Fn rman_init "struct rman *rm" "int cpuid" 10296bce568SHiten Pandya.Ft int 10396bce568SHiten Pandya.Fn rman_manage_region "struct rman *rm" "u_long start" "u_long end" 10496bce568SHiten Pandya.Ft int 10596bce568SHiten Pandya.Fn rman_release_resource "struct resource *r" 10696bce568SHiten Pandya.Ft "struct resource *" 10796bce568SHiten Pandya.Fo rman_reserve_resource 10896bce568SHiten Pandya.Fa "struct rman *rm" "u_long start" "u_long end" "u_long count" 10908931e35SSascha Wildner.Fa "u_int flags" "device_t dev" 11096bce568SHiten Pandya.Fc 11196bce568SHiten Pandya.\".Ft "struct resource *" 11296bce568SHiten Pandya.\".Fo rman_reserve_resource_bound 11396bce568SHiten Pandya.\".Fa "struct rman *rm" "u_long start" "u_long end" "u_long count" 11408931e35SSascha Wildner.\".Fa "u_long bound" "u_int flags" "device_t dev" 11596bce568SHiten Pandya.\".Fc 11696bce568SHiten Pandya.Ft uint32_t 117*c9df3008SSascha Wildner.Fn rman_make_alignment_flags "size_t size" 11896bce568SHiten Pandya.Pp 11996bce568SHiten Pandya.Ft u_long 12096bce568SHiten Pandya.Fn rman_get_start "struct resource *r" 12196bce568SHiten Pandya.Ft u_long 12296bce568SHiten Pandya.Fn rman_get_end "struct resource *r" 12308931e35SSascha Wildner.Ft device_t 12496bce568SHiten Pandya.Fn rman_get_device "struct resource *r" 12596bce568SHiten Pandya.Ft u_long 12696bce568SHiten Pandya.Fn rman_get_size "struct resource *r" 12796bce568SHiten Pandya.Ft u_int 12896bce568SHiten Pandya.Fn rman_get_flags "struct resource *r" 12996bce568SHiten Pandya.Ft void 13096bce568SHiten Pandya.Fn rman_set_virtual "struct resource *r" "void *v" 13196bce568SHiten Pandya.Ft "void *" 13296bce568SHiten Pandya.Fn rman_get_virtual "struct resource *r" 13396bce568SHiten Pandya.Ft void 13496bce568SHiten Pandya.Fn rman_set_bustag "struct resource *r" "bus_space_tag_t t" 13596bce568SHiten Pandya.Ft bus_space_tag_t 13696bce568SHiten Pandya.Fn rman_get_bustag "struct resource *r" 13796bce568SHiten Pandya.Ft void 13896bce568SHiten Pandya.Fn rman_set_bushandle "struct resource *r" "bus_space_handle_t h" 13996bce568SHiten Pandya.Ft bus_space_handle_t 14096bce568SHiten Pandya.Fn rman_get_bushandle "struct resource *r" 14196bce568SHiten Pandya.\".Ft void 14296bce568SHiten Pandya.\".Fn rman_set_rid "struct resource *r" "int rid" 14396bce568SHiten Pandya.\".Ft int 14496bce568SHiten Pandya.\".Fn rman_get_rid "struct resource *r" 14596bce568SHiten Pandya.Sh DESCRIPTION 14696bce568SHiten PandyaThe 14796bce568SHiten Pandya.Nm 14896bce568SHiten Pandyaset of functions provides a flexible resource management abstraction, 14996bce568SHiten Pandyathey are used extensively by the bus management code. 15096bce568SHiten PandyaIt implements the abstractions of region and resource. 15196bce568SHiten PandyaA region descriptor is used to manage a region; this could be memory or 15296bce568SHiten Pandyasome other form of bus space. 15396bce568SHiten Pandya.Pp 15496bce568SHiten PandyaEach region has a set of bounds. 15596bce568SHiten PandyaWithin these bounds, allocated segments may reside. 15696bce568SHiten PandyaEach segment, termed a resource, has several properties which are 15796bce568SHiten Pandyarepresented by a 16-bit flag register, as follows. 15896bce568SHiten Pandya.Bd -literal 15996bce568SHiten Pandya#define RF_ALLOCATED 0x0001 /* resource has been reserved */ 16096bce568SHiten Pandya#define RF_ACTIVE 0x0002 /* resource allocation has been activated */ 16196bce568SHiten Pandya#define RF_SHAREABLE 0x0004 /* resource permits contemporaneous sharing */ 16296bce568SHiten Pandya#define RF_TIMESHARE 0x0008 /* resource permits time-division sharing */ 16396bce568SHiten Pandya#define RF_WANTED 0x0010 /* somebody is waiting for this resource */ 16496bce568SHiten Pandya#define RF_FIRSTSHARE 0x0020 /* first in sharing list */ 16596bce568SHiten Pandya#define RF_PREFETCHABLE 0x0040 /* resource is prefetchable */ 16696bce568SHiten Pandya.Ed 16796bce568SHiten Pandya.Pp 16896bce568SHiten PandyaThe remainder of the flag bits are used to represent the desired alignment 16996bce568SHiten Pandyaof the resource within the region. 17096bce568SHiten Pandya.Pp 17196bce568SHiten PandyaThe 17296bce568SHiten Pandya.Fn rman_init 17396bce568SHiten Pandyafunction initializes the region descriptor, pointed to by the 17496bce568SHiten Pandya.Fa rm 17596bce568SHiten Pandyaargument, for use with the resource management functions. 17696bce568SHiten PandyaIt also initializes any mutexes associated with the structure. 17796bce568SHiten Pandya.Pp 17896bce568SHiten PandyaThe 17996bce568SHiten Pandya.Fn rman_fini 18096bce568SHiten Pandyafunction frees any structures associated with the structure 18196bce568SHiten Pandyapointed to by the 18296bce568SHiten Pandya.Fa rm 18396bce568SHiten Pandyaargument. 18496bce568SHiten PandyaIf any of the resources within the managed region have the 18596bce568SHiten Pandya.Dv RF_ALLOCATED 18696bce568SHiten Pandyaflag set, it will return 18796bce568SHiten Pandya.Er EBUSY ; 18896bce568SHiten Pandyaotherwise, any mutexes associated with the structure will be released 18996bce568SHiten Pandyaand destroyed, and the function will return 0. 19096bce568SHiten Pandya.Pp 19196bce568SHiten PandyaThe 19296bce568SHiten Pandya.Fn rman_manage_region 19396bce568SHiten Pandyafunction establishes the concept of a region which is under 19496bce568SHiten Pandya.Nm 19596bce568SHiten Pandyacontrol. 19696bce568SHiten PandyaThe 19796bce568SHiten Pandya.Fa rman 19896bce568SHiten Pandyaargument points to the region descriptor. 19996bce568SHiten PandyaThe 20096bce568SHiten Pandya.Fa start 20196bce568SHiten Pandyaand 20296bce568SHiten Pandya.Fa end 20396bce568SHiten Pandyaarguments specify the bounds of the region. 20496bce568SHiten Pandya.Pp 20596bce568SHiten Pandya.Em NOTE : 20696bce568SHiten PandyaThis interface is not robust against programming errors which 20796bce568SHiten Pandyaadd multiple copies of the same region. 20896bce568SHiten Pandya.\".Pp 20996bce568SHiten Pandya.\"The 21096bce568SHiten Pandya.\".Fn rman_reserve_resource_bound 21196bce568SHiten Pandya.\"function is where the bulk of the 21296bce568SHiten Pandya.\".Nm 21396bce568SHiten Pandya.\"logic is located. 21496bce568SHiten Pandya.\"It attempts to reserve a contiguous range in the specified region 21596bce568SHiten Pandya.\".Fa rm 21696bce568SHiten Pandya.\"for the use of the device 21796bce568SHiten Pandya.\".Fa dev . 21896bce568SHiten Pandya.\"The caller can specify the 21996bce568SHiten Pandya.\".Fa start 22096bce568SHiten Pandya.\"and 22196bce568SHiten Pandya.\".Fa end 22296bce568SHiten Pandya.\"of an acceptable range, as well as 22396bce568SHiten Pandya.\"alignment, and the code will attempt to find a free segment which fits. 22496bce568SHiten Pandya.\"The default behavior is to allocate an exclusive segment, unless the 22596bce568SHiten Pandya.\".Dv RF_SHAREABLE 22696bce568SHiten Pandya.\"or 22796bce568SHiten Pandya.\".Dv RF_TIMESHARE 22896bce568SHiten Pandya.\"flags are set, in which case a shared 22996bce568SHiten Pandya.\"segment will be allocated. 23096bce568SHiten Pandya.\"If this shared segment already exists, the caller has its device 23196bce568SHiten Pandya.\"added to the list of consumers. 23296bce568SHiten Pandya.Pp 23396bce568SHiten PandyaThe 23496bce568SHiten Pandya.Fn rman_reserve_resource 23596bce568SHiten Pandyafunction is used to reserve resources within a previously established region. 23601d6ccadSSascha Wildner.\"It is a simplified interface to 23701d6ccadSSascha Wildner.\".Fn rman_reserve_resource_bound 23801d6ccadSSascha Wildner.\"which passes 0 for the 23901d6ccadSSascha Wildner.\".Fa flags 24001d6ccadSSascha Wildner.\"argument. 24196bce568SHiten Pandya.Pp 24296bce568SHiten PandyaThe 24396bce568SHiten Pandya.Fn rman_make_alignment_flags 24496bce568SHiten Pandyafunction returns the flag mask corresponding to the desired alignment 24596bce568SHiten Pandya.Fa size . 24601d6ccadSSascha Wildner.\"This should be used when calling 24701d6ccadSSascha Wildner.\".Fn rman_reserve_resource_bound . 24896bce568SHiten Pandya.Pp 24996bce568SHiten PandyaThe 25096bce568SHiten Pandya.Fn rman_release_resource 25196bce568SHiten Pandyafunction releases the reserved resource 25296bce568SHiten Pandya.Fa r . 25396bce568SHiten PandyaIt may attempt to merge adjacent free resources. 25496bce568SHiten Pandya.Pp 25596bce568SHiten PandyaThe 25696bce568SHiten Pandya.Fn rman_activate_resource 25796bce568SHiten Pandyafunction marks a resource as active, by setting the 25896bce568SHiten Pandya.Dv RF_ACTIVE 25996bce568SHiten Pandyaflag. 26096bce568SHiten PandyaIf this is a time shared resource, and the caller has not yet acquired 26196bce568SHiten Pandyathe resource, the function returns 26296bce568SHiten Pandya.Er EBUSY . 26396bce568SHiten Pandya.Pp 26496bce568SHiten PandyaThe 26596bce568SHiten Pandya.Fn rman_deactivate_resource 26696bce568SHiten Pandyafunction marks a resource 26796bce568SHiten Pandya.Fa r 26896bce568SHiten Pandyaas inactive, by clearing the 26996bce568SHiten Pandya.Dv RF_ACTIVE 27096bce568SHiten Pandyaflag. 27196bce568SHiten PandyaIf other consumers are waiting for this range, it will wakeup their threads. 27296bce568SHiten Pandya.Pp 273577cd717SSascha Wildner.\"The 274577cd717SSascha Wildner.\".Fn rman_await_resource 275577cd717SSascha Wildner.\"function performs an asynchronous wait for a resource 276577cd717SSascha Wildner.\".Fa r 277577cd717SSascha Wildner.\"to become inactive, that is, for the 278577cd717SSascha Wildner.\".Dv RF_ACTIVE 279577cd717SSascha Wildner.\"flag to be cleared. 280577cd717SSascha Wildner.\"It is used to enable cooperative sharing of a resource 281577cd717SSascha Wildner.\"which can only be safely used by one thread at a time. 282577cd717SSascha Wildner.\"The arguments 283577cd717SSascha Wildner.\".Fa pri 284577cd717SSascha Wildner.\"and 285577cd717SSascha Wildner.\".Fa timo 286577cd717SSascha Wildner.\"are passed to the 287577cd717SSascha Wildner.\".Fn rman_await_resource 288577cd717SSascha Wildner.\"function. 289577cd717SSascha Wildner.\".Pp 29096bce568SHiten PandyaThe 29196bce568SHiten Pandya.Fn rman_get_start , 29296bce568SHiten Pandya.Fn rman_get_end , 29396bce568SHiten Pandya.Fn rman_get_size , 29496bce568SHiten Pandyaand 29596bce568SHiten Pandya.Fn rman_get_flags 29696bce568SHiten Pandyafunctions return the bounds, size and flags of the previously reserved 29796bce568SHiten Pandyaresource 29896bce568SHiten Pandya.Fa r . 29996bce568SHiten Pandya.Pp 30096bce568SHiten PandyaThe 30196bce568SHiten Pandya.Fn rman_set_bustag 30296bce568SHiten Pandyafunction associates a 30396bce568SHiten Pandya.Vt bus_space_tag_t 30496bce568SHiten Pandya.Fa t 30596bce568SHiten Pandyawith the resource 30696bce568SHiten Pandya.Fa r . 30796bce568SHiten PandyaThe 30896bce568SHiten Pandya.Fn rman_get_bustag 30996bce568SHiten Pandyafunction is used to retrieve this tag once set. 31096bce568SHiten Pandya.Pp 31196bce568SHiten PandyaThe 31296bce568SHiten Pandya.Fn rman_set_bushandle 31396bce568SHiten Pandyafunction associates a 31496bce568SHiten Pandya.Vt bus_space_handle_t 31596bce568SHiten Pandya.Fa h 31696bce568SHiten Pandyawith the resource 31796bce568SHiten Pandya.Fa r . 31896bce568SHiten PandyaThe 31996bce568SHiten Pandya.Fn rman_get_bushandle 32096bce568SHiten Pandyafunction is used to retrieve this handle once set. 32196bce568SHiten Pandya.Pp 32296bce568SHiten PandyaThe 32396bce568SHiten Pandya.Fn rman_set_virtual 32496bce568SHiten Pandyafunction is used to associate a kernel virtual address with a resource 32596bce568SHiten Pandya.Fa r . 32696bce568SHiten PandyaThe 32796bce568SHiten Pandya.Fn rman_get_virtual 32896bce568SHiten Pandyafunction can be used to retrieve the KVA once set. 32996bce568SHiten Pandya.\".Pp 33096bce568SHiten Pandya.\"The 33196bce568SHiten Pandya.\".Fn rman_set_rid 33296bce568SHiten Pandya.\"function associates a resource identifier with a resource 33396bce568SHiten Pandya.\".Fa r . 33496bce568SHiten Pandya.\"The 33596bce568SHiten Pandya.\".Fn rman_get_rid 33696bce568SHiten Pandya.\"function retrieves this RID. 33796bce568SHiten Pandya.Pp 33896bce568SHiten PandyaThe 33996bce568SHiten Pandya.Fn rman_get_device 34096bce568SHiten Pandyafunction returns a pointer to the device which reserved the resource 34196bce568SHiten Pandya.Fa r . 34296bce568SHiten Pandya.Sh SEE ALSO 34396bce568SHiten Pandya.\".Xr bus_activate_resource 9 , 3444041d919SSascha Wildner.Xr bus_alloc_resource 9 , 3454041d919SSascha Wildner.Xr bus_release_resource 9 34696bce568SHiten Pandya.\".Xr bus_set_resource 9 , 34796bce568SHiten Pandya.Sh AUTHORS 34896bce568SHiten Pandya.An -nosplit 34996bce568SHiten PandyaThis manual page was written by 350c616d378SFranco Fichtner.An Bruce M Simpson Aq Mt bms@spc.org , 35196bce568SHiten Pandyalater revised by 352c616d378SFranco Fichtner.An Hiten Pandya Aq Mt hmp@backplane.com . 353