Home | History | Annotate | Download | only in linux
      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 	void			*addr;
     27 	unsigned long		size;
     28 	unsigned long		flags;
     29 	struct page		**pages;
     30 	unsigned int		nr_pages;
     31 	unsigned long		phys_addr;
     32 	struct vm_struct	*next;
     33 };
     34 
     35 /*
     36  *	Highlevel APIs for driver use
     37  */
     38 extern void *vmalloc(unsigned long size);
     39 extern void *vmalloc_user(unsigned long size);
     40 extern void *vmalloc_node(unsigned long size, int node);
     41 extern void *vmalloc_exec(unsigned long size);
     42 extern void *vmalloc_32(unsigned long size);
     43 extern void *vmalloc_32_user(unsigned long size);
     44 extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
     45 extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask,
     46 				pgprot_t prot);
     47 extern void *__vmalloc_node(unsigned long size, gfp_t gfp_mask,
     48 				pgprot_t prot, int node);
     49 extern void vfree(void *addr);
     50 
     51 extern void *vmap(struct page **pages, unsigned int count,
     52 			unsigned long flags, pgprot_t prot);
     53 extern void vunmap(void *addr);
     54 
     55 extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
     56 							unsigned long pgoff);
     57 
     58 /*
     59  *	Lowlevel-APIs (not for driver use!)
     60  */
     61 extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags);
     62 extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
     63 					unsigned long start, unsigned long end);
     64 extern struct vm_struct *get_vm_area_node(unsigned long size,
     65 					unsigned long flags, int node);
     66 extern struct vm_struct *remove_vm_area(void *addr);
     67 extern struct vm_struct *__remove_vm_area(void *addr);
     68 extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
     69 			struct page ***pages);
     70 extern void unmap_vm_area(struct vm_struct *area);
     71 
     72 /*
     73  *	Internals.  Dont't use..
     74  */
     75 extern rwlock_t vmlist_lock;
     76 extern struct vm_struct *vmlist;
     77 
     78 #endif /* _LINUX_VMALLOC_H */
     79