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 &section);
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