ddi_mapdev(9F)
NAME
ddi_mapdev - create driver-controlled mapping of device
SYNOPSIS
#include <sys/ddi.h>
#include <sys/sunddi.h>
int ddi_mapdev(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 *cred, struct ddi_mapdev_ctl *ctl,
ddi_mapdev_handle_t *handlep, void *devprivate);
INTERFACE LEVEL
This interface is obsolete. devmap_setup(9F) should be used
instead.
PARAMETERS
dev The device whose memory is to be mapped.
offset
The offset within device memory at which the mapping
begins.
as 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.
maxprot
Maximum protection flag possible for attempted map-
ping.
flags Flags indicating type of mapping.
cred Pointer to the user credentials structure.
ctl A pointer to a ddi_mapdev_ctl(9S) structure. The
structure contains pointers to device driver-supplied
functions that manage events on the device mapping.
handlep
An opaque pointer to a device mapping handle. A handle
to the new device mapping is generated and placed into
the location pointed to by *handlep. If the call
fails, the value of *handlep is undefined.
devprivate
Driver private mapping data. This value is passed into
each mapping call back routine.
DESCRIPTION
Future releases of Solaris will provide this function for
binary and source compatibility. However, for increased
functionality, use devmap_setup(9F) instead. See
devmap_setup(9F) for details.
ddi_mapdev() sets up user mappings to device space. The
driver is notified of user events on the mappings via the
entry points defined by ctl.
The user events that the driver is notified of are:
access
User has accessed an address in the mapping that has
no translations.
duplication
User has duplicated the mapping. Mappings are dupli-
cated when the process calls fork(2).
unmapping
User has called munmap(2) on the mapping or is exit-
ing.
See mapdev_access(9E), mapdev_dup(9E), and mapdev_free(9E)
for details on these entry points.
The range to be mapped, defined by offset and len must be
valid.
The arguments dev, asp, addrp, len, prot, maxprot, flags,
and cred are provided by the segmap(9E) entry point and
should not be modified. See segmap(9E) for a description of
these arguments. Unlike ddi_segmap(9F), the drivers mmap(9E)
entry point is not called to verify the range to be mapped.
With the handle, device drivers can use
ddi_mapdev_intercept(9F) and ddi_mapdev_nointercept(9F) to
inform the system of whether or not they are interested in
being notified when the user process accesses the mapping.
By default, user accesses to newly created mappings will
generate a call to the mapdev_access() entry point. The
driver is always notified of duplications and unmaps.
The device may also use the handle to assign certain charac-
teristics to the mapping. See
ddi_mapdev_set_device_acc_attr(9F) for details.
The device driver can use these interfaces to implement a
device context and control user accesses to the device
space. ddi_mapdev()is typically called from the segmap(9E)
entry point.
RETURN VALUES
ddi_mapdev() returns zero on success and non-zero on
failure. The return value from ddi_mapdev() should be used
as the return value for the drivers segmap() entry point.
CONTEXT
This routine 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
fork(2), mmap(2), munmap(2), attributes(5),
mapdev_access(9E), mapdev_dup(9E), mapdev_free(9E),
mmap(9E), segmap(9E), devmap_setup(9F),
ddi_mapdev_intercept(9F), ddi_mapdev_nointercept(9F),
ddi_mapdev_set_device_acc_attr(9F), ddi_segmap(9F),
ddi_mapdev_ctl(9S)
Writing Device Drivers
NOTES
Only mappings of type MAP_PRIVATE should be used with
ddi_mapdev().
Man(1) output converted with
man2html