abstract_mem.hh revision 2391
112137Sar4jc@virginia.edu/* 212137Sar4jc@virginia.edu * Copyright (c) 2001-2005 The Regents of The University of Michigan 312137Sar4jc@virginia.edu * All rights reserved. 412137Sar4jc@virginia.edu * 512137Sar4jc@virginia.edu * Redistribution and use in source and binary forms, with or without 612137Sar4jc@virginia.edu * modification, are permitted provided that the following conditions are 712137Sar4jc@virginia.edu * met: redistributions of source code must retain the above copyright 812137Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer; 912137Sar4jc@virginia.edu * redistributions in binary form must reproduce the above copyright 1012137Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer in the 1112137Sar4jc@virginia.edu * documentation and/or other materials provided with the distribution; 1212137Sar4jc@virginia.edu * neither the name of the copyright holders nor the names of its 1312137Sar4jc@virginia.edu * contributors may be used to endorse or promote products derived from 1412137Sar4jc@virginia.edu * this software without specific prior written permission. 1512137Sar4jc@virginia.edu * 1612137Sar4jc@virginia.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1712137Sar4jc@virginia.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1812137Sar4jc@virginia.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1912137Sar4jc@virginia.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2012137Sar4jc@virginia.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2112137Sar4jc@virginia.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2212137Sar4jc@virginia.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2312137Sar4jc@virginia.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2412137Sar4jc@virginia.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2512137Sar4jc@virginia.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2612137Sar4jc@virginia.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2712137Sar4jc@virginia.edu */ 2812137Sar4jc@virginia.edu 2912137Sar4jc@virginia.edu/* @file 3012137Sar4jc@virginia.edu */ 3112137Sar4jc@virginia.edu 3212137Sar4jc@virginia.edu#ifndef __PHYSICAL_MEMORY_HH__ 3312137Sar4jc@virginia.edu#define __PHYSICAL_MEMORY_HH__ 3412137Sar4jc@virginia.edu 3512137Sar4jc@virginia.edu#include "base/range.hh" 3612137Sar4jc@virginia.edu#include "mem/memory.hh" 3712137Sar4jc@virginia.edu 3812137Sar4jc@virginia.edu// 3912137Sar4jc@virginia.edu// Functional model for a contiguous block of physical memory. (i.e. RAM) 4012137Sar4jc@virginia.edu// 4112137Sar4jc@virginia.educlass PhysicalMemory : public Memory 4212137Sar4jc@virginia.edu{ 4312137Sar4jc@virginia.edu private: 4412137Sar4jc@virginia.edu // prevent copying of a MainMemory object 4512137Sar4jc@virginia.edu PhysicalMemory(const PhysicalMemory &specmem); 4612137Sar4jc@virginia.edu const PhysicalMemory &operator=(const PhysicalMemory &specmem); 4712137Sar4jc@virginia.edu 4812137Sar4jc@virginia.edu protected: 4912137Sar4jc@virginia.edu Addr base_addr; 5012137Sar4jc@virginia.edu Addr pmem_size; 5112137Sar4jc@virginia.edu uint8_t *pmem_addr; 5212137Sar4jc@virginia.edu int page_ptr; 5312137Sar4jc@virginia.edu 5412137Sar4jc@virginia.edu public: 5512137Sar4jc@virginia.edu Addr new_page(); 5612137Sar4jc@virginia.edu uint64_t size() { return pmem_size; } 5712137Sar4jc@virginia.edu 5812137Sar4jc@virginia.edu public: 5912137Sar4jc@virginia.edu PhysicalMemory(const std::string &n); 6012137Sar4jc@virginia.edu virtual ~PhysicalMemory(); 6112137Sar4jc@virginia.edu 6212137Sar4jc@virginia.edu protected: 6312137Sar4jc@virginia.edu // error handling for prot_* functions 6412137Sar4jc@virginia.edu void prot_access_error(Addr addr, int size, const std::string &func); 6512137Sar4jc@virginia.edu 6612137Sar4jc@virginia.edu public: 6712137Sar4jc@virginia.edu 6812137Sar4jc@virginia.edu // Read/Write arbitrary amounts of data to simulated memory space 6912137Sar4jc@virginia.edu virtual void prot_read(Addr addr, uint8_t *p, int size); 7012137Sar4jc@virginia.edu virtual void prot_write(Addr addr, const uint8_t *p, int size); 7112137Sar4jc@virginia.edu virtual void prot_memset(Addr addr, uint8_t val, int size); 7212137Sar4jc@virginia.edu 7312137Sar4jc@virginia.edu // fast back-door memory access for vtophys(), remote gdb, etc. 7412137Sar4jc@virginia.edu uint64_t phys_read_qword(Addr addr) const; 7512137Sar4jc@virginia.edu 7612137Sar4jc@virginia.edu public: 7712137Sar4jc@virginia.edu virtual void serialize(std::ostream &os); 7812137Sar4jc@virginia.edu virtual void unserialize(Checkpoint *cp, const std::string §ion); 7912137Sar4jc@virginia.edu}; 8012137Sar4jc@virginia.edu 8112137Sar4jc@virginia.eduPhysicalMemory::phys_read_qword(Addr addr) const 8212137Sar4jc@virginia.edu{ 8312137Sar4jc@virginia.edu if (addr + sizeof(uint64_t) > pmem_size) 8412137Sar4jc@virginia.edu return 0; 8512137Sar4jc@virginia.edu 8612137Sar4jc@virginia.edu return *(uint64_t *)(pmem_addr + addr); 8712137Sar4jc@virginia.edu} 8812137Sar4jc@virginia.edu 8912137Sar4jc@virginia.edu 9012137Sar4jc@virginia.edu#endif //__PHYSICAL_MEMORY_HH__ 9112137Sar4jc@virginia.edu