ddi_segmap(9F)
NAME
ddi_segmap, ddi_segmap_setup - set up a user mapping using
seg_dev
SYNOPSIS
#include <sys/conf.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
int ddi_segmap(dev_t dev, off_t offset, struct as *asp,
caddr_t *addrp, off_t len, uint_t prot, uint_t maxprot,
uint_t flags, cred_t *credp);
int ddi_segmap_setup(dev_t dev, off_t offset, struct as
*asp, caddr_t *addrp, off_t len, uint_t prot, uint_t max-
prot, uint_t flags, cred_t *credp, ddi_device_acc_attr_t
*accattrp, uint_t rnumber);
INTERFACE LEVEL
These interfaces are obsolete. See devmap(9E) for an alter-
native to ddi_segmap(). Use devmap_setup(9F) instead of
ddi_segmap_setup().
PARAMETERS
dev The device whose memory is to be mapped.
offset
The offset within device memory at which the mapping
begins.
asp An opaque pointer to the user address space into which
the device memory should be mapped.
addrp Pointer to the starting address within the user
address space to which the device memory should be
mapped.
len Length (in bytes) of the memory to be mapped.
prot A bit field that specifies the protections. Some com-
binations of possible settings are:
PROT_READ
Read access is desired.
PROT_WRITE
Write access is desired.
PROT_EXEC
Execute access is desired.
PROT_USER
User-level access is desired (the mapping is
being done as a result of a mmap(2) system
call).
PROT_ALL
All access is desired.
maxprot
Maximum protection flag possible for attempted mapping
(the PROT_WRITE bit may be masked out if the user
opened the special file read-only). If (maxprot &
prot) != prot then there is an access violation.
flags Flags indicating type of mapping. Possible values are
(other bits may be set):
MAP_PRIVATE
Changes are private.
MAP_SHARED
Changes should be shared.
MAP_FIXED
The user specified an address in *addrp rather
than letting the system pick and address.
credp Pointer to user credential structure.
ddi_segmap_setup()
dev_acc_attr
Pointer to a ddi_device_acc_attr(9S) structure which
contains the device access attributes to apply to this
mapping.
rnumber
Index number to the register address space set.
DESCRIPTION
Future releases of Solaris will provide this function for
binary and source compatibility. However, for increased
functionality, use ddi_devmap_segmap(9F) instead. See
ddi_devmap_segmap(9F) for details.
ddi_segmap() and ddi_segmap_setup() set up user mappings to
device space. When setting up the mapping, the ddi_segmap()
and ddi_segmap_setup() routines call the mmap(9E) entry
point to validate the range to be mapped. When a user pro-
cess accesses the mapping, the drivers mmap(9E) entry point
is again called to retrieve the page frame number that needs
to be loaded. The mapping translations for that page are
then loaded on behalf of the driver by the DDI framework.
ddi_segmap() is typically used as the segmap(9E) entry in
the cb_ops(9S) structure for those devices that do not
choose to provide their own segmap(9E) entry point. How-
ever, some drivers may have their own segmap(9E) entry point
to do some initial processing on the parameters and then
call ddi_segmap() to establish the default memory mapping.
ddi_segmap_setup() is used in the drivers segmap(9E) entry
point to set up the mapping and assign device access attri-
butes to that mapping.
rnumber specifies the register set representing the range
of device memory being mapped. See ddi_device_acc_attr(9S)
for details regarding what device access attributes are
available.
ddi_segmap_setup() cannot be used directly in the cb_ops(9S)
structure and requires a driver to have a segmap(9E) entry
point.
RETURN VALUES
ddi_segmap() and ddi_segmap_setup() return the following
values:
0 Successful completion.
Non-zero
An error occurred. In particular, they return ENXIO if
the range to be mapped is invalid.
CONTEXT
ddi_segmap() and ddi_segmap_setup() can be called from user
or kernel context only.
ATTRIBUTES
See attributes(5) for a description of the following attri-
butes:
____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Stability Level | Obsolete |
|_____________________________|_____________________________|
SEE ALSO
mmap(2), attributes(5), devmap(9E), mmap(9E), segmap(9E),
devmap_setup(9F), ddi_mapdev(9F), cb_ops(9S),
ddi_device_acc_attr(9S)
Writing Device Drivers
NOTES
If driver notification of user accesses to the mappings is
required, the driver should use ddi_mapdev(9F) instead.
Man(1) output converted with
man2html