The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

mapdev_access (9)
  • >> mapdev_access (9) ( Solaris man: Ядро )
  • 
    NAME
         mapdev_access - device mapping access entry point
    
    SYNOPSIS
         #include <sys/sunddi.h>
    
         int  prefixmapdev_access(ddi_mapdev_handle_t  handle,   void
         *devprivate, off_t offset);
    
    INTERFACE LEVEL
         Solaris DDI specific (Solaris DDI).
    
    PARAMETERS
         handle
               An opaque pointer to a device mapping.
    
         devprivate
               Driver private mapping data from ddi_mapdev(9F).
    
         offset
               The offset within device memory at  which  the  access
               occurred.
    
    DESCRIPTION
         Future releases of Solaris will provide  this  function  for
         binary  and  source  compatibility.   However, for increased
         functionality,       use         devmap_access(9E)        or
         devmap_contextmgt(9E)  instead.   See  devmap_access(9E)  or
         devmap_contextmgt(9E) for details.
    
         mapdev_access() is called when an access is  made to a  map-
         ping  that has either been newly created with ddi_mapdev(9F)
         or   that   has   been    enabled    with    a    call    to
         ddi_mapdev_intercept(9F).
    
         mapdev_access() is passed the  handle of the  mapped  object
         on  which an access has occurred. This handle uniquely iden-
         tifies  the  mapping  and  is  used  as   an   argument   to
         ddi_mapdev_intercept(9F)  or  ddi_mapdev_nointercept(9F)  to
         control whether or not future accesses to the  mapping  will
         cause    mapdev_access()   to   be   called.   In   general,
         mapdev_access() should call  ddi_mapdev_intercept()  on  the
         mapping   that   is   currently   in   use   and  then  call
         ddi_mapdev_nointercept() on the mapping that generated  this
         call  to  mapdev_access().  This  will ensure that a call to
         mapdev_access() will be generated for  the  current  mapping
         next time it is accessed.
    
         mapdev_access() must at least call  ddi_mapdev_nointercept()
         with  offset passed in in order for the access to succeed. A
         request to allow accesses affects the entire page containing
         the offset.
         Accesses to portions of mappings that have been disabled  by
         a  call to ddi_mapdev_nointercept() will not generate a call
         to     mapdev_access().     A     subsequent     call     to
         ddi_mapdev_intercept()  will  enable   mapdev_access() to be
         called again.
    
         A non-zero return value from  mapdev_access() will cause the
         corresponding operation to fail. The failure may result in a
         SIGSEGV or SIGBUS signal being delivered to the process.
    
    RETURN VALUES
         mapdev_access() should return  0 on success, -1 if there was
         a    hardware    error,    or    the   return   value   from
         ddi_mapdev_intercept() or ddi_mapdev_nointercept().
    
    CONTEXT
         This function is called from user 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.
    
         ddi_mapdev_handle_t cur_hdl;
         static int
         xxmapdev_access(ddi_mapdev_handle_t handle, void *devprivate,
             off_t offset)
         {
                        int  err;
                        /* enable calls to mapdev_access for the current mapping */
                     if (cur_hdl != NULL) {
                                  if ((err = ddi_mapdev_intercept(cur_hdl, off, 0)) != 0)
                                               return (err);
                        }
                        /* Switch device context - device dependent*/
                   ...
                   /* Make handle the new current mapping */
                        cur_hdl = handle;
    
                     /*
                         * Disable callbacks and complete the access for the
                         * mapping that generated this callback.
                         */
    
                    return (ddi_mapdev_nointercept(handle, off, 0));
         }
    
    SEE ALSO
         mmap(2),   mapdev_dup(9E),   mapdev_free(9E),    segmap(9E),
         ddi_mapdev(9F),                    ddi_mapdev_intercept(9F),
         ddi_mapdev_nointercept(9F), ddi_mapdev_ctl(9S)
         Writing Device Drivers
    
    
    
    


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру