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 &section)
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 &section)
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 &section)
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 &section)
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