pagetable.hh (7436:b578349f9371) | pagetable.hh (7733:08d6a773d1b6) |
---|---|
1/* 2 * Copyright (c) 2010 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 34 unchanged lines hidden (view full) --- 43#ifndef __ARCH_ARM_PAGETABLE_H__ 44#define __ARCH_ARM_PAGETABLE_H__ 45 46#include "arch/arm/isa_traits.hh" 47#include "arch/arm/utility.hh" 48#include "arch/arm/vtophys.hh" 49#include "config/full_system.hh" 50 | 1/* 2 * Copyright (c) 2010 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 34 unchanged lines hidden (view full) --- 43#ifndef __ARCH_ARM_PAGETABLE_H__ 44#define __ARCH_ARM_PAGETABLE_H__ 45 46#include "arch/arm/isa_traits.hh" 47#include "arch/arm/utility.hh" 48#include "arch/arm/vtophys.hh" 49#include "config/full_system.hh" 50 |
51#include "sim/serialize.hh" 52 |
|
51namespace ArmISA { 52 53struct VAddr 54{ 55 VAddr(Addr a) { panic("not implemented yet."); } 56}; 57 58 --- 7 unchanged lines hidden (view full) --- 66 67 void unserialize(Checkpoint *cp, const std::string §ion) 68 { 69 panic("Need to implement PTE serialization\n"); 70 } 71 72}; 73 | 53namespace ArmISA { 54 55struct VAddr 56{ 57 VAddr(Addr a) { panic("not implemented yet."); } 58}; 59 60 --- 7 unchanged lines hidden (view full) --- 68 69 void unserialize(Checkpoint *cp, const std::string §ion) 70 { 71 panic("Need to implement PTE serialization\n"); 72 } 73 74}; 75 |
74struct TlbRange 75{ 76 Addr va; 77 Addr size; 78 int contextId; 79 bool global; 80 81 inline bool 82 operator<(const TlbRange &r2) const 83 { 84 if (!(global || r2.global)) { 85 if (contextId < r2.contextId) 86 return true; 87 else if (contextId > r2.contextId) 88 return false; 89 } 90 91 if (va < r2.va) 92 return true; 93 return false; 94 } 95 96 inline bool 97 operator==(const TlbRange &r2) const 98 { 99 return va == r2.va && 100 size == r2.size && 101 contextId == r2.contextId && 102 global == r2.global; 103 } 104}; 105 106 | |
107// ITB/DTB table entry 108struct TlbEntry 109{ 110 public: 111 enum MemoryType { 112 StronglyOrdered, 113 Device, 114 Normal --- 23 unchanged lines hidden (view full) --- 138 uint8_t innerAttrs; 139 uint8_t outerAttrs; 140 bool shareable; 141 uint32_t attributes; // Memory attributes formatted for PAR 142 143 144 // Access permissions 145 bool xn; // Execute Never | 76// ITB/DTB table entry 77struct TlbEntry 78{ 79 public: 80 enum MemoryType { 81 StronglyOrdered, 82 Device, 83 Normal --- 23 unchanged lines hidden (view full) --- 107 uint8_t innerAttrs; 108 uint8_t outerAttrs; 109 bool shareable; 110 uint32_t attributes; // Memory attributes formatted for PAR 111 112 113 // Access permissions 114 bool xn; // Execute Never |
146 uint8_t ap:3; // Access permissions bits 147 uint8_t domain:4; // Access Domain | 115 uint8_t ap; // Access permissions bits 116 uint8_t domain; // Access Domain |
148 | 117 |
149 TlbRange range; // For fast TLB searching 150 | |
151 //Construct an entry that maps to physical address addr for SE mode 152 TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr) 153 { 154 pfn = _paddr >> PageShift; 155 size = PageBytes - 1; 156 asid = _asn; 157 global = false; 158 valid = true; --- 32 unchanged lines hidden (view full) --- 191 } 192 193 Addr 194 pAddr(Addr va) 195 { 196 return (pfn << N) | (va & size); 197 } 198 | 118 //Construct an entry that maps to physical address addr for SE mode 119 TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr) 120 { 121 pfn = _paddr >> PageShift; 122 size = PageBytes - 1; 123 asid = _asn; 124 global = false; 125 valid = true; --- 32 unchanged lines hidden (view full) --- 158 } 159 160 Addr 161 pAddr(Addr va) 162 { 163 return (pfn << N) | (va & size); 164 } 165 |
199 void serialize(std::ostream &os) { panic("Need to Implement\n"); } 200 void unserialize(Checkpoint *cp, const std::string §ion) 201 { panic("Need to Implement\n");} | 166 void 167 serialize(std::ostream &os) 168 { 169 SERIALIZE_SCALAR(pfn); 170 SERIALIZE_SCALAR(size); 171 SERIALIZE_SCALAR(vpn); 172 SERIALIZE_SCALAR(asid); 173 SERIALIZE_SCALAR(N); 174 SERIALIZE_SCALAR(global); 175 SERIALIZE_SCALAR(valid); 176 SERIALIZE_SCALAR(nonCacheable); 177 SERIALIZE_SCALAR(sNp); 178 SERIALIZE_ENUM(mtype); 179 SERIALIZE_SCALAR(innerAttrs); 180 SERIALIZE_SCALAR(outerAttrs); 181 SERIALIZE_SCALAR(shareable); 182 SERIALIZE_SCALAR(attributes); 183 SERIALIZE_SCALAR(xn); 184 SERIALIZE_SCALAR(ap); 185 SERIALIZE_SCALAR(domain); 186 } 187 void 188 unserialize(Checkpoint *cp, const std::string §ion) 189 { 190 UNSERIALIZE_SCALAR(pfn); 191 UNSERIALIZE_SCALAR(size); 192 UNSERIALIZE_SCALAR(vpn); 193 UNSERIALIZE_SCALAR(asid); 194 UNSERIALIZE_SCALAR(N); 195 UNSERIALIZE_SCALAR(global); 196 UNSERIALIZE_SCALAR(valid); 197 UNSERIALIZE_SCALAR(nonCacheable); 198 UNSERIALIZE_SCALAR(sNp); 199 UNSERIALIZE_ENUM(mtype); 200 UNSERIALIZE_SCALAR(innerAttrs); 201 UNSERIALIZE_SCALAR(outerAttrs); 202 UNSERIALIZE_SCALAR(shareable); 203 UNSERIALIZE_SCALAR(attributes); 204 UNSERIALIZE_SCALAR(xn); 205 UNSERIALIZE_SCALAR(ap); 206 UNSERIALIZE_SCALAR(domain); 207 } 208 |
202}; 203 204 205 206}; 207#endif // __ARCH_ARM_PAGETABLE_H__ 208 | 209}; 210 211 212 213}; 214#endif // __ARCH_ARM_PAGETABLE_H__ 215 |