diff options
author | Dale Rahn <drahn@cvs.openbsd.org> | 2005-10-03 02:18:51 +0000 |
---|---|---|
committer | Dale Rahn <drahn@cvs.openbsd.org> | 2005-10-03 02:18:51 +0000 |
commit | 2affcea6414e9b16b8e883f13257de85a53f0d9b (patch) | |
tree | d908e5b0a0c9e9be70a95c06930c90c80a815a13 /sys/arch/powerpc/include | |
parent | 8d93507761c678254a6484c24994be455a2796dd (diff) |
G5 pmap support, most of this G5 work has been done by kettenis@
without his forging ahead, it would barely be started.
Again this is one step of many, but needs to be tested, this is
independant of the locore change just committed which kettenis@ and
deraadt@ significantly wrote.
Diffstat (limited to 'sys/arch/powerpc/include')
-rw-r--r-- | sys/arch/powerpc/include/pmap.h | 11 | ||||
-rw-r--r-- | sys/arch/powerpc/include/pte.h | 86 |
2 files changed, 66 insertions, 31 deletions
diff --git a/sys/arch/powerpc/include/pmap.h b/sys/arch/powerpc/include/pmap.h index 9a6dfb9f29a..039b320cbbf 100644 --- a/sys/arch/powerpc/include/pmap.h +++ b/sys/arch/powerpc/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.38 2004/08/06 22:39:13 deraadt Exp $ */ +/* $OpenBSD: pmap.h,v 1.39 2005/10/03 02:18:50 drahn Exp $ */ /* $NetBSD: pmap.h,v 1.1 1996/09/30 16:34:29 ws Exp $ */ /*- @@ -101,13 +101,14 @@ boolean_t pteclrbits(paddr_t pa, u_int mask, u_int clear); #define pmap_clear_modify(page) \ - (pteclrbits(VM_PAGE_TO_PHYS(page), PTE_CHG, TRUE)) + (pteclrbits(VM_PAGE_TO_PHYS(page), PTE_CHG_32, TRUE)) #define pmap_clear_reference(page) \ - (pteclrbits(VM_PAGE_TO_PHYS(page), PTE_REF, TRUE)) + (pteclrbits(VM_PAGE_TO_PHYS(page), PTE_REF_32, TRUE)) #define pmap_is_modified(page) \ - (pteclrbits(VM_PAGE_TO_PHYS(page), PTE_CHG, FALSE)) + (pteclrbits(VM_PAGE_TO_PHYS(page), PTE_CHG_32, FALSE)) #define pmap_is_referenced(page) \ - (pteclrbits(VM_PAGE_TO_PHYS(page), PTE_REF, FALSE)) + (pteclrbits(VM_PAGE_TO_PHYS(page), PTE_REF_32, FALSE)) + #define pmap_unwire(pm, va) #define pmap_phys_address(x) (x) #define pmap_update(pmap) /* nothing (yet) */ diff --git a/sys/arch/powerpc/include/pte.h b/sys/arch/powerpc/include/pte.h index ee121a86fc1..3399c422619 100644 --- a/sys/arch/powerpc/include/pte.h +++ b/sys/arch/powerpc/include/pte.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pte.h,v 1.7 2003/01/30 15:38:09 drahn Exp $ */ +/* $OpenBSD: pte.h,v 1.8 2005/10/03 02:18:50 drahn Exp $ */ /* $NetBSD: pte.h,v 1.1 1996/09/30 16:34:32 ws Exp $ */ /*- @@ -41,42 +41,76 @@ * Page Table Entries */ #ifndef _LOCORE -struct pte { - u_int pte_hi; - u_int pte_lo; +struct pte_32 { + u_int32_t pte_hi; + u_int32_t pte_lo; +}; +struct pte_64 { + u_int64_t pte_hi; + u_int64_t pte_lo; }; #endif /* _LOCORE */ + +/* 32 bit */ /* High word: */ -#define PTE_VALID 0x80000000 -#define PTE_VSID_SHIFT 7 -#define PTE_HID 0x00000040 -#define PTE_API 0x0000003f +#define PTE_VALID_32 0x80000000 +#define PTE_VSID_SHIFT_32 7 +#define PTE_HID_32 0x00000040 +#define PTE_API_32 0x0000003f + /* Low word: */ +#define PTE_RPGN_32 0xfffff000 +#define PTE_REF_32 0x00000100 +#define PTE_CHG_32 0x00000080 +#define PTE_WIM_32 0x00000078 +#define PTE_W_32 0x00000040 +#define PTE_EXE_32 0x00000040 /* only used in pmap_attr, same as PTE_W */ +#define PTE_I_32 0x00000020 +#define PTE_M_32 0x00000010 +#define PTE_G_32 0x00000008 +#define PTE_PP_32 0x00000003 +#define PTE_RO_32 0x00000003 +#define PTE_RW_32 0x00000002 + + +/* 64 bit */ +/* High doubleword: */ +#define PTE_VALID_64 0x0000000000000001ULL +#define PTE_AVPN_SHIFT_64 7 +#define PTE_AVPN_64 0xffffffffffffff80ULL +#define PTE_API_SHIFT_64 7 +#define PTE_API_64 0x0000000000000f80ULL +#define PTE_VSID_SHIFT_64 12 +#define PTE_VSID_64 0xfffffffffffff000ULL +#define PTE_HID_64 0x0000000000000002ULL /* Low word: */ -#define PTE_RPGN 0xfffff000 -#define PTE_REF 0x00000100 -#define PTE_CHG 0x00000080 -#define PTE_WIMG 0x00000078 -#define PTE_W 0x00000040 -#define PTE_EXE 0x00000040 /* only used in pmap_attr, same as PTE_W */ -#define PTE_I 0x00000020 -#define PTE_M 0x00000010 -#define PTE_G 0x00000008 -#define PTE_PP 0x00000003 -#define PTE_RO 0x00000003 -#define PTE_RW 0x00000002 +#define PTE_RPGN_64 0x3ffffffffffff000ULL +#define PTE_REF_64 0x0000000000000100ULL +#define PTE_CHG_64 0x0000000000000080ULL +#define PTE_WIMG_64 0x0000000000000078ULL +#define PTE_W_64 0x0000000000000040ULL +#define PTE_EXE_64 PTE_W +#define PTE_I_64 0x0000000000000020ULL +#define PTE_M_64 0x0000000000000010ULL +#define PTE_G_64 0x0000000000000008ULL +#define PTE_N_64 0x0000000000000004ULL +#define PTE_PP_64 0x0000000000000003ULL +#define PTE_RO_64 0x0000000000000003ULL +#define PTE_RW_64 0x0000000000000002ULL #ifndef _LOCORE -typedef struct pte pte_t; +typedef struct pte_32 pte32_t; +typedef struct pte_64 pte64_t; #endif /* _LOCORE */ /* * Extract bits from address */ -#define ADDR_SR_SHIFT 28 -#define ADDR_PIDX 0x0ffff000 -#define ADDR_PIDX_SHIFT 12 -#define ADDR_API_SHIFT 22 -#define ADDR_POFF 0x00000fff +#define ADDR_SR_SHIFT 28 +#define ADDR_PIDX 0x0ffff000 +#define ADDR_PIDX_SHIFT 12 +#define ADDR_API_SHIFT_32 22 +#define ADDR_API_SHIFT_64 16 +#define ADDR_POFF 0x00000fff #ifndef _LOCORE #ifdef _KERNEL |