diff -r 43365a9b78a3 -r d8d70de2bd36 kernel/eka/include/drivers/dma_hai.h --- a/kernel/eka/include/drivers/dma_hai.h Tue Jul 06 15:50:07 2010 +0300 +++ b/kernel/eka/include/drivers/dma_hai.h Wed Aug 18 11:08:29 2010 +0300 @@ -172,11 +172,13 @@ { friend class DmaChannelMgr; -// The following two friend declarations will become obsolete once that -// functionality is owned and provided by the controller class instead of the -// request class. (TDmac::iFreeHdr could then also be made private.) -friend TInt DDmaRequest::ExpandDesList(TInt, TInt&, SDmaDesHdr*&, SDmaDesHdr*&); -friend void DDmaRequest::FreeDesList(TInt&, SDmaDesHdr*&, SDmaDesHdr*&); +// The following friend declaration will become obsolete once header +// pool manipulation functionality is owned and provided by the controller +// class instead of the request class. +// (TDmac::iFreeHdr could then also be made private.) +friend class DDmaRequest; + +friend class TSkelDmac; protected: /** Data required for creating a new instance. */ @@ -848,7 +850,7 @@ virtual void DoCancelAll(); virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aCompletedHdr); -private: +protected: enum {EIdle = 0, ETransferring} iState; }; @@ -864,7 +866,7 @@ virtual void DoCancelAll(); virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aCompletedHdr); -private: +protected: enum {EIdle = 0, ETransferring, ETransferringLast} iState; }; @@ -881,7 +883,7 @@ virtual void DoUnlink(SDmaDesHdr& aHdr); virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aCompletedHdr); -private: +protected: enum {EIdle = 0, ETransferring} iState; }; @@ -894,19 +896,26 @@ */ class TDmaAsymSgChannel : public TDmaChannel { +public: + TDmaAsymSgChannel(); + private: virtual void DoQueue(const DDmaRequest& aReq); virtual void DoCancelAll(); virtual void DoUnlink(SDmaDesHdr& aHdr); virtual void DoDfc(const DDmaRequest& aCurReq, SDmaDesHdr*& aSrcCompletedHdr, SDmaDesHdr*& aDstCompletedHdr); + virtual void SetNullPtr(const DDmaRequest& aReq); + virtual void ResetNullPtr(); -private: +protected: SDmaDesHdr* iSrcCurHdr; // source fragment being transferred or NULL SDmaDesHdr** iSrcNullPtr; // Pointer to NULL pointer following last source fragment SDmaDesHdr* iDstCurHdr; // destination fragment being transferred or NULL SDmaDesHdr** iDstNullPtr; // Pointer to NULL pointer following last destination fragment enum {EIdle = 0, ETransferring} iState; + + __DMA_DECLARE_VIRTUAL_INVARIANT };