|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 21/29] Ovmf/Xen: move XenBusDxe to abstract XENIO_PROTOCOL
comments below
On 01/26/15 20:03, Ard Biesheuvel wrote:
> While Xen on Intel uses a virtual PCI device to communicate the
> base address of the grant table, the ARM implementation uses a DT
> node, which is fundamentally incompatible with the way XenBusDxe is
> implemented, i.e., as a UEFI Driver Model implementation for a PCI
> device.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx>
> ---
> OvmfPkg/OvmfPkgIa32.dsc | 1 +
> OvmfPkg/OvmfPkgIa32.fdf | 1 +
> OvmfPkg/OvmfPkgIa32X64.dsc | 1 +
> OvmfPkg/OvmfPkgIa32X64.fdf | 1 +
> OvmfPkg/OvmfPkgX64.dsc | 1 +
> OvmfPkg/OvmfPkgX64.fdf | 1 +
> OvmfPkg/XenBusDxe/ComponentName.c | 2 +-
> OvmfPkg/XenBusDxe/GrantTable.c | 5 ++---
> OvmfPkg/XenBusDxe/GrantTable.h | 3 +--
> OvmfPkg/XenBusDxe/XenBus.c | 6 +++---
> OvmfPkg/XenBusDxe/XenBusDxe.c | 57
> ++++++++++++++-------------------------------------------
> OvmfPkg/XenBusDxe/XenBusDxe.h | 8 ++------
> OvmfPkg/XenBusDxe/XenBusDxe.inf | 2 +-
> 13 files changed, 30 insertions(+), 59 deletions(-)
>
> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
> index 90540272745c..8c880613851d 100644
> --- a/OvmfPkg/OvmfPkgIa32.dsc
> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> @@ -444,6 +444,7 @@
> OvmfPkg/VirtioBlkDxe/VirtioBlk.inf
> OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
> OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf
> + OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf
> OvmfPkg/XenBusDxe/XenBusDxe.inf
> OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
> OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf {
> diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf
> index f47e7ddc7834..ecef963d1e85 100644
> --- a/OvmfPkg/OvmfPkgIa32.fdf
> +++ b/OvmfPkg/OvmfPkgIa32.fdf
> @@ -227,6 +227,7 @@ INF OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
> INF OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf
> INF OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf
> INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
> +INF OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf
> INF OvmfPkg/XenBusDxe/XenBusDxe.inf
> INF OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
>
> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> index 0a331eda8be0..ff32ecefd07b 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> @@ -451,6 +451,7 @@
> OvmfPkg/VirtioBlkDxe/VirtioBlk.inf
> OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
> OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf
> + OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf
> OvmfPkg/XenBusDxe/XenBusDxe.inf
> OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
> OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf {
> diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf
> index 4c034460d5d2..29414ff04082 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.fdf
> +++ b/OvmfPkg/OvmfPkgIa32X64.fdf
> @@ -227,6 +227,7 @@ INF OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
> INF OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf
> INF OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf
> INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
> +INF OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf
> INF OvmfPkg/XenBusDxe/XenBusDxe.inf
> INF OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
>
> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
> index e2b37c271681..8bac6dc313f0 100644
> --- a/OvmfPkg/OvmfPkgX64.dsc
> +++ b/OvmfPkg/OvmfPkgX64.dsc
> @@ -449,6 +449,7 @@
> OvmfPkg/VirtioBlkDxe/VirtioBlk.inf
> OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
> OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf
> + OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf
> OvmfPkg/XenBusDxe/XenBusDxe.inf
> OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
> OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf {
> diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf
> index 2323eb2edf33..f1feb698ba66 100644
> --- a/OvmfPkg/OvmfPkgX64.fdf
> +++ b/OvmfPkg/OvmfPkgX64.fdf
> @@ -227,6 +227,7 @@ INF OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
> INF OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf
> INF OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf
> INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
> +INF OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf
> INF OvmfPkg/XenBusDxe/XenBusDxe.inf
> INF OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
>
> diff --git a/OvmfPkg/XenBusDxe/ComponentName.c
> b/OvmfPkg/XenBusDxe/ComponentName.c
> index 4530509e65dc..3f2dd406c77d 100644
> --- a/OvmfPkg/XenBusDxe/ComponentName.c
> +++ b/OvmfPkg/XenBusDxe/ComponentName.c
> @@ -155,7 +155,7 @@ XenBusDxeComponentNameGetControllerName (
> Status = EfiTestManagedDevice (
> ControllerHandle,
> gXenBusDxeDriverBinding.DriverBindingHandle,
> - &gEfiPciIoProtocolGuid
> + &gXenIoProtocolGuid
> );
> if (EFI_ERROR (Status)) {
> return Status;
> diff --git a/OvmfPkg/XenBusDxe/GrantTable.c b/OvmfPkg/XenBusDxe/GrantTable.c
> index a80d5eff39cd..19117fbe0373 100644
> --- a/OvmfPkg/XenBusDxe/GrantTable.c
> +++ b/OvmfPkg/XenBusDxe/GrantTable.c
> @@ -139,8 +139,7 @@ XenGrantTableEndAccess (
>
> VOID
> XenGrantTableInit (
> - IN XENBUS_DEVICE *Dev,
> - IN UINT64 MmioAddr
> + IN XENBUS_DEVICE *Dev
> )
> {
> xen_add_to_physmap_t Parameters;
> @@ -155,7 +154,7 @@ XenGrantTableInit (
> XenGrantTablePutFreeEntry ((grant_ref_t)Index);
> }
>
> - GrantTable = (VOID*)(UINTN) MmioAddr;
> + GrantTable = (VOID*)(UINTN) Dev->XenIo->GrantTableAddress;
> for (Index = 0; Index < NR_GRANT_FRAMES; Index++) {
> Parameters.domid = DOMID_SELF;
> Parameters.idx = Index;
> diff --git a/OvmfPkg/XenBusDxe/GrantTable.h b/OvmfPkg/XenBusDxe/GrantTable.h
> index 5772c56662df..194275ba7ed5 100644
> --- a/OvmfPkg/XenBusDxe/GrantTable.h
> +++ b/OvmfPkg/XenBusDxe/GrantTable.h
> @@ -29,8 +29,7 @@
> **/
> VOID
> XenGrantTableInit (
> - IN XENBUS_DEVICE *Dev,
> - IN UINT64 MmioAddr
> + IN XENBUS_DEVICE *Dev
> );
>
> /**
> diff --git a/OvmfPkg/XenBusDxe/XenBus.c b/OvmfPkg/XenBusDxe/XenBus.c
> index f69c27dd184a..ee9526c33252 100644
> --- a/OvmfPkg/XenBusDxe/XenBus.c
> +++ b/OvmfPkg/XenBusDxe/XenBus.c
> @@ -138,7 +138,7 @@ XenBusAddDevice (
> XENBUS_PRIVATE_DATA *Private;
> EFI_STATUS Status;
> XENBUS_DEVICE_PATH *TempXenBusPath;
> - VOID *ChildPciIo;
> + VOID *ChildXenIo;
>
> AsciiSPrint (DevicePath, sizeof (DevicePath),
> "device/%a/%a", Type, Id);
> @@ -208,8 +208,8 @@ XenBusAddDevice (
> }
>
> Status = gBS->OpenProtocol (Dev->ControllerHandle,
> - &gEfiPciIoProtocolGuid,
> - &ChildPciIo, Dev->This->DriverBindingHandle,
> + &gXenIoProtocolGuid,
> + &ChildXenIo, Dev->This->DriverBindingHandle,
> Private->Handle,
> EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER);
> if (EFI_ERROR (Status)) {
> diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.c b/OvmfPkg/XenBusDxe/XenBusDxe.c
> index cc334c086c1f..6474428b79e5 100644
> --- a/OvmfPkg/XenBusDxe/XenBusDxe.c
> +++ b/OvmfPkg/XenBusDxe/XenBusDxe.c
> @@ -23,8 +23,6 @@
>
> **/
>
> -#include <IndustryStandard/Pci.h>
> -#include <IndustryStandard/Acpi.h>
> #include <Library/DebugLib.h>
> #include <Library/XenHypercallLib.h>
>
> @@ -233,35 +231,23 @@ XenBusDxeDriverBindingSupported (
> )
> {
> EFI_STATUS Status;
> - EFI_PCI_IO_PROTOCOL *PciIo;
> - PCI_TYPE00 Pci;
> + XENIO_PROTOCOL *XenIo;
>
> Status = gBS->OpenProtocol (
> ControllerHandle,
> - &gEfiPciIoProtocolGuid,
> - (VOID **)&PciIo,
> + &gXenIoProtocolGuid,
> + (VOID **)&XenIo,
> This->DriverBindingHandle,
> ControllerHandle,
> EFI_OPEN_PROTOCOL_BY_DRIVER
> );
> +
> if (EFI_ERROR (Status)) {
> return Status;
> }
>
> - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0,
> - sizeof Pci / sizeof (UINT32), &Pci);
> -
> - if (Status == EFI_SUCCESS) {
> - if (Pci.Hdr.VendorId == PCI_VENDOR_ID_XEN &&
> - Pci.Hdr.DeviceId == PCI_DEVICE_ID_XEN_PLATFORM) {
> - Status = EFI_SUCCESS;
> - } else {
> - Status = EFI_UNSUPPORTED;
> - }
> - }
> -
> - gBS->CloseProtocol (ControllerHandle, &gEfiPciIoProtocolGuid,
> - This->DriverBindingHandle, ControllerHandle);
> + gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid,
> + This->DriverBindingHandle, ControllerHandle);
Whitespace damage. The parameter should be indented one or two spaces
relative to the called member.
>
> return Status;
> }
> @@ -326,19 +312,18 @@ XenBusDxeDriverBindingStart (
> {
> EFI_STATUS Status;
> XENBUS_DEVICE *Dev;
> - EFI_PCI_IO_PROTOCOL *PciIo;
> - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc;
> - UINT64 MmioAddr;
> + XENIO_PROTOCOL *XenIo;
> EFI_DEVICE_PATH_PROTOCOL *DevicePath;
>
> Status = gBS->OpenProtocol (
> ControllerHandle,
> - &gEfiPciIoProtocolGuid,
> - (VOID **) &PciIo,
> + &gXenIoProtocolGuid,
> + (VOID**)&XenIo,
> This->DriverBindingHandle,
> ControllerHandle,
> EFI_OPEN_PROTOCOL_BY_DRIVER
> );
> +
> if (EFI_ERROR (Status)) {
> return Status;
> }
> @@ -360,7 +345,7 @@ XenBusDxeDriverBindingStart (
> Dev->Signature = XENBUS_DEVICE_SIGNATURE;
> Dev->This = This;
> Dev->ControllerHandle = ControllerHandle;
> - Dev->PciIo = PciIo;
> + Dev->XenIo = XenIo;
> Dev->DevicePath = DevicePath;
> InitializeListHead (&Dev->ChildList);
>
> @@ -376,20 +361,6 @@ XenBusDxeDriverBindingStart (
> mMyDevice = Dev;
> EfiReleaseLock (&mMyDeviceLock);
>
> - //
> - // The BAR1 of this PCI device is used for shared memory and is supposed to
> - // look like MMIO. The address space of the BAR1 will be used to map the
> - // Grant Table.
> - //
> - Status = PciIo->GetBarAttributes (PciIo, PCI_BAR_IDX1, NULL, (VOID**)
> &BarDesc);
> - ASSERT_EFI_ERROR (Status);
> - ASSERT (BarDesc->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM);
> -
> - /* Get a Memory address for mapping the Grant Table. */
> - DEBUG ((EFI_D_INFO, "XenBus: BAR at %LX\n", BarDesc->AddrRangeMin));
> - MmioAddr = BarDesc->AddrRangeMin;
> - FreePool (BarDesc);
> -
> Status = XenGetSharedInfoPage (Dev);
> if (EFI_ERROR (Status)) {
> DEBUG ((EFI_D_ERROR, "XenBus: Unable to get the shared info page.\n"));
> @@ -397,7 +368,7 @@ XenBusDxeDriverBindingStart (
> goto ErrorAllocated;
> }
>
> - XenGrantTableInit (Dev, MmioAddr);
> + XenGrantTableInit (Dev);
>
> Status = XenStoreInit (Dev);
> ASSERT_EFI_ERROR (Status);
> @@ -417,7 +388,7 @@ ErrorAllocated:
> gBS->CloseProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid,
> This->DriverBindingHandle, ControllerHandle);
> ErrorOpenningProtocol:
> - gBS->CloseProtocol (ControllerHandle, &gEfiPciIoProtocolGuid,
> + gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid,
> This->DriverBindingHandle, ControllerHandle);
> return Status;
> }
> @@ -507,7 +478,7 @@ XenBusDxeDriverBindingStop (
>
> gBS->CloseProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid,
> This->DriverBindingHandle, ControllerHandle);
> - gBS->CloseProtocol (ControllerHandle, &gEfiPciIoProtocolGuid,
> + gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid,
> This->DriverBindingHandle, ControllerHandle);
>
> mMyDevice = NULL;
> diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.h b/OvmfPkg/XenBusDxe/XenBusDxe.h
> index 9b7219906a69..6c306e017b07 100644
> --- a/OvmfPkg/XenBusDxe/XenBusDxe.h
> +++ b/OvmfPkg/XenBusDxe/XenBusDxe.h
> @@ -39,7 +39,7 @@
> //
> // Consumed Protocols
> //
> -#include <Protocol/PciIo.h>
> +#include <Protocol/XenIo.h>
>
>
> //
> @@ -73,10 +73,6 @@ extern EFI_COMPONENT_NAME_PROTOCOL
> gXenBusDxeComponentName;
> //
> #include <IndustryStandard/Xen/xen.h>
>
> -#define PCI_VENDOR_ID_XEN 0x5853
> -#define PCI_DEVICE_ID_XEN_PLATFORM 0x0001
> -
> -
> typedef struct _XENBUS_DEVICE_PATH XENBUS_DEVICE_PATH;
> typedef struct _XENBUS_DEVICE XENBUS_DEVICE;
>
> @@ -86,7 +82,7 @@ struct _XENBUS_DEVICE {
> UINT32 Signature;
> EFI_DRIVER_BINDING_PROTOCOL *This;
> EFI_HANDLE ControllerHandle;
> - EFI_PCI_IO_PROTOCOL *PciIo;
> + XENIO_PROTOCOL *XenIo;
> EFI_EVENT ExitBootEvent;
> EFI_DEVICE_PATH_PROTOCOL *DevicePath;
> LIST_ENTRY ChildList;
> diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.inf b/OvmfPkg/XenBusDxe/XenBusDxe.inf
> index 714607dbd6f8..31553ac5a64a 100644
> --- a/OvmfPkg/XenBusDxe/XenBusDxe.inf
> +++ b/OvmfPkg/XenBusDxe/XenBusDxe.inf
> @@ -67,8 +67,8 @@
>
> [Protocols]
> gEfiDriverBindingProtocolGuid
> - gEfiPciIoProtocolGuid
> gEfiComponentName2ProtocolGuid
> gEfiComponentNameProtocolGuid
> gXenBusProtocolGuid
> + gXenIoProtocolGuid
>
>
I won't "audit" XenBusDxe, obviously, but if you covered all PciIo
occurrences with the above, then it should not regress anything.
Please restore the indentation.
Acked-by: Laszlo Ersek <lersek@xxxxxxxxxx>
Thanks
Laszlo
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |