kernel/eka/drivers/usbc/usbdma.cpp
changeset 102 ef2a444a7410
parent 33 0173bcd7697c
child 253 d37db4dcc88d
equal deleted inserted replaced
90:947f0dc9f7a8 102:ef2a444a7410
   617 		const TInt size = thisPacketSize - iExtractOffset;
   617 		const TInt size = thisPacketSize - iExtractOffset;
   618 		if (aRUS)
   618 		if (aRUS)
   619 			{
   619 			{
   620 			if (iEndpointType == KUsbEpTypeBulk)
   620 			if (iEndpointType == KUsbEpTypeBulk)
   621 				{
   621 				{
   622 				isShortPacket = (size < iMaxPacketSize) || (size & maxPacketSizeMask);
   622                 if(iExtractOffset & maxPacketSizeMask)
       
   623                 	{
       
   624                     isShortPacket = ((size+iExtractOffset) < iMaxPacketSize) || ((size+iExtractOffset) & maxPacketSizeMask);
       
   625                 	}
       
   626                 else
       
   627                 	{
       
   628                     isShortPacket = (size < iMaxPacketSize) || (size & maxPacketSizeMask);
       
   629                 	}
   623 				}
   630 				}
   624 			else
   631 			else
   625 				{
   632 				{
   626 				// this 'if' block is arranged to avoid a division on packet sizes <= iMaxPacketSize
   633 				// this 'if' block is arranged to avoid a division on packet sizes <= iMaxPacketSize
   627 				isShortPacket = (size < iMaxPacketSize) ||
   634 				isShortPacket = (size < iMaxPacketSize) ||
   828 			return ETrue;
   835 			return ETrue;
   829 
   836 
   830 		if (iEndpointType == KUsbEpTypeBulk)
   837 		if (iEndpointType == KUsbEpTypeBulk)
   831 			{
   838 			{
   832 			const TInt mask = iMaxPacketSize - 1;
   839 			const TInt mask = iMaxPacketSize - 1;
   833 			if (iTotalRxBytesAvail & mask)
   840 
   834 				return ETrue;
       
   835 
       
   836 			// residue==0; this can be because
       
   837 			// zlps exist, or short packets combine to n * max_packet_size
       
   838 			// This means spadework
       
   839 			const TInt s = iCurrentPacketSizeArray[iCurrentPacket] - iExtractOffset;
       
   840 			if ((s == 0) || (s & mask))
       
   841 				{
       
   842 				return ETrue;
       
   843 				}
       
   844 
   841 
   845 			for (TInt i = 0; i < iNumberofBuffers; i++)
   842 			for (TInt i = 0; i < iNumberofBuffers; i++)
   846 				{
   843 				{
   847 				if (index == KUsbcInvalidBufferIndex)
   844 				if (index == KUsbcInvalidBufferIndex)
   848 					break;
   845 					break;