mirror of https://github.com/acidanthera/audk.git
OvmfPkg/PvScsiDxe: Open PciIo protocol for later use
This will give us an exclusive access to the PciIo of this device after it was started and until it will be stopped. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2567 Reviewed-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Liran Alon <liran.alon@oracle.com> Message-Id: <20200328200100.60786-9-liran.alon@oracle.com> Reviewed-by: Nikita Leshenko <nikita.leshchenko@oracle.com>
This commit is contained in:
parent
9c2d8281af
commit
c08eaaaf37
|
@ -412,11 +412,23 @@ PvScsiDriverBindingStart (
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = PvScsiInit (Dev);
|
Status = gBS->OpenProtocol (
|
||||||
|
ControllerHandle,
|
||||||
|
&gEfiPciIoProtocolGuid,
|
||||||
|
(VOID **)&Dev->PciIo,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
ControllerHandle,
|
||||||
|
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto FreePvScsi;
|
goto FreePvScsi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status = PvScsiInit (Dev);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
goto ClosePciIo;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Setup complete, attempt to export the driver instance's PassThru interface
|
// Setup complete, attempt to export the driver instance's PassThru interface
|
||||||
//
|
//
|
||||||
|
@ -436,6 +448,14 @@ PvScsiDriverBindingStart (
|
||||||
UninitDev:
|
UninitDev:
|
||||||
PvScsiUninit (Dev);
|
PvScsiUninit (Dev);
|
||||||
|
|
||||||
|
ClosePciIo:
|
||||||
|
gBS->CloseProtocol (
|
||||||
|
ControllerHandle,
|
||||||
|
&gEfiPciIoProtocolGuid,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
ControllerHandle
|
||||||
|
);
|
||||||
|
|
||||||
FreePvScsi:
|
FreePvScsi:
|
||||||
FreePool (Dev);
|
FreePool (Dev);
|
||||||
|
|
||||||
|
@ -481,6 +501,13 @@ PvScsiDriverBindingStop (
|
||||||
|
|
||||||
PvScsiUninit (Dev);
|
PvScsiUninit (Dev);
|
||||||
|
|
||||||
|
gBS->CloseProtocol (
|
||||||
|
ControllerHandle,
|
||||||
|
&gEfiPciIoProtocolGuid,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
ControllerHandle
|
||||||
|
);
|
||||||
|
|
||||||
FreePool (Dev);
|
FreePool (Dev);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT32 Signature;
|
UINT32 Signature;
|
||||||
|
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||||
UINT8 MaxTarget;
|
UINT8 MaxTarget;
|
||||||
UINT8 MaxLun;
|
UINT8 MaxLun;
|
||||||
EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;
|
EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;
|
||||||
|
|
Loading…
Reference in New Issue