pagetable.hh revision 8229:78bf55f23338
17119Sgblack@eecs.umich.edu/* 27119Sgblack@eecs.umich.edu * Copyright (c) 2010 ARM Limited 310037SARM gem5 Developers * All rights reserved 47120Sgblack@eecs.umich.edu * 57120Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall 67120Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual 77120Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating 87120Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software 97120Sgblack@eecs.umich.edu * licensed hereunder. You may use the software subject to the license 107120Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated 117120Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software, 127120Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form. 137120Sgblack@eecs.umich.edu * 147120Sgblack@eecs.umich.edu * Copyright (c) 2002-2005 The Regents of The University of Michigan 157119Sgblack@eecs.umich.edu * All rights reserved. 167119Sgblack@eecs.umich.edu * 177119Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 187119Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 197119Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 207119Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 217119Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 227119Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 237119Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 247119Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 257119Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 267119Sgblack@eecs.umich.edu * this software without specific prior written permission. 277119Sgblack@eecs.umich.edu * 287119Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 297119Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 307119Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 317119Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 327119Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 337119Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 347119Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 357119Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 367119Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 377119Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 387119Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 397119Sgblack@eecs.umich.edu * 407119Sgblack@eecs.umich.edu * Authors: Ali Saidi 417119Sgblack@eecs.umich.edu */ 427119Sgblack@eecs.umich.edu 437119Sgblack@eecs.umich.edu#ifndef __ARCH_ARM_PAGETABLE_H__ 447646Sgene.wu@arm.com#define __ARCH_ARM_PAGETABLE_H__ 457646Sgene.wu@arm.com 467646Sgene.wu@arm.com#include "arch/arm/isa_traits.hh" 477646Sgene.wu@arm.com#include "arch/arm/utility.hh" 487646Sgene.wu@arm.com#include "arch/arm/vtophys.hh" 497646Sgene.wu@arm.com#include "config/full_system.hh" 507646Sgene.wu@arm.com#include "sim/serialize.hh" 517646Sgene.wu@arm.com 527646Sgene.wu@arm.comnamespace ArmISA { 537646Sgene.wu@arm.com 547646Sgene.wu@arm.comstruct VAddr 557646Sgene.wu@arm.com{ 567646Sgene.wu@arm.com VAddr(Addr a) { panic("not implemented yet."); } 577646Sgene.wu@arm.com}; 587646Sgene.wu@arm.com 597646Sgene.wu@arm.com 607646Sgene.wu@arm.com// ITB/DTB page table entry 617646Sgene.wu@arm.comstruct PTE 627646Sgene.wu@arm.com{ 637646Sgene.wu@arm.com void serialize(std::ostream &os) 647646Sgene.wu@arm.com { 657646Sgene.wu@arm.com panic("Need to implement PTE serialization\n"); 667646Sgene.wu@arm.com } 677646Sgene.wu@arm.com 687646Sgene.wu@arm.com void unserialize(Checkpoint *cp, const std::string §ion) 697646Sgene.wu@arm.com { 707646Sgene.wu@arm.com panic("Need to implement PTE serialization\n"); 717646Sgene.wu@arm.com } 727646Sgene.wu@arm.com 737205Sgblack@eecs.umich.edu}; 747205Sgblack@eecs.umich.edu 757205Sgblack@eecs.umich.edu// ITB/DTB table entry 767205Sgblack@eecs.umich.edustruct TlbEntry 777205Sgblack@eecs.umich.edu{ 787205Sgblack@eecs.umich.edu public: 797205Sgblack@eecs.umich.edu enum MemoryType { 807205Sgblack@eecs.umich.edu StronglyOrdered, 817205Sgblack@eecs.umich.edu Device, 827205Sgblack@eecs.umich.edu Normal 837205Sgblack@eecs.umich.edu }; 847205Sgblack@eecs.umich.edu enum DomainType { 857205Sgblack@eecs.umich.edu DomainNoAccess = 0, 867205Sgblack@eecs.umich.edu DomainClient, 877205Sgblack@eecs.umich.edu DomainReserved, 887205Sgblack@eecs.umich.edu DomainManager 897205Sgblack@eecs.umich.edu }; 908442Sgblack@eecs.umich.edu 918442Sgblack@eecs.umich.edu // Matching variables 927205Sgblack@eecs.umich.edu Addr pfn; 937205Sgblack@eecs.umich.edu Addr size; // Size of this entry, == Type of TLB Rec 947205Sgblack@eecs.umich.edu Addr vpn; // Virtual Page Number 957205Sgblack@eecs.umich.edu uint32_t asid; // Address Space Identifier 967205Sgblack@eecs.umich.edu uint8_t N; // Number of bits in pagesize 977205Sgblack@eecs.umich.edu bool global; 987205Sgblack@eecs.umich.edu bool valid; 997205Sgblack@eecs.umich.edu 1007205Sgblack@eecs.umich.edu // Type of memory 1017597Sminkyu.jeong@arm.com bool nonCacheable; // Can we wrap this in mtype? 1027597Sminkyu.jeong@arm.com bool sNp; // Section descriptor 1037205Sgblack@eecs.umich.edu 1047205Sgblack@eecs.umich.edu // Memory Attributes 1057205Sgblack@eecs.umich.edu MemoryType mtype; 1067205Sgblack@eecs.umich.edu uint8_t innerAttrs; 1077205Sgblack@eecs.umich.edu uint8_t outerAttrs; 1087205Sgblack@eecs.umich.edu bool shareable; 1097205Sgblack@eecs.umich.edu uint32_t attributes; // Memory attributes formatted for PAR 1107205Sgblack@eecs.umich.edu 1117205Sgblack@eecs.umich.edu 1127205Sgblack@eecs.umich.edu // Access permissions 1137205Sgblack@eecs.umich.edu bool xn; // Execute Never 1147205Sgblack@eecs.umich.edu uint8_t ap; // Access permissions bits 1157205Sgblack@eecs.umich.edu uint8_t domain; // Access Domain 1167205Sgblack@eecs.umich.edu 1177205Sgblack@eecs.umich.edu //Construct an entry that maps to physical address addr for SE mode 1187205Sgblack@eecs.umich.edu TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr) 1197205Sgblack@eecs.umich.edu { 1207205Sgblack@eecs.umich.edu pfn = _paddr >> PageShift; 1217205Sgblack@eecs.umich.edu size = PageBytes - 1; 1227205Sgblack@eecs.umich.edu asid = _asn; 1237205Sgblack@eecs.umich.edu global = false; 1247205Sgblack@eecs.umich.edu valid = true; 1257205Sgblack@eecs.umich.edu 1268442Sgblack@eecs.umich.edu vpn = _vaddr >> PageShift; 1278442Sgblack@eecs.umich.edu 1287205Sgblack@eecs.umich.edu nonCacheable = sNp = false; 1297597Sminkyu.jeong@arm.com 1307597Sminkyu.jeong@arm.com xn = 0; 1317205Sgblack@eecs.umich.edu ap = 0; // ??? 1327205Sgblack@eecs.umich.edu domain = DomainClient; //??? 1337205Sgblack@eecs.umich.edu } 1347205Sgblack@eecs.umich.edu 1357205Sgblack@eecs.umich.edu TlbEntry() 1367205Sgblack@eecs.umich.edu {} 1377205Sgblack@eecs.umich.edu 1387205Sgblack@eecs.umich.edu void 1397205Sgblack@eecs.umich.edu updateVaddr(Addr new_vaddr) 1407205Sgblack@eecs.umich.edu { 1417205Sgblack@eecs.umich.edu vpn = new_vaddr >> PageShift; 1427205Sgblack@eecs.umich.edu } 1437205Sgblack@eecs.umich.edu 1447205Sgblack@eecs.umich.edu Addr 1457205Sgblack@eecs.umich.edu pageStart() 1467205Sgblack@eecs.umich.edu { 1477205Sgblack@eecs.umich.edu return pfn << PageShift; 1487205Sgblack@eecs.umich.edu } 1497205Sgblack@eecs.umich.edu 1508442Sgblack@eecs.umich.edu bool 1518442Sgblack@eecs.umich.edu match(Addr va, uint8_t cid) 1527205Sgblack@eecs.umich.edu { 1537205Sgblack@eecs.umich.edu Addr v = vpn << N; 1547205Sgblack@eecs.umich.edu if (valid && va >= v && va <= v + size && (global || cid == asid)) 1557205Sgblack@eecs.umich.edu return true; 1567205Sgblack@eecs.umich.edu return false; 1577205Sgblack@eecs.umich.edu } 1587205Sgblack@eecs.umich.edu 1597205Sgblack@eecs.umich.edu Addr 1607205Sgblack@eecs.umich.edu pAddr(Addr va) 1617205Sgblack@eecs.umich.edu { 1627205Sgblack@eecs.umich.edu return (pfn << N) | (va & size); 1637205Sgblack@eecs.umich.edu } 1647119Sgblack@eecs.umich.edu 1657119Sgblack@eecs.umich.edu void 1667119Sgblack@eecs.umich.edu serialize(std::ostream &os) 1677119Sgblack@eecs.umich.edu { 1687119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(pfn); 1697119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(size); 1707119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(vpn); 1717119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(asid); 1727119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(N); 1737119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(global); 1747119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(valid); 1757119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(nonCacheable); 1767119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(sNp); 1777119Sgblack@eecs.umich.edu SERIALIZE_ENUM(mtype); 1788442Sgblack@eecs.umich.edu SERIALIZE_SCALAR(innerAttrs); 1797119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(outerAttrs); 1807119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(shareable); 1817119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(attributes); 1827119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(xn); 1837119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(ap); 1847119Sgblack@eecs.umich.edu SERIALIZE_SCALAR(domain); 1857597Sminkyu.jeong@arm.com } 1867597Sminkyu.jeong@arm.com void 1877119Sgblack@eecs.umich.edu unserialize(Checkpoint *cp, const std::string §ion) 1887119Sgblack@eecs.umich.edu { 1897119Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(pfn); 1907119Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(size); 1917119Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(vpn); 1927119Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(asid); 1937639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(N); 1947639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(global); 1957639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(valid); 1967639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(nonCacheable); 1977639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(sNp); 1987639Sgblack@eecs.umich.edu UNSERIALIZE_ENUM(mtype); 1997639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(innerAttrs); 2007639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(outerAttrs); 2017639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(shareable); 2027639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(attributes); 2037639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(xn); 2047639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(ap); 2057639Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(domain); 2067639Sgblack@eecs.umich.edu } 2077639Sgblack@eecs.umich.edu 2087639Sgblack@eecs.umich.edu}; 2097639Sgblack@eecs.umich.edu 2107639Sgblack@eecs.umich.edu 2117639Sgblack@eecs.umich.edu 2128444Sgblack@eecs.umich.edu}; 2137639Sgblack@eecs.umich.edu#endif // __ARCH_ARM_PAGETABLE_H__ 2147639Sgblack@eecs.umich.edu 2157639Sgblack@eecs.umich.edu