at v2.6.14-rc4 1.9 kB view raw
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 21struct 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 */ 34extern void *vmalloc(unsigned long size); 35extern void *vmalloc_exec(unsigned long size); 36extern void *vmalloc_32(unsigned long size); 37extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot); 38extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask, pgprot_t prot); 39extern void vfree(void *addr); 40 41extern void *vmap(struct page **pages, unsigned int count, 42 unsigned long flags, pgprot_t prot); 43extern void vunmap(void *addr); 44 45/* 46 * Lowlevel-APIs (not for driver use!) 47 */ 48extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); 49extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, 50 unsigned long start, unsigned long end); 51extern struct vm_struct *remove_vm_area(void *addr); 52extern struct vm_struct *__remove_vm_area(void *addr); 53extern int map_vm_area(struct vm_struct *area, pgprot_t prot, 54 struct page ***pages); 55extern void unmap_vm_area(struct vm_struct *area); 56 57/* 58 * Internals. Dont't use.. 59 */ 60extern rwlock_t vmlist_lock; 61extern struct vm_struct *vmlist; 62 63#endif /* _LINUX_VMALLOC_H */