RubyRequest.hh revision 11005
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; 5211005Sandreas.sandberg@arm.com ContextID m_contextId; 538092Snilay@cs.wisc.edu 549508Snilay@cs.wisc.edu RubyRequest(Tick 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, 5711005Sandreas.sandberg@arm.com ContextID _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 739508Snilay@cs.wisc.edu RubyRequest(Tick curTime) : Message(curTime) {} 7410472Sandreas.hansson@arm.com MsgPtr clone() const 7510472Sandreas.hansson@arm.com { return std::shared_ptr<Message>(new RubyRequest(*this)); } 768174Snilay@cs.wisc.edu 779508Snilay@cs.wisc.edu const Address& getLineAddress() const { return m_LineAddress; } 789508Snilay@cs.wisc.edu const Address& getPhysicalAddress() const { return m_PhysicalAddress; } 799508Snilay@cs.wisc.edu const RubyRequestType& getType() const { return m_Type; } 809508Snilay@cs.wisc.edu const Address& getProgramCounter() const { return m_ProgramCounter; } 819508Snilay@cs.wisc.edu const RubyAccessMode& getAccessMode() const { return m_AccessMode; } 829508Snilay@cs.wisc.edu const int& getSize() const { return m_Size; } 839508Snilay@cs.wisc.edu const PrefetchBit& getPrefetch() const { return m_Prefetch; } 848092Snilay@cs.wisc.edu 858092Snilay@cs.wisc.edu void print(std::ostream& out) const; 869302Snilay@cs.wisc.edu bool functionalRead(Packet *pkt); 879302Snilay@cs.wisc.edu bool functionalWrite(Packet *pkt); 888092Snilay@cs.wisc.edu}; 898092Snilay@cs.wisc.edu 908174Snilay@cs.wisc.eduinline std::ostream& 918174Snilay@cs.wisc.eduoperator<<(std::ostream& out, const RubyRequest& obj) 928174Snilay@cs.wisc.edu{ 938174Snilay@cs.wisc.edu obj.print(out); 948174Snilay@cs.wisc.edu out << std::flush; 958174Snilay@cs.wisc.edu return out; 968174Snilay@cs.wisc.edu} 978092Snilay@cs.wisc.edu 988092Snilay@cs.wisc.edu#endif 99