|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 03/18] OvmfPkg/XenbusDxe: Add device state struct and create an ExitBoot services event.
On Wed, Jul 16, 2014 at 04:15:32PM +0100, Anthony PERARD wrote:
> The ExitBoot event is used to disconnect from the device before the
> next operating system start using them.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> ---
> OvmfPkg/XenbusDxe/XenbusDxe.c | 39 ++++++++++++++++++++++++++++++++++++---
> OvmfPkg/XenbusDxe/XenbusDxe.h | 10 ++++++++++
> 2 files changed, 46 insertions(+), 3 deletions(-)
>
> diff --git a/OvmfPkg/XenbusDxe/XenbusDxe.c b/OvmfPkg/XenbusDxe/XenbusDxe.c
> index 14113ad..2c3d9b8 100644
> --- a/OvmfPkg/XenbusDxe/XenbusDxe.c
> +++ b/OvmfPkg/XenbusDxe/XenbusDxe.c
> @@ -16,7 +16,6 @@
>
> #include "XenbusDxe.h"
>
> -
> ///
> /// Driver Binding Protocol instance
> ///
> @@ -30,6 +29,8 @@ EFI_DRIVER_BINDING_PROTOCOL gXenbusDxeDriverBinding = {
> };
>
>
> +XENBUS_DEVICE *mMyDevice;
> +
> /**
> Unloads an image.
>
> @@ -229,6 +230,19 @@ XenbusDxeDriverBindingSupported (
> return Status;
> }
>
> +VOID
> +EFIAPI
> +NotifyExitBoot (
> + IN EFI_EVENT Event,
> + IN VOID *Context
> + )
> +{
> + XENBUS_DEVICE *Dev = Context;
> +
> + gBS->DisconnectController(Dev->ControllerHandle,
> + Dev->This->DriverBindingHandle, NULL);
> +}
> +
> /**
> Starts a device controller or a bus controller.
>
> @@ -272,7 +286,22 @@ XenbusDxeDriverBindingStart (
> IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
> )
> {
> - return EFI_UNSUPPORTED;
> + EFI_STATUS Status;
> + XENBUS_DEVICE *Dev;
> +
> + Dev = AllocateZeroPool (sizeof (*Dev));
> + Dev->Signature = XENBUS_DEVICE_SIGNATURE;
> + Dev->This = This;
> + Dev->ControllerHandle = ControllerHandle;
> +
> + Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK,
> + NotifyExitBoot,
> + (VOID*) Dev,
> + &Dev->ExitBootEvent);
> + ASSERT_EFI_ERROR (Status);
> +
> + mMyDevice = Dev;
> + return EFI_SUCCESS;
> }
>
> /**
> @@ -310,5 +339,9 @@ XenbusDxeDriverBindingStop (
> IN EFI_HANDLE *ChildHandleBuffer OPTIONAL
> )
> {
> - return EFI_UNSUPPORTED;
> + XENBUS_DEVICE *Dev = mMyDevice;
> +
> + gBS->CloseEvent (Dev->ExitBootEvent);
> +
> + return EFI_SUCCESS;
> }
> diff --git a/OvmfPkg/XenbusDxe/XenbusDxe.h b/OvmfPkg/XenbusDxe/XenbusDxe.h
> index 6f22732..c1ca87a 100644
> --- a/OvmfPkg/XenbusDxe/XenbusDxe.h
> +++ b/OvmfPkg/XenbusDxe/XenbusDxe.h
> @@ -75,4 +75,14 @@ extern EFI_COMPONENT_NAME_PROTOCOL
> gXenbusDxeComponentName;
> #define PCI_DEVICE_ID_XEN_PLATFORM 0x0001
>
>
> +typedef struct _XENBUS_DEVICE XENBUS_DEVICE;
> +
> +#define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','b','d')
I get the 'XB', but 'bd' ? Should it be 'XenB' ? Or perhaps
'XBus' ?
> +struct _XENBUS_DEVICE {
> + UINT32 Signature;
> + EFI_DRIVER_BINDING_PROTOCOL *This;
> + EFI_HANDLE ControllerHandle;
> + EFI_EVENT ExitBootEvent;
> +};
> +
> #endif
> --
> Anthony PERARD
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |