pagetable.hh revision 8902
16019Shines@cs.fsu.edu/* 27399SAli.Saidi@ARM.com * Copyright (c) 2010 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 466019Shines@cs.fsu.edu#include "arch/arm/isa_traits.hh" 476019Shines@cs.fsu.edu#include "arch/arm/utility.hh" 486019Shines@cs.fsu.edu#include "arch/arm/vtophys.hh" 497733SAli.Saidi@ARM.com#include "sim/serialize.hh" 507733SAli.Saidi@ARM.com 516019Shines@cs.fsu.edunamespace ArmISA { 526019Shines@cs.fsu.edu 537399SAli.Saidi@ARM.comstruct VAddr 547399SAli.Saidi@ARM.com{ 557399SAli.Saidi@ARM.com VAddr(Addr a) { panic("not implemented yet."); } 567399SAli.Saidi@ARM.com}; 577399SAli.Saidi@ARM.com 587399SAli.Saidi@ARM.com 597399SAli.Saidi@ARM.com// ITB/DTB page table entry 607399SAli.Saidi@ARM.comstruct PTE 617399SAli.Saidi@ARM.com{ 627399SAli.Saidi@ARM.com void serialize(std::ostream &os) 636019Shines@cs.fsu.edu { 647399SAli.Saidi@ARM.com panic("Need to implement PTE serialization\n"); 657399SAli.Saidi@ARM.com } 666019Shines@cs.fsu.edu 677399SAli.Saidi@ARM.com void unserialize(Checkpoint *cp, const std::string §ion) 687399SAli.Saidi@ARM.com { 697399SAli.Saidi@ARM.com panic("Need to implement PTE serialization\n"); 707399SAli.Saidi@ARM.com } 716019Shines@cs.fsu.edu 727399SAli.Saidi@ARM.com}; 736019Shines@cs.fsu.edu 747399SAli.Saidi@ARM.com// ITB/DTB table entry 757399SAli.Saidi@ARM.comstruct TlbEntry 767399SAli.Saidi@ARM.com{ 777404SAli.Saidi@ARM.com public: 787404SAli.Saidi@ARM.com enum MemoryType { 797404SAli.Saidi@ARM.com StronglyOrdered, 807404SAli.Saidi@ARM.com Device, 817404SAli.Saidi@ARM.com Normal 827404SAli.Saidi@ARM.com }; 837404SAli.Saidi@ARM.com enum DomainType { 847404SAli.Saidi@ARM.com DomainNoAccess = 0, 857404SAli.Saidi@ARM.com DomainClient, 867404SAli.Saidi@ARM.com DomainReserved, 877404SAli.Saidi@ARM.com DomainManager 887404SAli.Saidi@ARM.com }; 896019Shines@cs.fsu.edu 907404SAli.Saidi@ARM.com // Matching variables 917404SAli.Saidi@ARM.com Addr pfn; 927404SAli.Saidi@ARM.com Addr size; // Size of this entry, == Type of TLB Rec 937404SAli.Saidi@ARM.com Addr vpn; // Virtual Page Number 947404SAli.Saidi@ARM.com uint32_t asid; // Address Space Identifier 957404SAli.Saidi@ARM.com uint8_t N; // Number of bits in pagesize 967404SAli.Saidi@ARM.com bool global; 977404SAli.Saidi@ARM.com bool valid; 987399SAli.Saidi@ARM.com 997404SAli.Saidi@ARM.com // Type of memory 1007404SAli.Saidi@ARM.com bool nonCacheable; // Can we wrap this in mtype? 1017404SAli.Saidi@ARM.com bool sNp; // Section descriptor 1027404SAli.Saidi@ARM.com 1037436Sdam.sunwoo@arm.com // Memory Attributes 1047436Sdam.sunwoo@arm.com MemoryType mtype; 1057436Sdam.sunwoo@arm.com uint8_t innerAttrs; 1067436Sdam.sunwoo@arm.com uint8_t outerAttrs; 1077436Sdam.sunwoo@arm.com bool shareable; 1087436Sdam.sunwoo@arm.com uint32_t attributes; // Memory attributes formatted for PAR 1097436Sdam.sunwoo@arm.com 1107436Sdam.sunwoo@arm.com 1117404SAli.Saidi@ARM.com // Access permissions 1127404SAli.Saidi@ARM.com bool xn; // Execute Never 1137733SAli.Saidi@ARM.com uint8_t ap; // Access permissions bits 1147733SAli.Saidi@ARM.com uint8_t domain; // Access Domain 1157404SAli.Saidi@ARM.com 1167404SAli.Saidi@ARM.com //Construct an entry that maps to physical address addr for SE mode 1177399SAli.Saidi@ARM.com TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr) 1186019Shines@cs.fsu.edu { 1197404SAli.Saidi@ARM.com pfn = _paddr >> PageShift; 1207404SAli.Saidi@ARM.com size = PageBytes - 1; 1217404SAli.Saidi@ARM.com asid = _asn; 1227404SAli.Saidi@ARM.com global = false; 1237399SAli.Saidi@ARM.com valid = true; 1247404SAli.Saidi@ARM.com 1257404SAli.Saidi@ARM.com vpn = _vaddr >> PageShift; 1267404SAli.Saidi@ARM.com 1277404SAli.Saidi@ARM.com nonCacheable = sNp = false; 1287404SAli.Saidi@ARM.com 1297404SAli.Saidi@ARM.com xn = 0; 1307404SAli.Saidi@ARM.com ap = 0; // ??? 1317404SAli.Saidi@ARM.com domain = DomainClient; //??? 1327399SAli.Saidi@ARM.com } 1336019Shines@cs.fsu.edu 1347399SAli.Saidi@ARM.com TlbEntry() 1357399SAli.Saidi@ARM.com {} 1366019Shines@cs.fsu.edu 1377399SAli.Saidi@ARM.com void 1387399SAli.Saidi@ARM.com updateVaddr(Addr new_vaddr) 1397399SAli.Saidi@ARM.com { 1407404SAli.Saidi@ARM.com vpn = new_vaddr >> PageShift; 1417399SAli.Saidi@ARM.com } 1426019Shines@cs.fsu.edu 1437399SAli.Saidi@ARM.com Addr 1447399SAli.Saidi@ARM.com pageStart() 1457399SAli.Saidi@ARM.com { 1467404SAli.Saidi@ARM.com return pfn << PageShift; 1477404SAli.Saidi@ARM.com } 1487404SAli.Saidi@ARM.com 1497404SAli.Saidi@ARM.com bool 1507404SAli.Saidi@ARM.com match(Addr va, uint8_t cid) 1517404SAli.Saidi@ARM.com { 1527404SAli.Saidi@ARM.com Addr v = vpn << N; 1537404SAli.Saidi@ARM.com if (valid && va >= v && va <= v + size && (global || cid == asid)) 1547404SAli.Saidi@ARM.com return true; 1557404SAli.Saidi@ARM.com return false; 1567404SAli.Saidi@ARM.com } 1577404SAli.Saidi@ARM.com 1587404SAli.Saidi@ARM.com Addr 1597404SAli.Saidi@ARM.com pAddr(Addr va) 1607404SAli.Saidi@ARM.com { 1617404SAli.Saidi@ARM.com return (pfn << N) | (va & size); 1627399SAli.Saidi@ARM.com } 1636019Shines@cs.fsu.edu 1647733SAli.Saidi@ARM.com void 1657733SAli.Saidi@ARM.com serialize(std::ostream &os) 1667733SAli.Saidi@ARM.com { 1677733SAli.Saidi@ARM.com SERIALIZE_SCALAR(pfn); 1687733SAli.Saidi@ARM.com SERIALIZE_SCALAR(size); 1697733SAli.Saidi@ARM.com SERIALIZE_SCALAR(vpn); 1707733SAli.Saidi@ARM.com SERIALIZE_SCALAR(asid); 1717733SAli.Saidi@ARM.com SERIALIZE_SCALAR(N); 1727733SAli.Saidi@ARM.com SERIALIZE_SCALAR(global); 1737733SAli.Saidi@ARM.com SERIALIZE_SCALAR(valid); 1747733SAli.Saidi@ARM.com SERIALIZE_SCALAR(nonCacheable); 1757733SAli.Saidi@ARM.com SERIALIZE_SCALAR(sNp); 1767733SAli.Saidi@ARM.com SERIALIZE_ENUM(mtype); 1777733SAli.Saidi@ARM.com SERIALIZE_SCALAR(innerAttrs); 1787733SAli.Saidi@ARM.com SERIALIZE_SCALAR(outerAttrs); 1797733SAli.Saidi@ARM.com SERIALIZE_SCALAR(shareable); 1807733SAli.Saidi@ARM.com SERIALIZE_SCALAR(attributes); 1817733SAli.Saidi@ARM.com SERIALIZE_SCALAR(xn); 1827733SAli.Saidi@ARM.com SERIALIZE_SCALAR(ap); 1837733SAli.Saidi@ARM.com SERIALIZE_SCALAR(domain); 1847733SAli.Saidi@ARM.com } 1857733SAli.Saidi@ARM.com void 1867733SAli.Saidi@ARM.com unserialize(Checkpoint *cp, const std::string §ion) 1877733SAli.Saidi@ARM.com { 1887733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(pfn); 1897733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(size); 1907733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(vpn); 1917733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(asid); 1927733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(N); 1937733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(global); 1947733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(valid); 1957733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(nonCacheable); 1967733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(sNp); 1977733SAli.Saidi@ARM.com UNSERIALIZE_ENUM(mtype); 1987733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(innerAttrs); 1997733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(outerAttrs); 2007733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(shareable); 2017733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(attributes); 2027733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(xn); 2037733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(ap); 2047733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(domain); 2057733SAli.Saidi@ARM.com } 2067733SAli.Saidi@ARM.com 2077399SAli.Saidi@ARM.com}; 2086019Shines@cs.fsu.edu 2097399SAli.Saidi@ARM.com 2106019Shines@cs.fsu.edu 2118902Sandreas.hansson@arm.com} 2126019Shines@cs.fsu.edu#endif // __ARCH_ARM_PAGETABLE_H__ 2136019Shines@cs.fsu.edu 214