kernel/eka/include/drivers/dma_hai.h
changeset 247 d8d70de2bd36
parent 139 95f71bcdcdb7
equal deleted inserted replaced
201:43365a9b78a3 247:d8d70de2bd36
   170 */
   170 */
   171 class TDmac
   171 class TDmac
   172 	{
   172 	{
   173 friend class DmaChannelMgr;
   173 friend class DmaChannelMgr;
   174 
   174 
   175 // The following two friend declarations will become obsolete once that
   175 // The following friend declaration will become obsolete once header
   176 // functionality is owned and provided by the controller class instead of the
   176 // pool manipulation functionality is owned and provided by the controller
   177 // request class. (TDmac::iFreeHdr could then also be made private.)
   177 // class instead of the request class.
   178 friend TInt DDmaRequest::ExpandDesList(TInt, TInt&, SDmaDesHdr*&, SDmaDesHdr*&);
   178 // (TDmac::iFreeHdr could then also be made private.)
   179 friend void DDmaRequest::FreeDesList(TInt&, SDmaDesHdr*&, SDmaDesHdr*&);
   179 friend class DDmaRequest;
       
   180 
       
   181 friend class TSkelDmac;
   180 
   182 
   181 protected:
   183 protected:
   182 	/** Data required for creating a new instance. */
   184 	/** Data required for creating a new instance. */
   183 	struct SCreateInfo
   185 	struct SCreateInfo
   184 		{
   186 		{
   846 private:
   848 private:
   847 	virtual void DoQueue(const DDmaRequest& aReq);
   849 	virtual void DoQueue(const DDmaRequest& aReq);
   848 	virtual void DoCancelAll();
   850 	virtual void DoCancelAll();
   849 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aCompletedHdr);
   851 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aCompletedHdr);
   850 
   852 
   851 private:
   853 protected:
   852 	enum {EIdle = 0, ETransferring} iState;
   854 	enum {EIdle = 0, ETransferring} iState;
   853 	};
   855 	};
   854 
   856 
   855 
   857 
   856 /** Double-buffer DMA channel.
   858 /** Double-buffer DMA channel.
   862 private:
   864 private:
   863 	virtual void DoQueue(const DDmaRequest& aReq);
   865 	virtual void DoQueue(const DDmaRequest& aReq);
   864 	virtual void DoCancelAll();
   866 	virtual void DoCancelAll();
   865 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aCompletedHdr);
   867 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aCompletedHdr);
   866 
   868 
   867 private:
   869 protected:
   868 	enum {EIdle = 0, ETransferring, ETransferringLast} iState;
   870 	enum {EIdle = 0, ETransferring, ETransferringLast} iState;
   869 	};
   871 	};
   870 
   872 
   871 
   873 
   872 /** Scatter-gather DMA channel.
   874 /** Scatter-gather DMA channel.
   879 	virtual void DoQueue(const DDmaRequest& aReq);
   881 	virtual void DoQueue(const DDmaRequest& aReq);
   880 	virtual void DoCancelAll();
   882 	virtual void DoCancelAll();
   881 	virtual void DoUnlink(SDmaDesHdr& aHdr);
   883 	virtual void DoUnlink(SDmaDesHdr& aHdr);
   882 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aCompletedHdr);
   884 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aCompletedHdr);
   883 
   885 
   884 private:
   886 protected:
   885 	enum {EIdle = 0, ETransferring} iState;
   887 	enum {EIdle = 0, ETransferring} iState;
   886 	};
   888 	};
   887 
   889 
   888 
   890 
   889 /** Scatter-gather DMA channel with asymmetric linked-lists.
   891 /** Scatter-gather DMA channel with asymmetric linked-lists.
   892 
   894 
   893 	@prototype
   895 	@prototype
   894 */
   896 */
   895 class TDmaAsymSgChannel : public TDmaChannel
   897 class TDmaAsymSgChannel : public TDmaChannel
   896 	{
   898 	{
       
   899 public:
       
   900 	TDmaAsymSgChannel();
       
   901 
   897 private:
   902 private:
   898 	virtual void DoQueue(const DDmaRequest& aReq);
   903 	virtual void DoQueue(const DDmaRequest& aReq);
   899 	virtual void DoCancelAll();
   904 	virtual void DoCancelAll();
   900 	virtual void DoUnlink(SDmaDesHdr& aHdr);
   905 	virtual void DoUnlink(SDmaDesHdr& aHdr);
   901 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aSrcCompletedHdr,
   906 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aSrcCompletedHdr,
   902 					   SDmaDesHdr*& aDstCompletedHdr);
   907 					   SDmaDesHdr*& aDstCompletedHdr);
   903 
   908 	virtual void SetNullPtr(const DDmaRequest& aReq);
   904 private:
   909 	virtual void ResetNullPtr();
       
   910 
       
   911 protected:
   905 	SDmaDesHdr* iSrcCurHdr;	  // source fragment being transferred or NULL
   912 	SDmaDesHdr* iSrcCurHdr;	  // source fragment being transferred or NULL
   906 	SDmaDesHdr** iSrcNullPtr; // Pointer to NULL pointer following last source fragment
   913 	SDmaDesHdr** iSrcNullPtr; // Pointer to NULL pointer following last source fragment
   907 	SDmaDesHdr* iDstCurHdr;	  // destination fragment being transferred or NULL
   914 	SDmaDesHdr* iDstCurHdr;	  // destination fragment being transferred or NULL
   908 	SDmaDesHdr** iDstNullPtr; // Pointer to NULL pointer following last destination fragment
   915 	SDmaDesHdr** iDstNullPtr; // Pointer to NULL pointer following last destination fragment
   909 	enum {EIdle = 0, ETransferring} iState;
   916 	enum {EIdle = 0, ETransferring} iState;
       
   917 
       
   918 	__DMA_DECLARE_VIRTUAL_INVARIANT
   910 	};
   919 	};
   911 
   920 
   912 
   921 
   913 //////////////////////////////////////////////////////////////////////////////
   922 //////////////////////////////////////////////////////////////////////////////
   914 
   923