Document bus_space_reserve(9), bus_space_reserve_subregion(9),

bus_space_release(9), bus_space_reservation_map(9),
bus_space_reservation_unmap(9), bus_space_reservation_addr(9),
bus_space_reservation_size(9), bus_space_handle_is_equal(9).
This commit is contained in:
dyoung 2011-07-06 18:27:31 +00:00
parent 22c58b4530
commit 9063212b84
1 changed files with 247 additions and 7 deletions

View File

@ -1,4 +1,4 @@
.\" $NetBSD: bus_space.9,v 1.42 2011/07/01 22:06:19 dyoung Exp $
.\" $NetBSD: bus_space.9,v 1.43 2011/07/06 18:27:31 dyoung Exp $
.\"
.\" Copyright (c) 1997 The NetBSD Foundation, Inc.
.\" All rights reserved.
@ -27,7 +27,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd July 1, 2011
.Dd July 6, 2011
.Dt BUS_SPACE 9
.Os
.Sh NAME
@ -38,6 +38,7 @@
.Nm bus_space_copy_region_4 ,
.Nm bus_space_copy_region_8 ,
.Nm bus_space_free ,
.Nm bus_space_handle_is_equal ,
.Nm bus_space_is_equal ,
.Nm bus_space_map ,
.Nm bus_space_mmap ,
@ -73,6 +74,14 @@
.Nm bus_space_read_stream_2 ,
.Nm bus_space_read_stream_4 ,
.Nm bus_space_read_stream_8 ,
.Nm bus_space_release ,
.Nm bus_space_reservation_addr ,
.Nm bus_space_reservation_init ,
.Nm bus_space_reservation_size ,
.Nm bus_space_reservation_map ,
.Nm bus_space_reservation_unmap ,
.Nm bus_space_reserve ,
.Nm bus_space_reserve_subregion ,
.Nm bus_space_set_region_1 ,
.Nm bus_space_set_region_2 ,
.Nm bus_space_set_region_4 ,
@ -108,7 +117,31 @@
.Sh SYNOPSIS
.In sys/bus.h
.Ft bool
.Fn bus_space_handle_is_equal "bus_space_tag_t space" \
"bus_space_handle_t handle1" "bus_space_handle_t handle2"
.Ft bool
.Fn bus_space_is_equal "bus_space_tag_t space1" "bus_space_tag_t space2"
.Ft void
.Fn bus_space_release "bus_space_tag_t t" "bus_space_reservation_t *bsr"
.Ft int
.Fn bus_space_reserve "bus_space_tag_t t" "bus_addr_t bpa" "bus_size_t size" \
"int flags" "bus_space_reservation_t *bsrp"
.Ft int
.Fn bus_space_reserve_subregion "bus_space_tag_t t" \
"bus_addr_t reg_start" "bus_addr_t reg_end" \
"bus_size_t size" "bus_size_t alignment" "bus_size_t boundary" \
"int flags" "bus_space_reservation_t *bsrp"
.Ft void
.Fn bus_space_reservation_init "bus_space_reservation_t *bsr" \
"bus_addr_t addr" "bus_size_t size"
.Ft bus_size_t
.Fn bus_space_reservation_size "bus_space_reservation_t *bsr"
.Ft int
.Fn bus_space_reservation_map "bus_space_tag_t t" \
"bus_space_reservation_t *bsr" "int flags" "bus_space_handle_t *bshp"
.Ft void
.Fn bus_space_reservation_unmap "bus_space_tag_t t" "bus_space_handle_t bsh" \
"bus_size_t size"
.Ft int
.Fn bus_space_map "bus_space_tag_t space" "bus_addr_t address" \
"bus_size_t size" "int flags" "bus_space_handle_t *handlep"
@ -544,6 +577,25 @@ type is used to describe a mapping of a range of bus space.
Its contents are machine-dependent and should be considered opaque by
machine-independent code.
This type is used when performing bus space access operations.
.It Fa bus_space_reservation_t
.Pp
The
.Fa bus_space_reservation_t
type is used to describe a range of bus space.
It logically consists of a
.Fa bus_addr_t ,
the first address in the range,
and a
.Fa bus_size_t ,
the length in bytes of the range.
Machine-independent code creates and interrogates a
.Fa bus_space_reservation_t
using a constructor,
.Fn bus_space_reservation_init ,
and accessor functions,
.Fn bus_space_reservation_addr
and
.Fn bus_space_reservation_size .
.El
.Sh COMPARING BUS SPACE TAGS
To check whether or not one
@ -563,7 +615,9 @@ instead.
Bus space must be mapped before it can be used, and should be
unmapped when it is no longer needed.
The
.Fn bus_space_map
.Fn bus_space_map ,
.Fn bus_space_reservation_map ,
.Fn bus_space_reservation_unmap ,
and
.Fn bus_space_unmap
functions provide these capabilities.
@ -579,7 +633,7 @@ function allows such subregions to be created.
.Pp
The
.Fn bus_space_map
function maps the region of bus space named by the
function exclusively reserves and maps the region of bus space named by the
.Fa space ,
.Fa address ,
and
@ -666,11 +720,44 @@ ISA memory and I/O spaces).
Mapped regions may contain areas for which there is no device on the bus.
If space in those areas is accessed, the results are bus-dependent.
.Pp
.It Fn bus_space_reservation_map "space" "bsr" "flags" "handlep"
.Pp
The
.Fn bus_space_reservation_map
function is similar to
.Fn bus_space_map but it maps a region of bus space
that was previously reserved by a call to
.Fn bus_space_reserve
or
.Fn bus_space_reserve_subregion .
The region is given by the
.Fa space
and
.Fa bsr
arguments.
If successful, it returns zero and fills in the bus space handle pointed
to by
.Fa handlep
with the handle that can be used to access the mapped region.
If unsuccessful, it will return non-zero and leave the bus space handle
pointed to by
.Fa handlep
in an undefined state.
.Pp
A region mapped by
.Fn bus_space_reservation_map
may only be unmapped by a call to
.Fn bus_space_reservation_unmap .
.Pp
For more details, see the description of
.Fn bus_space_map .
.Pp
.It Fn bus_space_unmap "space" "handle" "size"
.Pp
The
.Fn bus_space_unmap
function unmaps a region of bus space mapped with
function unmaps and relinquishes a region of bus space reserved and
mapped with
.Fn bus_space_map .
When unmapping a region, the
.Fa size
@ -691,6 +778,26 @@ In that case,
.Fn bus_space_unmap
will never return.
.Pp
.It Fn bus_space_reservation_unmap "space" "handle" "size"
.Pp
The
.Fn bus_space_reservation_unmap
function is similar to
.Fn bus_space_unmap
but it should be called on handles
mapped by
.Fn bus_space_reservation_map
and only on such handles.
Unlike
.Fn bus_space_unmap ,
.Fn bus_space_reservation_unmap
does not relinquish exclusive use of the bus space named by
.Fa handle
and
.Fa size ;
that is the job of
.Fn bus_space_release .
.Pp
.It Fn bus_space_subregion "space" "handle" "offset" "size" "nhandlep"
.Pp
The
@ -785,6 +892,16 @@ The
.Fa prot
argument indicates the memory protection requested by the user application
for the range.
.Pp
.It Fn bus_space_handle_is_equal "space" "handle1" "handle2"
Use
.Fn bus_space_handle_is_equal to
check whether or not
.Fa handle1
and
.Fa handle2
refer to regions starting at the same address in the bus space
.Fa space .
.El
.Sh ALLOCATING AND FREEING BUS SPACE
Some devices require or allow bus space to be allocated by the operating
@ -792,10 +909,19 @@ system for device use.
When the devices no longer need the space, the
operating system should free it for use by other devices.
The
.Fn bus_space_alloc
.Fn bus_space_alloc ,
.Fn bus_space_free ,
.Fn bus_space_reserve ,
.Fn bus_space_reserve_subregion ,
and
.Fn bus_space_free
.Fn bus_space_release
functions provide these capabilities.
The functions
.Fn bus_space_reserve ,
.Fn bus_space_reserve_subregion ,
and
.Fn bus_space_release
are not yet available on all architectures.
.Pp
.Bl -ohang -compact
.It Fn bus_space_alloc "space" "reg_start" "reg_end" "size" "alignment" \
@ -873,6 +999,120 @@ The
function can be used on handles created by
.Fn bus_space_alloc .
.Pp
.It Fn bus_space_reserve "t" "bpa" "size" "flags" "bsrp"
.Pp
The
.Fn bus_space_reserve
function reserves, for the caller's exclusive use,
.Fa size
bytes starting at the address
.Fa bpa
in the space referenced by
.Fa t .
.Pp
.Fn bus_space_reserve
does
.Em not
map the space.
The caller should use
.Fn bus_space_reservation_map
to map the reservation.
.Fa flags
contains a hint how the caller may map the reservation, later.
Whenever possible, callers should pass the same flags to
.Fn bus_space_reserve
as they will pass to
.Fn bus_space_reservation_map
to map the reservation.
.Pp
On success,
.Fn bus_space_reserve
records the reservation at
.Fa bsrp
and returns 0.
On failure,
.Fa bsrp
is undefined, and
.Fn bus_space_reserve
returns a non-zero error code.
Possible error codes include
.Bl -tag -width EOPNOTSUPP -offset indent
.It Dv EOPNOTSUPP
.Fn bus_space_reserve
is not supported on this architecture, or
.Fa flags
was incompatible with the bus space represented by
.Fa t .
.It Dv ENOMEM
There was not sufficient bus space at
.Fa bpa
to satisfy the request.
.El
.Pp
.It Fn bus_space_reserve_subregion "t" "reg_start" "reg_end" \
"size" "alignment" "boundary" "flags" "bsrp"
.Pp
The
.Fn bus_space_reserve_subregion
function reserves, for the caller's exclusive use,
.Fa size
bytes in the space referenced by
.Fa t .
The parameters
.Fa reg_start ,
.Fa reg_end ,
.Fa alignment ,
.Fa boundary ,
and
.Fa flags
each work alike to the
.Fn bus_space_alloc
parameters of the same names.
.Pp
On success,
.Fn bus_space_reserve_subregion
records the reservation at
.Fa bsrp
and returns 0.
On failure,
.Fa bsrp
is undefined, and
.Fn bus_space_reserve_subregion
returns a non-zero error code.
Possible error codes include
.Bl -tag -width EOPNOTSUPP -offset indent
.It Dv EOPNOTSUPP
.Fn bus_space_reserve
is not supported on this architecture, or
.Fa flags
was incompatible with the bus space represented by
.Fa t .
.It Dv ENOMEM
There was not sufficient bus space at
.Fa bpa
to satisfy the request.
.El
.Pp
.It Fn bus_space_release "t" "bsr"
.Pp
The
.Fn bus_space_release
function releases the bus space
.Fa bsr
in
.Fa t
that was previously reserved by
.Fn bus_space_reserve
or
.Fn bus_space_reserve_subregion .
.Pp
If
.Fn bus_space_release
is called on a reservation that has been mapped by
.Fn bus_space_reservation_map
without subsequently being unmapped, the behavior of the system is
undefined.
.Pp
.It Fn bus_space_free "space" "handle" "size"
.Pp
The