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;          /* vma defining user mapping in mm_types.h */
   8
   9/* bits in flags of vmalloc's vm_struct below */
  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        void                    *caller;
  35};
  36
  37/*
  38 *      Highlevel APIs for driver use
  39 */
  40extern void *vmalloc(unsigned long size);
  41extern void *vmalloc_user(unsigned long size);
  42extern void *vmalloc_node(unsigned long size, int node);
  43extern void *vmalloc_exec(unsigned long size);
  44extern void *vmalloc_32(unsigned long size);
  45extern void *vmalloc_32_user(unsigned long size);
  46extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
  47extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask,
  48                                pgprot_t prot);
  49extern void vfree(const void *addr);
  50
  51extern void *vmap(struct page **pages, unsigned int count,
  52                        unsigned long flags, pgprot_t prot);
  53extern void vunmap(const void *addr);
  54
  55extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
  56                                                        unsigned long pgoff);
  57void vmalloc_sync_all(void);
  58 
  59/*
  60 *      Lowlevel-APIs (not for driver use!)
  61 */
  62
  63static inline size_t get_vm_area_size(const struct vm_struct *area)
  64{
  65        /* return actual size without guard page */
  66        return area->size - PAGE_SIZE;
  67}
  68
  69extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags);
  70extern struct vm_struct *get_vm_area_caller(unsigned long size,
  71                                        unsigned long flags, void *caller);
  72extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
  73                                        unsigned long start, unsigned long end);
  74extern struct vm_struct *get_vm_area_node(unsigned long size,
  75                                          unsigned long flags, int node,
  76                                          gfp_t gfp_mask);
  77extern struct vm_struct *remove_vm_area(const void *addr);
  78
  79extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
  80                        struct page ***pages);
  81extern void unmap_kernel_range(unsigned long addr, unsigned long size);
  82
  83/* Allocate/destroy a 'vmalloc' VM area. */
  84extern struct vm_struct *alloc_vm_area(size_t size);
  85extern void free_vm_area(struct vm_struct *area);
  86
  87/*
  88 *      Internals.  Dont't use..
  89 */
  90extern rwlock_t vmlist_lock;
  91extern struct vm_struct *vmlist;
  92
  93extern const struct seq_operations vmalloc_op;
  94
  95#endif /* _LINUX_VMALLOC_H */
  96
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.