[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 Wed, Sep 10, 2014 at 03:58:16PM -0400, Konrad Rzeszutek Wilk wrote: > 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. I think that can be usefull indeed. It could probably also be usefull if the driver is started twice, for whatever reason. I should also make the variable static. -- Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |