|
Driver Entry Points | mapdev_dup(9E) |
| mapdev_dup - device mapping duplication
entry point |
SYNOPSIS
|
#include <sys/sunddi.h>
int prefix mapdev_dup(ddi_mapdev_handle_t handle, void *devprivate, ddi_mapdev_handle_t new_handle, void **new_devprivatep); |
|
Solaris DDI specific (Solaris DDI).
|
|
-
handle
- The handle of the mapping that
is being duplicated.
-
devprivate
- Driver private mapping data from the mapping that is being duplicated.
-
new_handle
- An opaque pointer to the duplicated device mapping.
-
new_devprivatep
- A pointer to be filled in by the driver with the driver private mapping
data for the duplicated device mapping.
|
|
Future releases of Solaris will provide this function for binary
and source compatibility. However, for increased functionality, use devmap_dup(9E) instead. See devmap_dup(9E)
for details.
mapdev_dup() is called when a device mapping is
duplicated such as through fork(2). mapdev_dup() is expected to generate new driver private data for
the new mapping, and set new_devprivatep to point
to it. new_handle is the handle of the new mapped
object.
A non-zero return value from mapdev_dup() will
cause the corresponding operation, such as fork() to
fail.
|
|
mapdev_dup() returns 0
for success or the appropriate error number on failure.
|
|
This function is called from user context only.
|
| Example 1.
|
|
static int
xxmapdev_dup(ddi_mapdev_handle_t handle, void *devprivate,
ddi_mapdev_handle_t new_handle, void **new_devprivate)
{
struct xxpvtdata *pvtdata;
/* Allocate a new private data structure */
pvtdata = kmem_alloc(sizeof (struct xxpvtdata), KM_SLEEP);
/* Copy the old data to the new - device dependent*/
...
/* Return the new data */
*new_pvtdata = pvtdata;
return (0);
}
|
|
|
| |