RubyRequest.hh revision 11305
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> 3311305Sblake.hechtman@amd.com#include <vector> 348092Snilay@cs.wisc.edu 3511305Sblake.hechtman@amd.com#include "mem/protocol/HSAScope.hh" 3611305Sblake.hechtman@amd.com#include "mem/protocol/HSASegment.hh" 378229Snate@binkert.org#include "mem/protocol/Message.hh" 388229Snate@binkert.org#include "mem/protocol/PrefetchBit.hh" 398164Snilay@cs.wisc.edu#include "mem/protocol/RubyAccessMode.hh" 408165Snilay@cs.wisc.edu#include "mem/protocol/RubyRequestType.hh" 418092Snilay@cs.wisc.edu#include "mem/ruby/common/Address.hh" 4211305Sblake.hechtman@amd.com#include "mem/ruby/common/DataBlock.hh" 438092Snilay@cs.wisc.edu 448174Snilay@cs.wisc.educlass RubyRequest : public Message 458092Snilay@cs.wisc.edu{ 468092Snilay@cs.wisc.edu public: 4711025Snilay@cs.wisc.edu Addr m_PhysicalAddress; 4811025Snilay@cs.wisc.edu Addr m_LineAddress; 498174Snilay@cs.wisc.edu RubyRequestType m_Type; 5011025Snilay@cs.wisc.edu Addr m_ProgramCounter; 518174Snilay@cs.wisc.edu RubyAccessMode m_AccessMode; 528174Snilay@cs.wisc.edu int m_Size; 538174Snilay@cs.wisc.edu PrefetchBit m_Prefetch; 548092Snilay@cs.wisc.edu uint8_t* data; 558092Snilay@cs.wisc.edu PacketPtr pkt; 5611005Sandreas.sandberg@arm.com ContextID m_contextId; 5711305Sblake.hechtman@amd.com int m_wfid; 5811305Sblake.hechtman@amd.com HSAScope m_scope; 5911305Sblake.hechtman@amd.com HSASegment m_segment; 6011305Sblake.hechtman@amd.com 618092Snilay@cs.wisc.edu 629508Snilay@cs.wisc.edu RubyRequest(Tick curTime, uint64_t _paddr, uint8_t* _data, int _len, 639466Snilay@cs.wisc.edu uint64_t _pc, RubyRequestType _type, RubyAccessMode _access_mode, 649466Snilay@cs.wisc.edu PacketPtr _pkt, PrefetchBit _pb = PrefetchBit_No, 6511305Sblake.hechtman@amd.com ContextID _proc_id = 100, ContextID _core_id = 99, 6611305Sblake.hechtman@amd.com HSAScope _scope = HSAScope_UNSPECIFIED, 6711305Sblake.hechtman@amd.com HSASegment _segment = HSASegment_GLOBAL) 689466Snilay@cs.wisc.edu : Message(curTime), 699466Snilay@cs.wisc.edu m_PhysicalAddress(_paddr), 708174Snilay@cs.wisc.edu m_Type(_type), 718174Snilay@cs.wisc.edu m_ProgramCounter(_pc), 728174Snilay@cs.wisc.edu m_AccessMode(_access_mode), 738174Snilay@cs.wisc.edu m_Size(_len), 748174Snilay@cs.wisc.edu m_Prefetch(_pb), 758092Snilay@cs.wisc.edu data(_data), 768092Snilay@cs.wisc.edu pkt(_pkt), 7711305Sblake.hechtman@amd.com m_contextId(_core_id), 7811305Sblake.hechtman@amd.com m_scope(_scope), 7911305Sblake.hechtman@amd.com m_segment(_segment) 808174Snilay@cs.wisc.edu { 8111305Sblake.hechtman@amd.com m_LineAddress = makeLineAddress(m_PhysicalAddress); 828174Snilay@cs.wisc.edu } 838174Snilay@cs.wisc.edu 8411305Sblake.hechtman@amd.com RubyRequest(Tick curTime, uint64_t _paddr, uint8_t* _data, int _len, 8511305Sblake.hechtman@amd.com uint64_t _pc, RubyRequestType _type, 8611305Sblake.hechtman@amd.com RubyAccessMode _access_mode, PacketPtr _pkt, PrefetchBit _pb, 8711305Sblake.hechtman@amd.com unsigned _proc_id, unsigned _core_id, 8811305Sblake.hechtman@amd.com int _wm_size, std::vector<bool> & _wm_mask, 8911305Sblake.hechtman@amd.com DataBlock & _Data, 9011305Sblake.hechtman@amd.com HSAScope _scope = HSAScope_UNSPECIFIED, 9111305Sblake.hechtman@amd.com HSASegment _segment = HSASegment_GLOBAL) 9211305Sblake.hechtman@amd.com : Message(curTime), 9311305Sblake.hechtman@amd.com m_PhysicalAddress(_paddr), 9411305Sblake.hechtman@amd.com m_Type(_type), 9511305Sblake.hechtman@amd.com m_ProgramCounter(_pc), 9611305Sblake.hechtman@amd.com m_AccessMode(_access_mode), 9711305Sblake.hechtman@amd.com m_Size(_len), 9811305Sblake.hechtman@amd.com m_Prefetch(_pb), 9911305Sblake.hechtman@amd.com data(_data), 10011305Sblake.hechtman@amd.com pkt(_pkt), 10111305Sblake.hechtman@amd.com m_contextId(_core_id), 10211305Sblake.hechtman@amd.com m_wfid(_proc_id), 10311305Sblake.hechtman@amd.com m_scope(_scope), 10411305Sblake.hechtman@amd.com m_segment(_segment) 10511305Sblake.hechtman@amd.com { 10611305Sblake.hechtman@amd.com m_LineAddress = makeLineAddress(m_PhysicalAddress); 10711305Sblake.hechtman@amd.com } 10811305Sblake.hechtman@amd.com 10911305Sblake.hechtman@amd.com RubyRequest(Tick curTime, uint64_t _paddr, uint8_t* _data, int _len, 11011305Sblake.hechtman@amd.com uint64_t _pc, RubyRequestType _type, 11111305Sblake.hechtman@amd.com RubyAccessMode _access_mode, PacketPtr _pkt, PrefetchBit _pb, 11211305Sblake.hechtman@amd.com unsigned _proc_id, unsigned _core_id, 11311305Sblake.hechtman@amd.com int _wm_size, std::vector<bool> & _wm_mask, 11411305Sblake.hechtman@amd.com DataBlock & _Data, 11511305Sblake.hechtman@amd.com std::vector< std::pair<int,AtomicOpFunctor*> > _atomicOps, 11611305Sblake.hechtman@amd.com HSAScope _scope = HSAScope_UNSPECIFIED, 11711305Sblake.hechtman@amd.com HSASegment _segment = HSASegment_GLOBAL) 11811305Sblake.hechtman@amd.com : Message(curTime), 11911305Sblake.hechtman@amd.com m_PhysicalAddress(_paddr), 12011305Sblake.hechtman@amd.com m_Type(_type), 12111305Sblake.hechtman@amd.com m_ProgramCounter(_pc), 12211305Sblake.hechtman@amd.com m_AccessMode(_access_mode), 12311305Sblake.hechtman@amd.com m_Size(_len), 12411305Sblake.hechtman@amd.com m_Prefetch(_pb), 12511305Sblake.hechtman@amd.com data(_data), 12611305Sblake.hechtman@amd.com pkt(_pkt), 12711305Sblake.hechtman@amd.com m_contextId(_core_id), 12811305Sblake.hechtman@amd.com m_wfid(_proc_id), 12911305Sblake.hechtman@amd.com m_scope(_scope), 13011305Sblake.hechtman@amd.com m_segment(_segment) 13111305Sblake.hechtman@amd.com { 13211305Sblake.hechtman@amd.com m_LineAddress = makeLineAddress(m_PhysicalAddress); 13311305Sblake.hechtman@amd.com } 13411305Sblake.hechtman@amd.com 13511305Sblake.hechtman@amd.com 1369508Snilay@cs.wisc.edu RubyRequest(Tick curTime) : Message(curTime) {} 13710472Sandreas.hansson@arm.com MsgPtr clone() const 13810472Sandreas.hansson@arm.com { return std::shared_ptr<Message>(new RubyRequest(*this)); } 1398174Snilay@cs.wisc.edu 14011025Snilay@cs.wisc.edu Addr getLineAddress() const { return m_LineAddress; } 14111025Snilay@cs.wisc.edu Addr getPhysicalAddress() const { return m_PhysicalAddress; } 1429508Snilay@cs.wisc.edu const RubyRequestType& getType() const { return m_Type; } 14311025Snilay@cs.wisc.edu Addr getProgramCounter() const { return m_ProgramCounter; } 1449508Snilay@cs.wisc.edu const RubyAccessMode& getAccessMode() const { return m_AccessMode; } 1459508Snilay@cs.wisc.edu const int& getSize() const { return m_Size; } 1469508Snilay@cs.wisc.edu const PrefetchBit& getPrefetch() const { return m_Prefetch; } 1478092Snilay@cs.wisc.edu 1488092Snilay@cs.wisc.edu void print(std::ostream& out) const; 1499302Snilay@cs.wisc.edu bool functionalRead(Packet *pkt); 1509302Snilay@cs.wisc.edu bool functionalWrite(Packet *pkt); 1518092Snilay@cs.wisc.edu}; 1528092Snilay@cs.wisc.edu 1538174Snilay@cs.wisc.eduinline std::ostream& 1548174Snilay@cs.wisc.eduoperator<<(std::ostream& out, const RubyRequest& obj) 1558174Snilay@cs.wisc.edu{ 1568174Snilay@cs.wisc.edu obj.print(out); 1578174Snilay@cs.wisc.edu out << std::flush; 1588174Snilay@cs.wisc.edu return out; 1598174Snilay@cs.wisc.edu} 1608092Snilay@cs.wisc.edu 16111025Snilay@cs.wisc.edu#endif // __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__ 162