Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * linux/include/asm-sh/mmzone.h | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify | |
5 | * it under the terms of the GNU General Public License version 2 as | |
6 | * published by the Free Software Foundation. | |
7 | */ | |
8 | #ifndef __ASM_SH_MMZONE_H | |
9 | #define __ASM_SH_MMZONE_H | |
10 | ||
11 | #include <linux/config.h> | |
12 | ||
13 | #ifdef CONFIG_DISCONTIGMEM | |
14 | ||
15 | /* Currently, just for HP690 */ | |
16 | #define PHYSADDR_TO_NID(phys) ((((phys) - __MEMORY_START) >= 0x01000000)?1:0) | |
17 | ||
18 | extern pg_data_t discontig_page_data[MAX_NUMNODES]; | |
19 | extern bootmem_data_t discontig_node_bdata[MAX_NUMNODES]; | |
20 | ||
21 | /* | |
22 | * Following are macros that each numa implmentation must define. | |
23 | */ | |
24 | ||
25 | /* | |
26 | * Given a kernel address, find the home node of the underlying memory. | |
27 | */ | |
28 | #define KVADDR_TO_NID(kaddr) PHYSADDR_TO_NID(__pa(kaddr)) | |
29 | ||
30 | /* | |
31 | * Return a pointer to the node data for node n. | |
32 | */ | |
33 | #define NODE_DATA(nid) (&discontig_page_data[nid]) | |
34 | ||
35 | /* | |
36 | * NODE_MEM_MAP gives the kaddr for the mem_map of the node. | |
37 | */ | |
38 | #define NODE_MEM_MAP(nid) (NODE_DATA(nid)->node_mem_map) | |
39 | ||
40 | #define phys_to_page(phys) \ | |
41 | ({ unsigned int node = PHYSADDR_TO_NID(phys); \ | |
42 | NODE_MEM_MAP(node) \ | |
43 | + (((phys) - NODE_DATA(node)->node_start_paddr) >> PAGE_SHIFT); }) | |
44 | ||
45 | static inline int is_valid_page(struct page *page) | |
46 | { | |
47 | unsigned int i; | |
48 | ||
49 | for (i = 0; i < MAX_NUMNODES; i++) { | |
50 | if (page >= NODE_MEM_MAP(i) && | |
51 | page < NODE_MEM_MAP(i) + NODE_DATA(i)->node_size) | |
52 | return 1; | |
53 | } | |
54 | return 0; | |
55 | } | |
56 | ||
57 | #define VALID_PAGE(page) is_valid_page(page) | |
58 | #define page_to_phys(page) PHYSADDR(page_address(page)) | |
59 | ||
60 | #endif /* CONFIG_DISCONTIGMEM */ | |
61 | #endif |