|
[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 01:32:54PM -0400, Konrad Rzeszutek Wilk wrote:
> 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' ?
I don't remember about 'bd', maybus "bus driver". I think I'll go with
'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
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |