linux/include/linux/vmalloc.h
<<
>>
Prefs
   1#ifndef _LINUX_VMALLOC_H
   2#define _LINUX_VMALLOC_H
   3
   4#include <linux/spinlock.h>
   5#include <asm/page.h>           /* pgprot_t */
   6
   7struct vm_area_struct;
   8
   9/* bits in vm_struct->flags */
  10#define VM_IOREMAP      0x00000001      /* ioremap() and friends */
  11#define VM_ALLOC        0x00000002      /* vmalloc() */
  12#define VM_MAP          0x00000004      /* vmap()ed pages */
  13#define VM_USERMAP      0x00000008      /* suitable for remap_vmalloc_range */
  14#define VM_VPAGES       0x00000010      /* buffer for pages was vmalloc'ed */
  15/* bits [20..32] reserved for arch specific ioremap internals */
  16
  17/*
  18 * Maximum alignment for ioremap() regions.
  19 * Can be overriden by arch-specific value.
  20 */
  21#ifndef IOREMAP_MAX_ORDER
  22#define IOREMAP_MAX_ORDER       (7 + PAGE_SHIFT)        /* 128 pages */
  23#endif
  24
  25struct vm_struct {
  26        /* keep next,addr,size together to speedup lookups */
  27        struct vm_struct        *next;
  28        void                    *addr;
  29        unsigned long           size;
  30        unsigned long           flags;
  31        struct page             **pages;
  32        unsigned int            nr_pages;
  33        unsigned long           phys_addr;
  34};
  35
  36/*
  37 *      Highlevel APIs for driver use
  38 */
  39extern void *vmalloc(unsigned long size);
  40extern void *vmalloc_user(unsigned long size);
  41extern void *vmalloc_node(unsigned long size, int node);
  42extern void *vmalloc_exec(unsigned long size);
  43extern void *vmalloc_32(unsigned long size);
  44extern void *vmalloc_32_user(unsigned long size);
  45extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
  46extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask,
  47                                pgprot_t prot);
  48extern void vfree(void *addr);
  49
  50extern void *vmap(struct page **pages, unsigned int count,
  51                        unsigned long flags, pgprot_t prot);
  52extern void vunmap(void *addr);
  53
  54extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
  55                                                        unsigned long pgoff);
  56void vmalloc_sync_all(void);
  57 
  58/*
  59 *      Lowlevel-APIs (not for driver use!)
  60 */
  61
  62static inline size_t get_vm_area_size(const struct vm_struct *area)
  63{
  64        /* return actual size without guard page */
  65        return area->size - PAGE_SIZE;
  66}
  67
  68extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags);
  69extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
  70                                        unsigned long start, unsigned long end);
  71extern struct vm_struct *get_vm_area_node(unsigned long size,
  72                                          unsigned long flags, int node,
  73                                          gfp_t gfp_mask);
  74extern struct vm_struct *remove_vm_area(void *addr);
  75
  76extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
  77                        struct page ***pages);
  78extern void unmap_kernel_range(unsigned long addr, unsigned long size);
  79
  80/* Allocate/destroy a 'vmalloc' VM area. */
  81extern struct vm_struct *alloc_vm_area(size_t size);
  82extern void free_vm_area(struct vm_struct *area);
  83
  84/*
  85 *      Internals.  Dont't use..
  86 */
  87extern rwlock_t vmlist_lock;
  88extern struct vm_struct *vmlist;
  89
  90#endif /* _LINUX_VMALLOC_H */
  91