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 <[email protected]>
> ---
>  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 <[email protected]>

Thanks
Laszlo

------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to