/* * Copyright (c) 2015, ETH Zuerich. * All rights reserved. * * This file is distributed under the terms in the attached LICENSE file. * If you do not find this file, copies can be found by writing to: * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group. */ #ifndef __VM_H #define __VM_H #include #define ARMv8_BLOCK_BITS 9 #define ARMv8_BLOCK_SIZE (1 << ARMv8_BLOCK_BITS) #define ARMv8_BLOCK_MASK (ARMv8_BLOCK_SIZE - 1) /** The system's base page size is 4kB */ #define ARMv8_BASE_PAGE_BITS 12 #define ARMv8_BASE_PAGE_SIZE (1ULL< table, 0 -> block uint64_t ignored1 :10; // lower block attrs, ignored for table uint64_t base :36; // base address of next level table uint64_t reserved1 :4; uint64_t ignored2 :7; uint64_t pxntable :1; // only stage 1, executable from EL1 uint64_t uxntable :1; // only stage 1, executable from EL0 uint64_t aptable :2; // only stage 1, access from EL0 uint64_t nstable :1; // only stage 1, access from secure state } d; struct { uint64_t valid :1; uint64_t mb0 :1; // 1 -> table, 0 -> block uint64_t attrindex :3; // mem attr index field, D4-1798 uint64_t ns :1; // non-secure bit uint64_t ap :2; // access permissions bits uint64_t sh :2; // shareability field uint64_t af :1; // accessed flag uint64_t ng :1; // not global bit uint64_t reserved1 :18; uint64_t base :18; uint64_t reserved2 :4; uint64_t contiguous :1; // hint that entry is part of set // of contiguous entries, D4-1811 uint64_t pxn :1; // privileged execute never bit uint64_t uxn :1; // (user) execute never bit uint64_t avail1 :4; // available for SW use uint64_t ignored1 :5; } block_l1; struct { uint64_t valid :1; uint64_t mb0 :1; // 1 -> table, 0 -> block uint64_t attrindex :3; // mem attr index field, D4-1798 uint64_t ns :1; // non-secure bit uint64_t ap :2; // access permissions bits uint64_t sh :2; // shareability field uint64_t af :1; // accessed flag uint64_t ng :1; // not global bit uint64_t reserved1 :9; uint64_t base :27; uint64_t reserved2 :4; uint64_t contiguous :1; // hint that entry is part of set // of contiguous entries, D4-1811 uint64_t pxn :1; // privileged execute never bit uint64_t uxn :1; // (user) execute never bit uint64_t avail1 :4; // available for SW use uint64_t ignored1 :5; } block_l2; struct { uint64_t valid :1; uint64_t mb1 :1; // 0 -> makes entry invalid uint64_t attrindex :3; // mem attr index field, D4-1798 uint64_t ns :1; // non-secure bit uint64_t ap :2; // access permissions bits uint64_t sh :2; // shareability field uint64_t af :1; // accessed flag uint64_t ng :1; // not global bit uint64_t base :36; uint64_t reserved1 :4; uint64_t contiguous :1; // hint that entry is part of set // of contiguous entries, D4-1811 uint64_t pxn :1; // privileged execute never bit uint64_t uxn :1; // (user) execute never bit uint64_t avail1 :4; // available for SW use uint64_t ignored1 :5; } page; }; #endif /* __VM_H */