]> 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 44f0b03833258e96181b4f270065590cffb401e8..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
@@ -788,7 +798,6 @@ UsbBootWriteBlocks (
   return Status;\r
 }\r
 \r
-\r
 /**\r
   Use the USB clear feature control transfer to clear the endpoint stall condition.\r
 \r