|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 02/18] OvmfPkg: Add basic skeleton for the Xenbus driver.
On Wed, Jul 16, 2014 at 01:25:03PM -0400, Konrad Rzeszutek Wilk wrote:
> On Wed, Jul 16, 2014 at 04:15:31PM +0100, Anthony PERARD wrote:
> > This includes Component Name and Driver Binding.
>
> The title says driver, but the cover letter said 'bus driver'.
> Should it have bus driver in it?
Do you mean having "Xenbus bus driver" in the title? It feels a bit
redondant, but might be better.
> .. snip..
> > +/**
> > + Retrieves a Unicode string that is the user readable name of the
> > controller
> > + that is being managed by an EFI Driver.
> > +
> > + @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL
> > instance.
> > + @param ControllerHandle The handle of a controller that the driver
> > specified by
> > + This is managing. This handle specifies the
> > controller
> > + whose name is to be returned.
> > + @param ChildHandle The handle of the child controller to retrieve
> > the name
> > + of. This is an optional parameter that may be
> > NULL. It
> > + will be NULL for device drivers. It will also
> > be NULL
> > + for a bus drivers that wish to retrieve the
> > name of the
> > + bus controller. It will not be NULL for a bus
> > driver
> > + that wishes to retrieve the name of a child
> > controller.
> .. snip..
> > +EFI_STATUS
> > +EFIAPI
> > +XenbusDxeComponentNameGetControllerName (
> > + IN EFI_COMPONENT_NAME2_PROTOCOL *This,
> > + IN EFI_HANDLE ControllerHandle,
> > + IN EFI_HANDLE ChildHandle OPTIONAL,
> > + IN CHAR8 *Language,
> > + OUT CHAR16 **ControllerName
> > + )
> > +{
> > + EFI_STATUS Status;
> > +
> > + //
> > + // ChildHandle must be NULL for a Device Driver
>
> OK, but this is a bus driver in which case ChildHandle can be NULL or not (at
> least that is what the comment says) ?
Yes. Most (all?) of the code in this files (and this patch) comes from a
template. I haven't been through the comment yet. But yes this bus
driver can have childs.
> > + //
> > + if (ChildHandle != NULL) {
> > + return EFI_UNSUPPORTED;
> > + }
> > +
> > + //
> > + // Lookup name of controller specified by ControllerHandle
> > + //
> > + Status = EFI_UNSUPPORTED;
> > +
> > + return Status;
> > +}
> .. snip..
>
> > diff --git a/OvmfPkg/XenbusDxe/XenbusDxe.c b/OvmfPkg/XenbusDxe/XenbusDxe.c
> > new file mode 100644
> > index 0000000..14113ad
> > --- /dev/null
> > +++ b/OvmfPkg/XenbusDxe/XenbusDxe.c
> > @@ -0,0 +1,314 @@
> > +
> > +/** @file
> > + TODO: Brief Description of UEFI Driver XenbusDxe
> > +
> > + TODO: Detailed Description of UEFI Driver XenbusDxe
> > +
> > + TODO: Copyright for UEFI Driver XenbusDxe
> > +
> > + TODO: License for UEFI Driver XenbusDxe
> > +
> > +**/
> > +
> > +#include <IndustryStandard/Pci.h>
> > +#include <IndustryStandard/Acpi.h>
> > +#include <Library/DebugLib.h>
> > +
> > +#include "XenbusDxe.h"
> > +
> > +
> > +///
> > +/// Driver Binding Protocol instance
> > +///
> > +EFI_DRIVER_BINDING_PROTOCOL gXenbusDxeDriverBinding = {
> > + XenbusDxeDriverBindingSupported,
> > + XenbusDxeDriverBindingStart,
> > + XenbusDxeDriverBindingStop,
> > + XENBUS_DXE_VERSION,
> > + NULL,
> > + NULL
> > +};
> > +
> > +
> > +/**
> > + Unloads an image.
> > +
> > + @param ImageHandle Handle that identifies the image to be
> > unloaded.
> > +
> > + @retval EFI_SUCCESS The image has been unloaded.
> > + @retval EFI_INVALID_PARAMETER ImageHandle is not a valid image handle.
> > +
> > +**/
> > +EFI_STATUS
> > +EFIAPI
> > +XenbusDxeUnload (
> > + IN EFI_HANDLE ImageHandle
> > + )
> > +{
> > + EFI_STATUS Status;
> > +
> > + EFI_HANDLE *HandleBuffer;
> > + UINTN HandleCount;
> > + UINTN Index;
> > +
> > +
> > + Status = EFI_SUCCESS;
>
> Is that neccessary considering the next line you overwrite it?
No, it is not.
> > +
> > + //
> > + // Retrieve array of all handles in the handle database
> > + //
> > + Status = gBS->LocateHandleBuffer (
> > + AllHandles,
> > + NULL,
> > + NULL,
> > + &HandleCount,
> > + &HandleBuffer
> > + );
> > + if (EFI_ERROR (Status)) {
> > + return Status;
> > + }
> > +
> > + //
> > + // Disconnect the current driver from handles in the handle database
> > + //
> > + for (Index = 0; Index < HandleCount; Index++) {
> > + Status = gBS->DisconnectController (HandleBuffer[Index], gImageHandle,
> > NULL);
> > + }
>
> Should you check the Status?
> I guess it doesn't matter at all. In which case why don't you just
> (void)gBS->DisconnectController ..
Will do.
> > +
> > + //
> > + // Free the array of handles
> > + //
> > + FreePool (HandleBuffer);
> > +
> > +
> > + //
> > + // Uninstall protocols installed in the driver entry point
> > + //
> > + Status = gBS->UninstallMultipleProtocolInterfaces (
> > + ImageHandle,
> > + &gEfiDriverBindingProtocolGuid, &gXenbusDxeDriverBinding,
> > + &gEfiComponentNameProtocolGuid,
> > &gXenbusDxeComponentName,
> > + &gEfiComponentName2ProtocolGuid,
> > &gXenbusDxeComponentName2,
> > + NULL
> > + );
> > + if (EFI_ERROR (Status)) {
> > + return Status;
> > + }
> > +
> > +
> > + //
> > + // Do any additional cleanup that is required for this driver
> > + //
> > +
> > + return EFI_SUCCESS;
> > +}
> > +
> > +/**
> > + This is the declaration of an EFI image entry point. This entry point is
> > + the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers
> > including
> > + both device drivers and bus drivers.
> > +
> > + @param ImageHandle The firmware allocated handle for the UEFI
> > image.
> > + @param SystemTable A pointer to the EFI System Table.
> > +
> > + @retval EFI_SUCCESS The operation completed successfully.
> > + @retval Others An unexpected error occurred.
> > +**/
> > +EFI_STATUS
> > +EFIAPI
> > +XenbusDxeDriverEntryPoint (
> > + IN EFI_HANDLE ImageHandle,
> > + IN EFI_SYSTEM_TABLE *SystemTable
> > + )
> > +{
> > + EFI_STATUS Status;
> > +
> > +
> > + Status = EFI_SUCCESS;
>
> Not needed.
>
> > +
> > +
> > + //
> > + // Install UEFI Driver Model protocol(s).
> > + //
> > + Status = EfiLibInstallDriverBindingComponentName2 (
> > + ImageHandle,
> > + SystemTable,
> > + &gXenbusDxeDriverBinding,
> > + ImageHandle,
> > + &gXenbusDxeComponentName,
> > + &gXenbusDxeComponentName2
> > + );
> > + ASSERT_EFI_ERROR (Status);
> > +
> > +
> > + return Status;
> > +}
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |