segmap(9e) 맨 페이지 - 윈디하나의 솔라나라

개요

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

segmap(9e)

segmap(9E)                    Driver Entry Points                   segmap(9E)

NAME
       segmap - map device memory into user space

SYNOPSIS
       #include <sys/types.h>
       #include <sys/mman.h>
       #include <sys/param.h>
       #include <sys/vm.h>
       #include <sys/ddi.h>
       #include <sys/sunddi.h>

       int prefix_segmap(dev_t dev, off_t off, struct as *asp, caddr_t *addrp,
            off_t len, unsigned int prot, unsigned int maxprot, unsigned int flags,
            cred_t *cred_p);

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 device memory
                  should be mapped.


       addrp      Pointer to the address in the address space to which the de‐
                  vice memory should be mapped.


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


       prot       A bit field that specifies the  protections.  Possible  set‐
                  tings are:

                  PROT_READ     Read access is desired.


                  PROT_WRITE    Write access is desired.


                  PROT_EXEC     Execute access is desired.


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


                  PROT_ALL      All access is desired.



       maxprot    Maximum  protection flag possible for attempted mapping; the
                  PROT_WRITE bit may be masked out if the user opened the spe‐
                  cial file read-only.


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

                  MAP_SHARED     Changes should be shared.


                  MAP_PRIVATE    Changes are private.



       cred_p     Pointer to the user credentials structure.


DESCRIPTION
       The segmap() entry point is an optional routine for  character  drivers
       that support memory mapping. The mmap(2) system 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, devmap_setup(9F)
       is used as a default.


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

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


           o      needs to assign device access attributes to  the  user  map‐
                  ping.



       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 per‐
                  formed by calling the devmap(9E) entry point. Note  that  if
                  you  are  using ddi_devmap_segmap(9F) or devmap_setup(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
                  ddi_devmap_segmap(9F),  and  ddi_device_acc_attr(9S) for de‐
                  tails.


           o      Set up device contexts for the user mapping if  your  device
                  requires  context  switching.  See  devmap_setup(9F) for de‐
                  tails.


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


RETURN VALUES
       The  segmap()  routine  should  return 0 if the driver is successful in
       performing the memory map of its device address space into  the  speci‐
       fied 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 ex‐
       ceeds the limits of the device memory, or EINVAL if the driver  detects
       an invalid type of mapping attempted.


       If   one   of   the   mapping   routines   ddi_devmap_segmap()  or  de‐
       vmap_setup()fails, you must return the error number returned by the re‐
       spective routine.

SEE ALSO
       mmap(2),    devmap(9E),    ddi_devmap_segmap(9F),     devmap_setup(9F),
       ddi_device_acc_attr(9S)


       Writing Device Drivers in Oracle Solaris 11.4

Oracle Solaris 11.4            9 September 2024                     segmap(9E)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3