]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBot.c
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbMassStorageDxe / UsbMassBot.c
index dd83540285770be023d22c4f7c263c39a13fac8b..98d2ba99688b5c4a610b1db5237ef56b73987245 100644 (file)
@@ -2,14 +2,8 @@
   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
@@ -272,7 +266,7 @@ UsbBotDataTransfer (
                             );\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
@@ -392,7 +386,7 @@ UsbBotGetStatus (
   @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
@@ -552,8 +546,10 @@ UsbBotGetMaxLun (
   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
@@ -576,8 +572,20 @@ UsbBotGetMaxLun (
                             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