Root/
1 | #ifndef __ASM_MEMORY_MODEL_H |
2 | #define __ASM_MEMORY_MODEL_H |
3 | |
4 | #ifndef __ASSEMBLY__ |
5 | |
6 | #if defined(CONFIG_FLATMEM) |
7 | |
8 | #ifndef ARCH_PFN_OFFSET |
9 | #define ARCH_PFN_OFFSET (0UL) |
10 | #endif |
11 | |
12 | #elif defined(CONFIG_DISCONTIGMEM) |
13 | |
14 | #ifndef arch_pfn_to_nid |
15 | #define arch_pfn_to_nid(pfn) pfn_to_nid(pfn) |
16 | #endif |
17 | |
18 | #ifndef arch_local_page_offset |
19 | #define arch_local_page_offset(pfn, nid) \ |
20 | ((pfn) - NODE_DATA(nid)->node_start_pfn) |
21 | #endif |
22 | |
23 | #endif /* CONFIG_DISCONTIGMEM */ |
24 | |
25 | /* |
26 | * supports 3 memory models. |
27 | */ |
28 | #if defined(CONFIG_FLATMEM) |
29 | |
30 | #define __pfn_to_page(pfn) (mem_map + ((pfn) - ARCH_PFN_OFFSET)) |
31 | #define __page_to_pfn(page) ((unsigned long)((page) - mem_map) + \ |
32 | ARCH_PFN_OFFSET) |
33 | #elif defined(CONFIG_DISCONTIGMEM) |
34 | |
35 | #define __pfn_to_page(pfn) \ |
36 | ({ unsigned long __pfn = (pfn); \ |
37 | unsigned long __nid = arch_pfn_to_nid(__pfn); \ |
38 | NODE_DATA(__nid)->node_mem_map + arch_local_page_offset(__pfn, __nid);\ |
39 | }) |
40 | |
41 | #define __page_to_pfn(pg) \ |
42 | ({ struct page *__pg = (pg); \ |
43 | struct pglist_data *__pgdat = NODE_DATA(page_to_nid(__pg)); \ |
44 | (unsigned long)(__pg - __pgdat->node_mem_map) + \ |
45 | __pgdat->node_start_pfn; \ |
46 | }) |
47 | |
48 | #elif defined(CONFIG_SPARSEMEM_VMEMMAP) |
49 | |
50 | /* memmap is virtually contiguous. */ |
51 | #define __pfn_to_page(pfn) (vmemmap + (pfn)) |
52 | #define __page_to_pfn(page) (unsigned long)((page) - vmemmap) |
53 | |
54 | #elif defined(CONFIG_SPARSEMEM) |
55 | /* |
56 | * Note: section's mem_map is encorded to reflect its start_pfn. |
57 | * section[i].section_mem_map == mem_map's address - start_pfn; |
58 | */ |
59 | #define __page_to_pfn(pg) \ |
60 | ({ struct page *__pg = (pg); \ |
61 | int __sec = page_to_section(__pg); \ |
62 | (unsigned long)(__pg - __section_mem_map_addr(__nr_to_section(__sec))); \ |
63 | }) |
64 | |
65 | #define __pfn_to_page(pfn) \ |
66 | ({ unsigned long __pfn = (pfn); \ |
67 | struct mem_section *__sec = __pfn_to_section(__pfn); \ |
68 | __section_mem_map_addr(__sec) + __pfn; \ |
69 | }) |
70 | #endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */ |
71 | |
72 | #define page_to_pfn __page_to_pfn |
73 | #define pfn_to_page __pfn_to_page |
74 | |
75 | #endif /* __ASSEMBLY__ */ |
76 | |
77 | #endif |
78 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9