[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 03/18] OvmfPkg/XenBusDxe: Add device state struct and create an ExitBoot services event.
On Thu, Sep 04, 2014 at 05:50:58PM +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 | 38 ++++++++++++++++++++++++++++++++++++-- > OvmfPkg/XenBusDxe/XenBusDxe.h | 11 +++++++++++ > 2 files changed, 47 insertions(+), 2 deletions(-) > > diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.c b/OvmfPkg/XenBusDxe/XenBusDxe.c > index a272204..e125ed7 100644 > --- a/OvmfPkg/XenBusDxe/XenBusDxe.c > +++ b/OvmfPkg/XenBusDxe/XenBusDxe.c > @@ -59,6 +59,8 @@ EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding = { > }; > > > +XENBUS_DEVICE *mMyDevice; > + > /** > Unloads an image. > > @@ -232,6 +234,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 bus controller. > > @@ -275,7 +290,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; > } > > /** > @@ -313,5 +343,9 @@ XenBusDxeDriverBindingStop ( > IN EFI_HANDLE *ChildHandleBuffer OPTIONAL > ) > { > - return EFI_UNSUPPORTED; > + XENBUS_DEVICE *Dev = mMyDevice; > + > + gBS->CloseEvent (Dev->ExitBootEvent); > + Don't want: mMyDevice = NULL; Not that it matters much, but more of a helper in case somebody does try to use 'myDevice' during shutdown/cleanup. > + return EFI_SUCCESS; > } > diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.h b/OvmfPkg/XenBusDxe/XenBusDxe.h > index 4c11f60..9e4860a 100644 > --- a/OvmfPkg/XenBusDxe/XenBusDxe.h > +++ b/OvmfPkg/XenBusDxe/XenBusDxe.h > @@ -90,4 +90,15 @@ extern EFI_COMPONENT_NAME_PROTOCOL > gXenBusDxeComponentName; > #define PCI_DEVICE_ID_XEN_PLATFORM 0x0001 > > > +typedef struct _XENBUS_DEVICE XENBUS_DEVICE; > + > +// Have the state of the driver. > +#define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','s','t') > +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 |