From 40728fd20dc87eebab964ce8dc42db6df3d72a65 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Fri, 29 Jul 2011 08:12:00 +0000
Subject: [PATCH] Remove redundant calls to USB_USBTask() in the Mass Storage
 Device Class driver when INTERRUPT_CONTROL_ENDPOINT is not used, as this is
 done inside the stream callbacks.

Fix implementations of Endpoint_SetEndpointDirection() and Endpoint_GetEndpointDirection() for the AVR8 architecture.
---
 LUFA/Drivers/USB/Class/Device/MassStorage.c | 20 --------------------
 LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h  |  4 ++--
 LUFA/Drivers/USB/Core/USBController.h       |  6 +++---
 3 files changed, 5 insertions(+), 25 deletions(-)

diff --git a/LUFA/Drivers/USB/Class/Device/MassStorage.c b/LUFA/Drivers/USB/Class/Device/MassStorage.c
index 4f1542ae9..45d011224 100644
--- a/LUFA/Drivers/USB/Class/Device/MassStorage.c
+++ b/LUFA/Drivers/USB/Class/Device/MassStorage.c
@@ -165,10 +165,6 @@ static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInte
 	                               (sizeof(MS_CommandBlockWrapper_t) - 16), &BytesProcessed) ==
 	                               ENDPOINT_RWSTREAM_IncompleteTransfer)
 	{
-		#if !defined(INTERRUPT_CONTROL_ENDPOINT)
-		USB_USBTask();
-		#endif
-
 		if (MSInterfaceInfo->State.IsMassStoreReset)
 		  return false;
 	}
@@ -191,10 +187,6 @@ static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInte
 	                                MSInterfaceInfo->State.CommandBlock.SCSICommandLength, &BytesProcessed) ==
 	                                ENDPOINT_RWSTREAM_IncompleteTransfer)
 	{
-		#if !defined(INTERRUPT_CONTROL_ENDPOINT)
-		USB_USBTask();
-		#endif
-
 		if (MSInterfaceInfo->State.IsMassStoreReset)
 		  return false;
 	}
@@ -210,10 +202,6 @@ static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInt
 
 	while (Endpoint_IsStalled())
 	{
-		#if !defined(INTERRUPT_CONTROL_ENDPOINT)
-		USB_USBTask();
-		#endif
-
 		if (MSInterfaceInfo->State.IsMassStoreReset)
 		  return;
 	}
@@ -222,10 +210,6 @@ static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInt
 
 	while (Endpoint_IsStalled())
 	{
-		#if !defined(INTERRUPT_CONTROL_ENDPOINT)
-		USB_USBTask();
-		#endif
-
 		if (MSInterfaceInfo->State.IsMassStoreReset)
 		  return;
 	}
@@ -235,10 +219,6 @@ static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInt
 	                                sizeof(MS_CommandStatusWrapper_t), &BytesProcessed) ==
 	                                ENDPOINT_RWSTREAM_IncompleteTransfer)
 	{
-		#if !defined(INTERRUPT_CONTROL_ENDPOINT)
-		USB_USBTask();
-		#endif
-
 		if (MSInterfaceInfo->State.IsMassStoreReset)
 		  return;
 	}
diff --git a/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h
index d1bea6dfd..f14d4839b 100644
--- a/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h
+++ b/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h
@@ -587,7 +587,7 @@
 			static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 			static inline uint8_t Endpoint_GetEndpointDirection(void)
 			{
-				return (UECFG0X & ENDPOINT_DIR_IN);
+				return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT;
 			}
 
 			/** Sets the direction of the currently selected endpoint.
@@ -597,7 +597,7 @@
 			static inline void Endpoint_SetEndpointDirection(const uint8_t DirectionMask) ATTR_ALWAYS_INLINE;
 			static inline void Endpoint_SetEndpointDirection(const uint8_t DirectionMask)
 			{
-				UECFG0X = ((UECFG0X & ~ENDPOINT_DIR_IN) | DirectionMask);
+				UECFG0X = ((UECFG0X & ~(1 << EPDIR)) | (DirectionMask ? (1 << EPDIR) : 0));
 			}
 
 			/** Reads one byte from the currently selected endpoint's bank, for OUT direction endpoints.
diff --git a/LUFA/Drivers/USB/Core/USBController.h b/LUFA/Drivers/USB/Core/USBController.h
index 3190957c1..1c44c1676 100644
--- a/LUFA/Drivers/USB/Core/USBController.h
+++ b/LUFA/Drivers/USB/Core/USBController.h
@@ -68,17 +68,17 @@
 		/** Endpoint direction mask, for masking against endpoint addresses to retrieve the endpoint's
 		 *  direction for comparing with the \c ENDPOINT_DIR_* masks.
 		 */
-		#define ENDPOINT_DIR_MASK                       0x80
+		#define ENDPOINT_DIR_MASK                  0x80
 
 		/** Endpoint address direction mask for an OUT direction (Host to Device) endpoint. This may be ORed with
 		 *  the index of the address within a device to obtain the full endpoint address.
 		 */
-		#define ENDPOINT_DIR_OUT                        0x00
+		#define ENDPOINT_DIR_OUT                   0x00
 
 		/** Endpoint address direction mask for an IN direction (Device to Host) endpoint. This may be ORed with
 		 *  the index of the address within a device to obtain the full endpoint address.
 		 */
-		#define ENDPOINT_DIR_IN                         0x80
+		#define ENDPOINT_DIR_IN                    0x80
 		//@}
 
 		/** \name Endpoint/Pipe Type Masks */
-- 
GitLab