*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> vm_map_pageable (9r)              
Title
Content
Arch
Section
 

vm_map_pageable(9r)

Contents


NAME    [Toc]    [Back]

       vm_map_pageable  - General: Sets pageability of the specified
 address range

SYNOPSIS    [Toc]    [Back]

       kern_return_t vm_map_pageable(
               vm_map_t map,
               vm_offset_t start,
               vm_offset_t end,
               vm_prot_t access_type );

ARGUMENTS    [Toc]    [Back]

       Specifies the address map associated  with  an  individual
       process.   Specifies  the  starting  address of an address
       range. Typically, this is the address of the user's buffer
       where  the  DMA  operation  occurs.   Specifies the ending
       address of a consecutive range of addresses beginning with
       the  start  argument.  Specifies the access mode to be set
       for memory specified by the start and end arguments.   You
       can  set  this  argument to VM_PROT_NONE or to the bitwise
       inclusive OR  of  the  protection  bits  VM_PROT_READ  and
       VM_PROT_WRITE.   These   bits  are  defined  in  the  file
       <mach/vm_prot.h> and have the following meanings: Modifies
       the  memory  attributes  so  that  the  specified range of
       addresses is no longer locked. This should be  done  after
       the  DMA  operation  has  completed.   Verifies  that  the
       specifed range of addresses is readable by  the  specified
       process. If so, the range of addresses is locked in memory
       to remain stable throughout the DMA  operation.   Verifies
       that  the  specifed  range of addresses is writable by the
       specified process. If so, the range of addresses is locked
       in  memory  to remain stable throughout the DMA operation.
       Verifies that the specifed range of addresses is  readable
       and writable by the specified process. If so, the range of
       addresses is locked in memory to remain stable  throughout
       the DMA operation.

DESCRIPTION    [Toc]    [Back]

       The vm_map_pageable routine ensures that the address range
       you specified in the start and end arguments  is  accessible.
  If  the address range is accessible by the specified
       process, the memory associated  with  this  address  range
       will  have  its locked attributes modified as specified by
       the access_type argument. A kernel module  can  call  this
       routine  prior  to  performing  a  DMA operation to ensure
       that: The currently running  process  has  read  or  write
       access  permission  to the user's buffer The memory representing
 the user's buffer is locked  so  that  it  remains
       available throughout the DMA operation.

NOTES    [Toc]    [Back]

       This  routine  may  block  in  the  kernel. Therefore, you
       should release all locks and lower the SPL before  calling
       vm_map_pageable.   When  the  routine  returns, you should
       relock the data and check the data integrity.







RETURN VALUES    [Toc]    [Back]

       Upon successful completion,  the  vm_map_pageable  routine
       returns  the  value  0  (zero).  Otherwise,  it  returns a
       nonzero value to indicate an error.

EXAMPLE    [Toc]    [Back]

       The following code fragment shows how the  vm_map_pageable
       routine  ensures  that  the user's buffer is accessible to
       cause the corresponding memory to be locked:

          if (vm_map_pageable(current_task()->map,
                  trunc_page(bp->b_un.b_addr),
                  round_page(bp->b_un.b_addr                    +
       (int)bp->b_bcount),
                  (bp->b_flags   ==   B_READ   ?  VM_PROT_READ  :
       VM_PROT_WRITE)))                                         {
       /***************************************************
        * Here you implement the code to perform the      *
        * actual DMA operation.  Upon conclusion of the   *
        * DMA operation, add the following code to        *
        * release the locked attribute.                   *
        ***************************************************/

               if (vm_map_pageable(current_task()->map,
                       trunc_page(bp->b_un.b_addr),
                       round_page(bp->b_un.b_addr               +
       (int)bp->b_bcount),
                       VM_PROT_NONE)) {

SEE ALSO    [Toc]    [Back]

      
      
       Routines: current_task(9r), round_page(9r), trunc_page(9r)



                                              vm_map_pageable(9r)
[ Back ]
 Similar pages
Name OS Title
vm_map_delete FreeBSD deallocate an address range from a map
vm_map_remove FreeBSD remove a virtual address range from a map
lsetdepth IRIX sets the depth range
lrgbrange IRIX sets the range of RGB colors used for depth-cueing
pmap_map FreeBSD map a physical memory range into kernel virtual address (KVA) space
lshaderange IRIX sets range of color indices used for depth-cueing
KSEG_TO_PHYS Tru64 General: Converts a kernel-unmapped virtual address to a physical address
copy_to_phys Tru64 General: Copies data from a virtual address to a physical address
svatophys Tru64 General: Converts a system virtual address to a physical address
vtop Tru64 General: Converts any virtual address to a physical address
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service