kernel/eka/drivers/dma/dmapil.cpp
branchRCL_3
changeset 21 e7d2d738d3c2
parent 20 597aaf25e343
child 22 2f92ad2dc5db
equal deleted inserted replaced
20:597aaf25e343 21:e7d2d738d3c2
     1 // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
   859 		Signal();
   859 		Signal();
   860 
   860 
   861 		// release threads doing CancelAll()
   861 		// release threads doing CancelAll()
   862 		waiters->Signal();
   862 		waiters->Signal();
   863 		}
   863 		}
   864 	else if (!error && iController->IsIdle(*this) && !iReqQ.IsEmpty() && !iDfc.Queued())
   864 	// (iController may be NULL here if the channel was closed in the client callback.)
       
   865 	else if (!error &&
       
   866 			 iController && iController->IsIdle(*this) &&
       
   867 			 !iReqQ.IsEmpty() &&
       
   868 			 !iDfc.Queued())
   865 		{
   869 		{
   866 		// Wait for a bit. If during that time the condition goes away then it
   870 		// Wait for a bit. If during that time the condition goes away then it
   867 		// was a 'spurious missed interrupt', in which case we just do nothing.
   871 		// was a 'spurious missed interrupt', in which case we just do nothing.
   868 		TBool spurious = EFalse;
   872 		TBool spurious = EFalse;
   869 		const TUint32 nano_secs_per_loop = 1000 * 1000;			// 1ms
   873 		const TUint32 nano_secs_per_loop = 1000 * 1000;			// 1ms