linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / include / asm-mips / mmzone.h
index f53ec54..011caeb 100644 (file)
@@ -5,13 +5,40 @@
 #ifndef _ASM_MMZONE_H_
 #define _ASM_MMZONE_H_
 
+#include <linux/config.h>
 #include <asm/page.h>
 #include <mmzone.h>
 
 #ifdef CONFIG_DISCONTIGMEM
 
+#define kvaddr_to_nid(kvaddr)  pa_to_nid(__pa(kvaddr))
 #define pfn_to_nid(pfn)                pa_to_nid((pfn) << PAGE_SHIFT)
 
+#define pfn_valid(pfn)                                         \
+({                                                             \
+       unsigned long __pfn = (pfn);                            \
+       int __n = pfn_to_nid(__pfn);                            \
+       ((__n >= 0) ? (__pfn < NODE_DATA(__n)->node_start_pfn + \
+                      NODE_DATA(__n)->node_spanned_pages) : 0);\
+})
+
+#define pfn_to_page(pfn)                                       \
+({                                                             \
+       unsigned long __pfn = (pfn);                            \
+       pg_data_t *__pg = NODE_DATA(pfn_to_nid(__pfn));         \
+       __pg->node_mem_map + (__pfn - __pg->node_start_pfn);    \
+})
+
+#define page_to_pfn(p)                                         \
+({                                                             \
+       struct page *__p = (p);                                 \
+       struct zone *__z = page_zone(__p);                      \
+       ((__p - __z->zone_mem_map) + __z->zone_start_pfn);      \
+})
+
+/* XXX: FIXME -- wli */
+#define kern_addr_valid(addr)  (0)
+
 #endif /* CONFIG_DISCONTIGMEM */
 
 #endif /* _ASM_MMZONE_H_ */