[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 |