DMASequencer.hh revision 6368
110448Snilay@cs.wisc.edu 210448Snilay@cs.wisc.edu#ifndef DMASEQUENCER_H 310448Snilay@cs.wisc.edu#define DMASEQUENCER_H 410448Snilay@cs.wisc.edu 510448Snilay@cs.wisc.edu#include <ostream> 610448Snilay@cs.wisc.edu#include "mem/ruby/common/DataBlock.hh" 710448Snilay@cs.wisc.edu#include "mem/ruby/system/RubyPort.hh" 810448Snilay@cs.wisc.edu 910448Snilay@cs.wisc.edustruct DMARequest { 1010448Snilay@cs.wisc.edu uint64_t start_paddr; 1110448Snilay@cs.wisc.edu int len; 1210448Snilay@cs.wisc.edu bool write; 1310448Snilay@cs.wisc.edu int bytes_completed; 1410448Snilay@cs.wisc.edu int bytes_issued; 1510448Snilay@cs.wisc.edu uint8* data; 1610448Snilay@cs.wisc.edu int64_t id; 1710448Snilay@cs.wisc.edu}; 1810448Snilay@cs.wisc.edu 1910448Snilay@cs.wisc.educlass MessageBuffer; 2010448Snilay@cs.wisc.educlass AbstractController; 2110448Snilay@cs.wisc.edu 2210447Snilay@cs.wisc.educlass DMASequencer :public RubyPort { 2310447Snilay@cs.wisc.edupublic: 2410447Snilay@cs.wisc.edu DMASequencer(const string & name); 2510447Snilay@cs.wisc.edu void init(const vector<string> & argv); 2610447Snilay@cs.wisc.edu /* external interface */ 2710447Snilay@cs.wisc.edu int64_t makeRequest(const RubyRequest & request); 2810447Snilay@cs.wisc.edu // void issueRequest(uint64_t paddr, uint8* data, int len, bool rw); 2910447Snilay@cs.wisc.edu bool busy() { return m_is_busy;} 3010447Snilay@cs.wisc.edu 3110447Snilay@cs.wisc.edu /* SLICC callback */ 3210447Snilay@cs.wisc.edu void dataCallback(const DataBlock & dblk); 3310447Snilay@cs.wisc.edu void ackCallback(); 3410447Snilay@cs.wisc.edu 3510447Snilay@cs.wisc.edu void printConfig(std::ostream & out); 3610447Snilay@cs.wisc.edu 3710447Snilay@cs.wisc.eduprivate: 3810447Snilay@cs.wisc.edu void issueNext(); 3910447Snilay@cs.wisc.edu 4010447Snilay@cs.wisc.eduprivate: 4110447Snilay@cs.wisc.edu int m_version; 4210447Snilay@cs.wisc.edu AbstractController* m_controller; 4310447Snilay@cs.wisc.edu bool m_is_busy; 4410447Snilay@cs.wisc.edu uint64_t m_data_block_mask; 4510447Snilay@cs.wisc.edu DMARequest active_request; 4610447Snilay@cs.wisc.edu int num_active_requests; 4710447Snilay@cs.wisc.edu MessageBuffer* m_mandatory_q_ptr; 4810447Snilay@cs.wisc.edu}; 4910447Snilay@cs.wisc.edu 5010447Snilay@cs.wisc.edu#endif // DMACONTROLLER_H 5110447Snilay@cs.wisc.edu