RubyRequest.hh revision 9466:23e13ad7091f
12810Srdreslin@umich.edu/* 212345Snikos.nikoleris@arm.com * Copyright (c) 2009 Mark D. Hill and David A. Wood 38702Sandreas.hansson@arm.com * All rights reserved. 48702Sandreas.hansson@arm.com * 58702Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 68702Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 78702Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 88702Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 98702Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 108702Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 118702Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 128702Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 138702Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 142810Srdreslin@umich.edu * this software without specific prior written permission. 152810Srdreslin@umich.edu * 162810Srdreslin@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172810Srdreslin@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182810Srdreslin@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192810Srdreslin@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202810Srdreslin@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212810Srdreslin@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222810Srdreslin@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232810Srdreslin@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242810Srdreslin@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252810Srdreslin@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262810Srdreslin@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272810Srdreslin@umich.edu */ 282810Srdreslin@umich.edu 292810Srdreslin@umich.edu#ifndef __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__ 302810Srdreslin@umich.edu#define __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__ 312810Srdreslin@umich.edu 322810Srdreslin@umich.edu#include <ostream> 332810Srdreslin@umich.edu 342810Srdreslin@umich.edu#include "mem/protocol/Message.hh" 352810Srdreslin@umich.edu#include "mem/protocol/PrefetchBit.hh" 362810Srdreslin@umich.edu#include "mem/protocol/RubyAccessMode.hh" 372810Srdreslin@umich.edu#include "mem/protocol/RubyRequestType.hh" 382810Srdreslin@umich.edu#include "mem/ruby/common/Address.hh" 392810Srdreslin@umich.edu 402810Srdreslin@umich.educlass RubyRequest : public Message 412810Srdreslin@umich.edu{ 422810Srdreslin@umich.edu public: 434458Sstever@eecs.umich.edu Address m_PhysicalAddress; 448856Sandreas.hansson@arm.com Address m_LineAddress; 452810Srdreslin@umich.edu RubyRequestType m_Type; 462810Srdreslin@umich.edu Address m_ProgramCounter; 472810Srdreslin@umich.edu RubyAccessMode m_AccessMode; 482810Srdreslin@umich.edu int m_Size; 492810Srdreslin@umich.edu PrefetchBit m_Prefetch; 502810Srdreslin@umich.edu uint8_t* data; 512810Srdreslin@umich.edu PacketPtr pkt; 5211051Sandreas.hansson@arm.com unsigned m_contextId; 5311051Sandreas.hansson@arm.com 542810Srdreslin@umich.edu RubyRequest(Time curTime, uint64_t _paddr, uint8_t* _data, int _len, 5511859Sandreas.hansson@arm.com uint64_t _pc, RubyRequestType _type, RubyAccessMode _access_mode, 5611859Sandreas.hansson@arm.com PacketPtr _pkt, PrefetchBit _pb = PrefetchBit_No, 5712334Sgabeblack@google.com unsigned _proc_id = 100) 5811197Sandreas.hansson@arm.com : Message(curTime), 595338Sstever@gmail.com m_PhysicalAddress(_paddr), 605338Sstever@gmail.com m_Type(_type), 615338Sstever@gmail.com m_ProgramCounter(_pc), 6210815Sdavid.guillen@arm.com m_AccessMode(_access_mode), 6311053Sandreas.hansson@arm.com m_Size(_len), 644458Sstever@eecs.umich.edu m_Prefetch(_pb), 654458Sstever@eecs.umich.edu data(_data), 662813Srdreslin@umich.edu pkt(_pkt), 673861Sstever@eecs.umich.edu m_contextId(_proc_id) 682810Srdreslin@umich.edu { 692810Srdreslin@umich.edu m_LineAddress = m_PhysicalAddress; 702810Srdreslin@umich.edu m_LineAddress.makeLineAddress(); 712810Srdreslin@umich.edu } 729264Sdjordje.kovacevic@arm.com 732810Srdreslin@umich.edu RubyRequest(Time curTime) : Message(curTime) 742810Srdreslin@umich.edu { 752810Srdreslin@umich.edu } 762810Srdreslin@umich.edu 772810Srdreslin@umich.edu RubyRequest* 788856Sandreas.hansson@arm.com clone() const 798856Sandreas.hansson@arm.com { 808856Sandreas.hansson@arm.com return new RubyRequest(*this); 818856Sandreas.hansson@arm.com } 828856Sandreas.hansson@arm.com 833738Sstever@eecs.umich.edu const Address& 848856Sandreas.hansson@arm.com getLineAddress() const 853738Sstever@eecs.umich.edu { 868856Sandreas.hansson@arm.com return m_LineAddress; 8710815Sdavid.guillen@arm.com } 883738Sstever@eecs.umich.edu 898856Sandreas.hansson@arm.com const Address& 904478Sstever@eecs.umich.edu getPhysicalAddress() const 918975Sandreas.hansson@arm.com { 928948Sandreas.hansson@arm.com return m_PhysicalAddress; 9312343Snikos.nikoleris@arm.com } 9412343Snikos.nikoleris@arm.com 958975Sandreas.hansson@arm.com const RubyRequestType& 963738Sstever@eecs.umich.edu getType() const 973738Sstever@eecs.umich.edu { 983738Sstever@eecs.umich.edu return m_Type; 993738Sstever@eecs.umich.edu } 1008856Sandreas.hansson@arm.com 1019090Sandreas.hansson@arm.com const Address& 1028856Sandreas.hansson@arm.com getProgramCounter() const 1038856Sandreas.hansson@arm.com { 1048856Sandreas.hansson@arm.com return m_ProgramCounter; 10510815Sdavid.guillen@arm.com } 1068856Sandreas.hansson@arm.com 1078856Sandreas.hansson@arm.com const RubyAccessMode& 1083738Sstever@eecs.umich.edu getAccessMode() const 1093738Sstever@eecs.umich.edu { 1108856Sandreas.hansson@arm.com return m_AccessMode; 1118914Sandreas.hansson@arm.com } 1128914Sandreas.hansson@arm.com 1138914Sandreas.hansson@arm.com const int& 1148914Sandreas.hansson@arm.com getSize() const 1158914Sandreas.hansson@arm.com { 11610713Sandreas.hansson@arm.com return m_Size; 1178914Sandreas.hansson@arm.com } 1188914Sandreas.hansson@arm.com 1198914Sandreas.hansson@arm.com const PrefetchBit& 1208914Sandreas.hansson@arm.com getPrefetch() const 12110815Sdavid.guillen@arm.com { 12210713Sandreas.hansson@arm.com return m_Prefetch; 1238914Sandreas.hansson@arm.com } 1248914Sandreas.hansson@arm.com 1258914Sandreas.hansson@arm.com void print(std::ostream& out) const; 12610815Sdavid.guillen@arm.com 12710713Sandreas.hansson@arm.com bool functionalRead(Packet *pkt); 12810713Sandreas.hansson@arm.com bool functionalWrite(Packet *pkt); 12910713Sandreas.hansson@arm.com}; 13010713Sandreas.hansson@arm.com 1318914Sandreas.hansson@arm.cominline std::ostream& 1328914Sandreas.hansson@arm.comoperator<<(std::ostream& out, const RubyRequest& obj) 1338914Sandreas.hansson@arm.com{ 1348914Sandreas.hansson@arm.com obj.print(out); 1358914Sandreas.hansson@arm.com out << std::flush; 1368914Sandreas.hansson@arm.com return out; 1378914Sandreas.hansson@arm.com} 1388914Sandreas.hansson@arm.com 13911375Sandreas.hansson@arm.com#endif 14011375Sandreas.hansson@arm.com