RubyRequest.hh revision 9302
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" 398229Snate@binkert.org#include "mem/packet.hh" 408092Snilay@cs.wisc.edu 418174Snilay@cs.wisc.educlass RubyRequest : public Message 428092Snilay@cs.wisc.edu{ 438092Snilay@cs.wisc.edu public: 448174Snilay@cs.wisc.edu Address m_PhysicalAddress; 458174Snilay@cs.wisc.edu Address m_LineAddress; 468174Snilay@cs.wisc.edu RubyRequestType m_Type; 478174Snilay@cs.wisc.edu Address m_ProgramCounter; 488174Snilay@cs.wisc.edu RubyAccessMode m_AccessMode; 498174Snilay@cs.wisc.edu int m_Size; 508174Snilay@cs.wisc.edu PrefetchBit m_Prefetch; 518092Snilay@cs.wisc.edu uint8_t* data; 528092Snilay@cs.wisc.edu PacketPtr pkt; 538188SLisa.Hsu@amd.com unsigned m_contextId; 548092Snilay@cs.wisc.edu 558092Snilay@cs.wisc.edu RubyRequest() {} 568174Snilay@cs.wisc.edu RubyRequest(uint64_t _paddr, uint8_t* _data, int _len, uint64_t _pc, 578174Snilay@cs.wisc.edu RubyRequestType _type, RubyAccessMode _access_mode, 588174Snilay@cs.wisc.edu PacketPtr _pkt, PrefetchBit _pb = PrefetchBit_No, 598174Snilay@cs.wisc.edu unsigned _proc_id = 100) 608174Snilay@cs.wisc.edu : m_PhysicalAddress(_paddr), 618174Snilay@cs.wisc.edu m_Type(_type), 628174Snilay@cs.wisc.edu m_ProgramCounter(_pc), 638174Snilay@cs.wisc.edu m_AccessMode(_access_mode), 648174Snilay@cs.wisc.edu m_Size(_len), 658174Snilay@cs.wisc.edu m_Prefetch(_pb), 668092Snilay@cs.wisc.edu data(_data), 678092Snilay@cs.wisc.edu pkt(_pkt), 688188SLisa.Hsu@amd.com m_contextId(_proc_id) 698174Snilay@cs.wisc.edu { 708174Snilay@cs.wisc.edu m_LineAddress = m_PhysicalAddress; 718174Snilay@cs.wisc.edu m_LineAddress.makeLineAddress(); 728174Snilay@cs.wisc.edu } 738174Snilay@cs.wisc.edu 748174Snilay@cs.wisc.edu static RubyRequest* 758174Snilay@cs.wisc.edu create() 768174Snilay@cs.wisc.edu { 778174Snilay@cs.wisc.edu return new RubyRequest(); 788174Snilay@cs.wisc.edu } 798174Snilay@cs.wisc.edu 808174Snilay@cs.wisc.edu RubyRequest* 818174Snilay@cs.wisc.edu clone() const 828174Snilay@cs.wisc.edu { 838174Snilay@cs.wisc.edu return new RubyRequest(*this); 848174Snilay@cs.wisc.edu } 858174Snilay@cs.wisc.edu 868174Snilay@cs.wisc.edu const Address& 878174Snilay@cs.wisc.edu getLineAddress() const 888174Snilay@cs.wisc.edu { 898174Snilay@cs.wisc.edu return m_LineAddress; 908174Snilay@cs.wisc.edu } 918174Snilay@cs.wisc.edu 928174Snilay@cs.wisc.edu const Address& 938174Snilay@cs.wisc.edu getPhysicalAddress() const 948174Snilay@cs.wisc.edu { 958174Snilay@cs.wisc.edu return m_PhysicalAddress; 968174Snilay@cs.wisc.edu } 978174Snilay@cs.wisc.edu 988174Snilay@cs.wisc.edu const RubyRequestType& 998174Snilay@cs.wisc.edu getType() const 1008174Snilay@cs.wisc.edu { 1018174Snilay@cs.wisc.edu return m_Type; 1028174Snilay@cs.wisc.edu } 1038174Snilay@cs.wisc.edu 1048174Snilay@cs.wisc.edu const Address& 1058174Snilay@cs.wisc.edu getProgramCounter() const 1068174Snilay@cs.wisc.edu { 1078174Snilay@cs.wisc.edu return m_ProgramCounter; 1088174Snilay@cs.wisc.edu } 1098174Snilay@cs.wisc.edu 1108174Snilay@cs.wisc.edu const RubyAccessMode& 1118174Snilay@cs.wisc.edu getAccessMode() const 1128174Snilay@cs.wisc.edu { 1138174Snilay@cs.wisc.edu return m_AccessMode; 1148174Snilay@cs.wisc.edu } 1158174Snilay@cs.wisc.edu 1168174Snilay@cs.wisc.edu const int& 1178174Snilay@cs.wisc.edu getSize() const 1188174Snilay@cs.wisc.edu { 1198174Snilay@cs.wisc.edu return m_Size; 1208174Snilay@cs.wisc.edu } 1218174Snilay@cs.wisc.edu 1228174Snilay@cs.wisc.edu const PrefetchBit& 1238174Snilay@cs.wisc.edu getPrefetch() const 1248174Snilay@cs.wisc.edu { 1258174Snilay@cs.wisc.edu return m_Prefetch; 1268174Snilay@cs.wisc.edu } 1278092Snilay@cs.wisc.edu 1288092Snilay@cs.wisc.edu void print(std::ostream& out) const; 1299302Snilay@cs.wisc.edu 1309302Snilay@cs.wisc.edu bool functionalRead(Packet *pkt); 1319302Snilay@cs.wisc.edu bool functionalWrite(Packet *pkt); 1328092Snilay@cs.wisc.edu}; 1338092Snilay@cs.wisc.edu 1348174Snilay@cs.wisc.eduinline std::ostream& 1358174Snilay@cs.wisc.eduoperator<<(std::ostream& out, const RubyRequest& obj) 1368174Snilay@cs.wisc.edu{ 1378174Snilay@cs.wisc.edu obj.print(out); 1388174Snilay@cs.wisc.edu out << std::flush; 1398174Snilay@cs.wisc.edu return out; 1408174Snilay@cs.wisc.edu} 1418092Snilay@cs.wisc.edu 1428092Snilay@cs.wisc.edu#endif 143