1/*
2 * Copyright (c) 2007 The Hewlett-Packard Development Company
3 * All rights reserved.
4 *
5 * Redistribution and use of this software in source and binary forms,
6 * with or without modification, are permitted provided that the
7 * following conditions are met:
8 *

--- 284 unchanged lines hidden (view full) ---

293 delete read;
294 read = NULL;
295 return;
296 default:
297 panic("Unknown page table walker state %d!\n");
298 }
299 PacketPtr oldRead = read;
300 //If we didn't return, we're setting up another read.
301 uint32_t flags = oldRead->req->getFlags();
302 if (uncacheable)
303 flags |= UNCACHEABLE;
304 else
305 flags &= ~UNCACHEABLE;
301 Request::Flags flags = oldRead->req->getFlags();
302 flags.set(Request::UNCACHEABLE, uncacheable);
303 RequestPtr request =
304 new Request(nextRead, oldRead->getSize(), flags);
305 read = new Packet(request, MemCmd::ReadExReq, Packet::Broadcast);
306 read->allocate();
307 //If we need to write, adjust the read packet to write the modified value
308 //back to memory.
309 if (doWrite) {
310 write = oldRead;

--- 46 unchanged lines hidden (view full) ---

357 }
358 }
359
360 nextState = Ready;
361 entry.vaddr = vaddr;
362
363 enableNX = efer.nxe;
364
368 RequestPtr request =
369 new Request(top, size, PHYSICAL | cr3.pcd ? UNCACHEABLE : 0);
365 Request::Flags flags = Request::PHYSICAL;
366 if (cr3.pcd)
367 flags.set(Request::UNCACHEABLE);
368 RequestPtr request = new Request(top, size, flags);
369 read = new Packet(request, MemCmd::ReadExReq, Packet::Broadcast);
370 read->allocate();
371 Enums::MemoryMode memMode = sys->getMemoryMode();
372 if (memMode == Enums::timing) {
373 tc->suspend();
374 port.sendTiming(read);
375 } else if (memMode == Enums::atomic) {
376 do {

--- 156 unchanged lines hidden ---