Future releases of Solaris will provide this function for binary
and source compatibility. However, for increased functionality, use devmap_access(9E) or devmap_contextmgt(9E) instead. See devmap_access(9E)
or devmap_contextmgt(9E) for details.
mapdev_access() is called when an access is made
to a mapping that has either been newly created with ddi_mapdev(9F) or that has been enabled
with a call to ddi_mapdev_intercept(9F).
mapdev_access() is passed the handle of the mapped object on which an access has occurred. This
handle uniquely identifies the mapping and is used as an argument to ddi_mapdev_intercept(9F) or ddi_mapdev_nointercept(9F) to control whether or not future accesses to the
mapping will cause mapdev_access() to be called. In
general, mapdev_access() should call ddi_mapdev_intercept() on the mapping that is currently in use and then call ddi_mapdev_nointercept() on the mapping that generated this call
to mapdev_access(). This will ensure that a call to mapdev_access() will be generated for the current mapping next
time it is accessed.
mapdev_access() must at least call ddi_mapdev_nointercept() with offset passed in in order for the
access to succeed. A request to allow accesses affects the entire page containing
the offset.
Accesses to portions of mappings that have been disabled by a call
to ddi_mapdev_nointercept() will not generate a call
to mapdev_access(). A subsequent call to ddi_mapdev_intercept() will enable mapdev_access()
to be called again.
A non-zero return value from mapdev_access() will
cause the corresponding operation to fail. The failure may result in a SIGSEGV or SIGBUS signal being delivered to the process.
|