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
SataPrivateData = AllocateZeroPool (sizeof (EFI_SATA_CONTROLLER_PRIVATE_DATA));\r
if (SataPrivateData == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
- goto Done;\r
+ goto ClosePciIo;\r
}\r
\r
//\r
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
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
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
+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