RubyRequest.hh revision 12492
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 2912492Sodanrc@yahoo.com.br#ifndef __MEM_RUBY_SLICC_INTERFACE_RUBYREQUEST_HH__ 3012492Sodanrc@yahoo.com.br#define __MEM_RUBY_SLICC_INTERFACE_RUBYREQUEST_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" 4311307Santhony.gutierrez@amd.com#include "mem/ruby/common/WriteMask.hh" 448092Snilay@cs.wisc.edu 458174Snilay@cs.wisc.educlass RubyRequest : public Message 468092Snilay@cs.wisc.edu{ 478092Snilay@cs.wisc.edu public: 4811025Snilay@cs.wisc.edu Addr m_PhysicalAddress; 4911025Snilay@cs.wisc.edu Addr m_LineAddress; 508174Snilay@cs.wisc.edu RubyRequestType m_Type; 5111025Snilay@cs.wisc.edu Addr m_ProgramCounter; 528174Snilay@cs.wisc.edu RubyAccessMode m_AccessMode; 538174Snilay@cs.wisc.edu int m_Size; 548174Snilay@cs.wisc.edu PrefetchBit m_Prefetch; 558092Snilay@cs.wisc.edu uint8_t* data; 5611459Smatthew.poremba@amd.com PacketPtr m_pkt; 5711005Sandreas.sandberg@arm.com ContextID m_contextId; 5811307Santhony.gutierrez@amd.com WriteMask m_writeMask; 5911307Santhony.gutierrez@amd.com DataBlock m_WTData; 6011305Sblake.hechtman@amd.com int m_wfid; 6111305Sblake.hechtman@amd.com HSAScope m_scope; 6211305Sblake.hechtman@amd.com HSASegment m_segment; 6311305Sblake.hechtman@amd.com 648092Snilay@cs.wisc.edu 659508Snilay@cs.wisc.edu RubyRequest(Tick curTime, uint64_t _paddr, uint8_t* _data, int _len, 669466Snilay@cs.wisc.edu uint64_t _pc, RubyRequestType _type, RubyAccessMode _access_mode, 679466Snilay@cs.wisc.edu PacketPtr _pkt, PrefetchBit _pb = PrefetchBit_No, 6811305Sblake.hechtman@amd.com ContextID _proc_id = 100, ContextID _core_id = 99, 6911305Sblake.hechtman@amd.com HSAScope _scope = HSAScope_UNSPECIFIED, 7011305Sblake.hechtman@amd.com HSASegment _segment = HSASegment_GLOBAL) 719466Snilay@cs.wisc.edu : Message(curTime), 729466Snilay@cs.wisc.edu m_PhysicalAddress(_paddr), 738174Snilay@cs.wisc.edu m_Type(_type), 748174Snilay@cs.wisc.edu m_ProgramCounter(_pc), 758174Snilay@cs.wisc.edu m_AccessMode(_access_mode), 768174Snilay@cs.wisc.edu m_Size(_len), 778174Snilay@cs.wisc.edu m_Prefetch(_pb), 788092Snilay@cs.wisc.edu data(_data), 7911459Smatthew.poremba@amd.com m_pkt(_pkt), 8011305Sblake.hechtman@amd.com m_contextId(_core_id), 8111305Sblake.hechtman@amd.com m_scope(_scope), 8211305Sblake.hechtman@amd.com m_segment(_segment) 838174Snilay@cs.wisc.edu { 8411305Sblake.hechtman@amd.com m_LineAddress = makeLineAddress(m_PhysicalAddress); 858174Snilay@cs.wisc.edu } 868174Snilay@cs.wisc.edu 8711305Sblake.hechtman@amd.com RubyRequest(Tick curTime, uint64_t _paddr, uint8_t* _data, int _len, 8811305Sblake.hechtman@amd.com uint64_t _pc, RubyRequestType _type, 8911305Sblake.hechtman@amd.com RubyAccessMode _access_mode, PacketPtr _pkt, PrefetchBit _pb, 9011305Sblake.hechtman@amd.com unsigned _proc_id, unsigned _core_id, 9111305Sblake.hechtman@amd.com int _wm_size, std::vector<bool> & _wm_mask, 9211305Sblake.hechtman@amd.com DataBlock & _Data, 9311305Sblake.hechtman@amd.com HSAScope _scope = HSAScope_UNSPECIFIED, 9411305Sblake.hechtman@amd.com HSASegment _segment = HSASegment_GLOBAL) 9511305Sblake.hechtman@amd.com : Message(curTime), 9611305Sblake.hechtman@amd.com m_PhysicalAddress(_paddr), 9711305Sblake.hechtman@amd.com m_Type(_type), 9811305Sblake.hechtman@amd.com m_ProgramCounter(_pc), 9911305Sblake.hechtman@amd.com m_AccessMode(_access_mode), 10011305Sblake.hechtman@amd.com m_Size(_len), 10111305Sblake.hechtman@amd.com m_Prefetch(_pb), 10211305Sblake.hechtman@amd.com data(_data), 10311459Smatthew.poremba@amd.com m_pkt(_pkt), 10411305Sblake.hechtman@amd.com m_contextId(_core_id), 10511307Santhony.gutierrez@amd.com m_writeMask(_wm_size,_wm_mask), 10611307Santhony.gutierrez@amd.com m_WTData(_Data), 10711305Sblake.hechtman@amd.com m_wfid(_proc_id), 10811305Sblake.hechtman@amd.com m_scope(_scope), 10911305Sblake.hechtman@amd.com m_segment(_segment) 11011305Sblake.hechtman@amd.com { 11111305Sblake.hechtman@amd.com m_LineAddress = makeLineAddress(m_PhysicalAddress); 11211305Sblake.hechtman@amd.com } 11311305Sblake.hechtman@amd.com 11411305Sblake.hechtman@amd.com RubyRequest(Tick curTime, uint64_t _paddr, uint8_t* _data, int _len, 11511305Sblake.hechtman@amd.com uint64_t _pc, RubyRequestType _type, 11611305Sblake.hechtman@amd.com RubyAccessMode _access_mode, PacketPtr _pkt, PrefetchBit _pb, 11711305Sblake.hechtman@amd.com unsigned _proc_id, unsigned _core_id, 11811305Sblake.hechtman@amd.com int _wm_size, std::vector<bool> & _wm_mask, 11911305Sblake.hechtman@amd.com DataBlock & _Data, 12011305Sblake.hechtman@amd.com std::vector< std::pair<int,AtomicOpFunctor*> > _atomicOps, 12111305Sblake.hechtman@amd.com HSAScope _scope = HSAScope_UNSPECIFIED, 12211305Sblake.hechtman@amd.com HSASegment _segment = HSASegment_GLOBAL) 12311305Sblake.hechtman@amd.com : Message(curTime), 12411305Sblake.hechtman@amd.com m_PhysicalAddress(_paddr), 12511305Sblake.hechtman@amd.com m_Type(_type), 12611305Sblake.hechtman@amd.com m_ProgramCounter(_pc), 12711305Sblake.hechtman@amd.com m_AccessMode(_access_mode), 12811305Sblake.hechtman@amd.com m_Size(_len), 12911305Sblake.hechtman@amd.com m_Prefetch(_pb), 13011305Sblake.hechtman@amd.com data(_data), 13111459Smatthew.poremba@amd.com m_pkt(_pkt), 13211305Sblake.hechtman@amd.com m_contextId(_core_id), 13311307Santhony.gutierrez@amd.com m_writeMask(_wm_size,_wm_mask,_atomicOps), 13411307Santhony.gutierrez@amd.com m_WTData(_Data), 13511305Sblake.hechtman@amd.com m_wfid(_proc_id), 13611305Sblake.hechtman@amd.com m_scope(_scope), 13711305Sblake.hechtman@amd.com m_segment(_segment) 13811305Sblake.hechtman@amd.com { 13911305Sblake.hechtman@amd.com m_LineAddress = makeLineAddress(m_PhysicalAddress); 14011305Sblake.hechtman@amd.com } 14111305Sblake.hechtman@amd.com 14211305Sblake.hechtman@amd.com 1439508Snilay@cs.wisc.edu RubyRequest(Tick curTime) : Message(curTime) {} 14410472Sandreas.hansson@arm.com MsgPtr clone() const 14510472Sandreas.hansson@arm.com { return std::shared_ptr<Message>(new RubyRequest(*this)); } 1468174Snilay@cs.wisc.edu 14711025Snilay@cs.wisc.edu Addr getLineAddress() const { return m_LineAddress; } 14811025Snilay@cs.wisc.edu Addr getPhysicalAddress() const { return m_PhysicalAddress; } 1499508Snilay@cs.wisc.edu const RubyRequestType& getType() const { return m_Type; } 15011025Snilay@cs.wisc.edu Addr getProgramCounter() const { return m_ProgramCounter; } 1519508Snilay@cs.wisc.edu const RubyAccessMode& getAccessMode() const { return m_AccessMode; } 1529508Snilay@cs.wisc.edu const int& getSize() const { return m_Size; } 1539508Snilay@cs.wisc.edu const PrefetchBit& getPrefetch() const { return m_Prefetch; } 1548092Snilay@cs.wisc.edu 1558092Snilay@cs.wisc.edu void print(std::ostream& out) const; 1569302Snilay@cs.wisc.edu bool functionalRead(Packet *pkt); 1579302Snilay@cs.wisc.edu bool functionalWrite(Packet *pkt); 1588092Snilay@cs.wisc.edu}; 1598092Snilay@cs.wisc.edu 1608174Snilay@cs.wisc.eduinline std::ostream& 1618174Snilay@cs.wisc.eduoperator<<(std::ostream& out, const RubyRequest& obj) 1628174Snilay@cs.wisc.edu{ 1638174Snilay@cs.wisc.edu obj.print(out); 1648174Snilay@cs.wisc.edu out << std::flush; 1658174Snilay@cs.wisc.edu return out; 1668174Snilay@cs.wisc.edu} 1678092Snilay@cs.wisc.edu 16812492Sodanrc@yahoo.com.br#endif //__MEM_RUBY_SLICC_INTERFACE_RUBYREQUEST_HH__ 169