]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Ovmf/Xen: move XenBusDxe to abstract XENIO_PROTOCOL
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Sat, 28 Feb 2015 20:33:11 +0000 (20:33 +0000)
committerlersek <lersek@Edk2>
Sat, 28 Feb 2015 20:33:11 +0000 (20:33 +0000)
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
Acked-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16973 6f19259b-4bc3-4df7-8a09-765794883524

13 files changed:
OvmfPkg/OvmfPkgIa32.dsc
OvmfPkg/OvmfPkgIa32.fdf
OvmfPkg/OvmfPkgIa32X64.dsc
OvmfPkg/OvmfPkgIa32X64.fdf
OvmfPkg/OvmfPkgX64.dsc
OvmfPkg/OvmfPkgX64.fdf
OvmfPkg/XenBusDxe/ComponentName.c
OvmfPkg/XenBusDxe/GrantTable.c
OvmfPkg/XenBusDxe/GrantTable.h
OvmfPkg/XenBusDxe/XenBus.c
OvmfPkg/XenBusDxe/XenBusDxe.c
OvmfPkg/XenBusDxe/XenBusDxe.h
OvmfPkg/XenBusDxe/XenBusDxe.inf

index 90540272745c2070b79496c28a97988c36a429c7..8c880613851d66fb1173655de1267c751e94a17c 100644 (file)
   OvmfPkg/VirtioBlkDxe/VirtioBlk.inf\r
   OvmfPkg/VirtioScsiDxe/VirtioScsi.inf\r
   OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf\r
+  OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf\r
   OvmfPkg/XenBusDxe/XenBusDxe.inf\r
   OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf\r
   OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf {\r
index f47e7ddc78342a098eaddb836afc1b7d91c12a4e..ecef963d1e8504241a6dc3a8a284efb4093b3dc1 100644 (file)
@@ -227,6 +227,7 @@ INF  OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
 INF  OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf\r
 INF  OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf\r
 INF  MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf\r
+INF  OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf\r
 INF  OvmfPkg/XenBusDxe/XenBusDxe.inf\r
 INF  OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf\r
 \r
index 0a331eda8be03f44f2b12be2b5677cd465cf9b02..ff32ecefd07ba88fdb2e4a65e6d0b98e54565ae4 100644 (file)
   OvmfPkg/VirtioBlkDxe/VirtioBlk.inf\r
   OvmfPkg/VirtioScsiDxe/VirtioScsi.inf\r
   OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf\r
+  OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf\r
   OvmfPkg/XenBusDxe/XenBusDxe.inf\r
   OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf\r
   OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf {\r
index 4c034460d5d2faa1a810986ce903175156fe6b7b..29414ff04082dde8f38af0d1bebbaedff91c6f31 100644 (file)
@@ -227,6 +227,7 @@ INF  OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
 INF  OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf\r
 INF  OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf\r
 INF  MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf\r
+INF  OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf\r
 INF  OvmfPkg/XenBusDxe/XenBusDxe.inf\r
 INF  OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf\r
 \r
index e2b37c2716819d6a339196afccef1d0e69f97b84..8bac6dc313f0b4682271010bc73fcbf5dc9ffb24 100644 (file)
   OvmfPkg/VirtioBlkDxe/VirtioBlk.inf\r
   OvmfPkg/VirtioScsiDxe/VirtioScsi.inf\r
   OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf\r
+  OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf\r
   OvmfPkg/XenBusDxe/XenBusDxe.inf\r
   OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf\r
   OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf {\r
index 2323eb2edf33c56ff3a077fcdeed1eafa8de560d..f1feb698ba661787a3384361d4c822fe0811c8fa 100644 (file)
@@ -227,6 +227,7 @@ INF  OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
 INF  OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf\r
 INF  OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf\r
 INF  MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf\r
+INF  OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf\r
 INF  OvmfPkg/XenBusDxe/XenBusDxe.inf\r
 INF  OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf\r
 \r
index 4530509e65dc3f0c074e273db317ed773eef49de..3f2dd406c77db78449abaf1251e514110e1ab2a7 100644 (file)
@@ -155,7 +155,7 @@ XenBusDxeComponentNameGetControllerName (
   Status = EfiTestManagedDevice (\r
              ControllerHandle,\r
              gXenBusDxeDriverBinding.DriverBindingHandle,\r
-             &gEfiPciIoProtocolGuid\r
+             &gXenIoProtocolGuid\r
              );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
index a80d5eff39cdfd65d2eac6f517e7f1431a90091a..19117fbe0373efcb55f47b6f4235881fb744d8b3 100644 (file)
@@ -139,8 +139,7 @@ XenGrantTableEndAccess (
 \r
 VOID\r
 XenGrantTableInit (\r
-  IN XENBUS_DEVICE  *Dev,\r
-  IN UINT64         MmioAddr\r
+  IN XENBUS_DEVICE  *Dev\r
   )\r
 {\r
   xen_add_to_physmap_t Parameters;\r
@@ -155,7 +154,7 @@ XenGrantTableInit (
     XenGrantTablePutFreeEntry ((grant_ref_t)Index);\r
   }\r
 \r
-  GrantTable = (VOID*)(UINTN) MmioAddr;\r
+  GrantTable = (VOID*)(UINTN) Dev->XenIo->GrantTableAddress;\r
   for (Index = 0; Index < NR_GRANT_FRAMES; Index++) {\r
     Parameters.domid = DOMID_SELF;\r
     Parameters.idx = Index;\r
index 5772c56662dfbc34248a907d565fa8d92d0038ab..194275ba7ed593018e1b55fe5bf8ed73bc0efba3 100644 (file)
@@ -29,8 +29,7 @@
 **/\r
 VOID\r
 XenGrantTableInit (\r
-  IN XENBUS_DEVICE  *Dev,\r
-  IN UINT64         MmioAddr\r
+  IN XENBUS_DEVICE  *Dev\r
   );\r
 \r
 /**\r
index f69c27dd184a1272a03ccbfa8dd85849f0452e3a..ee9526c332529679c84f6c04f1b9ec0540c5ab72 100644 (file)
@@ -138,7 +138,7 @@ XenBusAddDevice (
   XENBUS_PRIVATE_DATA *Private;\r
   EFI_STATUS Status;\r
   XENBUS_DEVICE_PATH *TempXenBusPath;\r
-  VOID *ChildPciIo;\r
+  VOID *ChildXenIo;\r
 \r
   AsciiSPrint (DevicePath, sizeof (DevicePath),\r
                "device/%a/%a", Type, Id);\r
@@ -208,8 +208,8 @@ XenBusAddDevice (
     }\r
 \r
     Status = gBS->OpenProtocol (Dev->ControllerHandle,\r
-               &gEfiPciIoProtocolGuid,\r
-               &ChildPciIo, Dev->This->DriverBindingHandle,\r
+               &gXenIoProtocolGuid,\r
+               &ChildXenIo, Dev->This->DriverBindingHandle,\r
                Private->Handle,\r
                EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER);\r
     if (EFI_ERROR (Status)) {\r
index cc334c086c1f16983ddabe3e28b31c29ed2abfb9..2c4a08673ce64ff8a81c721ae4ee34cfa7d23a33 100644 (file)
@@ -23,8 +23,6 @@
 \r
 **/\r
 \r
-#include <IndustryStandard/Pci.h>\r
-#include <IndustryStandard/Acpi.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/XenHypercallLib.h>\r
 \r
@@ -233,34 +231,22 @@ XenBusDxeDriverBindingSupported (
   )\r
 {\r
   EFI_STATUS          Status;\r
-  EFI_PCI_IO_PROTOCOL *PciIo;\r
-  PCI_TYPE00          Pci;\r
+  XENIO_PROTOCOL      *XenIo;\r
 \r
   Status = gBS->OpenProtocol (\r
                      ControllerHandle,\r
-                     &gEfiPciIoProtocolGuid,\r
-                     (VOID **)&PciIo,\r
+                     &gXenIoProtocolGuid,\r
+                     (VOID **)&XenIo,\r
                      This->DriverBindingHandle,\r
                      ControllerHandle,\r
                      EFI_OPEN_PROTOCOL_BY_DRIVER\r
                      );\r
+\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
 \r
-  Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0,\r
-                            sizeof Pci / sizeof (UINT32), &Pci);\r
-\r
-  if (Status == EFI_SUCCESS) {\r
-    if (Pci.Hdr.VendorId == PCI_VENDOR_ID_XEN &&\r
-        Pci.Hdr.DeviceId == PCI_DEVICE_ID_XEN_PLATFORM) {\r
-      Status = EFI_SUCCESS;\r
-    } else {\r
-      Status = EFI_UNSUPPORTED;\r
-    }\r
-  }\r
-\r
-  gBS->CloseProtocol (ControllerHandle, &gEfiPciIoProtocolGuid,\r
+  gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid,\r
          This->DriverBindingHandle, ControllerHandle);\r
 \r
   return Status;\r
@@ -326,19 +312,18 @@ XenBusDxeDriverBindingStart (
 {\r
   EFI_STATUS Status;\r
   XENBUS_DEVICE *Dev;\r
-  EFI_PCI_IO_PROTOCOL *PciIo;\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc;\r
-  UINT64 MmioAddr;\r
+  XENIO_PROTOCOL *XenIo;\r
   EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
 \r
   Status = gBS->OpenProtocol (\r
                      ControllerHandle,\r
-                     &gEfiPciIoProtocolGuid,\r
-                     (VOID **) &PciIo,\r
+                     &gXenIoProtocolGuid,\r
+                     (VOID**)&XenIo,\r
                      This->DriverBindingHandle,\r
                      ControllerHandle,\r
                      EFI_OPEN_PROTOCOL_BY_DRIVER\r
                      );\r
+\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -360,7 +345,7 @@ XenBusDxeDriverBindingStart (
   Dev->Signature = XENBUS_DEVICE_SIGNATURE;\r
   Dev->This = This;\r
   Dev->ControllerHandle = ControllerHandle;\r
-  Dev->PciIo = PciIo;\r
+  Dev->XenIo = XenIo;\r
   Dev->DevicePath = DevicePath;\r
   InitializeListHead (&Dev->ChildList);\r
 \r
@@ -376,20 +361,6 @@ XenBusDxeDriverBindingStart (
   mMyDevice = Dev;\r
   EfiReleaseLock (&mMyDeviceLock);\r
 \r
-  //\r
-  // The BAR1 of this PCI device is used for shared memory and is supposed to\r
-  // look like MMIO. The address space of the BAR1 will be used to map the\r
-  // Grant Table.\r
-  //\r
-  Status = PciIo->GetBarAttributes (PciIo, PCI_BAR_IDX1, NULL, (VOID**) &BarDesc);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (BarDesc->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM);\r
-\r
-  /* Get a Memory address for mapping the Grant Table. */\r
-  DEBUG ((EFI_D_INFO, "XenBus: BAR at %LX\n", BarDesc->AddrRangeMin));\r
-  MmioAddr = BarDesc->AddrRangeMin;\r
-  FreePool (BarDesc);\r
-\r
   Status = XenGetSharedInfoPage (Dev);\r
   if (EFI_ERROR (Status)) {\r
     DEBUG ((EFI_D_ERROR, "XenBus: Unable to get the shared info page.\n"));\r
@@ -397,7 +368,7 @@ XenBusDxeDriverBindingStart (
     goto ErrorAllocated;\r
   }\r
 \r
-  XenGrantTableInit (Dev, MmioAddr);\r
+  XenGrantTableInit (Dev);\r
 \r
   Status = XenStoreInit (Dev);\r
   ASSERT_EFI_ERROR (Status);\r
@@ -417,7 +388,7 @@ ErrorAllocated:
   gBS->CloseProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid,\r
                       This->DriverBindingHandle, ControllerHandle);\r
 ErrorOpenningProtocol:\r
-  gBS->CloseProtocol (ControllerHandle, &gEfiPciIoProtocolGuid,\r
+  gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid,\r
                       This->DriverBindingHandle, ControllerHandle);\r
   return Status;\r
 }\r
@@ -507,7 +478,7 @@ XenBusDxeDriverBindingStop (
 \r
   gBS->CloseProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid,\r
          This->DriverBindingHandle, ControllerHandle);\r
-  gBS->CloseProtocol (ControllerHandle, &gEfiPciIoProtocolGuid,\r
+  gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid,\r
          This->DriverBindingHandle, ControllerHandle);\r
 \r
   mMyDevice = NULL;\r
index 9b7219906a69f19788469816f46cc800c40f9c90..6c306e017b0780a74f01701e983ed9bb9c20ee6b 100644 (file)
@@ -39,7 +39,7 @@
 //\r
 // Consumed Protocols\r
 //\r
-#include <Protocol/PciIo.h>\r
+#include <Protocol/XenIo.h>\r
 \r
 \r
 //\r
@@ -73,10 +73,6 @@ extern EFI_COMPONENT_NAME_PROTOCOL  gXenBusDxeComponentName;
 //\r
 #include <IndustryStandard/Xen/xen.h>\r
 \r
-#define PCI_VENDOR_ID_XEN                0x5853\r
-#define PCI_DEVICE_ID_XEN_PLATFORM       0x0001\r
-\r
-\r
 typedef struct _XENBUS_DEVICE_PATH XENBUS_DEVICE_PATH;\r
 typedef struct _XENBUS_DEVICE XENBUS_DEVICE;\r
 \r
@@ -86,7 +82,7 @@ struct _XENBUS_DEVICE {
   UINT32                        Signature;\r
   EFI_DRIVER_BINDING_PROTOCOL   *This;\r
   EFI_HANDLE                    ControllerHandle;\r
-  EFI_PCI_IO_PROTOCOL           *PciIo;\r
+  XENIO_PROTOCOL                *XenIo;\r
   EFI_EVENT                     ExitBootEvent;\r
   EFI_DEVICE_PATH_PROTOCOL      *DevicePath;\r
   LIST_ENTRY                    ChildList;\r
index 714607dbd6f8144f975509d1a4f6f9033f419177..31553ac5a64ae03551e741f34ba7391f7f4616bd 100644 (file)
@@ -67,8 +67,8 @@
 \r
 [Protocols]\r
   gEfiDriverBindingProtocolGuid\r
-  gEfiPciIoProtocolGuid\r
   gEfiComponentName2ProtocolGuid\r
   gEfiComponentNameProtocolGuid\r
   gXenBusProtocolGuid\r
+  gXenIoProtocolGuid\r
 \r