AbstractCacheEntry.hh revision 10522
113481Sgiacomo.travaglini@arm.com/* 213481Sgiacomo.travaglini@arm.com * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 313481Sgiacomo.travaglini@arm.com * All rights reserved. 413481Sgiacomo.travaglini@arm.com * 513481Sgiacomo.travaglini@arm.com * Redistribution and use in source and binary forms, with or without 613481Sgiacomo.travaglini@arm.com * modification, are permitted provided that the following conditions are 713481Sgiacomo.travaglini@arm.com * met: redistributions of source code must retain the above copyright 813481Sgiacomo.travaglini@arm.com * notice, this list of conditions and the following disclaimer; 913481Sgiacomo.travaglini@arm.com * redistributions in binary form must reproduce the above copyright 1013481Sgiacomo.travaglini@arm.com * notice, this list of conditions and the following disclaimer in the 1113481Sgiacomo.travaglini@arm.com * documentation and/or other materials provided with the distribution; 1213481Sgiacomo.travaglini@arm.com * neither the name of the copyright holders nor the names of its 1313481Sgiacomo.travaglini@arm.com * contributors may be used to endorse or promote products derived from 1413481Sgiacomo.travaglini@arm.com * this software without specific prior written permission. 1513481Sgiacomo.travaglini@arm.com * 1613481Sgiacomo.travaglini@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1713481Sgiacomo.travaglini@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1813481Sgiacomo.travaglini@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1913481Sgiacomo.travaglini@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2013481Sgiacomo.travaglini@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2113481Sgiacomo.travaglini@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2213481Sgiacomo.travaglini@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2313481Sgiacomo.travaglini@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2413481Sgiacomo.travaglini@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2513481Sgiacomo.travaglini@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2613481Sgiacomo.travaglini@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2713481Sgiacomo.travaglini@arm.com */ 2813481Sgiacomo.travaglini@arm.com 2913481Sgiacomo.travaglini@arm.com/* 3013481Sgiacomo.travaglini@arm.com * Common base class for a machine node. 3113481Sgiacomo.travaglini@arm.com */ 3213481Sgiacomo.travaglini@arm.com 3313481Sgiacomo.travaglini@arm.com#ifndef __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCACHEENTRY_HH__ 3413481Sgiacomo.travaglini@arm.com#define __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCACHEENTRY_HH__ 3513481Sgiacomo.travaglini@arm.com 3613481Sgiacomo.travaglini@arm.com#include <iostream> 3713481Sgiacomo.travaglini@arm.com 3813481Sgiacomo.travaglini@arm.com#include "base/misc.hh" 3913481Sgiacomo.travaglini@arm.com#include "mem/protocol/AccessPermission.hh" 4013481Sgiacomo.travaglini@arm.com#include "mem/ruby/common/Address.hh" 4113481Sgiacomo.travaglini@arm.com#include "mem/ruby/slicc_interface/AbstractEntry.hh" 4213481Sgiacomo.travaglini@arm.com 4313481Sgiacomo.travaglini@arm.comclass DataBlock; 4413481Sgiacomo.travaglini@arm.com 4513481Sgiacomo.travaglini@arm.comclass AbstractCacheEntry : public AbstractEntry 4613481Sgiacomo.travaglini@arm.com{ 4713481Sgiacomo.travaglini@arm.com public: 4813481Sgiacomo.travaglini@arm.com AbstractCacheEntry(); 4913481Sgiacomo.travaglini@arm.com virtual ~AbstractCacheEntry() = 0; 5013481Sgiacomo.travaglini@arm.com 5113481Sgiacomo.travaglini@arm.com // Get/Set permission of the entry 5213481Sgiacomo.travaglini@arm.com void changePermission(AccessPermission new_perm); 5313481Sgiacomo.travaglini@arm.com 5413481Sgiacomo.travaglini@arm.com // The methods below are those called by ruby runtime, add when it 5513481Sgiacomo.travaglini@arm.com // is absolutely necessary and should all be virtual function. 5613481Sgiacomo.travaglini@arm.com virtual DataBlock& getDataBlk() 5713481Sgiacomo.travaglini@arm.com { panic("getDataBlk() not implemented!"); } 5813481Sgiacomo.travaglini@arm.com 5913481Sgiacomo.travaglini@arm.com 6013481Sgiacomo.travaglini@arm.com Address m_Address; // Address of this block, required by CacheMemory 6113481Sgiacomo.travaglini@arm.com int m_locked; // Holds info whether the address is locked, 6213481Sgiacomo.travaglini@arm.com // required for implementing LL/SC 6313481Sgiacomo.travaglini@arm.com}; 6413481Sgiacomo.travaglini@arm.com 6513481Sgiacomo.travaglini@arm.cominline std::ostream& 6613481Sgiacomo.travaglini@arm.comoperator<<(std::ostream& out, const AbstractCacheEntry& obj) 6713481Sgiacomo.travaglini@arm.com{ 6813481Sgiacomo.travaglini@arm.com obj.print(out); 6913481Sgiacomo.travaglini@arm.com out << std::flush; 7013481Sgiacomo.travaglini@arm.com return out; 7113481Sgiacomo.travaglini@arm.com} 7213481Sgiacomo.travaglini@arm.com 7313481Sgiacomo.travaglini@arm.com#endif // __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCACHEENTRY_HH__ 7413481Sgiacomo.travaglini@arm.com