Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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 struct 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 
 25 struct 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  */
 39 extern void *vmalloc(unsigned long size);
 40 extern void *vmalloc_user(unsigned long size);
 41 extern void *vmalloc_node(unsigned long size, int node);
 42 extern void *vmalloc_exec(unsigned long size);
 43 extern void *vmalloc_32(unsigned long size);
 44 extern void *vmalloc_32_user(unsigned long size);
 45 extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
 46 extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask,
 47                                 pgprot_t prot);
 48 extern void vfree(const void *addr);
 49 
 50 extern void *vmap(struct page **pages, unsigned int count,
 51                         unsigned long flags, pgprot_t prot);
 52 extern void vunmap(const void *addr);
 53 
 54 extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
 55                                                         unsigned long pgoff);
 56 void vmalloc_sync_all(void);
 57  
 58 /*
 59  *      Lowlevel-APIs (not for driver use!)
 60  */
 61 
 62 static 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 
 68 extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags);
 69 extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
 70                                         unsigned long start, unsigned long end);
 71 extern struct vm_struct *get_vm_area_node(unsigned long size,
 72                                           unsigned long flags, int node,
 73                                           gfp_t gfp_mask);
 74 extern struct vm_struct *remove_vm_area(const void *addr);
 75 
 76 extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
 77                         struct page ***pages);
 78 extern void unmap_kernel_range(unsigned long addr, unsigned long size);
 79 
 80 /* Allocate/destroy a 'vmalloc' VM area. */
 81 extern struct vm_struct *alloc_vm_area(size_t size);
 82 extern void free_vm_area(struct vm_struct *area);
 83 
 84 /*
 85  *      Internals.  Dont't use..
 86  */
 87 extern rwlock_t vmlist_lock;
 88 extern struct vm_struct *vmlist;
 89 
 90 #endif /* _LINUX_VMALLOC_H */
 91 
  This page was automatically generated by the LXR engine.