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

개요

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

devmap_load(9f)

devmap_unload(9F)              Kernel Functions              devmap_unload(9F)

NAME
       devmap_unload,  devmap_load  -  control  validation  of  memory address
       translations

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

       int devmap_load(devmap_cookie_t dhp, offset_t off, size_t len,
            uint_t type, uint_t rw);


       int devmap_unload(devmap_cookie_t dhp, offset_t off, size_t len);

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI).

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


       off    User  offset within the logical device memory at which the load‐
              ing or unloading of the address translations begins.


       len    Length (in bytes) of the range being affected.


   devmap_load() only
       type    Type of access operation.


       rw      Direction of access.


DESCRIPTION
       devmap_unload() and devmap_load() are used to control the validation of
       the memory mapping described by dhp in the specified range.  devmap_un‐
       load()  invalidates the mapping translations and will generate calls to
       the devmap_access(9E) entry point next time the  mapping  is  accessed.
       The drivers use devmap_load() to validate the mapping translations dur‐
       ing memory access.


       A  typical  use of devmap_unload() and devmap_load() is in the driver's
       context management callback function, devmap_contextmgt(9E). To  manage
       a  device context, a device driver calls devmap_unload() on the context
       about to be switched out. It switches  contexts,  and  then  calls  de‐
       vmap_load()  on the context switched in. devmap_unload() can be used to
       unload the mappings of other processes as well as the mappings  of  the
       calling  process,  but  devmap_load() can only be used to load the map‐
       pings of the calling process. Attempting to load another process's map‐
       pings with devmap_load() will result in a system panic.


       For both routines, the range to be affected is defined by the  off  and
       len  arguments.  Requests affect the entire page containing the off and
       all pages up to and including the page containing the last byte as  in‐
       dicated  by  off  +  len. The arguments type and rw are provided by the
       system to the calling function (for example, devmap_contextmgt(9E)) and
       should not be modified.


       Supplying a value of 0 for the len argument affects all addresses  from
       the  off  to the end of the mapping. Supplying a value of 0 for the off
       argument and a value of 0 for len argument affect all addresses in  the
       mapping.


       A  non-zero  return  value from either devmap_unload() or devmap_load()
       will cause the corresponding operation to fail. The failure may  result
       in a SIGSEGV or SIGBUS signal being delivered to the process.

RETURN VALUES
       0           Successful completion.


       Non-zero    An error occurred.


CONTEXT
       These routines can be called from user or kernel context only.

EXAMPLES
       Example 1 Managing a One-Page Device Context



       The following shows an example of managing a device context that is one
       page in length.


         struct xx_context cur_ctx;

         static int
         xxdevmap_contextmgt(devmap_cookie_t dhp, void *pvtp, offset_t off,
            size_t len, uint_t type, uint_t rw)
         {
             int err;
             devmap_cookie_t cur_dhp;
             struct xx_pvt *p;
             struct xx_pvt *pvp = (struct xx_pvt *)pvtp;
             /* enable access callbacks for the current mapping */
             if (cur_ctx != NULL && cur_ctx != pvp->ctx) {
                 p = cur_ctx->pvt;
                 /*
                  * unload the region from off to the end of the mapping.
                  */
                 cur_dhp = p->dhp;
                 if ((err = devmap_unload(cur_dhp, off, len)) != 0)
                     return (err);
             }
             /* Switch device context - device dependent*/
             ...
             /* Make handle the new current mapping */
             cur_ctx = pvp->ctx;
             /*
              * Disable callbacks and complete the access for the
              * mapping that generated this callback.
              */
             return (devmap_load(pvp->dhp, off, len, type, rw));
         }


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


       Writing Device Drivers in Oracle Solaris 11.4

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