\r
Instance = ATA_PASS_THRU_PRIVATE_DATA_FROM_THIS (AtaPassThru);\r
\r
- //\r
- // Close Non-Blocking timer and free Task list.\r
- //\r
- if (Instance->TimerEvent != NULL) {\r
- gBS->CloseEvent (Instance->TimerEvent);\r
- Instance->TimerEvent = NULL;\r
- }\r
- DestroyAsynTaskList (Instance, FALSE);\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ Controller,\r
+ &gEfiAtaPassThruProtocolGuid, &(Instance->AtaPassThru),\r
+ &gEfiExtScsiPassThruProtocolGuid, &(Instance->ExtScsiPassThru),\r
+ NULL\r
+ );\r
\r
- //\r
- // Disable this ATA host controller.\r
- //\r
- PciIo = Instance->PciIo;\r
- Status = PciIo->Attributes (\r
- PciIo,\r
- EfiPciIoAttributeOperationSupported,\r
- 0,\r
- &Supports\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- Supports &= EFI_PCI_DEVICE_ENABLE;\r
- PciIo->Attributes (\r
- PciIo,\r
- EfiPciIoAttributeOperationDisable,\r
- Supports,\r
- NULL\r
- );\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_DEVICE_ERROR;\r
}\r
\r
- //\r
- // Restore original PCI attributes\r
- //\r
- Status = PciIo->Attributes (\r
- PciIo,\r
- EfiPciIoAttributeOperationSet,\r
- Instance->OriginalPciAttributes,\r
- NULL\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- gBS->UninstallMultipleProtocolInterfaces (\r
- Controller,\r
- &gEfiAtaPassThruProtocolGuid, &(Instance->AtaPassThru),\r
- &gEfiExtScsiPassThruProtocolGuid, &(Instance->ExtScsiPassThru),\r
- NULL\r
- );\r
-\r
//\r
// Close protocols opened by AtaAtapiPassThru controller driver\r
//\r
Controller\r
);\r
\r
+ //\r
+ // Close Non-Blocking timer and free Task list.\r
+ //\r
+ if (Instance->TimerEvent != NULL) {\r
+ gBS->CloseEvent (Instance->TimerEvent);\r
+ Instance->TimerEvent = NULL;\r
+ }\r
+ DestroyAsynTaskList (Instance, FALSE);\r
//\r
// Free allocated resource\r
//\r
- DestroyDeviceInfoList(Instance);\r
+ DestroyDeviceInfoList (Instance);\r
\r
//\r
// If the current working mode is AHCI mode, then pre-allocated resource\r
// for AHCI initialization should be released.\r
//\r
+ PciIo = Instance->PciIo;\r
+\r
if (Instance->Mode == EfiAtaAhciMode) {\r
AhciRegisters = &Instance->AhciRegisters;\r
PciIo->Unmap (\r
AhciRegisters->AhciRFis\r
);\r
}\r
+\r
+ //\r
+ // Disable this ATA host controller.\r
+ //\r
+ Status = PciIo->Attributes (\r
+ PciIo,\r
+ EfiPciIoAttributeOperationSupported,\r
+ 0,\r
+ &Supports\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ Supports &= EFI_PCI_DEVICE_ENABLE;\r
+ PciIo->Attributes (\r
+ PciIo,\r
+ EfiPciIoAttributeOperationDisable,\r
+ Supports,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ //\r
+ // Restore original PCI attributes\r
+ //\r
+ Status = PciIo->Attributes (\r
+ PciIo,\r
+ EfiPciIoAttributeOperationSet,\r
+ Instance->OriginalPciAttributes,\r
+ NULL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
FreePool (Instance);\r
\r
return Status;\r