1/*
2 * Written by Pat Gaughen (gone@us.ibm.com) Mar 2002
3 *
4 */
5
6#ifndef _ASM_X86_MMZONE_32_H
7#define _ASM_X86_MMZONE_32_H
8
9#include <asm/smp.h>
10
11#ifdef CONFIG_NUMA
12extern struct pglist_data *node_data[];
13#define NODE_DATA(nid)	(node_data[nid])
14
15#include <asm/numaq.h>
16
17extern void resume_map_numa_kva(pgd_t *pgd);
18
19#else /* !CONFIG_NUMA */
20
21static inline void resume_map_numa_kva(pgd_t *pgd) {}
22
23#endif /* CONFIG_NUMA */
24
25#ifdef CONFIG_DISCONTIGMEM
26
27/*
28 * generic node memory support, the following assumptions apply:
29 *
30 * 1) memory comes in 64Mb contiguous chunks which are either present or not
31 * 2) we will not have more than 64Gb in total
32 *
33 * for now assume that 64Gb is max amount of RAM for whole system
34 *    64Gb / 4096bytes/page = 16777216 pages
35 */
36#define MAX_NR_PAGES 16777216
37#define MAX_SECTIONS 1024
38#define PAGES_PER_SECTION (MAX_NR_PAGES/MAX_SECTIONS)
39
40extern s8 physnode_map[];
41
42static inline int pfn_to_nid(unsigned long pfn)
43{
44#ifdef CONFIG_NUMA
45	return((int) physnode_map[(pfn) / PAGES_PER_SECTION]);
46#else
47	return 0;
48#endif
49}
50
51static inline int pfn_valid(int pfn)
52{
53	int nid = pfn_to_nid(pfn);
54
55	if (nid >= 0)
56		return (pfn < node_end_pfn(nid));
57	return 0;
58}
59
60#define early_pfn_valid(pfn)	pfn_valid((pfn))
61
62#endif /* CONFIG_DISCONTIGMEM */
63
64#ifdef CONFIG_NEED_MULTIPLE_NODES
65/* always use node 0 for bootmem on this numa platform */
66#define bootmem_arch_preferred_node(__bdata, size, align, goal, limit)	\
67	(NODE_DATA(0)->bdata)
68#endif /* CONFIG_NEED_MULTIPLE_NODES */
69
70#endif /* _ASM_X86_MMZONE_32_H */
71