devmap_umem_setup(9F)




NAME

     devmap_devmem_setup, devmap_umem_setup - set  driver  memory
     mapping parameters


SYNOPSIS

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

     int  devmap_devmem_setup(devmap_cookie_t   dhp,   dev_info_t
     *dip,   struct   devmap_callback_ctl   *callbackops,  uint_t
     rnumber, offset_t roff, size_t len, uint_t  maxprot,  uint_t
     flags, ddi_device_acc_attr_t *accattrp);

     int devmap_umem_setup(devmap_cookie_t dhp, dev_info_t  *dip,
     struct  devmap_callback_ctl  *callbackops, ddi_umem_cookie_t
     cookie, offset_t koff, size_t len,  uint_t  maxprot,  uint_t
     flags, ddi_device_acc_attr_t *accattrp);


INTERFACE LEVEL

     Solaris DDI specific (Solaris DDI).


PARAMETERS

     devmap_devmem_setup() parameters:

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

     dip   Pointer to the device's dev_info structure.

     callbackops
           Pointer to a  devmap_callback_ctl(9S)  structure.  The
           structure  contains pointers to device driver-supplied
           functions that manage events on  the  device  mapping.
           The  framework  will  copy the structure to the system
           private memory.

     rnumber
           Index number to the register address space set.

     roff  Offset into the register address space.

     len   Length (in bytes) of the mapping to be mapped.

     maxprot
           Maximum protection flag possible  for  attempted  map-
           ping. Some combinations of possible settings are:

           PROT_READ
                 Read access is allowed.

           PROT_WRITE
                 Write access is allowed.

           PROT_EXEC
                 Execute access is allowed.

           PROT_USER
                 User-level access is  allowed  (the  mapping  is
                 being  done  as  a  result  of  a mmap(2) system
                 call).

           PROT_ALL
                 All access is allowed.

     flags Must be set to 0.

     accattrp
           Pointer to a  ddi_device_acc_attr(9S)  structure.  The
           structure  contains the device access attributes to be
           applied to this range of memory.

     devmap_umem_setup() parameters:

     dhp   An opaque data  structure  that  the  system  uses  to
           describe the mapping.

     dip   Pointer to the device's dev_info structure.

     callbackops
           Pointer to a  devmap_callback_ctl(9S)  structure.  The
           structure  contains pointers to device driver-supplied
           functions that manage events on the device mapping.

     cookie
           A kernel memory cookie (see ddi_umem_alloc(9F)).

     koff  Offset into the kernel memory defined by cookie.

     len   Length (in bytes) of the mapping to be mapped.

     maxprot
           Maximum protection flag possible  for  attempted  map-
           ping. Some combinations of possible settings are:

           PROT_READ
                 Read access is allowed.

           PROT_WRITE
                 Write access is allowed.

           PROT_EXEC
                 Execute access is allowed.

           PROT_USER
                 User-level access is  allowed  (the  mapping  is
                 being  done  as  a  result  of  a mmap(2) system
                 call).

           PROT_ALL
                 All access is allowed.

     flags Must be set to 0.

     accattrp
           Pointer  to   a   ddi_device_acc_attr(9S)   structure.
           Ignored  in  the  current release. Reserved for future
           use.


DESCRIPTION

     devmap_devmem_setup() and devmap_umem_setup()  are  used  in
     the  devmap(9E)  entry point to pass mapping parameters from
     the driver to the system.

     dhp is a device mapping handle that the system uses to store
     all  mapping parameters of a physical contiguous memory. The
     system copies the data pointed to by callbackops to a system
     private  memory.  This  allows  the  driver to free the data
     after  returning  from   either   devmap_devmem_setup()   or
     devmap_umem_setup().  The  driver is notified of user events
     on  the  mappings  via   the   entry   points   defined   by
     devmap_callback_ctl(9S).  The driver is notified of the fol-
     lowing user events:

     Mapping Setup
           User has called mmap(2) to create  a  mapping  to  the
           device memory.

     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, exit(2).

     See devmap_map(9E), devmap_access(9E),  devmap_dup(9E),  and
     devmap_unmap(9E) for details on these entry points.

     By specifying a valid  callbackops  to  the  system,  device
     drivers  can manage events on a device mapping. For example,
     the devmap_access(9E) entry  point  allows  the  drivers  to
     perform context switching by unloading the mappings of other
     processes and to load the mapping of  the  calling  process.
     Device  drivers  may specify NULL to callbackops which means
     the drivers do not want to be notified by the system.

     The maximum protection allowed for the mapping is  specified
     in  maxprot.  accattrp defines the device access attributes.
     See ddi_device_acc_attr(9S) for more details.

     devmap_devmem_setup() is used for device memory  to  map  in
     the  register  set  given by rnumber and the offset into the
     register address  space  given  by  roff.  The  system  uses
     rnumber  and roff to go up the device tree to get the physi-
     cal address that  corresponds  to  roff.  The  range  to  be
     affected  is defined by len and roff. The range from roff to
     roff + len must be a physical  contiguous  memory  and  page
     aligned.

     Drivers use devmap_umem_setup() for kernel memory to map  in
     the  kernel  memory  described by cookie and the offset into
     the kernel memory space given by koff. cookie  is  a  kernel
     memory  pointer  obtained from ddi_umem_alloc(9F). If cookie
     is NULL, devmap_umem_setup() returns -1.  The  range  to  be
     affected  is defined by len and koff. The range from koff to
     koff + len must be within the limits of  the  kernel  memory
     described by koff + len and must be page aligned.

     Drivers use devmap_umem_setup() to export the kernel  memory
     allocated  by  ddi_umem_alloc(9F)  to user space. The system
     selects a user virtual address that is aligned with the ker-
     nel  virtual address being mapped to avoid cache incoherence
     if the mapping is not MAP_FIXED.


RETURN VALUES

     0     Successful completion.

     -1    An error occurred.


CONTEXT

     devmap_devmem_setup() and devmap_umem_setup() can be  called
     from user, kernel, and interrupt context.


SEE ALSO

     exit(2),   fork(2),    mmap(2),    munmap(2),    devmap(9E),
     ddi_umem_alloc(9F),                 ddi_device_acc_attr(9S),
     devmap_callback_ctl(9S)

     Writing Device Drivers


Man(1) output converted with man2html