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 struct vm_struct { 14 void *addr; 15 unsigned long size; 16 unsigned long flags; 17 struct page **pages; 18 unsigned int nr_pages; 19 unsigned long phys_addr; 20 struct vm_struct *next; 21 }; 22 23 /* 24 * Highlevel APIs for driver use 25 */ 26 extern void *vmalloc(unsigned long size); 27 extern void *vmalloc_exec(unsigned long size); 28 extern void *vmalloc_32(unsigned long size); 29 extern void *__vmalloc(unsigned long size, unsigned int __nocast gfp_mask, pgprot_t prot); 30 extern void *__vmalloc_area(struct vm_struct *area, unsigned int __nocast gfp_mask, pgprot_t prot); 31 extern void vfree(void *addr); 32 33 extern void *vmap(struct page **pages, unsigned int count, 34 unsigned long flags, pgprot_t prot); 35 extern void vunmap(void *addr); 36 37 /* 38 * Lowlevel-APIs (not for driver use!) 39 */ 40 extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); 41 extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, 42 unsigned long start, unsigned long end); 43 extern struct vm_struct *remove_vm_area(void *addr); 44 extern struct vm_struct *__remove_vm_area(void *addr); 45 extern int map_vm_area(struct vm_struct *area, pgprot_t prot, 46 struct page ***pages); 47 extern void unmap_vm_area(struct vm_struct *area); 48 49 /* 50 * Internals. Dont't use.. 51 */ 52 extern rwlock_t vmlist_lock; 53 extern struct vm_struct *vmlist; 54 55 #endif /* _LINUX_VMALLOC_H */ 56