]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c
Improve coding style in MdeModulePkg.
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbMassStorageDxe / UsbMassBoot.c
index 71deef051e39b666538f44f27fd576f4804712ee..1b200bb4ec9f89b20857de2811853ba1de066f98 100644 (file)
@@ -2,7 +2,7 @@
   Implementation of the command set of USB Mass Storage Specification\r
   for Bootability, Revision 1.0.\r
 \r
-Copyright (c) 2007 - 2008, Intel Corporation\r
+Copyright (c) 2007 - 2010, Intel Corporation\r
 All rights reserved. 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
@@ -65,6 +65,9 @@ UsbBootRequestSense (
                         );\r
   if (EFI_ERROR (Status) || CmdResult != USB_MASS_CMD_SUCCESS) {\r
     DEBUG ((EFI_D_ERROR, "UsbBootRequestSense: (%r) CmdResult=0x%x\n", Status, CmdResult));\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = EFI_DEVICE_ERROR;\r
+    }\r
     return Status;\r
   }\r
 \r
@@ -89,10 +92,10 @@ UsbBootRequestSense (
 \r
   case USB_BOOT_SENSE_NOT_READY:\r
     Status = EFI_DEVICE_ERROR;\r
-    if (SenseData.ASC == USB_BOOT_ASC_NO_MEDIA) {\r
+    if (SenseData.Asc == USB_BOOT_ASC_NO_MEDIA) {\r
       Media->MediaPresent = FALSE;\r
       Status = EFI_NO_MEDIA;\r
-    } else if (SenseData.ASC == USB_BOOT_ASC_NOT_READY) {\r
+    } else if (SenseData.Asc == USB_BOOT_ASC_NOT_READY) {\r
       Status = EFI_NOT_READY;\r
     }\r
     break;\r
@@ -103,7 +106,7 @@ UsbBootRequestSense (
 \r
   case USB_BOOT_SENSE_UNIT_ATTENTION:\r
     Status = EFI_DEVICE_ERROR;\r
-    if (SenseData.ASC == USB_BOOT_ASC_MEDIA_CHANGE) {\r
+    if (SenseData.Asc == USB_BOOT_ASC_MEDIA_CHANGE) {\r
       //\r
       // If MediaChange, reset ReadOnly and new MediaId\r
       //\r
@@ -126,8 +129,8 @@ UsbBootRequestSense (
   DEBUG ((EFI_D_INFO, "UsbBootRequestSense: (%r) with sense key %x/%x/%x\n",\r
           Status,\r
           USB_BOOT_SENSE_KEY (SenseData.SenseKey),\r
-          SenseData.ASC,\r
-          SenseData.ASCQ\r
+          SenseData.Asc,\r
+          SenseData.Ascq\r
           ));\r
 \r
   return Status;\r
@@ -232,11 +235,11 @@ UsbBootExecCmdWithRetry (
 {\r
   EFI_STATUS                  Status;\r
   UINTN                       Retry;\r
+  UINT8                       Terminate;\r
 \r
   Status  = EFI_SUCCESS;\r
 \r
-  for (Retry = 0; Retry < USB_BOOT_COMMAND_RETRY; Retry++) {\r
-\r
+  for (Retry = 0, Terminate = 0; Retry < USB_BOOT_COMMAND_RETRY; Retry++) {\r
     Status = UsbBootExecCmd (\r
                UsbMass,\r
                Cmd,\r
@@ -252,8 +255,9 @@ UsbBootExecCmdWithRetry (
     //\r
     // If the device isn't ready, just wait for it without limit on retrial times.\r
     //\r
-    if (Status == EFI_NOT_READY) {\r
+    if (Status == EFI_NOT_READY  && Terminate < 3) {\r
       Retry = 0;\r
+      Terminate++;\r
     }\r
   }\r
 \r
@@ -375,6 +379,7 @@ UsbBootReadCapacity (
   USB_BOOT_READ_CAPACITY_DATA CapacityData;\r
   EFI_BLOCK_IO_MEDIA          *Media;\r
   EFI_STATUS                  Status;\r
+  UINT32                      BlockSize;\r
 \r
   Media   = &UsbMass->BlockIoMedia;\r
 \r
@@ -403,16 +408,21 @@ UsbBootReadCapacity (
   //\r
   Media->MediaPresent = TRUE;\r
   Media->LastBlock    = SwapBytes32 (ReadUnaligned32 ((CONST UINT32 *) CapacityData.LastLba));\r
-  Media->BlockSize    = SwapBytes32 (ReadUnaligned32 ((CONST UINT32 *) CapacityData.BlockLen));\r
 \r
-  if (Media->BlockSize == 0) {\r
-    return EFI_NOT_READY;\r
+  BlockSize           = SwapBytes32 (ReadUnaligned32 ((CONST UINT32 *) CapacityData.BlockLen));\r
+  if (BlockSize == 0) {\r
+    //\r
+    //  Get sense data  \r
+    //\r
+    return UsbBootRequestSense (UsbMass);\r
+  } else {\r
+    Media->BlockSize = BlockSize;\r
   }\r
 \r
   DEBUG ((EFI_D_INFO, "UsbBootReadCapacity Success LBA=%ld BlockSize=%d\n",\r
           Media->LastBlock, Media->BlockSize));\r
 \r
-  return EFI_SUCCESS;\r
+  return Status;\r
 }\r
 \r
 /**\r