diff options
Diffstat (limited to 'usr/src/uts/intel/sys/pte.h')
-rw-r--r-- | usr/src/uts/intel/sys/pte.h | 107 |
1 files changed, 99 insertions, 8 deletions
diff --git a/usr/src/uts/intel/sys/pte.h b/usr/src/uts/intel/sys/pte.h index 09c009d421..ff8d6bb506 100644 --- a/usr/src/uts/intel/sys/pte.h +++ b/usr/src/uts/intel/sys/pte.h @@ -2,9 +2,8 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. @@ -20,19 +19,111 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_PTE_H #define _SYS_PTE_H -#pragma ident "%Z%%M% %I% %E% SMI" +#ifndef _ASM +#include <sys/types.h> +#endif /* _ASM */ -#if defined(__i386) || defined(__amd64) +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _ASM + +#ifdef PTE36 /* PTE36 ---------------------------- */ + +typedef uint64_t pteval_t; +typedef pteval_t *pteptr_t; + +#define PRPTEx "llx" + +typedef struct pte32 { + uint32_t Present:1; + uint32_t AccessPermissions:2; + uint32_t WriteThru:1; + uint32_t NonCacheable:1; + uint32_t Referenced:1; + uint32_t Modified:1; + uint32_t MustBeZero:1; + uint32_t GlobalEnable:1; + uint32_t OSReserved:3; + uint32_t PhysicalPageNumber:20; +} pte32_t; + + +typedef struct pte { + uint32_t Present:1; + uint32_t AccessPermissions:2; + uint32_t WriteThru:1; + uint32_t NonCacheable:1; + uint32_t Referenced:1; + uint32_t Modified:1; + uint32_t MustBeZero:1; + uint32_t GlobalEnable:1; + uint32_t OSReserved:3; + uint32_t PhysicalPageNumberL:20; + uint32_t PhysicalPageNumberH; + /* + * An easy way to ensure that + * reserved bits are zero. + */ +} pte_t; + +struct pte64 { + uint32_t pte64_0_31; + uint32_t pte64_32_64; +}; + +#define NPTESHIFT 9 +#define NPTEPERPT 512 /* entries in page table */ +#define PTSIZE (NPTEPERPT * MMU_PAGESIZE) /* bytes mapped */ + + +#else /* PTE36 */ + /* PTE32 ---------------------------- */ + + +typedef uint32_t pteval_t; +typedef pteval_t *pteptr_t; + +#define PRPTEx "x" + +typedef struct pte { + uint_t Present:1; + uint_t AccessPermissions:2; + uint_t WriteThru:1; + uint_t NonCacheable:1; + uint_t Referenced:1; + uint_t Modified:1; + uint_t MustBeZero:1; + uint_t GlobalEnable:1; + uint_t OSReserved:3; + uint_t PhysicalPageNumber:20; +} pte_t; + +#define pte32_t pte_t + +#define NPTESHIFT 10 +#define NPTEPERPT 1024 /* entries in page table */ +#define PTSIZE (NPTEPERPT * MMU_PAGESIZE) /* bytes mapped */ + +#endif /* PTE36 */ + +#define PTE_VALID 0x01 +#define PTE_LARGEPAGE 0x80 +#define PTE_SRWX 0x02 + +#endif /* !_ASM */ -#include <ia32/sys/pte.h> /* XX64 x86/sys/pte.h */ +#ifdef __cplusplus +} #endif -#endif /* _SYS_PTE_H */ +#endif /* !_SYS_PTE_H */ |