[NDK]: Use new ARMv6 PTE structures.

svn path=/trunk/; revision=45516
This commit is contained in:
Sir Richard 2010-02-09 02:14:58 +00:00
parent 92f6dfd7d4
commit f44cf3f702

View file

@ -47,90 +47,56 @@ C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE);
// //
// Page Table Entry Definitions // Page Table Entry Definitions
// //
typedef struct _HARDWARE_PTE_ARM typedef struct _HARDWARE_PDE_ARMV6
{ {
union ULONG Valid:1; // Only for small pages
ULONG LargePage:1; // Note, if large then Valid = 0
ULONG Buffered:1;
ULONG Cached:1;
ULONG NoExecute:1;
ULONG Domain:4;
ULONG Ecc:1;
ULONG PageFrameNumber:22;
} HARDWARE_PDE_ARMV6, *PHARDWARE_PDE_ARMV6;
typedef struct _HARDWARE_LARGE_PTE_ARMV6
{ {
union ULONG Valid:1; // Only for small pages
{ ULONG LargePage:1; // Note, if large then Valid = 0
struct ULONG Buffered:1;
{ ULONG Cached:1;
ULONG Type:2; ULONG NoExecute:1;
ULONG Unused:30; ULONG Domain:4;
} Fault; ULONG Ecc:1;
struct ULONG Accessed:1;
{ ULONG Owner:1;
ULONG Type:2; ULONG CacheAttributes:3;
ULONG Ignored:2; ULONG ReadOnly:1;
ULONG Shared:1;
ULONG NonGlobal:1;
ULONG SuperLagePage:1;
ULONG Reserved:1; ULONG Reserved:1;
ULONG Domain:4; ULONG PageFrameNumber:12;
ULONG Ignored1:1; } HARDWARE_LARGE_PTE_ARMV6, *PHARDWARE_LARGE_PTE_ARMV6;
ULONG BaseAddress:22;
} Coarse; typedef struct _HARDWARE_PTE_ARMV6
struct
{ {
ULONG Type:2; ULONG NoExecute:1;
ULONG Valid:1;
ULONG Buffered:1; ULONG Buffered:1;
ULONG Cached:1; ULONG Cached:1;
ULONG Reserved:1; ULONG Accessed:1;
ULONG Domain:4; ULONG Owner:1;
ULONG Ignored:1; ULONG CacheAttributes:3;
ULONG Access:2; ULONG ReadOnly:1;
ULONG Ignored1:8; ULONG Shared:1;
ULONG BaseAddress:12; ULONG NonGlobal:1;
} Section; ULONG PageFrameNumber:20;
struct } HARDWARE_PTE_ARMV6, *PHARDWARE_PTE_ARMV6;
{
ULONG Type:2; C_ASSERT(sizeof(HARDWARE_PDE_ARMV6) == sizeof(ULONG));
ULONG Reserved:3; C_ASSERT(sizeof(HARDWARE_LARGE_PTE_ARMV6) == sizeof(ULONG));
ULONG Domain:4; C_ASSERT(sizeof(HARDWARE_PTE_ARMV6) == sizeof(ULONG));
ULONG Ignored:3;
ULONG BaseAddress:20;
} Fine;
} L1;
union
{
struct
{
ULONG Type:2;
ULONG Unused:30;
} Fault;
struct
{
ULONG Type:2;
ULONG Buffered:1;
ULONG Cached:1;
ULONG Access0:2;
ULONG Access1:2;
ULONG Access2:2;
ULONG Access3:2;
ULONG Ignored:4;
ULONG BaseAddress:16;
} Large;
struct
{
ULONG Type:2;
ULONG Buffered:1;
ULONG Cached:1;
ULONG Access0:2;
ULONG Access1:2;
ULONG Access2:2;
ULONG Access3:2;
ULONG BaseAddress:20;
} Small;
struct
{
ULONG Type:2;
ULONG Buffered:1;
ULONG Cached:1;
ULONG Access0:2;
ULONG Ignored:4;
ULONG BaseAddress:22;
} Tiny;
} L2;
ULONG AsUlong;
};
} HARDWARE_PTE_ARM, *PHARDWARE_PTE_ARM;
typedef struct _MMPTE_SOFTWARE typedef struct _MMPTE_SOFTWARE
{ {
@ -185,53 +151,18 @@ typedef struct _MMPTE_LIST
ULONG filler1:1; ULONG filler1:1;
} MMPTE_LIST; } MMPTE_LIST;
typedef struct _MMPDE_HARDWARE // FIXFIX: Find a way to make this more portable
{
union
{
union
{
struct
{
ULONG Valid:1;
ULONG Section:1;
ULONG Sbz:3;
ULONG Domain:4;
ULONG EccEnabled:1;
ULONG PageFrameNumber:22;
} Coarse;
struct
{
ULONG Coarse:1;
ULONG Valid:1;
ULONG Buffered:1;
ULONG Cached:1;
ULONG Reserved:1;
ULONG Domain:4;
ULONG EccEnabled:1;
ULONG Access:2;
ULONG ExtendedAccess:3;
ULONG Sbz:3;
ULONG SuperSection:1;
ULONG Sbz1:1;
ULONG PageFrameNumber:12;
} Section;
ULONG AsUlong;
} Hard;
} u;
} MMPDE_HARDWARE, *PMMPDE_HARDWARE;
typedef union _MMPTE_HARDWARE typedef union _MMPTE_HARDWARE
{ {
struct struct
{ {
ULONG ExecuteNever:1; ULONG NoExecute:1;
ULONG Valid:1; ULONG Valid:1;
ULONG Buffered:1; ULONG Buffered:1;
ULONG Cached:1; ULONG Cached:1;
ULONG Access:2; ULONG Access:1;
ULONG TypeExtension:3; ULONG Owner:1;
ULONG ExtendedAccess:1; ULONG CacheAttributes:3;
ULONG ReadOnly:1;
ULONG Shared:1; ULONG Shared:1;
ULONG NonGlobal:1; ULONG NonGlobal:1;
ULONG PageFrameNumber:20; ULONG PageFrameNumber:20;
@ -242,7 +173,7 @@ typedef union _MMPTE_HARDWARE
// //
// Use the right PTE structure // Use the right PTE structure
// //
#define HARDWARE_PTE HARDWARE_PTE_ARM #define HARDWARE_PTE HARDWARE_PTE_ARMV6
#define PHARDWARE_PTE PHARDWARE_PTE_ARM #define PHARDWARE_PTE PHARDWARE_PTE_ARMV6
#endif #endif