16019Shines@cs.fsu.edu/* 210037SARM gem5 Developers * Copyright (c) 2010, 2012-2013 ARM Limited 37399SAli.Saidi@ARM.com * All rights reserved 47399SAli.Saidi@ARM.com * 57399SAli.Saidi@ARM.com * The license below extends only to copyright in the software and shall 67399SAli.Saidi@ARM.com * not be construed as granting a license to any other intellectual 77399SAli.Saidi@ARM.com * property including but not limited to intellectual property relating 87399SAli.Saidi@ARM.com * to a hardware implementation of the functionality of the software 97399SAli.Saidi@ARM.com * licensed hereunder. You may use the software subject to the license 107399SAli.Saidi@ARM.com * terms below provided that you ensure that this notice is replicated 117399SAli.Saidi@ARM.com * unmodified and in its entirety in all distributions of the software, 127399SAli.Saidi@ARM.com * modified or unmodified, in source code or in binary form. 137399SAli.Saidi@ARM.com * 146019Shines@cs.fsu.edu * Copyright (c) 2002-2005 The Regents of The University of Michigan 156019Shines@cs.fsu.edu * All rights reserved. 166019Shines@cs.fsu.edu * 176019Shines@cs.fsu.edu * Redistribution and use in source and binary forms, with or without 186019Shines@cs.fsu.edu * modification, are permitted provided that the following conditions are 196019Shines@cs.fsu.edu * met: redistributions of source code must retain the above copyright 206019Shines@cs.fsu.edu * notice, this list of conditions and the following disclaimer; 216019Shines@cs.fsu.edu * redistributions in binary form must reproduce the above copyright 226019Shines@cs.fsu.edu * notice, this list of conditions and the following disclaimer in the 236019Shines@cs.fsu.edu * documentation and/or other materials provided with the distribution; 246019Shines@cs.fsu.edu * neither the name of the copyright holders nor the names of its 256019Shines@cs.fsu.edu * contributors may be used to endorse or promote products derived from 266019Shines@cs.fsu.edu * this software without specific prior written permission. 276019Shines@cs.fsu.edu * 286019Shines@cs.fsu.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 296019Shines@cs.fsu.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 306019Shines@cs.fsu.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 316019Shines@cs.fsu.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 326019Shines@cs.fsu.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 336019Shines@cs.fsu.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 346019Shines@cs.fsu.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 356019Shines@cs.fsu.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 366019Shines@cs.fsu.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 376019Shines@cs.fsu.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 386019Shines@cs.fsu.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 396019Shines@cs.fsu.edu * 407404SAli.Saidi@ARM.com * Authors: Ali Saidi 416019Shines@cs.fsu.edu */ 426019Shines@cs.fsu.edu 436019Shines@cs.fsu.edu#ifndef __ARCH_ARM_PAGETABLE_H__ 446019Shines@cs.fsu.edu#define __ARCH_ARM_PAGETABLE_H__ 456019Shines@cs.fsu.edu 4610037SARM gem5 Developers#include <cstdint> 4710037SARM gem5 Developers 486019Shines@cs.fsu.edu#include "arch/arm/isa_traits.hh" 496019Shines@cs.fsu.edu#include "arch/arm/utility.hh" 506019Shines@cs.fsu.edu#include "arch/arm/vtophys.hh" 517733SAli.Saidi@ARM.com#include "sim/serialize.hh" 527733SAli.Saidi@ARM.com 536019Shines@cs.fsu.edunamespace ArmISA { 546019Shines@cs.fsu.edu 557399SAli.Saidi@ARM.comstruct VAddr 567399SAli.Saidi@ARM.com{ 577399SAli.Saidi@ARM.com VAddr(Addr a) { panic("not implemented yet."); } 587399SAli.Saidi@ARM.com}; 597399SAli.Saidi@ARM.com 607399SAli.Saidi@ARM.com 617399SAli.Saidi@ARM.com// ITB/DTB page table entry 627399SAli.Saidi@ARM.comstruct PTE 637399SAli.Saidi@ARM.com{ 6410905Sandreas.sandberg@arm.com void serialize(CheckpointOut &cp) const 656019Shines@cs.fsu.edu { 667399SAli.Saidi@ARM.com panic("Need to implement PTE serialization\n"); 677399SAli.Saidi@ARM.com } 686019Shines@cs.fsu.edu 6910905Sandreas.sandberg@arm.com void unserialize(CheckpointIn &cp) 707399SAli.Saidi@ARM.com { 717399SAli.Saidi@ARM.com panic("Need to implement PTE serialization\n"); 727399SAli.Saidi@ARM.com } 736019Shines@cs.fsu.edu 747399SAli.Saidi@ARM.com}; 756019Shines@cs.fsu.edu 7610037SARM gem5 Developers// Lookup level 7710037SARM gem5 Developersenum LookupLevel { 7810037SARM gem5 Developers L0 = 0, // AArch64 only 7910037SARM gem5 Developers L1, 8010037SARM gem5 Developers L2, 8110037SARM gem5 Developers L3, 8210037SARM gem5 Developers MAX_LOOKUP_LEVELS 8310037SARM gem5 Developers}; 8410037SARM gem5 Developers 857399SAli.Saidi@ARM.com// ITB/DTB table entry 8610905Sandreas.sandberg@arm.comstruct TlbEntry : public Serializable 877399SAli.Saidi@ARM.com{ 887404SAli.Saidi@ARM.com public: 8910037SARM gem5 Developers enum class MemoryType : std::uint8_t { 907404SAli.Saidi@ARM.com StronglyOrdered, 917404SAli.Saidi@ARM.com Device, 927404SAli.Saidi@ARM.com Normal 937404SAli.Saidi@ARM.com }; 9410037SARM gem5 Developers 9510037SARM gem5 Developers enum class DomainType : std::uint8_t { 9610037SARM gem5 Developers NoAccess = 0, 9710037SARM gem5 Developers Client, 9810037SARM gem5 Developers Reserved, 9910037SARM gem5 Developers Manager 1007404SAli.Saidi@ARM.com }; 1016019Shines@cs.fsu.edu 1027404SAli.Saidi@ARM.com // Matching variables 1037404SAli.Saidi@ARM.com Addr pfn; 1047404SAli.Saidi@ARM.com Addr size; // Size of this entry, == Type of TLB Rec 1057404SAli.Saidi@ARM.com Addr vpn; // Virtual Page Number 10610037SARM gem5 Developers uint64_t attributes; // Memory attributes formatted for PAR 10710037SARM gem5 Developers 10810037SARM gem5 Developers LookupLevel lookupLevel; // Lookup level where the descriptor was fetched 10910037SARM gem5 Developers // from. Used to set the FSR for faults 11010037SARM gem5 Developers // occurring while the long desc. format is in 11110037SARM gem5 Developers // use (AArch32 w/ LPAE and AArch64) 11210037SARM gem5 Developers 11310037SARM gem5 Developers uint16_t asid; // Address Space Identifier 11410037SARM gem5 Developers uint8_t vmid; // Virtual machine Identifier 1157404SAli.Saidi@ARM.com uint8_t N; // Number of bits in pagesize 11610037SARM gem5 Developers uint8_t innerAttrs; 11710037SARM gem5 Developers uint8_t outerAttrs; 11810037SARM gem5 Developers uint8_t ap; // Access permissions bits 11910037SARM gem5 Developers uint8_t hap; // Hyp access permissions bits 12010037SARM gem5 Developers DomainType domain; // Access Domain 12110037SARM gem5 Developers 12210037SARM gem5 Developers MemoryType mtype; 12310037SARM gem5 Developers 12410037SARM gem5 Developers // True if the long descriptor format is used for this entry (LPAE only) 12510037SARM gem5 Developers bool longDescFormat; // @todo use this in the update attribute bethod 12610037SARM gem5 Developers 12710037SARM gem5 Developers bool isHyp; 1287404SAli.Saidi@ARM.com bool global; 1297404SAli.Saidi@ARM.com bool valid; 1307399SAli.Saidi@ARM.com 13110037SARM gem5 Developers // True if the entry targets the non-secure physical address space 13210037SARM gem5 Developers bool ns; 13310037SARM gem5 Developers // True if the entry was brought in from a non-secure page table 13410037SARM gem5 Developers bool nstid; 13510037SARM gem5 Developers // Exception level on insert, AARCH64 EL0&1, AARCH32 -> el=1 13614088Sgiacomo.travaglini@arm.com ExceptionLevel el; 13710037SARM gem5 Developers 1387404SAli.Saidi@ARM.com // Type of memory 1397404SAli.Saidi@ARM.com bool nonCacheable; // Can we wrap this in mtype? 1407404SAli.Saidi@ARM.com 1417436Sdam.sunwoo@arm.com // Memory Attributes 1427436Sdam.sunwoo@arm.com bool shareable; 14310037SARM gem5 Developers bool outerShareable; 1447436Sdam.sunwoo@arm.com 1457404SAli.Saidi@ARM.com // Access permissions 1467404SAli.Saidi@ARM.com bool xn; // Execute Never 14710037SARM gem5 Developers bool pxn; // Privileged Execute Never (LPAE only) 1487404SAli.Saidi@ARM.com 1497404SAli.Saidi@ARM.com //Construct an entry that maps to physical address addr for SE mode 15010558Salexandru.dutu@amd.com TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr, 15110558Salexandru.dutu@amd.com bool uncacheable, bool read_only) : 15210037SARM gem5 Developers pfn(_paddr >> PageShift), size(PageBytes - 1), vpn(_vaddr >> PageShift), 15310037SARM gem5 Developers attributes(0), lookupLevel(L1), asid(_asn), vmid(0), N(0), 15410558Salexandru.dutu@amd.com innerAttrs(0), outerAttrs(0), ap(read_only ? 0x3 : 0), hap(0x3), 15510037SARM gem5 Developers domain(DomainType::Client), mtype(MemoryType::StronglyOrdered), 15610037SARM gem5 Developers longDescFormat(false), isHyp(false), global(false), valid(true), 15714088Sgiacomo.travaglini@arm.com ns(true), nstid(true), el(EL0), nonCacheable(uncacheable), 15810558Salexandru.dutu@amd.com shareable(false), outerShareable(false), xn(0), pxn(0) 1596019Shines@cs.fsu.edu { 16010037SARM gem5 Developers // no restrictions by default, hap = 0x3 1617404SAli.Saidi@ARM.com 16210037SARM gem5 Developers // @todo Check the memory type 16310558Salexandru.dutu@amd.com if (read_only) 16410558Salexandru.dutu@amd.com warn("ARM TlbEntry does not support read-only mappings\n"); 1657399SAli.Saidi@ARM.com } 1666019Shines@cs.fsu.edu 16710037SARM gem5 Developers TlbEntry() : 16810037SARM gem5 Developers pfn(0), size(0), vpn(0), attributes(0), lookupLevel(L1), asid(0), 16910037SARM gem5 Developers vmid(0), N(0), innerAttrs(0), outerAttrs(0), ap(0), hap(0x3), 17010037SARM gem5 Developers domain(DomainType::Client), mtype(MemoryType::StronglyOrdered), 17111546Snikos.nikoleris@arm.com longDescFormat(false), isHyp(false), global(false), valid(false), 17214088Sgiacomo.travaglini@arm.com ns(true), nstid(true), el(EL0), nonCacheable(false), 17310037SARM gem5 Developers shareable(false), outerShareable(false), xn(0), pxn(0) 17410037SARM gem5 Developers { 17510037SARM gem5 Developers // no restrictions by default, hap = 0x3 17610037SARM gem5 Developers 17710037SARM gem5 Developers // @todo Check the memory type 17810037SARM gem5 Developers } 1796019Shines@cs.fsu.edu 1807399SAli.Saidi@ARM.com void 1817399SAli.Saidi@ARM.com updateVaddr(Addr new_vaddr) 1827399SAli.Saidi@ARM.com { 1837404SAli.Saidi@ARM.com vpn = new_vaddr >> PageShift; 1847399SAli.Saidi@ARM.com } 1856019Shines@cs.fsu.edu 1867399SAli.Saidi@ARM.com Addr 18710037SARM gem5 Developers pageStart() const 1887399SAli.Saidi@ARM.com { 1897404SAli.Saidi@ARM.com return pfn << PageShift; 1907404SAli.Saidi@ARM.com } 1917404SAli.Saidi@ARM.com 1927404SAli.Saidi@ARM.com bool 19310037SARM gem5 Developers match(Addr va, uint8_t _vmid, bool hypLookUp, bool secure_lookup, 19414088Sgiacomo.travaglini@arm.com ExceptionLevel target_el) const 1957404SAli.Saidi@ARM.com { 19610037SARM gem5 Developers return match(va, 0, _vmid, hypLookUp, secure_lookup, true, target_el); 19710037SARM gem5 Developers } 19810037SARM gem5 Developers 19910037SARM gem5 Developers bool 20010037SARM gem5 Developers match(Addr va, uint16_t asn, uint8_t _vmid, bool hypLookUp, 20114088Sgiacomo.travaglini@arm.com bool secure_lookup, bool ignore_asn, ExceptionLevel target_el) const 20210037SARM gem5 Developers { 20310037SARM gem5 Developers bool match = false; 2047404SAli.Saidi@ARM.com Addr v = vpn << N; 20510037SARM gem5 Developers 20610037SARM gem5 Developers if (valid && va >= v && va <= v + size && (secure_lookup == !nstid) && 20710037SARM gem5 Developers (hypLookUp == isHyp)) 20810037SARM gem5 Developers { 20914088Sgiacomo.travaglini@arm.com match = checkELMatch(target_el); 21014088Sgiacomo.travaglini@arm.com 21110037SARM gem5 Developers if (match && !ignore_asn) { 21210037SARM gem5 Developers match = global || (asn == asid); 21310037SARM gem5 Developers } 21410037SARM gem5 Developers if (match && nstid) { 21510037SARM gem5 Developers match = isHyp || (_vmid == vmid); 21610037SARM gem5 Developers } 21710037SARM gem5 Developers } 21810037SARM gem5 Developers return match; 2197404SAli.Saidi@ARM.com } 2207404SAli.Saidi@ARM.com 22114088Sgiacomo.travaglini@arm.com bool 22214088Sgiacomo.travaglini@arm.com checkELMatch(ExceptionLevel target_el) const 22314088Sgiacomo.travaglini@arm.com { 22414088Sgiacomo.travaglini@arm.com if (target_el == EL2 || target_el == EL3) { 22514088Sgiacomo.travaglini@arm.com return (el == target_el); 22614088Sgiacomo.travaglini@arm.com } else { 22714088Sgiacomo.travaglini@arm.com return (el == EL0) || (el == EL1); 22814088Sgiacomo.travaglini@arm.com } 22914088Sgiacomo.travaglini@arm.com } 23014088Sgiacomo.travaglini@arm.com 2317404SAli.Saidi@ARM.com Addr 23210037SARM gem5 Developers pAddr(Addr va) const 2337404SAli.Saidi@ARM.com { 2347404SAli.Saidi@ARM.com return (pfn << N) | (va & size); 2357399SAli.Saidi@ARM.com } 2366019Shines@cs.fsu.edu 2377733SAli.Saidi@ARM.com void 23810037SARM gem5 Developers updateAttributes() 23910037SARM gem5 Developers { 24010037SARM gem5 Developers uint64_t mask; 24110037SARM gem5 Developers uint64_t newBits; 24210037SARM gem5 Developers 24310037SARM gem5 Developers // chec bit 11 to determine if its currently LPAE or VMSA format. 24410037SARM gem5 Developers if ( attributes & (1 << 11) ) { 24510037SARM gem5 Developers newBits = ((outerShareable ? 0x2 : 24610037SARM gem5 Developers shareable ? 0x3 : 0) << 7); 24710037SARM gem5 Developers mask = 0x180; 24810037SARM gem5 Developers } else { 24910037SARM gem5 Developers /** Formatting for Physical Address Register (PAR) 25010037SARM gem5 Developers * Only including lower bits (TLB info here) 25110037SARM gem5 Developers * PAR (32-bit format): 25210037SARM gem5 Developers * PA [31:12] 25310037SARM gem5 Developers * LPAE [11] (Large Physical Address Extension) 25410037SARM gem5 Developers * TLB info [10:1] 25510037SARM gem5 Developers * NOS [10] (Not Outer Sharable) 25610037SARM gem5 Developers * NS [9] (Non-Secure) 25710037SARM gem5 Developers * -- [8] (Implementation Defined) 25810037SARM gem5 Developers * SH [7] (Sharable) 25910037SARM gem5 Developers * Inner[6:4](Inner memory attributes) 26010037SARM gem5 Developers * Outer[3:2](Outer memory attributes) 26110037SARM gem5 Developers * SS [1] (SuperSection) 26210037SARM gem5 Developers * F [0] (Fault, Fault Status in [6:1] if faulted) 26310037SARM gem5 Developers */ 26410037SARM gem5 Developers newBits = ((outerShareable ? 0:1) << 10) | 26510037SARM gem5 Developers ((shareable ? 1:0) << 7) | 26610037SARM gem5 Developers (innerAttrs << 4) | 26710037SARM gem5 Developers (outerAttrs << 2); 26810037SARM gem5 Developers // TODO: Supersection bit 26910037SARM gem5 Developers mask = 0x4FC; 27010037SARM gem5 Developers } 27110037SARM gem5 Developers // common bits 27210037SARM gem5 Developers newBits |= ns << 9; // NS bit 27310037SARM gem5 Developers mask |= 1 << 9; 27410037SARM gem5 Developers // add in the new bits 27510037SARM gem5 Developers attributes &= ~mask; 27610037SARM gem5 Developers attributes |= newBits; 27710037SARM gem5 Developers } 27810037SARM gem5 Developers 27910037SARM gem5 Developers void 28010037SARM gem5 Developers setAttributes(bool lpae) 28110037SARM gem5 Developers { 28210037SARM gem5 Developers attributes = lpae ? (1 << 11) : 0; 28310037SARM gem5 Developers updateAttributes(); 28410037SARM gem5 Developers } 28510037SARM gem5 Developers 28610037SARM gem5 Developers std::string 28710037SARM gem5 Developers print() const 28810037SARM gem5 Developers { 28910037SARM gem5 Developers return csprintf("%#x, asn %d vmn %d hyp %d ppn %#x size: %#x ap:%d " 29010037SARM gem5 Developers "ns:%d nstid:%d g:%d el:%d", vpn << N, asid, vmid, 29110037SARM gem5 Developers isHyp, pfn << N, size, ap, ns, nstid, global, el); 29210037SARM gem5 Developers } 29310037SARM gem5 Developers 29410037SARM gem5 Developers void 29511168Sandreas.hansson@arm.com serialize(CheckpointOut &cp) const override 2967733SAli.Saidi@ARM.com { 29710037SARM gem5 Developers SERIALIZE_SCALAR(longDescFormat); 2987733SAli.Saidi@ARM.com SERIALIZE_SCALAR(pfn); 2997733SAli.Saidi@ARM.com SERIALIZE_SCALAR(size); 3007733SAli.Saidi@ARM.com SERIALIZE_SCALAR(vpn); 3017733SAli.Saidi@ARM.com SERIALIZE_SCALAR(asid); 30210037SARM gem5 Developers SERIALIZE_SCALAR(vmid); 30310037SARM gem5 Developers SERIALIZE_SCALAR(isHyp); 3047733SAli.Saidi@ARM.com SERIALIZE_SCALAR(N); 3057733SAli.Saidi@ARM.com SERIALIZE_SCALAR(global); 3067733SAli.Saidi@ARM.com SERIALIZE_SCALAR(valid); 30710037SARM gem5 Developers SERIALIZE_SCALAR(ns); 30810037SARM gem5 Developers SERIALIZE_SCALAR(nstid); 3097733SAli.Saidi@ARM.com SERIALIZE_SCALAR(nonCacheable); 31010037SARM gem5 Developers SERIALIZE_ENUM(lookupLevel); 3117733SAli.Saidi@ARM.com SERIALIZE_ENUM(mtype); 3127733SAli.Saidi@ARM.com SERIALIZE_SCALAR(innerAttrs); 3137733SAli.Saidi@ARM.com SERIALIZE_SCALAR(outerAttrs); 3147733SAli.Saidi@ARM.com SERIALIZE_SCALAR(shareable); 31510037SARM gem5 Developers SERIALIZE_SCALAR(outerShareable); 3167733SAli.Saidi@ARM.com SERIALIZE_SCALAR(attributes); 3177733SAli.Saidi@ARM.com SERIALIZE_SCALAR(xn); 31810037SARM gem5 Developers SERIALIZE_SCALAR(pxn); 3197733SAli.Saidi@ARM.com SERIALIZE_SCALAR(ap); 32010037SARM gem5 Developers SERIALIZE_SCALAR(hap); 32110037SARM gem5 Developers uint8_t domain_ = static_cast<uint8_t>(domain); 32210905Sandreas.sandberg@arm.com paramOut(cp, "domain", domain_); 3237733SAli.Saidi@ARM.com } 3247733SAli.Saidi@ARM.com void 32511168Sandreas.hansson@arm.com unserialize(CheckpointIn &cp) override 3267733SAli.Saidi@ARM.com { 32710037SARM gem5 Developers UNSERIALIZE_SCALAR(longDescFormat); 3287733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(pfn); 3297733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(size); 3307733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(vpn); 3317733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(asid); 33210037SARM gem5 Developers UNSERIALIZE_SCALAR(vmid); 33310037SARM gem5 Developers UNSERIALIZE_SCALAR(isHyp); 3347733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(N); 3357733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(global); 3367733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(valid); 33710037SARM gem5 Developers UNSERIALIZE_SCALAR(ns); 33810037SARM gem5 Developers UNSERIALIZE_SCALAR(nstid); 3397733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(nonCacheable); 34010037SARM gem5 Developers UNSERIALIZE_ENUM(lookupLevel); 3417733SAli.Saidi@ARM.com UNSERIALIZE_ENUM(mtype); 3427733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(innerAttrs); 3437733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(outerAttrs); 3447733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(shareable); 34510037SARM gem5 Developers UNSERIALIZE_SCALAR(outerShareable); 3467733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(attributes); 3477733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(xn); 34810037SARM gem5 Developers UNSERIALIZE_SCALAR(pxn); 3497733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(ap); 35010037SARM gem5 Developers UNSERIALIZE_SCALAR(hap); 35110037SARM gem5 Developers uint8_t domain_; 35210905Sandreas.sandberg@arm.com paramIn(cp, "domain", domain_); 35310037SARM gem5 Developers domain = static_cast<DomainType>(domain_); 3547733SAli.Saidi@ARM.com } 3557733SAli.Saidi@ARM.com 3567399SAli.Saidi@ARM.com}; 3576019Shines@cs.fsu.edu 3587399SAli.Saidi@ARM.com 3596019Shines@cs.fsu.edu 3608902Sandreas.hansson@arm.com} 3616019Shines@cs.fsu.edu#endif // __ARCH_ARM_PAGETABLE_H__ 3626019Shines@cs.fsu.edu 363