-\r
- Status = gBS->UninstallMultipleProtocolInterfaces (\r
- ChildHandleBuffer[Index],\r
- &gEfiDevicePathProtocolGuid,\r
- UNDI32Device->Undi32DevPath,\r
- &gEfiNetworkInterfaceIdentifierProtocolGuid_31,\r
- &UNDI32Device->NIIProtocol_31,\r
- NULL\r
- );\r
-\r
- if (EFI_ERROR (Status)) {\r
- gBS->OpenProtocol (\r
- Controller,\r
- &gEfiPciIoProtocolGuid,\r
- (VOID **) &PciIo,\r
- This->DriverBindingHandle,\r
- ChildHandleBuffer[Index],\r
- EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
- );\r
- } else {\r
- gBS->FreePool (UNDI32Device->Undi32DevPath);\r
- gBS->FreePool (UNDI32Device);\r
+ if (!EFI_ERROR (Status)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ ChildHandleBuffer[Index],\r
+ &gEfiDevicePathProtocolGuid,\r
+ UNDI32Device->Undi32DevPath,\r
+ &gEfiNetworkInterfaceIdentifierProtocolGuid_31,\r
+ &UNDI32Device->NIIProtocol_31,\r
+ NULL\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // Restore original PCI attributes\r
+ //\r
+ Status = UNDI32Device->NicInfo.Io_Function->Attributes (\r
+ UNDI32Device->NicInfo.Io_Function,\r
+ EfiPciIoAttributeOperationSet,\r
+ UNDI32Device->NicInfo.OriginalPciAttributes,\r
+ NULL\r
+ );\r
+\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ gBS->FreePool (UNDI32Device->Undi32DevPath);\r
+ gBS->FreePool (UNDI32Device);\r
+\r
+ }\r