]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/SataControllerDxe/SataController.c
OvmfPkg: SataControllerDxe: SataControllerStop: remove useless null check
[mirror_edk2.git] / OvmfPkg / SataControllerDxe / SataController.c
index e5d10e234e88c3135892b9b400c5db409e4f4504..e5ee63a0ab631e192bc60ecb720dd50e806d5bf1 100644 (file)
@@ -390,6 +390,7 @@ SataControllerStart (
 {\r
   EFI_STATUS                        Status;\r
   EFI_PCI_IO_PROTOCOL               *PciIo;\r
+  UINT64                            OriginalPciAttributes;\r
   PCI_TYPE00                        PciData;\r
   EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;\r
   UINT32                            Data32;\r
@@ -411,8 +412,22 @@ SataControllerStart (
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    DEBUG ((EFI_D_ERROR, "SataControllerStart error return status = %r\n", Status));\r
-    return Status;\r
+    goto Bail;\r
+  }\r
+\r
+  //\r
+  // Save original PCI attributes, and enable IO space access, memory space\r
+  // access, and Bus Master (DMA).\r
+  //\r
+  Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationGet, 0,\r
+                    &OriginalPciAttributes);\r
+  if (EFI_ERROR (Status)) {\r
+    goto ClosePciIo;\r
+  }\r
+  Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationEnable,\r
+                    EFI_PCI_DEVICE_ENABLE, NULL);\r
+  if (EFI_ERROR (Status)) {\r
+    goto ClosePciIo;\r
   }\r
 \r
   //\r
@@ -421,7 +436,7 @@ SataControllerStart (
   SataPrivateData = AllocateZeroPool (sizeof (EFI_SATA_CONTROLLER_PRIVATE_DATA));\r
   if (SataPrivateData == NULL) {\r
     Status = EFI_OUT_OF_RESOURCES;\r
-    goto Done;\r
+    goto RestorePciAttributes;\r
   }\r
 \r
   //\r
@@ -429,6 +444,7 @@ SataControllerStart (
   //\r
   SataPrivateData->Signature = SATA_CONTROLLER_SIGNATURE;\r
   SataPrivateData->PciIo = PciIo;\r
+  SataPrivateData->OriginalPciAttributes = OriginalPciAttributes;\r
   SataPrivateData->IdeInit.GetChannelInfo = IdeInitGetChannelInfo;\r
   SataPrivateData->IdeInit.NotifyPhase = IdeInitNotifyPhase;\r
   SataPrivateData->IdeInit.SubmitData = IdeInitSubmitData;\r
@@ -444,7 +460,9 @@ SataControllerStart (
                         sizeof (PciData.Hdr.ClassCode),\r
                         PciData.Hdr.ClassCode\r
                         );\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (EFI_ERROR (Status)) {\r
+    goto FreeSataPrivateData;\r
+  }\r
 \r
   if (IS_PCI_IDE (&PciData)) {\r
     SataPrivateData->IdeInit.ChannelCount = IDE_MAX_CHANNEL;\r
@@ -467,19 +485,19 @@ SataControllerStart (
   SataPrivateData->DisqualifiedModes = AllocateZeroPool ((sizeof (EFI_ATA_COLLECTIVE_MODE)) * ChannelDeviceCount);\r
   if (SataPrivateData->DisqualifiedModes == NULL) {\r
     Status = EFI_OUT_OF_RESOURCES;\r
-    goto Done;\r
+    goto FreeSataPrivateData;\r
   }\r
 \r
   SataPrivateData->IdentifyData = AllocateZeroPool ((sizeof (EFI_IDENTIFY_DATA)) * ChannelDeviceCount);\r
   if (SataPrivateData->IdentifyData == NULL) {\r
     Status = EFI_OUT_OF_RESOURCES;\r
-    goto Done;\r
+    goto FreeDisqualifiedModes;\r
   }\r
 \r
   SataPrivateData->IdentifyValid = AllocateZeroPool ((sizeof (BOOLEAN)) * ChannelDeviceCount);\r
   if (SataPrivateData->IdentifyValid == NULL) {\r
     Status = EFI_OUT_OF_RESOURCES;\r
-    goto Done;\r
+    goto FreeIdentifyData;\r
   }\r
 \r
   //\r
@@ -492,31 +510,39 @@ SataControllerStart (
                   NULL\r
                   );\r
 \r
-Done:\r
   if (EFI_ERROR (Status)) {\r
-\r
-    gBS->CloseProtocol (\r
-          Controller,\r
-          &gEfiPciIoProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          Controller\r
-          );\r
-    if (SataPrivateData != NULL) {\r
-      if (SataPrivateData->DisqualifiedModes != NULL) {\r
-        FreePool (SataPrivateData->DisqualifiedModes);\r
-      }\r
-      if (SataPrivateData->IdentifyData != NULL) {\r
-        FreePool (SataPrivateData->IdentifyData);\r
-      }\r
-      if (SataPrivateData->IdentifyValid != NULL) {\r
-        FreePool (SataPrivateData->IdentifyValid);\r
-      }\r
-      FreePool (SataPrivateData);\r
-    }\r
+    goto FreeIdentifyValid;\r
   }\r
 \r
   DEBUG ((EFI_D_INFO, "SataControllerStart END status = %r\n", Status));\r
+  return Status;\r
+\r
+FreeIdentifyValid:\r
+  FreePool (SataPrivateData->IdentifyValid);\r
+\r
+FreeIdentifyData:\r
+  FreePool (SataPrivateData->IdentifyData);\r
+\r
+FreeDisqualifiedModes:\r
+  FreePool (SataPrivateData->DisqualifiedModes);\r
 \r
+FreeSataPrivateData:\r
+  FreePool (SataPrivateData);\r
+\r
+RestorePciAttributes:\r
+  PciIo->Attributes (PciIo, EfiPciIoAttributeOperationSet,\r
+           OriginalPciAttributes, NULL);\r
+\r
+ClosePciIo:\r
+  gBS->CloseProtocol (\r
+         Controller,\r
+         &gEfiPciIoProtocolGuid,\r
+         This->DriverBindingHandle,\r
+         Controller\r
+         );\r
+\r
+Bail:\r
+  DEBUG ((EFI_D_ERROR, "SataControllerStart error return status = %r\n", Status));\r
   return Status;\r
 }\r
 \r
@@ -576,18 +602,26 @@ SataControllerStop (
     return Status;\r
   }\r
 \r
-  if (SataPrivateData != NULL) {\r
-    if (SataPrivateData->DisqualifiedModes != NULL) {\r
-      FreePool (SataPrivateData->DisqualifiedModes);\r
-    }\r
-    if (SataPrivateData->IdentifyData != NULL) {\r
-      FreePool (SataPrivateData->IdentifyData);\r
-    }\r
-    if (SataPrivateData->IdentifyValid != NULL) {\r
-      FreePool (SataPrivateData->IdentifyValid);\r
-    }\r
-    FreePool (SataPrivateData);\r
+  if (SataPrivateData->DisqualifiedModes != NULL) {\r
+    FreePool (SataPrivateData->DisqualifiedModes);\r
+  }\r
+  if (SataPrivateData->IdentifyData != NULL) {\r
+    FreePool (SataPrivateData->IdentifyData);\r
+  }\r
+  if (SataPrivateData->IdentifyValid != NULL) {\r
+    FreePool (SataPrivateData->IdentifyValid);\r
   }\r
+  FreePool (SataPrivateData);\r
+\r
+  //\r
+  // Restore original PCI attributes\r
+  //\r
+  SataPrivateData->PciIo->Attributes (\r
+                            SataPrivateData->PciIo,\r
+                            EfiPciIoAttributeOperationSet,\r
+                            SataPrivateData->OriginalPciAttributes,\r
+                            NULL\r
+                            );\r
 \r
   //\r
   // Close protocols opened by Sata Controller driver\r