Fix a issue "BlockIOProtocolTest failed on Several Platforms during EFI and UEFI...
authoreric_tian <eric_tian@de2fecce-e211-0410-80a6-f3fac2684e05>
Mon, 1 Sep 2008 09:46:38 +0000 (09:46 +0000)
committereric_tian <eric_tian@de2fecce-e211-0410-80a6-f3fac2684e05>
Mon, 1 Sep 2008 09:46:38 +0000 (09:46 +0000)
git-svn-id: https://edk2.tianocore.org/svn/edk2/trunk@5763 de2fecce-e211-0410-80a6-f3fac2684e05

edk2/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/Atapi.c
edk2/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/Ide.h

index 5603896..c157c39 100644 (file)
@@ -805,7 +805,7 @@ PioReadWriteData (
 \r
   @param[in] *IdeDev     Pointer pointing to IDE_BLK_IO_DEV data structure, used\r
                          to record all the information of the IDE device.\r
-  @param[in] *SenseCount Sense count for this packet command\r
+  @param[in] *SResult    Sense result for this packet command.\r
 \r
   @retval EFI_SUCCESS      Device is accessible.\r
   @retval EFI_DEVICE_ERROR Device is not accessible.\r
@@ -814,13 +814,12 @@ PioReadWriteData (
 EFI_STATUS\r
 AtapiTestUnitReady (\r
   IN  IDE_BLK_IO_DEV  *IdeDev,\r
-  OUT UINTN           *SenseCount\r
+  OUT SENSE_RESULT    *SResult  \r
   )\r
 {\r
   ATAPI_PACKET_COMMAND  Packet;\r
   EFI_STATUS            Status;\r
-\r
-  *SenseCount = 0;\r
+  UINTN                                SenseCount;\r
 \r
   //\r
   // fill command packet\r
@@ -836,12 +835,12 @@ AtapiTestUnitReady (
     return Status;\r
   }\r
 \r
-  Status = AtapiRequestSense (IdeDev, SenseCount);\r
+  Status = AtapiRequestSense (IdeDev, &SenseCount);\r
   if (EFI_ERROR (Status)) {\r
-    *SenseCount = 0;\r
     return Status;\r
   }\r
 \r
+  ParseSenseData (IdeDev, SenseCount, SResult);\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -964,7 +963,7 @@ AtapiRequestSense (
 \r
   @param[in] *IdeDev    Pointer pointing to IDE_BLK_IO_DEV data structure, used\r
                         to record all the information of the IDE device.\r
-  @param[in] SenseCount Sense count for this packet command\r
+  @param[in] SResult    Sense result for this packet command\r
 \r
   @retval EFI_SUCCESS      Read Capacity Command finally completes successfully.\r
   @retval EFI_DEVICE_ERROR Read Capacity Command failed because of device error.\r
@@ -976,7 +975,7 @@ AtapiRequestSense (
 EFI_STATUS\r
 AtapiReadCapacity (\r
   IN  IDE_BLK_IO_DEV  *IdeDev,\r
-  OUT UINTN               *SenseCount\r
+  OUT SENSE_RESULT       *SResult  \r
   )\r
 {\r
   //\r
@@ -985,6 +984,7 @@ AtapiReadCapacity (
   EFI_STATUS                Status;\r
   EFI_STATUS                SenseStatus;\r
   ATAPI_PACKET_COMMAND      Packet;\r
+  UINTN                                        SenseCount;\r
 \r
   //\r
   // used for capacity data returned from ATAPI device\r
@@ -992,8 +992,6 @@ AtapiReadCapacity (
   ATAPI_READ_CAPACITY_DATA        Data;\r
   ATAPI_READ_FORMAT_CAPACITY_DATA FormatData;\r
 \r
-  *SenseCount = 0;\r
-\r
   ZeroMem (&Data, sizeof (Data));\r
   ZeroMem (&FormatData, sizeof (FormatData));\r
 \r
@@ -1026,16 +1024,15 @@ AtapiReadCapacity (
   }\r
 \r
   if (Status == EFI_TIMEOUT) {\r
-    *SenseCount = 0;\r
     return Status;\r
   }\r
 \r
-  SenseStatus = AtapiRequestSense (IdeDev, SenseCount);\r
+  SenseStatus = AtapiRequestSense (IdeDev, &SenseCount);\r
 \r
   if (!EFI_ERROR (SenseStatus)) {\r
-\r
-    if (!EFI_ERROR (Status)) {\r
-\r
+       ParseSenseData (IdeDev, SenseCount, SResult);                    \r
+                                                                                                                        \r
+       if (!EFI_ERROR (Status) && *SResult == SenseNoSenseKey) {\r
       if (IdeDev->Type == IdeCdRom) {\r
 \r
         IdeDev->BlkIo.Media->LastBlock = (Data.LastLba3 << 24) |\r
@@ -1043,18 +1040,7 @@ AtapiReadCapacity (
           (Data.LastLba1 << 8) |\r
           Data.LastLba0;\r
 \r
-        if (IdeDev->BlkIo.Media->LastBlock != 0) {\r
-\r
-          IdeDev->BlkIo.Media->BlockSize = (Data.BlockSize3 << 24) |\r
-            (Data.BlockSize2 << 16) |\r
-            (Data.BlockSize1 << 8) |\r
-            Data.BlockSize0;\r
-\r
-          IdeDev->BlkIo.Media->MediaPresent = TRUE;\r
-        } else {\r
-          IdeDev->BlkIo.Media->MediaPresent = FALSE;\r
-          return EFI_DEVICE_ERROR;\r
-        }\r
+               IdeDev->BlkIo.Media->MediaPresent = TRUE;\r
 \r
         IdeDev->BlkIo.Media->ReadOnly = TRUE;\r
 \r
@@ -1101,7 +1087,6 @@ AtapiReadCapacity (
     return EFI_SUCCESS;\r
 \r
   } else {\r
-    *SenseCount = 0;\r
     return EFI_DEVICE_ERROR;\r
   }\r
 }\r
@@ -1145,7 +1130,6 @@ AtapiDetectMedia (
   EFI_BLOCK_IO_MEDIA            OldMediaInfo;\r
   UINTN                         RetryTimes;\r
   UINTN                         RetryNotReady;\r
-  UINTN                         SenseCount;\r
   SENSE_RESULT                  SResult;\r
   BOOLEAN                       WriteProtected;\r
 \r
@@ -1168,7 +1152,7 @@ AtapiDetectMedia (
   RetryTimes = 5;\r
   while (RetryTimes != 0) {\r
 \r
-    Status = AtapiTestUnitReady (IdeDev, &SenseCount);\r
+    Status = AtapiTestUnitReady (IdeDev, &SResult);\r
 \r
     if (EFI_ERROR (Status)) {\r
       //\r
@@ -1189,9 +1173,6 @@ AtapiDetectMedia (
       //\r
       continue;\r
     } else {\r
-\r
-      ParseSenseData (IdeDev, SenseCount, &SResult);\r
-\r
       switch (SResult) {\r
       case SenseNoSenseKey:\r
         if (IdeDev->BlkIo.Media->MediaPresent) {\r
@@ -1245,15 +1226,12 @@ AtapiDetectMedia (
 \r
     while (RetryTimes != 0) {\r
 \r
-      Status = AtapiReadCapacity (IdeDev, &SenseCount);\r
+      Status = AtapiReadCapacity (IdeDev, &SResult);\r
 \r
       if (EFI_ERROR (Status)) {\r
         RetryTimes--;\r
         continue;\r
       } else {\r
-\r
-        ParseSenseData (IdeDev, SenseCount, &SResult);\r
-\r
         switch (SResult) {\r
         case SenseNoSenseKey:\r
           goto Done;\r
index ec1f9e0..856e4a1 100644 (file)
@@ -683,7 +683,7 @@ PioReadWriteData (
 EFI_STATUS\r
 AtapiTestUnitReady (\r
   IN  IDE_BLK_IO_DEV  *IdeDev,\r
-  OUT UINTN           *SenseCount\r
+  OUT SENSE_RESULT       *SResult  \r
   )\r
 ;\r
 \r
@@ -715,7 +715,7 @@ AtapiRequestSense (
 EFI_STATUS\r
 AtapiReadCapacity (\r
   IN  IDE_BLK_IO_DEV  *IdeDev,\r
-  OUT UINTN           *SenseCount\r
+  OUT SENSE_RESULT       *SResult  \r
   )\r
 ;\r
 \r