kernel/eka/include/drivers/dma_hai.h
changeset 199 189ece41fa29
parent 130 c30940f6d922
child 243 c7a0ce20c48c
equal deleted inserted replaced
189:a5496987b1da 199:189ece41fa29
   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.
   899 	virtual void DoCancelAll();
   901 	virtual void DoCancelAll();
   900 	virtual void DoUnlink(SDmaDesHdr& aHdr);
   902 	virtual void DoUnlink(SDmaDesHdr& aHdr);
   901 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aSrcCompletedHdr,
   903 	virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aSrcCompletedHdr,
   902 					   SDmaDesHdr*& aDstCompletedHdr);
   904 					   SDmaDesHdr*& aDstCompletedHdr);
   903 
   905 
   904 private:
   906 protected:
   905 	SDmaDesHdr* iSrcCurHdr;	  // source fragment being transferred or NULL
   907 	SDmaDesHdr* iSrcCurHdr;	  // source fragment being transferred or NULL
   906 	SDmaDesHdr** iSrcNullPtr; // Pointer to NULL pointer following last source fragment
   908 	SDmaDesHdr** iSrcNullPtr; // Pointer to NULL pointer following last source fragment
   907 	SDmaDesHdr* iDstCurHdr;	  // destination fragment being transferred or NULL
   909 	SDmaDesHdr* iDstCurHdr;	  // destination fragment being transferred or NULL
   908 	SDmaDesHdr** iDstNullPtr; // Pointer to NULL pointer following last destination fragment
   910 	SDmaDesHdr** iDstNullPtr; // Pointer to NULL pointer following last destination fragment
   909 	enum {EIdle = 0, ETransferring} iState;
   911 	enum {EIdle = 0, ETransferring} iState;