MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Driver Entry Points                                    segmap(9E)



NAME
     segmap - map device memory into user space

SYNOPSIS
     #include 
     #include 
     #include 
     #include 
     #include 
     #include 



     int prefixsegmap(devt dev, offt off, struct as *asp, caddrt *addrp,
          offt len, unsigned int prot, unsigned int maxprot, unsigned int flags,
          credt *credp);


INTERFACE LEVEL
     Architecture independent level 2 (DKI only).

ARGUMENTS
     dev         Device whose memory is to be mapped.


     off         Offset within device  memory  at  which  mapping
                 begins.


     asp         Pointer to the address space into which the dev-
                 ice memory should be mapped.


     addrp       Pointer to the address in the address  space  to
                 which the device memory should be mapped.


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


     prot        A bit field that specifies the protections. Pos-
                 sible settings are:

                 PROTREAD      Read access is desired.


                 PROTWRITE     Write access is desired.


                 PROTEXEC      Execute access is desired.





SunOS 5.11          Last change: 14 Jan 1997                    1






Driver Entry Points                                    segmap(9E)



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


                 PROTAL       All access is desired.



     maxprot     Maximum protection flag possible  for  attempted
                 mapping; the PROTWRITE bit may be masked out if
                 the user opened the special file read-only.


     flags       Flags  indicating  type  of  mapping.   Possible
                 values are (other bits may be set):

                 MAPSHARED      Changes should be shared.


                 MAPRIVATE     Changes are private.



     credp      Pointer to the  user credentials structure.


DESCRIPTION
     The  segmap() entry point is an optional routine for charac-
     ter  drivers that support memory mapping.  The  mmap(2) sys-
     tem call, when applied to a character special  file,  allows
     device memory to be mapped into user space for direct access
     by the user application.


     Typically, a character driver  that  needs  to  support  the
     mmap(2)  system  call  supplies  either  an devmap(9E) entry
     point, or both an  devmap(9E) and a   segmap()  entry  point
     routine  (see the devmap(9E) reference page). If no segmap()
     entry point is provided for the driver,  devmapsetup(9F) is
     used as a default.


     A driver for a memory-mapped device would  provide  a   seg-
     map() entry point if it:

         o    needs to maintain a separate context for each  user
              mapping.  See  devmapsetup(9F) for details.

         o    needs to assign device  access  attributes  to  the
              user mapping.



SunOS 5.11          Last change: 14 Jan 1997                    2






Driver Entry Points                                    segmap(9E)



     The responsibilities of a  segmap() entry point are:

         o    Verify that the range, defined by  offset and  len,
              to  be  mapped is valid for  the device. Typically,
              this task is performed by calling  the   devmap(9E)
              entry   point.   Note   that   if   you  are  using
              ddidevmapsegmap(9F) or devmapsetup(9F) to set up
              the  mapping,  it  will  call your devmap(9E) entry
              point for you to validate the range to be mapped.

         o    Assign device access  attributes  to  the  mapping.
              See            ddidevmapsegmap(9F),           and
              ddideviceaccattr(9S) for details.

         o    Set up device contexts for the user mapping if your
              device    requires     context    switching.    See
              devmapsetup(9F) for details.

         o    Perform the mapping with ddidevmapsegmap(9F),  or
              devmapsetup(9F) and return the status if it fails.

RETURN VALUES
     The segmap() routine should return  0 if the driver is  suc-
     cessful  in  performing the memory map of its device address
     space into the specified address space.


     The segmap() must return an error  number  on  failure.  For
     example,   valid  error  numbers  would  be   ENXIO  if  the
     offset/length pair specified exceeds the limits of the  dev-
     ice memory, or  EINVAL if the driver detects an invalid type
     of mapping attempted.


     If  one  of  the  mapping  routines  ddidevmapsegmap()  or
     devmapsetup()fails,   you  must  return  the  error  number
     returned by the respective routine.

SEE ALSO
     mmap(2),            devmap(9E),            devmapsetup(9F),
     ddidevmapsegmap(9F), ddideviceaccattr(9S)


     Writing Device Drivers











SunOS 5.11          Last change: 14 Jan 1997                    3



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™