pagetable.hh revision 7733
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" 496019Shines@cs.fsu.edu#include "config/full_system.hh" 506019Shines@cs.fsu.edu 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{ 647399SAli.Saidi@ARM.com void serialize(std::ostream &os) 656019Shines@cs.fsu.edu { 667399SAli.Saidi@ARM.com panic("Need to implement PTE serialization\n"); 677399SAli.Saidi@ARM.com } 686019Shines@cs.fsu.edu 697399SAli.Saidi@ARM.com void unserialize(Checkpoint *cp, const std::string §ion) 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 767399SAli.Saidi@ARM.com// ITB/DTB table entry 777399SAli.Saidi@ARM.comstruct TlbEntry 787399SAli.Saidi@ARM.com{ 797404SAli.Saidi@ARM.com public: 807404SAli.Saidi@ARM.com enum MemoryType { 817404SAli.Saidi@ARM.com StronglyOrdered, 827404SAli.Saidi@ARM.com Device, 837404SAli.Saidi@ARM.com Normal 847404SAli.Saidi@ARM.com }; 857404SAli.Saidi@ARM.com enum DomainType { 867404SAli.Saidi@ARM.com DomainNoAccess = 0, 877404SAli.Saidi@ARM.com DomainClient, 887404SAli.Saidi@ARM.com DomainReserved, 897404SAli.Saidi@ARM.com DomainManager 907404SAli.Saidi@ARM.com }; 916019Shines@cs.fsu.edu 927404SAli.Saidi@ARM.com // Matching variables 937404SAli.Saidi@ARM.com Addr pfn; 947404SAli.Saidi@ARM.com Addr size; // Size of this entry, == Type of TLB Rec 957404SAli.Saidi@ARM.com Addr vpn; // Virtual Page Number 967404SAli.Saidi@ARM.com uint32_t asid; // Address Space Identifier 977404SAli.Saidi@ARM.com uint8_t N; // Number of bits in pagesize 987404SAli.Saidi@ARM.com bool global; 997404SAli.Saidi@ARM.com bool valid; 1007399SAli.Saidi@ARM.com 1017404SAli.Saidi@ARM.com // Type of memory 1027404SAli.Saidi@ARM.com bool nonCacheable; // Can we wrap this in mtype? 1037404SAli.Saidi@ARM.com bool sNp; // Section descriptor 1047404SAli.Saidi@ARM.com 1057436Sdam.sunwoo@arm.com // Memory Attributes 1067436Sdam.sunwoo@arm.com MemoryType mtype; 1077436Sdam.sunwoo@arm.com uint8_t innerAttrs; 1087436Sdam.sunwoo@arm.com uint8_t outerAttrs; 1097436Sdam.sunwoo@arm.com bool shareable; 1107436Sdam.sunwoo@arm.com uint32_t attributes; // Memory attributes formatted for PAR 1117436Sdam.sunwoo@arm.com 1127436Sdam.sunwoo@arm.com 1137404SAli.Saidi@ARM.com // Access permissions 1147404SAli.Saidi@ARM.com bool xn; // Execute Never 1157733SAli.Saidi@ARM.com uint8_t ap; // Access permissions bits 1167733SAli.Saidi@ARM.com uint8_t domain; // Access Domain 1177404SAli.Saidi@ARM.com 1187404SAli.Saidi@ARM.com //Construct an entry that maps to physical address addr for SE mode 1197399SAli.Saidi@ARM.com TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr) 1206019Shines@cs.fsu.edu { 1217404SAli.Saidi@ARM.com pfn = _paddr >> PageShift; 1227404SAli.Saidi@ARM.com size = PageBytes - 1; 1237404SAli.Saidi@ARM.com asid = _asn; 1247404SAli.Saidi@ARM.com global = false; 1257399SAli.Saidi@ARM.com valid = true; 1267404SAli.Saidi@ARM.com 1277404SAli.Saidi@ARM.com vpn = _vaddr >> PageShift; 1287404SAli.Saidi@ARM.com 1297404SAli.Saidi@ARM.com nonCacheable = sNp = false; 1307404SAli.Saidi@ARM.com 1317404SAli.Saidi@ARM.com xn = 0; 1327404SAli.Saidi@ARM.com ap = 0; // ??? 1337404SAli.Saidi@ARM.com domain = DomainClient; //??? 1347399SAli.Saidi@ARM.com } 1356019Shines@cs.fsu.edu 1367399SAli.Saidi@ARM.com TlbEntry() 1377399SAli.Saidi@ARM.com {} 1386019Shines@cs.fsu.edu 1397399SAli.Saidi@ARM.com void 1407399SAli.Saidi@ARM.com updateVaddr(Addr new_vaddr) 1417399SAli.Saidi@ARM.com { 1427404SAli.Saidi@ARM.com vpn = new_vaddr >> PageShift; 1437399SAli.Saidi@ARM.com } 1446019Shines@cs.fsu.edu 1457399SAli.Saidi@ARM.com Addr 1467399SAli.Saidi@ARM.com pageStart() 1477399SAli.Saidi@ARM.com { 1487404SAli.Saidi@ARM.com return pfn << PageShift; 1497404SAli.Saidi@ARM.com } 1507404SAli.Saidi@ARM.com 1517404SAli.Saidi@ARM.com bool 1527404SAli.Saidi@ARM.com match(Addr va, uint8_t cid) 1537404SAli.Saidi@ARM.com { 1547404SAli.Saidi@ARM.com Addr v = vpn << N; 1557404SAli.Saidi@ARM.com if (valid && va >= v && va <= v + size && (global || cid == asid)) 1567404SAli.Saidi@ARM.com return true; 1577404SAli.Saidi@ARM.com return false; 1587404SAli.Saidi@ARM.com } 1597404SAli.Saidi@ARM.com 1607404SAli.Saidi@ARM.com Addr 1617404SAli.Saidi@ARM.com pAddr(Addr va) 1627404SAli.Saidi@ARM.com { 1637404SAli.Saidi@ARM.com return (pfn << N) | (va & size); 1647399SAli.Saidi@ARM.com } 1656019Shines@cs.fsu.edu 1667733SAli.Saidi@ARM.com void 1677733SAli.Saidi@ARM.com serialize(std::ostream &os) 1687733SAli.Saidi@ARM.com { 1697733SAli.Saidi@ARM.com SERIALIZE_SCALAR(pfn); 1707733SAli.Saidi@ARM.com SERIALIZE_SCALAR(size); 1717733SAli.Saidi@ARM.com SERIALIZE_SCALAR(vpn); 1727733SAli.Saidi@ARM.com SERIALIZE_SCALAR(asid); 1737733SAli.Saidi@ARM.com SERIALIZE_SCALAR(N); 1747733SAli.Saidi@ARM.com SERIALIZE_SCALAR(global); 1757733SAli.Saidi@ARM.com SERIALIZE_SCALAR(valid); 1767733SAli.Saidi@ARM.com SERIALIZE_SCALAR(nonCacheable); 1777733SAli.Saidi@ARM.com SERIALIZE_SCALAR(sNp); 1787733SAli.Saidi@ARM.com SERIALIZE_ENUM(mtype); 1797733SAli.Saidi@ARM.com SERIALIZE_SCALAR(innerAttrs); 1807733SAli.Saidi@ARM.com SERIALIZE_SCALAR(outerAttrs); 1817733SAli.Saidi@ARM.com SERIALIZE_SCALAR(shareable); 1827733SAli.Saidi@ARM.com SERIALIZE_SCALAR(attributes); 1837733SAli.Saidi@ARM.com SERIALIZE_SCALAR(xn); 1847733SAli.Saidi@ARM.com SERIALIZE_SCALAR(ap); 1857733SAli.Saidi@ARM.com SERIALIZE_SCALAR(domain); 1867733SAli.Saidi@ARM.com } 1877733SAli.Saidi@ARM.com void 1887733SAli.Saidi@ARM.com unserialize(Checkpoint *cp, const std::string §ion) 1897733SAli.Saidi@ARM.com { 1907733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(pfn); 1917733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(size); 1927733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(vpn); 1937733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(asid); 1947733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(N); 1957733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(global); 1967733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(valid); 1977733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(nonCacheable); 1987733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(sNp); 1997733SAli.Saidi@ARM.com UNSERIALIZE_ENUM(mtype); 2007733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(innerAttrs); 2017733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(outerAttrs); 2027733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(shareable); 2037733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(attributes); 2047733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(xn); 2057733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(ap); 2067733SAli.Saidi@ARM.com UNSERIALIZE_SCALAR(domain); 2077733SAli.Saidi@ARM.com } 2087733SAli.Saidi@ARM.com 2097399SAli.Saidi@ARM.com}; 2106019Shines@cs.fsu.edu 2117399SAli.Saidi@ARM.com 2126019Shines@cs.fsu.edu 2136019Shines@cs.fsu.edu}; 2146019Shines@cs.fsu.edu#endif // __ARCH_ARM_PAGETABLE_H__ 2156019Shines@cs.fsu.edu 216