]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | ||
fd195c49 DS |
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 | ||
1da177e4 LT |
21 | struct 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 | */ | |
34 | extern void *vmalloc(unsigned long size); | |
930fc45a | 35 | extern void *vmalloc_node(unsigned long size, int node); |
1da177e4 LT |
36 | extern void *vmalloc_exec(unsigned long size); |
37 | extern void *vmalloc_32(unsigned long size); | |
dd0fc66f | 38 | extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot); |
930fc45a CL |
39 | extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask, |
40 | pgprot_t prot); | |
41 | extern void *__vmalloc_node(unsigned long size, gfp_t gfp_mask, | |
42 | pgprot_t prot, int node); | |
1da177e4 LT |
43 | extern void vfree(void *addr); |
44 | ||
45 | extern void *vmap(struct page **pages, unsigned int count, | |
46 | unsigned long flags, pgprot_t prot); | |
47 | extern void vunmap(void *addr); | |
48 | ||
49 | /* | |
50 | * Lowlevel-APIs (not for driver use!) | |
51 | */ | |
52 | extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); | |
53 | extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, | |
54 | unsigned long start, unsigned long end); | |
930fc45a CL |
55 | extern struct vm_struct *get_vm_area_node(unsigned long size, |
56 | unsigned long flags, int node); | |
1da177e4 | 57 | extern struct vm_struct *remove_vm_area(void *addr); |
7856dfeb | 58 | extern struct vm_struct *__remove_vm_area(void *addr); |
1da177e4 LT |
59 | extern int map_vm_area(struct vm_struct *area, pgprot_t prot, |
60 | struct page ***pages); | |
61 | extern void unmap_vm_area(struct vm_struct *area); | |
62 | ||
63 | /* | |
64 | * Internals. Dont't use.. | |
65 | */ | |
66 | extern rwlock_t vmlist_lock; | |
67 | extern struct vm_struct *vmlist; | |
68 | ||
69 | #endif /* _LINUX_VMALLOC_H */ |