summaryrefslogtreecommitdiff
path: root/OvmfPkg/XenBusDxe
diff options
context:
space:
mode:
Diffstat (limited to 'OvmfPkg/XenBusDxe')
-rw-r--r--OvmfPkg/XenBusDxe/XenBusDxe.c19
-rw-r--r--OvmfPkg/XenBusDxe/XenBusDxe.h1
2 files changed, 20 insertions, 0 deletions
diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.c b/OvmfPkg/XenBusDxe/XenBusDxe.c
index 4c638b85f1..776d896368 100644
--- a/OvmfPkg/XenBusDxe/XenBusDxe.c
+++ b/OvmfPkg/XenBusDxe/XenBusDxe.c
@@ -281,11 +281,25 @@ XenBusDxeDriverBindingStart (
{
EFI_STATUS Status;
XENBUS_DEVICE *Dev;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+
+ Status = gBS->OpenProtocol (
+ ControllerHandle,
+ &gEfiPciIoProtocolGuid,
+ (VOID **) &PciIo,
+ This->DriverBindingHandle,
+ ControllerHandle,
+ EFI_OPEN_PROTOCOL_BY_DRIVER
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
Dev = AllocateZeroPool (sizeof (*Dev));
Dev->Signature = XENBUS_DEVICE_SIGNATURE;
Dev->This = This;
Dev->ControllerHandle = ControllerHandle;
+ Dev->PciIo = PciIo;
EfiAcquireLock (&mMyDeviceLock);
if (mMyDevice != NULL) {
@@ -323,6 +337,8 @@ XenBusDxeDriverBindingStart (
ErrorAllocated:
FreePool (Dev);
+ gBS->CloseProtocol (ControllerHandle, &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle, ControllerHandle);
return Status;
}
@@ -365,6 +381,9 @@ XenBusDxeDriverBindingStop (
gBS->CloseEvent (Dev->ExitBootEvent);
+ gBS->CloseProtocol (ControllerHandle, &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle, ControllerHandle);
+
mMyDevice = NULL;
FreePool (Dev);
return EFI_SUCCESS;
diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.h b/OvmfPkg/XenBusDxe/XenBusDxe.h
index ccec0ce0e5..388d299695 100644
--- a/OvmfPkg/XenBusDxe/XenBusDxe.h
+++ b/OvmfPkg/XenBusDxe/XenBusDxe.h
@@ -84,6 +84,7 @@ struct _XENBUS_DEVICE {
UINT32 Signature;
EFI_DRIVER_BINDING_PROTOCOL *This;
EFI_HANDLE ControllerHandle;
+ EFI_PCI_IO_PROTOCOL *PciIo;
EFI_EVENT ExitBootEvent;
VOID *Hyperpage;