Index: include/mm/page.h
===================================================================
--- include/mm/page.h	(revision 74df77d86a72a4f024333efb0598dc08924798b8)
+++ include/mm/page.h	(revision 992bbb973fb33c1a5240dfc3591c3fa04a139966)
@@ -47,4 +47,45 @@
 #define PAGE_EXEC		(1<<5)
 
+/*
+ * This is the generic 4-level page table interface.
+ * Architectures are supposed to implement *_ARCH macros.
+ */
+
+/*
+ * These macros process vaddr and extract those portions
+ * of it that function as indices to respective page tables.
+ */
+#define PTL0_INDEX(vaddr)		PTL0_INDEX_ARCH(vaddr)
+#define PTL1_INDEX(vaddr)		PTL1_INDEX_ARCH(vaddr)
+#define PTL2_INDEX(vaddr)		PTL2_INDEX_ARCH(vaddr)
+#define PTL3_INDEX(vaddr)		PTL3_INDEX_ARCH(vaddr)
+
+/*
+ * These macros traverse the 4-level tree of page tables,
+ * each descending by one level.
+ */
+#define GET_PTL1_ADDRESS(ptl0, i)	GET_PTL1_ADDRESS_ARCH(ptl0, i)
+#define GET_PTL2_ADDRESS(ptl1, i)	GET_PTL2_ADDRESS_ARCH(ptl1, i)
+#define GET_PTL3_ADDRESS(ptl2, i)	GET_PTL3_ADDRESS_ARCH(ptl2, i)
+#define GET_FRAME_ADDRESS(ptl3, i)	GET_FRAME_ADDRESS_ARCH(ptl3, i)
+
+/*
+ * These macros are provided to change shape of the 4-level
+ * tree of page tables on respective level.
+ */
+#define SET_PTL1_ADDRESS(ptl0, i, a)	SET_PTL1_ADDRESS_ARCH(ptl0, i, a)
+#define SET_PTL2_ADDRESS(ptl1, i, a)	SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
+#define SET_PTL3_ADDRESS(ptl2, i, a)	SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
+#define SET_FRAME_ADDRESS(ptl3, i, a)	SET_FRAME_ADDRESS_ARCH(ptl3, i, a)
+
+/*
+ * These macros are provided to set/clear various flags within the page tables.
+ */
+#define SET_PTL1_FLAGS(ptl0, i, x)	SET_PTL1_FLAGS_ARCH(ptl0, i, x)
+#define SET_PTL2_FLAGS(ptl1, i, x)	SET_PTL2_FLAGS_ARCH(ptl1, i, x)
+#define SET_PTL3_FLAGS(ptl2, i, x)	SET_PTL3_FLAGS_ARCH(ptl2, i, x)
+#define SET_FRAME_FLAGS(ptl3, i, x)	SET_FRAME_FLAGS_ARCH(ptl3, i, x)
+
+
 extern void page_init(void);
 extern void map_page_to_frame(__address page, __address frame, int flags, __address root);
