]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/IdeMode.c
MdeModulePkg/AtaAtapiPassThru: Revert patch to disable Bus Master
[mirror_edk2.git] / MdeModulePkg / Bus / Ata / AtaAtapiPassThru / IdeMode.c
index b06f9889ed03abe60a7af0f8b43feeab60c3ad7e..6478f7be07ddd1260ce9d321dab19e4d798617dd 100644 (file)
@@ -1936,7 +1936,7 @@ AtaPacketReadWrite (
   IN     EFI_PCI_IO_PROTOCOL       *PciIo,\r
   IN     EFI_IDE_REGISTERS         *IdeRegisters,\r
   IN OUT VOID                      *Buffer,\r
-  IN     UINT64                    ByteCount,\r
+  IN OUT UINT32                    *ByteCount,\r
   IN     BOOLEAN                   Read,\r
   IN     UINT64                    Timeout\r
   )\r
@@ -1947,17 +1947,18 @@ AtaPacketReadWrite (
   EFI_STATUS  Status;\r
   UINT16      *PtrBuffer;\r
 \r
+  PtrBuffer         = Buffer;\r
+  RequiredWordCount = *ByteCount >> 1;\r
+\r
   //\r
   // No data transfer is premitted.\r
   //\r
-  if (ByteCount == 0) {\r
+  if (RequiredWordCount == 0) {\r
     return EFI_SUCCESS;\r
   }\r
 \r
-  PtrBuffer         = Buffer;\r
-  RequiredWordCount = (UINT32)RShiftU64(ByteCount, 1);\r
   //\r
-  // ActuralWordCount means the word count of data really transferred.\r
+  // ActualWordCount means the word count of data really transferred.\r
   //\r
   ActualWordCount = 0;\r
 \r
@@ -1968,7 +1969,15 @@ AtaPacketReadWrite (
     //\r
     Status = DRQReady2 (PciIo, IdeRegisters, Timeout);\r
     if (EFI_ERROR (Status)) {\r
-      return Status;\r
+      if (Status == EFI_NOT_READY) {\r
+        //\r
+        // Device provided less data than we intended to read, or wanted less\r
+        // data than we intended to write, but it may still be successful.\r
+        //\r
+        break;\r
+      } else {\r
+        return Status;\r
+      }\r
     }\r
 \r
     //\r
@@ -2034,6 +2043,7 @@ AtaPacketReadWrite (
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
+  *ByteCount = ActualWordCount << 1;\r
   return Status;\r
 }\r
 \r
@@ -2132,7 +2142,7 @@ AtaPacketCommandExecute (
                PciIo,\r
                IdeRegisters,\r
                Packet->InDataBuffer,\r
-               Packet->InTransferLength,\r
+               &Packet->InTransferLength,\r
                TRUE,\r
                Packet->Timeout\r
                );\r
@@ -2141,7 +2151,7 @@ AtaPacketCommandExecute (
                PciIo,\r
                IdeRegisters,\r
                Packet->OutDataBuffer,\r
-               Packet->OutTransferLength,\r
+               &Packet->OutTransferLength,\r
                FALSE,\r
                Packet->Timeout\r
                );\r