summaryrefslogtreecommitdiffstats
path: root/include/asm-i386/page.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-i386/page.h')
-rw-r--r--include/asm-i386/page.h87
1 files changed, 58 insertions, 29 deletions
diff --git a/include/asm-i386/page.h b/include/asm-i386/page.h
index 129848b04..7ab435bbf 100644
--- a/include/asm-i386/page.h
+++ b/include/asm-i386/page.h
@@ -1,40 +1,69 @@
#ifndef _I386_PAGE_H
#define _I386_PAGE_H
+/* PAGE_SHIFT determines the page size */
+#define PAGE_SHIFT 12
+#define PAGE_SIZE (1UL << PAGE_SHIFT)
+#define PAGE_MASK (~(PAGE_SIZE-1))
+
+#ifdef __KERNEL__
+
+#define CONFIG_STRICT_MM_TYPECHECKS
+
+#ifdef CONFIG_STRICT_MM_TYPECHECKS
+/*
+ * These are used to make use of C type-checking..
+ */
+typedef struct { unsigned long pte; } pte_t;
+typedef struct { unsigned long pmd; } pmd_t;
+typedef struct { unsigned long pgd; } pgd_t;
+typedef struct { unsigned long pgprot; } pgprot_t;
+
+#define pte_val(x) ((x).pte)
+#define pmd_val(x) ((x).pmd)
+#define pgd_val(x) ((x).pgd)
+#define pgprot_val(x) ((x).pgprot)
+
+#define __pte(x) ((pte_t) { (x) } )
+#define __pmd(x) ((pmd_t) { (x) } )
+#define __pgd(x) ((pgd_t) { (x) } )
+#define __pgprot(x) ((pgprot_t) { (x) } )
+
+#else
+/*
+ * .. while these make it easier on the compiler
+ */
+typedef unsigned long pte_t;
+typedef unsigned long pmd_t;
+typedef unsigned long pgd_t;
+typedef unsigned long pgprot_t;
+
+#define pte_val(x) (x)
+#define pmd_val(x) (x)
+#define pgd_val(x) (x)
+#define pgprot_val(x) (x)
+
+#define __pte(x) (x)
+#define __pmd(x) (x)
+#define __pgd(x) (x)
+#define __pgprot(x) (x)
+
+#endif
+
#define invalidate() \
__asm__ __volatile__("movl %%cr3,%%eax\n\tmovl %%eax,%%cr3": : :"ax")
- /* PAGE_SHIFT determines the page size */
-#define PAGE_SHIFT 12
-#define PGDIR_SHIFT 22
-#define PAGE_SIZE (1UL << PAGE_SHIFT)
-#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
+#define copy_page(from,to) memcpy((void *) to, (void *) from, PAGE_SIZE)
-#ifdef __KERNEL__
+/* to align the pointer to the (next) page boundary */
+#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
+
+/* This handles the memory map.. */
+#define PAGE_OFFSET 0
+#define MAP_NR(addr) (((unsigned long)(addr)) >> PAGE_SHIFT)
+#define MAP_PAGE_RESERVED (1<<15)
- /* number of bits that fit into a memory pointer */
-#define BITS_PER_PTR (8*sizeof(unsigned long))
- /* to mask away the intra-page address bits */
-#define PAGE_MASK (~(PAGE_SIZE-1))
- /* to mask away the intra-page address bits */
-#define PGDIR_MASK (~(PGDIR_SIZE-1))
- /* to align the pointer to the (next) page boundary */
-#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
- /* to align the pointer to a pointer address */
-#define PTR_MASK (~(sizeof(void*)-1))
-
- /* sizeof(void*)==1<<SIZEOF_PTR_LOG2 */
- /* 64-bit machines, beware! SRB. */
-#define SIZEOF_PTR_LOG2 2
-
- /* to find an entry in a page-table-directory */
-#define PAGE_DIR_OFFSET(base,address) ((unsigned long*)((base)+\
- ((unsigned long)(address)>>(PAGE_SHIFT-SIZEOF_PTR_LOG2)*2&PTR_MASK&~PAGE_MASK)))
- /* to find an entry in a page-table */
-#define PAGE_PTR(address) \
- ((unsigned long)(address)>>(PAGE_SHIFT-SIZEOF_PTR_LOG2)&PTR_MASK&~PAGE_MASK)
- /* the no. of pointers that fit on a page */
-#define PTRS_PER_PAGE (PAGE_SIZE/sizeof(void*))
+typedef unsigned short mem_map_t;
#endif /* __KERNEL__ */