57,58c57,58
< PhysicalMemory::PhysicalMemory(const string &n, Tick latency)
< : MemObject(n),base_addr(0), pmem_addr(NULL), port(NULL), lat(latency)
---
> PhysicalMemory::PhysicalMemory(Params *p)
> : MemObject(p->name), pmemAddr(NULL), port(NULL), lat(p->latency), _params(p)
60,63c60
< // Hardcoded to 128 MB for now.
< pmem_size = 1 << 27;
<
< if (pmem_size % TheISA::PageBytes != 0)
---
> if (params()->addrRange.size() % TheISA::PageBytes != 0)
67c64
< pmem_addr = (uint8_t *)mmap(NULL, pmem_size, PROT_READ | PROT_WRITE,
---
> pmemAddr = (uint8_t *)mmap(NULL, params()->addrRange.size(), PROT_READ | PROT_WRITE,
70c67
< if (pmem_addr == (void *)MAP_FAILED) {
---
> if (pmemAddr == (void *)MAP_FAILED) {
75c72
< page_ptr = 0;
---
> pagePtr = 0;
88,89c85,86
< if (pmem_addr)
< munmap(pmem_addr, pmem_size);
---
> if (pmemAddr)
> munmap(pmemAddr, params()->addrRange.size());
96,97c93,94
< Addr return_addr = page_ptr << LogVMPageSize;
< return_addr += base_addr;
---
> Addr return_addr = pagePtr << LogVMPageSize;
> return_addr += params()->addrRange.start;
99c96
< ++page_ptr;
---
> ++pagePtr;
109a107,111
> Tick
> PhysicalMemory::calculateLatency(Packet *pkt)
> {
> return lat;
> }
114c116
< assert(pkt->getAddr() + pkt->getSize() < pmem_size);
---
> assert(pkt->getAddr() + pkt->getSize() < params()->addrRange.size());
119c121
< pmem_addr + pkt->getAddr() - base_addr,
---
> pmemAddr + pkt->getAddr() - params()->addrRange.start,
123c125
< memcpy(pmem_addr + pkt->getAddr() - base_addr,
---
> memcpy(pmemAddr + pkt->getAddr() - params()->addrRange.start,
137c139
< return lat;
---
> return calculateLatency(pkt);
184c186
< resp.push_back(RangeSize(base_addr, pmem_size));
---
> resp.push_back(RangeSize(params()->addrRange.start, params()->addrRange.size()));
235d236
< SERIALIZE_SCALAR(pmem_size);
251c252
< if (gzwrite(compressedMem, pmem_addr, pmem_size) != pmem_size) {
---
> if (gzwrite(compressedMem, pmemAddr, params()->addrRange.size()) != params()->addrRange.size()) {
272,274d272
< // unmap file that was mmaped in the constructor
< munmap(pmem_addr, pmem_size);
<
277d274
< UNSERIALIZE_SCALAR(pmem_size);
293a291,294
> // unmap file that was mmaped in the constructor
> // This is done here to make sure that gzip and open don't muck with our
> // nice large space of memory before we reallocate it
> munmap(pmemAddr, params()->addrRange.size());
295c296
< pmem_addr = (uint8_t *)mmap(NULL, pmem_size, PROT_READ | PROT_WRITE,
---
> pmemAddr = (uint8_t *)mmap(NULL, params()->addrRange.size(), PROT_READ | PROT_WRITE,
298c299
< if (pmem_addr == (void *)MAP_FAILED) {
---
> if (pmemAddr == (void *)MAP_FAILED) {
309c310
< while (curSize < pmem_size) {
---
> while (curSize < params()->addrRange.size()) {
311c312
< if (bytesRead != chunkSize && bytesRead != pmem_size - curSize)
---
> if (bytesRead != chunkSize && bytesRead != params()->addrRange.size() - curSize)
314c315
< filename, bytesRead, chunkSize, pmem_size-curSize);
---
> filename, bytesRead, chunkSize, params()->addrRange.size()-curSize);
321c322
< pmem_current = (long*)(pmem_addr + curSize + x * sizeof(long));
---
> pmem_current = (long*)(pmemAddr + curSize + x * sizeof(long));
355,356c356,360
<
< return new PhysicalMemory(getInstanceName(), latency);
---
> PhysicalMemory::Params *p = new PhysicalMemory::Params;
> p->name = getInstanceName();
> p->addrRange = range;
> p->latency = latency;
> return new PhysicalMemory(p);