home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / vmalloc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.1 KB  |  70 lines

  1. #ifndef _LINUX_VMALLOC_H
  2. #define _LINUX_VMALLOC_H
  3.  
  4. #include <linux/spinlock.h>
  5. #include <asm/page.h>        /* pgprot_t */
  6.  
  7. /* bits in vm_struct->flags */
  8. #define VM_IOREMAP    0x00000001    /* ioremap() and friends */
  9. #define VM_ALLOC    0x00000002    /* vmalloc() */
  10. #define VM_MAP        0x00000004    /* vmap()ed pages */
  11. /* bits [20..32] reserved for arch specific ioremap internals */
  12.  
  13. /*
  14.  * Maximum alignment for ioremap() regions.
  15.  * Can be overriden by arch-specific value.
  16.  */
  17. #ifndef IOREMAP_MAX_ORDER
  18. #define IOREMAP_MAX_ORDER    (7 + PAGE_SHIFT)    /* 128 pages */
  19. #endif
  20.  
  21. struct vm_struct {
  22.     void            *addr;
  23.     unsigned long        size;
  24.     unsigned long        flags;
  25.     struct page        **pages;
  26.     unsigned int        nr_pages;
  27.     unsigned long        phys_addr;
  28.     struct vm_struct    *next;
  29. };
  30.  
  31. /*
  32.  *    Highlevel APIs for driver use
  33.  */
  34. extern void *vmalloc(unsigned long size);
  35. extern void *vmalloc_node(unsigned long size, int node);
  36. extern void *vmalloc_exec(unsigned long size);
  37. extern void *vmalloc_32(unsigned long size);
  38. extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
  39. extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask,
  40.                 pgprot_t prot);
  41. extern void *__vmalloc_node(unsigned long size, gfp_t gfp_mask,
  42.                 pgprot_t prot, int node);
  43. extern void vfree(void *addr);
  44.  
  45. extern void *vmap(struct page **pages, unsigned int count,
  46.             unsigned long flags, pgprot_t prot);
  47. extern void vunmap(void *addr);
  48.  
  49. /*
  50.  *    Lowlevel-APIs (not for driver use!)
  51.  */
  52. extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags);
  53. extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
  54.                     unsigned long start, unsigned long end);
  55. extern struct vm_struct *get_vm_area_node(unsigned long size,
  56.                     unsigned long flags, int node);
  57. extern struct vm_struct *remove_vm_area(void *addr);
  58. extern struct vm_struct *__remove_vm_area(void *addr);
  59. extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
  60.             struct page ***pages);
  61. extern void unmap_vm_area(struct vm_struct *area);
  62.  
  63. /*
  64.  *    Internals.  Dont't use..
  65.  */
  66. extern rwlock_t vmlist_lock;
  67. extern struct vm_struct *vmlist;
  68.  
  69. #endif /* _LINUX_VMALLOC_H */
  70.