--- 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
{