xref: /openbmc/linux/arch/x86/include/asm/mmzone_32.h (revision b3fd7368f8f60bc9a7ffc2a5311db5f4dbd42180)
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
12  extern struct pglist_data *node_data[];
13  #define NODE_DATA(nid)	(node_data[nid])
14  #endif /* CONFIG_NUMA */
15  
16  #ifdef CONFIG_DISCONTIGMEM
17  
18  /*
19   * generic node memory support, the following assumptions apply:
20   *
21   * 1) memory comes in 64Mb contiguous chunks which are either present or not
22   * 2) we will not have more than 64Gb in total
23   *
24   * for now assume that 64Gb is max amount of RAM for whole system
25   *    64Gb / 4096bytes/page = 16777216 pages
26   */
27  #define MAX_NR_PAGES 16777216
28  #define MAX_SECTIONS 1024
29  #define PAGES_PER_SECTION (MAX_NR_PAGES/MAX_SECTIONS)
30  
31  extern s8 physnode_map[];
32  
33  static inline int pfn_to_nid(unsigned long pfn)
34  {
35  #ifdef CONFIG_NUMA
36  	return((int) physnode_map[(pfn) / PAGES_PER_SECTION]);
37  #else
38  	return 0;
39  #endif
40  }
41  
42  static inline int pfn_valid(int pfn)
43  {
44  	int nid = pfn_to_nid(pfn);
45  
46  	if (nid >= 0)
47  		return (pfn < node_end_pfn(nid));
48  	return 0;
49  }
50  
51  #define early_pfn_valid(pfn)	pfn_valid((pfn))
52  
53  #endif /* CONFIG_DISCONTIGMEM */
54  
55  #endif /* _ASM_X86_MMZONE_32_H */
56