summaryrefslogtreecommitdiffstats
path: root/include/asm-sparc/page.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-sparc/page.h')
-rw-r--r--include/asm-sparc/page.h137
1 files changed, 134 insertions, 3 deletions
diff --git a/include/asm-sparc/page.h b/include/asm-sparc/page.h
index 03c9c48fd..23d2aebc2 100644
--- a/include/asm-sparc/page.h
+++ b/include/asm-sparc/page.h
@@ -1,4 +1,4 @@
-/* $Id: page.h,v 1.30 1996/10/27 08:55:30 davem Exp $
+/* $Id: page.h,v 1.35 1996/12/19 08:08:22 davem Exp $
* page.h: Various defines and such for MMU operations on the Sparc for
* the Linux kernel.
*
@@ -8,6 +8,7 @@
#ifndef _SPARC_PAGE_H
#define _SPARC_PAGE_H
+#include <linux/config.h>
#include <asm/head.h> /* for KERNBASE */
#define PAGE_SHIFT 12
@@ -28,8 +29,8 @@ extern unsigned long page_offset;
extern unsigned long (*mmu_v2p)(unsigned long);
extern unsigned long (*mmu_p2v)(unsigned long);
-#define __pa(x) mmu_v2p(x)
-#define __va(x) mmu_p2v(x)
+#define __pa(x) mmu_v2p((unsigned long)(x))
+#define __va(x) mmu_p2v((unsigned long)(x))
/* The following structure is used to hold the physical
* memory configuration of the machine. This is filled in
@@ -88,6 +89,132 @@ typedef struct { unsigned long iopgprot; } iopgprot_t;
#define __pgprot(x) ((pgprot_t) { (x) } )
#define __iopgprot(x) ((iopgprot_t) { (x) } )
+#elif CONFIG_AP1000_DEBUG
+
+typedef struct { unsigned long pte; } pte_t;
+typedef struct { unsigned long iopte; } iopte_t;
+typedef struct { unsigned long pmd; } pmd_t;
+typedef struct { unsigned long pgd; } pgd_t;
+typedef struct { unsigned long ctxd; } ctxd_t;
+typedef struct { unsigned long pgprot; } pgprot_t;
+typedef struct { unsigned long iopgprot; } iopgprot_t;
+
+static inline unsigned long __get_val(unsigned long x)
+{
+ if ((x & 0xF0000000) == (8<<28))
+ return x & 0x0FFFFFFF;
+ return x;
+}
+
+static inline unsigned long __set_val(unsigned long x)
+{
+ if ((x & 0xF0000000) == (0<<28))
+ return x | 0x80000000;
+ return x;
+}
+
+#define __pte_val(x) ((x).pte)
+#define __iopte_val(x) ((x).iopte)
+#define __pmd_val(x) ((x).pmd)
+#define __pgd_val(x) ((x).pgd)
+#define __ctxd_val(x) ((x).ctxd)
+#define __pgprot_val(x) ((x).pgprot)
+#define __iopgprot_val(x) ((x).iopgprot)
+
+#define ___pte(x) ((pte_t) { (x) } )
+#define ___iopte(x) ((iopte_t) { (x) } )
+#define ___pmd(x) ((pmd_t) { (x) } )
+#define ___pgd(x) ((pgd_t) { (x) } )
+#define ___ctxd(x) ((ctxd_t) { (x) } )
+#define ___pgprot(x) ((pgprot_t) { (x) } )
+#define ___iopgprot(x) ((iopgprot_t) { (x) } )
+
+
+#define pte_val(x) __get_val(__pte_val(x))
+#define iopte_val(x) __get_val(__iopte_val(x))
+#define pmd_val(x) __get_val(__pmd_val(x))
+#define pgd_val(x) __get_val(__pgd_val(x))
+#define ctxd_val(x) __get_val(__ctxd_val(x))
+#define pgprot_val(x) __get_val(__pgprot_val(x))
+#define iopgprot_val(x) __get_val(__iopgprot_val(x))
+
+#define __pte(x) ___pte(__set_val(x))
+#define __iopte(x) ___iopte(__set_val(x))
+#define __pmd(x) ___pmd(__set_val(x))
+#define __pgd(x) ___pgd(__set_val(x))
+#define __ctxd(x) ___ctxd(__set_val(x))
+#define __pgprot(x) ___pgprot(x)
+#define __iopgprot(x) ___iopgprot(__set_val(x))
+
+#elif CONFIG_AP1000
+
+typedef unsigned long pte_t;
+typedef unsigned long iopte_t;
+typedef unsigned long pmd_t;
+typedef unsigned long pgd_t;
+typedef unsigned long ctxd_t;
+typedef unsigned long pgprot_t;
+typedef unsigned long iopgprot_t;
+
+static inline unsigned long __get_val(unsigned long x)
+{
+#if 0
+ extern void ap_panic(char *fmt,...);
+ if (x && (x & 0xF0000000) == 0) {
+ ap_panic("get_val got 0x%x\n",x);
+ }
+#endif
+ if ((x & 0xF0000000) == (8<<28))
+ return x & 0x0FFFFFFF;
+ return x;
+}
+
+static inline unsigned long __set_val(unsigned long x)
+{
+#if 0
+ extern void ap_panic(char *fmt,...);
+ if ((x & 0xF0000000) == (8<<28)) {
+ ap_panic("set_val got 0x%x\n",x);
+ }
+#endif
+ if ((x & 0xF0000000) == (0<<28))
+ return x | 0x80000000;
+ return x;
+}
+
+#define __pte_val(x) (x)
+#define __iopte_val(x) (x)
+#define __pmd_val(x) (x)
+#define __pgd_val(x) (x)
+#define __ctxd_val(x) (x)
+#define __pgprot_val(x) (x)
+#define __iopgprot_val(x) (x)
+
+#define ___pte(x) ((pte_t) { (x) } )
+#define ___iopte(x) ((iopte_t) { (x) } )
+#define ___pmd(x) ((pmd_t) { (x) } )
+#define ___pgd(x) ((pgd_t) { (x) } )
+#define ___ctxd(x) ((ctxd_t) { (x) } )
+#define ___pgprot(x) ((pgprot_t) { (x) } )
+#define ___iopgprot(x) ((iopgprot_t) { (x) } )
+
+
+#define pte_val(x) __get_val(__pte_val(x))
+#define iopte_val(x) __get_val(__iopte_val(x))
+#define pmd_val(x) __get_val(__pmd_val(x))
+#define pgd_val(x) __get_val(__pgd_val(x))
+#define ctxd_val(x) __get_val(__ctxd_val(x))
+#define pgprot_val(x) __get_val(__pgprot_val(x))
+#define iopgprot_val(x) __get_val(__iopgprot_val(x))
+
+#define __pte(x) ___pte(__set_val(x))
+#define __iopte(x) ___iopte(__set_val(x))
+#define __pmd(x) ___pmd(__set_val(x))
+#define __pgd(x) ___pgd(__set_val(x))
+#define __ctxd(x) ___ctxd(__set_val(x))
+#define __pgprot(x) ___pgprot(x)
+#define __iopgprot(x) ___iopgprot(__set_val(x))
+
#else
/*
* .. while these make it easier on the compiler
@@ -130,6 +257,10 @@ extern unsigned long sparc_unmapped_base;
*/
#define MAP_NR(addr) ((((unsigned long) (addr)) - PAGE_OFFSET) >> PAGE_SHIFT)
+#else /* !(__ASSEMBLY__) */
+
+#define __pgprot(x) (x)
+
#endif /* !(__ASSEMBLY__) */
#endif /* __KERNEL__ */