tlb.cc (12461:a4cb506cda74) | tlb.cc (12749:223c83ed9979) |
---|---|
1/* 2 * Copyright (c) 2007-2008 The Hewlett-Packard Development Company 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 --- 156 unchanged lines hidden (view full) --- 165 if (entry) { 166 trie.remove(entry->trieHandle); 167 entry->trieHandle = NULL; 168 freeList.push_back(entry); 169 } 170} 171 172Fault | 1/* 2 * Copyright (c) 2007-2008 The Hewlett-Packard Development Company 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 --- 156 unchanged lines hidden (view full) --- 165 if (entry) { 166 trie.remove(entry->trieHandle); 167 entry->trieHandle = NULL; 168 freeList.push_back(entry); 169 } 170} 171 172Fault |
173TLB::translateInt(RequestPtr req, ThreadContext *tc) | 173TLB::translateInt(const RequestPtr &req, ThreadContext *tc) |
174{ 175 DPRINTF(TLB, "Addresses references internal memory.\n"); 176 Addr vaddr = req->getVaddr(); 177 Addr prefix = (vaddr >> 3) & IntAddrPrefixMask; 178 if (prefix == IntAddrPrefixCPUID) { 179 panic("CPUID memory space not yet implemented!\n"); 180 } else if (prefix == IntAddrPrefixMSR) { 181 vaddr = (vaddr >> 3) & ~IntAddrPrefixMask; --- 37 unchanged lines hidden (view full) --- 219 return NoFault; 220 } else { 221 panic("Access to unrecognized internal address space %#x.\n", 222 prefix); 223 } 224} 225 226Fault | 174{ 175 DPRINTF(TLB, "Addresses references internal memory.\n"); 176 Addr vaddr = req->getVaddr(); 177 Addr prefix = (vaddr >> 3) & IntAddrPrefixMask; 178 if (prefix == IntAddrPrefixCPUID) { 179 panic("CPUID memory space not yet implemented!\n"); 180 } else if (prefix == IntAddrPrefixMSR) { 181 vaddr = (vaddr >> 3) & ~IntAddrPrefixMask; --- 37 unchanged lines hidden (view full) --- 219 return NoFault; 220 } else { 221 panic("Access to unrecognized internal address space %#x.\n", 222 prefix); 223 } 224} 225 226Fault |
227TLB::finalizePhysical(RequestPtr req, ThreadContext *tc, Mode mode) const | 227TLB::finalizePhysical(const RequestPtr &req, 228 ThreadContext *tc, Mode mode) const |
228{ 229 Addr paddr = req->getPaddr(); 230 231 AddrRange m5opRange(0xFFFF0000, 0xFFFFFFFF); 232 233 if (m5opRange.contains(paddr)) { 234 req->setFlags(Request::MMAPPED_IPR | Request::GENERIC_IPR | 235 Request::STRICT_ORDER); --- 24 unchanged lines hidden (view full) --- 260 paddr - apicRange.start())); 261 } 262 } 263 264 return NoFault; 265} 266 267Fault | 229{ 230 Addr paddr = req->getPaddr(); 231 232 AddrRange m5opRange(0xFFFF0000, 0xFFFFFFFF); 233 234 if (m5opRange.contains(paddr)) { 235 req->setFlags(Request::MMAPPED_IPR | Request::GENERIC_IPR | 236 Request::STRICT_ORDER); --- 24 unchanged lines hidden (view full) --- 261 paddr - apicRange.start())); 262 } 263 } 264 265 return NoFault; 266} 267 268Fault |
268TLB::translate(RequestPtr req, ThreadContext *tc, Translation *translation, | 269TLB::translate(const RequestPtr &req, 270 ThreadContext *tc, Translation *translation, |
269 Mode mode, bool &delayedResponse, bool timing) 270{ 271 Request::Flags flags = req->getFlags(); 272 int seg = flags & SegmentFlagMask; 273 bool storeCheck = flags & (StoreCheck << FlagShift); 274 275 delayedResponse = false; 276 --- 143 unchanged lines hidden (view full) --- 420 DPRINTF(TLB, "Translated %#x -> %#x.\n", vaddr, vaddr); 421 req->setPaddr(vaddr); 422 } 423 424 return finalizePhysical(req, tc, mode); 425} 426 427Fault | 271 Mode mode, bool &delayedResponse, bool timing) 272{ 273 Request::Flags flags = req->getFlags(); 274 int seg = flags & SegmentFlagMask; 275 bool storeCheck = flags & (StoreCheck << FlagShift); 276 277 delayedResponse = false; 278 --- 143 unchanged lines hidden (view full) --- 422 DPRINTF(TLB, "Translated %#x -> %#x.\n", vaddr, vaddr); 423 req->setPaddr(vaddr); 424 } 425 426 return finalizePhysical(req, tc, mode); 427} 428 429Fault |
428TLB::translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode) | 430TLB::translateAtomic(const RequestPtr &req, ThreadContext *tc, Mode mode) |
429{ 430 bool delayedResponse; 431 return TLB::translate(req, tc, NULL, mode, delayedResponse, false); 432} 433 434void | 431{ 432 bool delayedResponse; 433 return TLB::translate(req, tc, NULL, mode, delayedResponse, false); 434} 435 436void |
435TLB::translateTiming(RequestPtr req, ThreadContext *tc, | 437TLB::translateTiming(const RequestPtr &req, ThreadContext *tc, |
436 Translation *translation, Mode mode) 437{ 438 bool delayedResponse; 439 assert(translation); 440 Fault fault = 441 TLB::translate(req, tc, translation, mode, delayedResponse, true); 442 if (!delayedResponse) 443 translation->finish(fault, req, tc, mode); --- 81 unchanged lines hidden --- | 438 Translation *translation, Mode mode) 439{ 440 bool delayedResponse; 441 assert(translation); 442 Fault fault = 443 TLB::translate(req, tc, translation, mode, delayedResponse, true); 444 if (!delayedResponse) 445 translation->finish(fault, req, tc, mode); --- 81 unchanged lines hidden --- |