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