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(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 |
227TLB::finalizePhysical(const RequestPtr &req, 228 ThreadContext *tc, Mode mode) const |
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 |
269TLB::translate(const RequestPtr &req, 270 ThreadContext *tc, Translation *translation, |
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 |
430TLB::translateAtomic(const RequestPtr &req, ThreadContext *tc, Mode mode) |
431{ 432 bool delayedResponse; 433 return TLB::translate(req, tc, NULL, mode, delayedResponse, false); 434} 435 436void |
437TLB::translateTiming(const RequestPtr &req, ThreadContext *tc, |
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 --- |