1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _LINUX_VMALLOC_H 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _LINUX_VMALLOC_H 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/spinlock.h> 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <asm/page.h> /* pgprot_t */ 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct vm_area_struct; 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* bits in vm_struct->flags */ 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VM_IOREMAP 0x00000001 /* ioremap() and friends */ 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VM_ALLOC 0x00000002 /* vmalloc() */ 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VM_MAP 0x00000004 /* vmap()ed pages */ 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VM_USERMAP 0x00000008 /* suitable for remap_vmalloc_range */ 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VM_VPAGES 0x00000010 /* buffer for pages was vmalloc'ed */ 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* bits [20..32] reserved for arch specific ioremap internals */ 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Maximum alignment for ioremap() regions. 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Can be overriden by arch-specific value. 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef IOREMAP_MAX_ORDER 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IOREMAP_MAX_ORDER (7 + PAGE_SHIFT) /* 128 pages */ 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct vm_struct { 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru void *addr; 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long size; 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long flags; 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct page **pages; 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned int nr_pages; 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long phys_addr; 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct vm_struct *next; 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Highlevel APIs for driver use 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *vmalloc(unsigned long size); 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *vmalloc_user(unsigned long size); 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *vmalloc_node(unsigned long size, int node); 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *vmalloc_exec(unsigned long size); 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *vmalloc_32(unsigned long size); 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *vmalloc_32_user(unsigned long size); 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot); 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask, 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru pgprot_t prot); 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *__vmalloc_node(unsigned long size, gfp_t gfp_mask, 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru pgprot_t prot, int node); 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void vfree(void *addr); 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void *vmap(struct page **pages, unsigned int count, 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long flags, pgprot_t prot); 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void vunmap(void *addr); 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr, 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long pgoff); 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Lowlevel-APIs (not for driver use!) 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, 63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long start, unsigned long end); 64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct vm_struct *get_vm_area_node(unsigned long size, 65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long flags, int node); 66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct vm_struct *remove_vm_area(void *addr); 67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct vm_struct *__remove_vm_area(void *addr); 68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int map_vm_area(struct vm_struct *area, pgprot_t prot, 69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct page ***pages); 70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void unmap_vm_area(struct vm_struct *area); 71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Internals. Dont't use.. 74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern rwlock_t vmlist_lock; 76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct vm_struct *vmlist; 77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* _LINUX_VMALLOC_H */ 79