devmap_do_ctxmgt(9f) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

devmap_do_ctxmgt(9f)

devmap_do_ctxmgt(9F)           Kernel Functions           devmap_do_ctxmgt(9F)

NAME
       devmap_do_ctxmgt - perform device context switching on a mapping

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

       int devmap_do_ctxmgt(devmap_cookie_t dhp, void *pvtp, offset_t off,
            size_t len, uint_t type,
            uint_t rw, int (*devmap_contextmgt)devmap_cookie_t,
            void *, offset_t, size_t, uint_t, uint_t);

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI).

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


       pvtp                 Driver private mapping data.


       off                  User offset within the logical  device  memory  at
                            which the access begins.


       len                  Length (in bytes) of the memory being accessed.


       devmap_contextmgt    The  address  of  driver  function that the system
                            will call to perform context switching on  a  map‐
                            ping. See devmap_contextmgt(9E) for details.


       type                 Type  of  access operation. Provided by devmap_ac‐
                            cess(9E). Should not be modified.


       rw                   Direction  of  access.  Provided   by   devmap_ac‐
                            cess(9E). Should not be modified.


DESCRIPTION
       Device  drivers  call devmap_do_ctxmgt() in the devmap_access(9E) entry
       point  to  perform  device  context  switching  on   a   mapping.   de‐
       vmap_do_ctxmgt()  passes  a pointer to a driver supplied callback func‐
       tion, devmap_contextmgt(9E), to the system that will perform the actual
       device context switching. If devmap_contextmgt(9E) is not a valid  dri‐
       ver callback function, the system will fail the memory access operation
       which  will result in a SIGSEGV or SIGBUS signal being delivered to the
       process.


       devmap_do_ctxmgt() performs context switching  on  the  mapping  object
       identified  by  dhp and pvtp in the range specified by off and len. The
       arguments dhp, pvtp, type, and rw are provided by the devmap_access(9E)
       entry point and must not be modified. The range  from  off  to  off+len
       must support context switching.


       The  system will pass through dhp, pvtp, off,  len, type, and rw to de‐
       vmap_contextmgt(9E) in order  to  perform  the  actual  device  context
       switching. The return value from devmap_contextmgt(9E) will be returned
       directly to devmap_do_ctxmgt().

RETURN VALUES
       0           Successful completion.


       Non-zero    An error occurred.


CONTEXT
       devmap_do_ctxmgt()  must  be called from the driver's devmap_access(9E)
       entry point.

EXAMPLES
       Example 1 Using devmap_do_ctxmgt in the devmap_access entry point.



       The following shows an example of using devmap_do_ctxmgt() in  the  de‐
       vmap_access(9E) entry point.


         ...
         #define OFF_DO_CTXMGT  0x40000000
         #define OFF_NORMAL     0x40100000
         #define CTXMGT_SIZE    0x100000
         #define NORMAL_SIZE    0x100000

         /*
          * Driver devmap_contextmgt(9E) callback function.
          */
         static int
         xx_context_mgt(devmap_cookie_t dhp, void *pvtp, offset_t offset,
             size_t length, uint_t type, uint_t rw)
         {
             ......
             /*
              * see devmap_contextmgt(9E) for an example
              */
         }

         /*
          * Driver devmap_access(9E) entry point
          */
         static int
         xxdevmap_access(devmap_cookie_t dhp, void *pvtp, offset_t off,
             size_t len, uint_t type, uint_t rw)
         {
             offset_t diff;
             int err;

             /*
              * check if off is within the range that supports
              * context management.
              */
             if ((diff = off - OFF_DO_CTXMG) >= 0 && diff < CTXMGT_SIZE) {
                 /*
                  * calculates the length for context switching
                  */
                 if ((len + off) > (OFF_DO_CTXMGT + CTXMGT_SIZE))
                     return (-1);
                 /*
                  * perform context switching
                  */
                 err = devmap_do_ctxmgt(dhp, pvtp, off, len, type,
                             rw, xx_context_mgt);
             /*
              * check if off is within the range that does normal
              * memory mapping.
              */
             } else if ((diff = off - OFF_NORMAL) >= 0 && diff < NORMAL_SIZE) {
                 if ((len + off) > (OFF_NORMAL + NORMAL_SIZE))
                     return (-1);
                 err = devmap_default_access(dhp, pvtp, off, len, type, rw);
             } else
                 return (-1);

             return (err);
         }



SEE ALSO
       devmap_access(9E), devmap_contextmgt(9E), devmap_default_access(9F)


       Writing Device Drivers in Oracle Solaris 11.4

Oracle Solaris 11.4               22 Jan 1997             devmap_do_ctxmgt(9F)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3