RubyRequest.hh revision 9466
18092Snilay@cs.wisc.edu/* 28092Snilay@cs.wisc.edu * Copyright (c) 2009 Mark D. Hill and David A. Wood 38092Snilay@cs.wisc.edu * All rights reserved. 48092Snilay@cs.wisc.edu * 58092Snilay@cs.wisc.edu * Redistribution and use in source and binary forms, with or without 68092Snilay@cs.wisc.edu * modification, are permitted provided that the following conditions are 78092Snilay@cs.wisc.edu * met: redistributions of source code must retain the above copyright 88092Snilay@cs.wisc.edu * notice, this list of conditions and the following disclaimer; 98092Snilay@cs.wisc.edu * redistributions in binary form must reproduce the above copyright 108092Snilay@cs.wisc.edu * notice, this list of conditions and the following disclaimer in the 118092Snilay@cs.wisc.edu * documentation and/or other materials provided with the distribution; 128092Snilay@cs.wisc.edu * neither the name of the copyright holders nor the names of its 138092Snilay@cs.wisc.edu * contributors may be used to endorse or promote products derived from 148092Snilay@cs.wisc.edu * this software without specific prior written permission. 158092Snilay@cs.wisc.edu * 168092Snilay@cs.wisc.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 178092Snilay@cs.wisc.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 188092Snilay@cs.wisc.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 198092Snilay@cs.wisc.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 208092Snilay@cs.wisc.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 218092Snilay@cs.wisc.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 228092Snilay@cs.wisc.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 238092Snilay@cs.wisc.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 248092Snilay@cs.wisc.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258092Snilay@cs.wisc.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 268092Snilay@cs.wisc.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278092Snilay@cs.wisc.edu */ 288092Snilay@cs.wisc.edu 298092Snilay@cs.wisc.edu#ifndef __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__ 308092Snilay@cs.wisc.edu#define __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__ 318092Snilay@cs.wisc.edu 328092Snilay@cs.wisc.edu#include <ostream> 338092Snilay@cs.wisc.edu 348229Snate@binkert.org#include "mem/protocol/Message.hh" 358229Snate@binkert.org#include "mem/protocol/PrefetchBit.hh" 368164Snilay@cs.wisc.edu#include "mem/protocol/RubyAccessMode.hh" 378165Snilay@cs.wisc.edu#include "mem/protocol/RubyRequestType.hh" 388092Snilay@cs.wisc.edu#include "mem/ruby/common/Address.hh" 398092Snilay@cs.wisc.edu 408174Snilay@cs.wisc.educlass RubyRequest : public Message 418092Snilay@cs.wisc.edu{ 428092Snilay@cs.wisc.edu public: 438174Snilay@cs.wisc.edu Address m_PhysicalAddress; 448174Snilay@cs.wisc.edu Address m_LineAddress; 458174Snilay@cs.wisc.edu RubyRequestType m_Type; 468174Snilay@cs.wisc.edu Address m_ProgramCounter; 478174Snilay@cs.wisc.edu RubyAccessMode m_AccessMode; 488174Snilay@cs.wisc.edu int m_Size; 498174Snilay@cs.wisc.edu PrefetchBit m_Prefetch; 508092Snilay@cs.wisc.edu uint8_t* data; 518092Snilay@cs.wisc.edu PacketPtr pkt; 528188SLisa.Hsu@amd.com unsigned m_contextId; 538092Snilay@cs.wisc.edu 549466Snilay@cs.wisc.edu RubyRequest(Time curTime, uint64_t _paddr, uint8_t* _data, int _len, 559466Snilay@cs.wisc.edu uint64_t _pc, RubyRequestType _type, RubyAccessMode _access_mode, 569466Snilay@cs.wisc.edu PacketPtr _pkt, PrefetchBit _pb = PrefetchBit_No, 579466Snilay@cs.wisc.edu unsigned _proc_id = 100) 589466Snilay@cs.wisc.edu : Message(curTime), 599466Snilay@cs.wisc.edu m_PhysicalAddress(_paddr), 608174Snilay@cs.wisc.edu m_Type(_type), 618174Snilay@cs.wisc.edu m_ProgramCounter(_pc), 628174Snilay@cs.wisc.edu m_AccessMode(_access_mode), 638174Snilay@cs.wisc.edu m_Size(_len), 648174Snilay@cs.wisc.edu m_Prefetch(_pb), 658092Snilay@cs.wisc.edu data(_data), 668092Snilay@cs.wisc.edu pkt(_pkt), 678188SLisa.Hsu@amd.com m_contextId(_proc_id) 688174Snilay@cs.wisc.edu { 698174Snilay@cs.wisc.edu m_LineAddress = m_PhysicalAddress; 708174Snilay@cs.wisc.edu m_LineAddress.makeLineAddress(); 718174Snilay@cs.wisc.edu } 728174Snilay@cs.wisc.edu 739466Snilay@cs.wisc.edu RubyRequest(Time curTime) : Message(curTime) 748174Snilay@cs.wisc.edu { 758174Snilay@cs.wisc.edu } 768174Snilay@cs.wisc.edu 778174Snilay@cs.wisc.edu RubyRequest* 788174Snilay@cs.wisc.edu clone() const 798174Snilay@cs.wisc.edu { 808174Snilay@cs.wisc.edu return new RubyRequest(*this); 818174Snilay@cs.wisc.edu } 828174Snilay@cs.wisc.edu 838174Snilay@cs.wisc.edu const Address& 848174Snilay@cs.wisc.edu getLineAddress() const 858174Snilay@cs.wisc.edu { 868174Snilay@cs.wisc.edu return m_LineAddress; 878174Snilay@cs.wisc.edu } 888174Snilay@cs.wisc.edu 898174Snilay@cs.wisc.edu const Address& 908174Snilay@cs.wisc.edu getPhysicalAddress() const 918174Snilay@cs.wisc.edu { 928174Snilay@cs.wisc.edu return m_PhysicalAddress; 938174Snilay@cs.wisc.edu } 948174Snilay@cs.wisc.edu 958174Snilay@cs.wisc.edu const RubyRequestType& 968174Snilay@cs.wisc.edu getType() const 978174Snilay@cs.wisc.edu { 988174Snilay@cs.wisc.edu return m_Type; 998174Snilay@cs.wisc.edu } 1008174Snilay@cs.wisc.edu 1018174Snilay@cs.wisc.edu const Address& 1028174Snilay@cs.wisc.edu getProgramCounter() const 1038174Snilay@cs.wisc.edu { 1048174Snilay@cs.wisc.edu return m_ProgramCounter; 1058174Snilay@cs.wisc.edu } 1068174Snilay@cs.wisc.edu 1078174Snilay@cs.wisc.edu const RubyAccessMode& 1088174Snilay@cs.wisc.edu getAccessMode() const 1098174Snilay@cs.wisc.edu { 1108174Snilay@cs.wisc.edu return m_AccessMode; 1118174Snilay@cs.wisc.edu } 1128174Snilay@cs.wisc.edu 1138174Snilay@cs.wisc.edu const int& 1148174Snilay@cs.wisc.edu getSize() const 1158174Snilay@cs.wisc.edu { 1168174Snilay@cs.wisc.edu return m_Size; 1178174Snilay@cs.wisc.edu } 1188174Snilay@cs.wisc.edu 1198174Snilay@cs.wisc.edu const PrefetchBit& 1208174Snilay@cs.wisc.edu getPrefetch() const 1218174Snilay@cs.wisc.edu { 1228174Snilay@cs.wisc.edu return m_Prefetch; 1238174Snilay@cs.wisc.edu } 1248092Snilay@cs.wisc.edu 1258092Snilay@cs.wisc.edu void print(std::ostream& out) const; 1269302Snilay@cs.wisc.edu 1279302Snilay@cs.wisc.edu bool functionalRead(Packet *pkt); 1289302Snilay@cs.wisc.edu bool functionalWrite(Packet *pkt); 1298092Snilay@cs.wisc.edu}; 1308092Snilay@cs.wisc.edu 1318174Snilay@cs.wisc.eduinline std::ostream& 1328174Snilay@cs.wisc.eduoperator<<(std::ostream& out, const RubyRequest& obj) 1338174Snilay@cs.wisc.edu{ 1348174Snilay@cs.wisc.edu obj.print(out); 1358174Snilay@cs.wisc.edu out << std::flush; 1368174Snilay@cs.wisc.edu return out; 1378174Snilay@cs.wisc.edu} 1388092Snilay@cs.wisc.edu 1398092Snilay@cs.wisc.edu#endif 140