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

개요

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

ddi_segmap(9f)

ddi_segmap(9F)                 Kernel Functions                 ddi_segmap(9F)



NAME
       ddi_segmap, ddi_segmap_setup - set up a user mapping using seg_dev

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

       int ddi_segmap(dev_t dev, off_t offset, struct as *asp,
            caddr_t *addrp, off_t len, uint_t prot,
            uint_t maxprot, uint_t flags, cred_t *credp);


       int ddi_segmap_setup(dev_t dev, off_t offset, struct as *asp,
            caddr_t *addrp, off_t len, uint_t prot,
            uint_t maxprot, uint_t flags, cred_t *credp,
            ddi_device_acc_attr_t *accattrp, uint_t rnumber);

INTERFACE LEVEL
       These  interfaces  are  obsolete.  See devmap(9E) for an alternative to
       ddi_segmap(). Use devmap_setup(9F) instead of ddi_segmap_setup().

PARAMETERS
       dev        The device whose memory is to be mapped.


       offset     The offset within device memory at which the mapping begins.


       asp        An opaque pointer to the user address space into  which  the
                  device memory should be mapped.


       addrp      Pointer  to  the  starting  address  within the user 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.  Some  combina‐
                  tions of possible settings 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). If (maxprot & prot) != prot then there
                  is an access violation.


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

                  MAP_PRIVATE    Changes are private.


                  MAP_SHARED     Changes should be shared.


                  MAP_FIXED      The  user  specified  an  address  in  *addrp
                                 rather  than  letting  the  system  pick  and
                                 address.



       credp      Pointer to user credential structure.


   ddi_segmap_setup()
       dev_acc_attr    Pointer  to  a  ddi_device_acc_attr(9S) structure which
                       contains the device access attributes to apply to  this
                       mapping.


       rnumber         Index number to the register address space set.


DESCRIPTION
       Future  releases  of  Solaris will provide this function for binary and
       source  compatibility.  However,  for  increased   functionality,   use
       ddi_devmap_segmap(9F) instead. See ddi_devmap_segmap(9F) for details.


       ddi_segmap()  and  ddi_segmap_setup()  set  up  user mappings to device
       space.  When   setting   up   the   mapping,   the   ddi_segmap()   and
       ddi_segmap_setup()  routines  call the mmap(9E) entry point to validate
       the range to be mapped. When a user process accesses the  mapping,  the
       drivers mmap(9E) entry point is again called to retrieve the page frame
       number that needs to be loaded. The mapping translations for that  page
       are then loaded on behalf of the driver by the DDI framework.


       ddi_segmap()   is  typically  used  as  the  segmap(9E)  entry  in  the
       cb_ops(9S) structure for those devices that do not  choose  to  provide
       their  own segmap(9E) entry point. However, some drivers may have their
       own segmap(9E) entry point to do some initial processing on the parame‐
       ters  and  then  call ddi_segmap() to establish the default memory map‐
       ping.


       ddi_segmap_setup() is used in the drivers segmap(9E) entry point to set
       up  the  mapping  and  assign device access attributes to that mapping.
       rnumber specifies the register set representing  the  range  of  device
       memory  being mapped. See ddi_device_acc_attr(9S) for details regarding
       what device access attributes are available.


       ddi_segmap_setup() cannot be used directly in the cb_ops(9S)  structure
       and requires a driver to have a segmap(9E) entry point.

RETURN VALUES
       ddi_segmap() and ddi_segmap_setup() return the following values:

       0           Successful completion.


       Non-zero    An  error occurred. In particular, they return ENXIO if the
                   range to be mapped is invalid.


CONTEXT
       ddi_segmap() and ddi_segmap_setup() can be called from user  or  kernel
       context only.

ATTRIBUTES
       See attributes(7) for a description of the following attributes:


       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Stability LevelObsolete


SEE ALSO
       mmap(2), attributes(7), devmap(9E), mmap(9E),  segmap(9E),  devmap_set‐
       up(9F), cb_ops(9S), ddi_device_acc_attr(9S)


       Writing Device Drivers in Oracle Solaris 11.4



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