DMASequencer.hh revision 6922:1620cffaa3b6
1 2#ifndef DMASEQUENCER_H 3#define DMASEQUENCER_H 4 5#include <ostream> 6#include "mem/ruby/common/DataBlock.hh" 7#include "mem/ruby/system/RubyPort.hh" 8 9#include "params/DMASequencer.hh" 10 11struct DMARequest { 12 uint64_t start_paddr; 13 int len; 14 bool write; 15 int bytes_completed; 16 int bytes_issued; 17 uint8* data; 18 PacketPtr pkt; 19}; 20 21class DMASequencer :public RubyPort { 22public: 23 typedef DMASequencerParams Params; 24 DMASequencer(const Params *); 25 void init(); 26 /* external interface */ 27 RequestStatus makeRequest(const RubyRequest & request); 28 bool busy() { return m_is_busy;} 29 30 /* SLICC callback */ 31 void dataCallback(const DataBlock & dblk); 32 void ackCallback(); 33 34 void printConfig(std::ostream & out); 35 36private: 37 void issueNext(); 38 39private: 40 bool m_is_busy; 41 uint64_t m_data_block_mask; 42 DMARequest active_request; 43 int num_active_requests; 44}; 45 46#endif // DMACONTROLLER_H 47