DMASequencer.hh revision 6922:1620cffaa3b6
17019SBrad.Beckmann@amd.com
27019SBrad.Beckmann@amd.com#ifndef DMASEQUENCER_H
37019SBrad.Beckmann@amd.com#define DMASEQUENCER_H
47019SBrad.Beckmann@amd.com
57019SBrad.Beckmann@amd.com#include <ostream>
67019SBrad.Beckmann@amd.com#include "mem/ruby/common/DataBlock.hh"
77019SBrad.Beckmann@amd.com#include "mem/ruby/system/RubyPort.hh"
87019SBrad.Beckmann@amd.com
97019SBrad.Beckmann@amd.com#include "params/DMASequencer.hh"
107019SBrad.Beckmann@amd.com
117019SBrad.Beckmann@amd.comstruct DMARequest {
127019SBrad.Beckmann@amd.com  uint64_t start_paddr;
137019SBrad.Beckmann@amd.com  int len;
147019SBrad.Beckmann@amd.com  bool write;
157019SBrad.Beckmann@amd.com  int bytes_completed;
167019SBrad.Beckmann@amd.com  int bytes_issued;
177019SBrad.Beckmann@amd.com  uint8* data;
187019SBrad.Beckmann@amd.com  PacketPtr pkt;
197019SBrad.Beckmann@amd.com};
207019SBrad.Beckmann@amd.com
217019SBrad.Beckmann@amd.comclass DMASequencer :public RubyPort {
227019SBrad.Beckmann@amd.compublic:
237019SBrad.Beckmann@amd.com    typedef DMASequencerParams Params;
247019SBrad.Beckmann@amd.com  DMASequencer(const Params *);
257019SBrad.Beckmann@amd.com  void init();
267019SBrad.Beckmann@amd.com  /* external interface */
277019SBrad.Beckmann@amd.com  RequestStatus makeRequest(const RubyRequest & request);
287019SBrad.Beckmann@amd.com  bool busy() { return m_is_busy;}
297019SBrad.Beckmann@amd.com
306876Ssteve.reinhardt@amd.com  /* SLICC callback */
319206Snilay@cs.wisc.edu  void dataCallback(const DataBlock & dblk);
326876Ssteve.reinhardt@amd.com  void ackCallback();
339206Snilay@cs.wisc.edu
346876Ssteve.reinhardt@amd.com  void printConfig(std::ostream & out);
359338SAndreas.Sandberg@arm.com
366876Ssteve.reinhardt@amd.comprivate:
376876Ssteve.reinhardt@amd.com  void issueNext();
386876Ssteve.reinhardt@amd.com
399206Snilay@cs.wisc.eduprivate:
409504Snilay@cs.wisc.edu  bool m_is_busy;
416876Ssteve.reinhardt@amd.com  uint64_t m_data_block_mask;
426903SBrad.Beckmann@amd.com  DMARequest active_request;
436895SBrad.Beckmann@amd.com  int num_active_requests;
446895SBrad.Beckmann@amd.com};
457026SBrad.Beckmann@amd.com
46#endif // DMACONTROLLER_H
47