devmap_dup(9E)




NAME

     devmap_dup - device mapping duplication entry point


SYNOPSIS

     #include <sys/ddi.h>
     #include <sys/sunddi.h

      int  prefixdevmap_dup(devmap_cookie_t  dhp,   void   *pvtp,
     devmap_cookie_t new_dhp, void **new_pvtp);


INTERFACE LEVEL

     Solaris DDI specific (Solaris DDI).


ARGUMENTS

     dhp   An opaque mapping  handle  that  the  system  uses  to
           describe the mapping currently being duplicated.

     pvtp  Driver private mapping data for the mapping  currently
           being duplicated.

     new_dhp
           An opaque data  structure  that  the  system  uses  to
           describe the duplicated device mapping.

     new_pvtp
           A pointer to be filled in by device drivers  with  the
           driver  private mapping data for the duplicated device
           mapping.


DESCRIPTION

     The system calls  devmap_dup()  when  a  device  mapping  is
     duplicated, such as during the execution of the fork(2) sys-
     tem call.  The system expects devmap_dup() to  generate  new
     driver private data for the new mapping, and to set new_pvtp
     to point to it. new_dhp is the  handle  of  the  new  mapped
     object.

     A non-zero return value  from   devmap_dup()  will  cause  a
     corresponding operation such as fork() to fail.


RETURN VALUES

     devmap_dup() returns the following values:

     0     Successful completion.

     Non-zero
           An error occurred.


EXAMPLES

     static int
     xxdevmap_dup(devmap_cookie_t dhp, void *pvtp, devmap_cookie_t new_dhp,
         void **new_pvtp)

     {
         struct xxpvtdata    *prvtdata;
         struct xxpvtdata    *p = (struct xxpvtdata *)pvtp;
         struct xx_softc     *softc = p->softc;
         mutex_enter(&softc->mutex);
         /* Allocate a new private data structure */
         prvtdata = kmem_alloc(sizeof (struct xxpvtdata), KM_SLEEP);
         /* Return the new data */
         prvtdata->off = p->off;
         prvtdata->len = p->len;
         prvtdata->ctx = p->ctx;
         prvtdata->dhp = new_dhp;
         prvtdata->softc = p->softc;
         *new_pvtp = prvtdata;
         mutex_exit(&softc->mutex);
         return (0);
     }


SEE ALSO

     fork(2), devmap_callback_ctl(9S)

     Writing Device Drivers


Man(1) output converted with man2html