RubyRequest.hh revision 8174
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 348092Snilay@cs.wisc.edu#include "mem/packet.hh" 358164Snilay@cs.wisc.edu#include "mem/protocol/RubyAccessMode.hh" 368165Snilay@cs.wisc.edu#include "mem/protocol/RubyRequestType.hh" 378092Snilay@cs.wisc.edu#include "mem/protocol/Message.hh" 388092Snilay@cs.wisc.edu#include "mem/protocol/PrefetchBit.hh" 398092Snilay@cs.wisc.edu#include "mem/ruby/common/Address.hh" 408092Snilay@cs.wisc.edu 418092Snilay@cs.wisc.edutypedef void* RubyPortHandle; 428092Snilay@cs.wisc.edu 438174Snilay@cs.wisc.educlass RubyRequest : public Message 448092Snilay@cs.wisc.edu{ 458092Snilay@cs.wisc.edu public: 468174Snilay@cs.wisc.edu Address m_PhysicalAddress; 478174Snilay@cs.wisc.edu Address m_LineAddress; 488174Snilay@cs.wisc.edu RubyRequestType m_Type; 498174Snilay@cs.wisc.edu Address m_ProgramCounter; 508174Snilay@cs.wisc.edu RubyAccessMode m_AccessMode; 518174Snilay@cs.wisc.edu int m_Size; 528174Snilay@cs.wisc.edu PrefetchBit m_Prefetch; 538092Snilay@cs.wisc.edu uint8_t* data; 548092Snilay@cs.wisc.edu PacketPtr pkt; 558092Snilay@cs.wisc.edu unsigned proc_id; 568092Snilay@cs.wisc.edu 578092Snilay@cs.wisc.edu RubyRequest() {} 588174Snilay@cs.wisc.edu RubyRequest(uint64_t _paddr, uint8_t* _data, int _len, uint64_t _pc, 598174Snilay@cs.wisc.edu RubyRequestType _type, RubyAccessMode _access_mode, 608174Snilay@cs.wisc.edu PacketPtr _pkt, PrefetchBit _pb = PrefetchBit_No, 618174Snilay@cs.wisc.edu unsigned _proc_id = 100) 628174Snilay@cs.wisc.edu : m_PhysicalAddress(_paddr), 638174Snilay@cs.wisc.edu m_Type(_type), 648174Snilay@cs.wisc.edu m_ProgramCounter(_pc), 658174Snilay@cs.wisc.edu m_AccessMode(_access_mode), 668174Snilay@cs.wisc.edu m_Size(_len), 678174Snilay@cs.wisc.edu m_Prefetch(_pb), 688092Snilay@cs.wisc.edu data(_data), 698092Snilay@cs.wisc.edu pkt(_pkt), 708092Snilay@cs.wisc.edu proc_id(_proc_id) 718174Snilay@cs.wisc.edu { 728174Snilay@cs.wisc.edu m_LineAddress = m_PhysicalAddress; 738174Snilay@cs.wisc.edu m_LineAddress.makeLineAddress(); 748174Snilay@cs.wisc.edu } 758174Snilay@cs.wisc.edu 768174Snilay@cs.wisc.edu static RubyRequest* 778174Snilay@cs.wisc.edu create() 788174Snilay@cs.wisc.edu { 798174Snilay@cs.wisc.edu return new RubyRequest(); 808174Snilay@cs.wisc.edu } 818174Snilay@cs.wisc.edu 828174Snilay@cs.wisc.edu RubyRequest* 838174Snilay@cs.wisc.edu clone() const 848174Snilay@cs.wisc.edu { 858174Snilay@cs.wisc.edu return new RubyRequest(*this); 868174Snilay@cs.wisc.edu } 878174Snilay@cs.wisc.edu 888174Snilay@cs.wisc.edu const Address& 898174Snilay@cs.wisc.edu getLineAddress() const 908174Snilay@cs.wisc.edu { 918174Snilay@cs.wisc.edu return m_LineAddress; 928174Snilay@cs.wisc.edu } 938174Snilay@cs.wisc.edu 948174Snilay@cs.wisc.edu const Address& 958174Snilay@cs.wisc.edu getPhysicalAddress() const 968174Snilay@cs.wisc.edu { 978174Snilay@cs.wisc.edu return m_PhysicalAddress; 988174Snilay@cs.wisc.edu } 998174Snilay@cs.wisc.edu 1008174Snilay@cs.wisc.edu const RubyRequestType& 1018174Snilay@cs.wisc.edu getType() const 1028174Snilay@cs.wisc.edu { 1038174Snilay@cs.wisc.edu return m_Type; 1048174Snilay@cs.wisc.edu } 1058174Snilay@cs.wisc.edu 1068174Snilay@cs.wisc.edu const Address& 1078174Snilay@cs.wisc.edu getProgramCounter() const 1088174Snilay@cs.wisc.edu { 1098174Snilay@cs.wisc.edu return m_ProgramCounter; 1108174Snilay@cs.wisc.edu } 1118174Snilay@cs.wisc.edu 1128174Snilay@cs.wisc.edu const RubyAccessMode& 1138174Snilay@cs.wisc.edu getAccessMode() const 1148174Snilay@cs.wisc.edu { 1158174Snilay@cs.wisc.edu return m_AccessMode; 1168174Snilay@cs.wisc.edu } 1178174Snilay@cs.wisc.edu 1188174Snilay@cs.wisc.edu const int& 1198174Snilay@cs.wisc.edu getSize() const 1208174Snilay@cs.wisc.edu { 1218174Snilay@cs.wisc.edu return m_Size; 1228174Snilay@cs.wisc.edu } 1238174Snilay@cs.wisc.edu 1248174Snilay@cs.wisc.edu const PrefetchBit& 1258174Snilay@cs.wisc.edu getPrefetch() const 1268174Snilay@cs.wisc.edu { 1278174Snilay@cs.wisc.edu return m_Prefetch; 1288174Snilay@cs.wisc.edu } 1298092Snilay@cs.wisc.edu 1308092Snilay@cs.wisc.edu void print(std::ostream& out) const; 1318092Snilay@cs.wisc.edu}; 1328092Snilay@cs.wisc.edu 1338174Snilay@cs.wisc.eduinline std::ostream& 1348174Snilay@cs.wisc.eduoperator<<(std::ostream& out, const RubyRequest& obj) 1358174Snilay@cs.wisc.edu{ 1368174Snilay@cs.wisc.edu obj.print(out); 1378174Snilay@cs.wisc.edu out << std::flush; 1388174Snilay@cs.wisc.edu return out; 1398174Snilay@cs.wisc.edu} 1408092Snilay@cs.wisc.edu 1418092Snilay@cs.wisc.edu#endif 142