EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;\r
EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode;\r
UINT8 MaxTarget;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
} MPT_SCSI_DEV;\r
\r
#define MPT_SCSI_FROM_PASS_THRU(PassThruPtr) \\r
\r
Dev->MaxTarget = PcdGet8 (PcdMptScsiMaxTargetLimit);\r
\r
+ Status = gBS->OpenProtocol (\r
+ ControllerHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ (VOID **)&Dev->PciIo,\r
+ This->DriverBindingHandle,\r
+ ControllerHandle,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ goto FreePool;\r
+ }\r
+\r
//\r
// Host adapter channel, doesn't exist\r
//\r
&Dev->PassThru\r
);\r
if (EFI_ERROR (Status)) {\r
- goto FreePool;\r
+ goto CloseProtocol;\r
}\r
\r
return EFI_SUCCESS;\r
\r
+CloseProtocol:\r
+ gBS->CloseProtocol (\r
+ ControllerHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ ControllerHandle\r
+ );\r
+\r
FreePool:\r
FreePool (Dev);\r
\r
return Status;\r
}\r
\r
+ gBS->CloseProtocol (\r
+ ControllerHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ ControllerHandle\r
+ );\r
+\r
FreePool (Dev);\r
\r
return Status;\r