Implementation of the USB mass storage Bulk-Only Transport protocol,\r
according to USB Mass Storage Class Bulk-Only Transport, Revision 1.0.\r
\r
-Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
);\r
if (EFI_ERROR (Status)) {\r
if (USB_IS_ERROR (Result, EFI_USB_ERR_STALL)) {\r
- DEBUG ((EFI_D_INFO, "UsbBotDataTransfer: (%r)\n", Status)); \r
+ DEBUG ((EFI_D_INFO, "UsbBotDataTransfer: (%r)\n", Status));\r
DEBUG ((EFI_D_INFO, "UsbBotDataTransfer: DataIn Stall\n"));\r
UsbClearEndpointStall (UsbBot->UsbIo, Endpoint->EndpointAddress);\r
} else if (USB_IS_ERROR (Result, EFI_USB_ERR_NAK)) {\r
@param CmdStatus The result of high level command execution\r
\r
@retval EFI_SUCCESS The command is executed successfully.\r
- @retval Other Failed to excute command\r
+ @retval Other Failed to execute command\r
\r
**/\r
EFI_STATUS\r
UINT32 Result;\r
UINT32 Timeout;\r
\r
- ASSERT (Context);\r
- \r
+ if (Context == NULL || MaxLun == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
UsbBot = (USB_BOT_PROTOCOL *) Context;\r
\r
//\r
1,\r
&Result\r
);\r
+ if (EFI_ERROR (Status) || *MaxLun > USB_BOT_MAX_LUN) {\r
+ //\r
+ // If the Get LUN request returns an error or the MaxLun is larger than\r
+ // the maximum LUN value (0x0f) supported by the USB Mass Storage Class\r
+ // Bulk-Only Transport Spec, then set MaxLun to 0.\r
+ //\r
+ // This improves compatibility with USB FLASH drives that have a single LUN\r
+ // and either do not return a max LUN value or return an invalid maximum LUN\r
+ // value.\r
+ //\r
+ *MaxLun = 0;\r
+ }\r
\r
- return Status;\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r