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