kernel/eka/drivers/dma/dma2_pil.cpp
changeset 189 a5496987b1da
parent 130 c30940f6d922
child 199 189ece41fa29
--- a/kernel/eka/drivers/dma/dma2_pil.cpp	Wed Jun 23 12:58:21 2010 +0100
+++ b/kernel/eka/drivers/dma/dma2_pil.cpp	Thu Jul 01 17:57:33 2010 +0100
@@ -1708,6 +1708,7 @@
 	// Revert any previous fragmentation attempt
 	FreeSrcDesList();
 	FreeDstDesList();
+	__DMA_ASSERTD(iSrcDesCount == iDstDesCount);
 	do
 		{
 		// Allocate fragment
@@ -1721,6 +1722,7 @@
 			{
 			break;
 			}
+		__DMA_ASSERTD(iSrcDesCount == iDstDesCount);
 		// Compute fragment size
 		TUint c = Min(aMaxTransferLen, aCount);
 		__KTRACE_OPT(KDMA, Kern::Printf("c = Min(aMaxTransferLen, aCount) = %d", c));
@@ -1851,7 +1853,7 @@
 	// Not configured? Call Fragment() first!
 	if (iChannel.iDmacCaps->iAsymHwDescriptors)
 		{
-		__DMA_ASSERTD((iSrcDesCount < 0) && (iDstDesCount < 0));
+		__DMA_ASSERTD((iSrcDesCount > 0) && (iDstDesCount > 0));
 		}
 	else
 		{
@@ -2213,22 +2215,26 @@
 					  (0 <= iDstDesCount) && (iDstDesCount <= iChannel.iMaxDesCount));
 		if (iSrcDesCount == 0)
 			{
+			// Not fragmented yet
 			__DMA_ASSERTD(iDstDesCount == 0);
 			__DMA_ASSERTD(!iQueued);
 			__DMA_ASSERTD(!iSrcFirstHdr && !iSrcLastHdr &&
 						  !iDstFirstHdr && !iDstLastHdr);
 			}
+		else if (iDstDesCount == 0)
+			{
+			// Src side only fragmented yet
+			__DMA_ASSERTD(iChannel.iController->IsValidHdr(iSrcFirstHdr));
+			__DMA_ASSERTD(iChannel.iController->IsValidHdr(iSrcLastHdr));
+			}
 		else
 			{
+			// Src & Dst sides fragmented
 			__DMA_ASSERTD(iChannel.iController->IsValidHdr(iSrcFirstHdr));
 			__DMA_ASSERTD(iChannel.iController->IsValidHdr(iSrcLastHdr));
 			__DMA_ASSERTD(iChannel.iController->IsValidHdr(iDstFirstHdr));
 			__DMA_ASSERTD(iChannel.iController->IsValidHdr(iDstLastHdr));
 			}
-		if (iChannel.iDmacCaps->iBalancedAsymSegments)
-			{
-			__DMA_ASSERTD(iSrcDesCount == iDstDesCount);
-			}
 		}
 	else
 		{