]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Bus/Pci/IdeBus/Dxe/ata.c
Make sure all DMA related buffer allocation through PCI IO interface, not allocated...
[mirror_edk2.git] / EdkModulePkg / Bus / Pci / IdeBus / Dxe / ata.c
index a08c79cadee5d082a4346d253542760942e20175..3273380da0a041d9fab08faae5c0d92359dcb279 100644 (file)
@@ -2162,7 +2162,7 @@ AtaUdmaReadExt (
   UINT32                     Count;\r
   UINTN                      PageCount;\r
   VOID                       *Map;\r
-  EFI_PHYSICAL_ADDRESS       MemPage;\r
+  VOID                       *MemPage;\r
   EFI_PHYSICAL_ADDRESS       DeviceAddress;\r
 \r
   //\r
@@ -2217,14 +2217,15 @@ AtaUdmaReadExt (
     //\r
     // Build PRD table\r
     //\r
-    MemPage = 0xFFFFFFFF;\r
     PageCount = EFI_SIZE_TO_PAGES (2 * PrdTableNum * sizeof (IDE_DMA_PRD));\r
-    Status = gBS->AllocatePages (\r
-                    AllocateMaxAddress,\r
-                    EfiBootServicesData,\r
-                    PageCount,\r
-                    &MemPage\r
-                    );\r
+    Status = IdeDev->PciIo->AllocateBuffer (\r
+                       IdeDev->PciIo,\r
+                       AllocateAnyPages,\r
+                       EfiBootServicesData,\r
+                       PageCount,\r
+                       &MemPage,\r
+                       0\r
+                       );\r
     if (EFI_ERROR (Status)) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
@@ -2257,7 +2258,7 @@ AtaUdmaReadExt (
                        &Map\r
                        );\r
     if (EFI_ERROR (Status)) {\r
-      gBS->FreePages (MemPage, PageCount);\r
+      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
     PrdBuffer   = (VOID *) ((UINTN) DeviceAddress);\r
@@ -2351,7 +2352,7 @@ AtaUdmaReadExt (
                StartLba\r
                );\r
     if (EFI_ERROR (Status)) {\r
-      gBS->FreePages (MemPage, PageCount);\r
+      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
       IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
       return EFI_DEVICE_ERROR;\r
     }\r
@@ -2420,7 +2421,7 @@ AtaUdmaReadExt (
                               1,\r
                               &RegisterValue\r
                               );\r
-          gBS->FreePages (MemPage, PageCount);\r
+          IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
           IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
           return EFI_DEVICE_ERROR;\r
         }\r
@@ -2431,7 +2432,7 @@ AtaUdmaReadExt (
       Count --;\r
     }\r
 \r
-    gBS->FreePages (MemPage, PageCount);\r
+    IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
     IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
     //\r
     // Read Status Register of IDE device to clear interrupt\r
@@ -2526,7 +2527,7 @@ AtaUdmaRead (
   UINT32                     Count;\r
   UINTN                      PageCount;\r
   VOID                       *Map;\r
-  EFI_PHYSICAL_ADDRESS       MemPage;\r
+  VOID                       *MemPage;\r
   EFI_PHYSICAL_ADDRESS       DeviceAddress;\r
 \r
   //\r
@@ -2581,14 +2582,15 @@ AtaUdmaRead (
     //\r
     // Build PRD table\r
     //\r
-    MemPage = 0xFFFFFFFF;\r
     PageCount = EFI_SIZE_TO_PAGES (2 * PrdTableNum * sizeof (IDE_DMA_PRD));\r
-    Status = gBS->AllocatePages (\r
-                    AllocateMaxAddress,\r
-                    EfiBootServicesData,\r
-                    PageCount,\r
-                    &MemPage\r
-                    );\r
+    Status = IdeDev->PciIo->AllocateBuffer (\r
+                       IdeDev->PciIo,\r
+                       AllocateAnyPages,\r
+                       EfiBootServicesData,\r
+                       PageCount,\r
+                       &MemPage,\r
+                       0\r
+                       );\r
     if (EFI_ERROR (Status)) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
@@ -2620,7 +2622,7 @@ AtaUdmaRead (
                        &Map\r
                        );\r
     if (EFI_ERROR (Status)) {\r
-      gBS->FreePages (MemPage, PageCount);\r
+      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
     PrdBuffer   = (UINT8 *) ((UINTN) DeviceAddress);\r
@@ -2714,7 +2716,7 @@ AtaUdmaRead (
                StartLba\r
                );\r
     if (EFI_ERROR (Status)) {\r
-      gBS->FreePages (MemPage, PageCount);\r
+      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
       IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
       return EFI_DEVICE_ERROR;\r
     }\r
@@ -2783,7 +2785,7 @@ AtaUdmaRead (
                               1,\r
                               &RegisterValue\r
                               );\r
-          gBS->FreePages (MemPage, PageCount);\r
+          IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
           IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
           return EFI_DEVICE_ERROR;\r
         }\r
@@ -2794,7 +2796,7 @@ AtaUdmaRead (
       Count --;\r
     }\r
 \r
-    gBS->FreePages (MemPage, PageCount);\r
+    IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
     IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
     //\r
     // Read Status Register of IDE device to clear interrupt\r
@@ -2889,7 +2891,7 @@ AtaUdmaWriteExt (
   UINT32                     Count;\r
   UINTN                      PageCount;\r
   VOID                       *Map;\r
-  EFI_PHYSICAL_ADDRESS       MemPage;\r
+  VOID                       *MemPage;\r
   EFI_PHYSICAL_ADDRESS       DeviceAddress;\r
 \r
   //\r
@@ -2944,14 +2946,15 @@ AtaUdmaWriteExt (
     //\r
     // Build PRD table\r
     //\r
-    MemPage = 0xFFFFFFFF;\r
     PageCount = EFI_SIZE_TO_PAGES (2 * PrdTableNum * sizeof (IDE_DMA_PRD));\r
-    Status = gBS->AllocatePages (\r
-                    AllocateMaxAddress,\r
-                    EfiBootServicesData,\r
-                    PageCount,\r
-                    &MemPage\r
-                    );\r
+    Status = IdeDev->PciIo->AllocateBuffer (\r
+                       IdeDev->PciIo,\r
+                       AllocateAnyPages,\r
+                       EfiBootServicesData,\r
+                       PageCount,\r
+                       &MemPage,\r
+                       0\r
+                       );\r
     if (EFI_ERROR (Status)) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
@@ -2983,7 +2986,7 @@ AtaUdmaWriteExt (
                        &Map\r
                        );\r
     if (EFI_ERROR (Status)) {\r
-      gBS->FreePages (MemPage, PageCount);\r
+      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
     PrdBuffer   = (UINT8 *) ((UINTN) DeviceAddress);\r
@@ -3079,7 +3082,7 @@ AtaUdmaWriteExt (
                StartLba\r
                );\r
     if (EFI_ERROR (Status)) {\r
-      gBS->FreePages (MemPage, PageCount);\r
+      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
       IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
       return EFI_DEVICE_ERROR;\r
     }\r
@@ -3148,7 +3151,7 @@ AtaUdmaWriteExt (
                               1,\r
                               &RegisterValue\r
                               );\r
-          gBS->FreePages (MemPage, PageCount);\r
+          IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
           IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
           return EFI_DEVICE_ERROR;\r
         }\r
@@ -3159,7 +3162,7 @@ AtaUdmaWriteExt (
       Count --;\r
     }\r
 \r
-    gBS->FreePages (MemPage, PageCount);\r
+    IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
     IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
     //\r
     // Read Status Register of IDE device to clear interrupt\r
@@ -3254,7 +3257,7 @@ AtaUdmaWrite (
   UINT32                     Count;\r
   UINTN                      PageCount;\r
   VOID                       *Map;\r
-  EFI_PHYSICAL_ADDRESS       MemPage;\r
+  VOID                       *MemPage;\r
   EFI_PHYSICAL_ADDRESS       DeviceAddress;\r
 \r
   //\r
@@ -3309,14 +3312,15 @@ AtaUdmaWrite (
     //\r
     // Build PRD table\r
     //\r
-    MemPage = 0xFFFFFFFF;\r
     PageCount = EFI_SIZE_TO_PAGES (2 * PrdTableNum * sizeof (IDE_DMA_PRD));\r
-    Status = gBS->AllocatePages (\r
-                    AllocateMaxAddress,\r
-                    EfiBootServicesData,\r
-                    PageCount,\r
-                    &MemPage\r
-                    );\r
+    Status = IdeDev->PciIo->AllocateBuffer (\r
+                       IdeDev->PciIo,\r
+                       AllocateAnyPages,\r
+                       EfiBootServicesData,\r
+                       PageCount,\r
+                       &MemPage,\r
+                       0\r
+                       );\r
     if (EFI_ERROR (Status)) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
@@ -3349,7 +3353,7 @@ AtaUdmaWrite (
                        &Map\r
                        );\r
     if (EFI_ERROR (Status)) {\r
-      gBS->FreePages (MemPage, PageCount);\r
+      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
     PrdBuffer   = (UINT8 *) ((UINTN) DeviceAddress);\r
@@ -3445,7 +3449,7 @@ AtaUdmaWrite (
                StartLba\r
                );\r
     if (EFI_ERROR (Status)) {\r
-      gBS->FreePages (MemPage, PageCount);\r
+      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
       IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
       return EFI_DEVICE_ERROR;\r
     }\r
@@ -3514,7 +3518,7 @@ AtaUdmaWrite (
                               1,\r
                               &RegisterValue\r
                               );\r
-          gBS->FreePages (MemPage, PageCount);\r
+          IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
           IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
           return EFI_DEVICE_ERROR;\r
         }\r
@@ -3525,7 +3529,7 @@ AtaUdmaWrite (
       Count --;\r
     }\r
 \r
-    gBS->FreePages (MemPage, PageCount);\r
+    IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);\r
     IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);\r
 \r
     //\r