Revision: 16973
http://sourceforge.net/p/edk2/code/16973
Author: lersek
Date: 2015-02-28 20:33:11 +0000 (Sat, 28 Feb 2015)
Log Message:
-----------
Ovmf/Xen: move XenBusDxe to abstract XENIO_PROTOCOL
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 <[email protected]>
Reviewed-by: Anthony PERARD <[email protected]>
Signed-off-by: Ard Biesheuvel <[email protected]>
Signed-off-by: Laszlo Ersek <[email protected]>
Modified Paths:
--------------
trunk/edk2/OvmfPkg/OvmfPkgIa32.dsc
trunk/edk2/OvmfPkg/OvmfPkgIa32.fdf
trunk/edk2/OvmfPkg/OvmfPkgIa32X64.dsc
trunk/edk2/OvmfPkg/OvmfPkgIa32X64.fdf
trunk/edk2/OvmfPkg/OvmfPkgX64.dsc
trunk/edk2/OvmfPkg/OvmfPkgX64.fdf
trunk/edk2/OvmfPkg/XenBusDxe/ComponentName.c
trunk/edk2/OvmfPkg/XenBusDxe/GrantTable.c
trunk/edk2/OvmfPkg/XenBusDxe/GrantTable.h
trunk/edk2/OvmfPkg/XenBusDxe/XenBus.c
trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.c
trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.h
trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.inf
Modified: trunk/edk2/OvmfPkg/OvmfPkgIa32.dsc
===================================================================
--- trunk/edk2/OvmfPkg/OvmfPkgIa32.dsc 2015-02-28 20:33:00 UTC (rev 16972)
+++ trunk/edk2/OvmfPkg/OvmfPkgIa32.dsc 2015-02-28 20:33:11 UTC (rev 16973)
@@ -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 {
Modified: trunk/edk2/OvmfPkg/OvmfPkgIa32.fdf
===================================================================
--- trunk/edk2/OvmfPkg/OvmfPkgIa32.fdf 2015-02-28 20:33:00 UTC (rev 16972)
+++ trunk/edk2/OvmfPkg/OvmfPkgIa32.fdf 2015-02-28 20:33:11 UTC (rev 16973)
@@ -227,6 +227,7 @@
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
Modified: trunk/edk2/OvmfPkg/OvmfPkgIa32X64.dsc
===================================================================
--- trunk/edk2/OvmfPkg/OvmfPkgIa32X64.dsc 2015-02-28 20:33:00 UTC (rev
16972)
+++ trunk/edk2/OvmfPkg/OvmfPkgIa32X64.dsc 2015-02-28 20:33:11 UTC (rev
16973)
@@ -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 {
Modified: trunk/edk2/OvmfPkg/OvmfPkgIa32X64.fdf
===================================================================
--- trunk/edk2/OvmfPkg/OvmfPkgIa32X64.fdf 2015-02-28 20:33:00 UTC (rev
16972)
+++ trunk/edk2/OvmfPkg/OvmfPkgIa32X64.fdf 2015-02-28 20:33:11 UTC (rev
16973)
@@ -227,6 +227,7 @@
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
Modified: trunk/edk2/OvmfPkg/OvmfPkgX64.dsc
===================================================================
--- trunk/edk2/OvmfPkg/OvmfPkgX64.dsc 2015-02-28 20:33:00 UTC (rev 16972)
+++ trunk/edk2/OvmfPkg/OvmfPkgX64.dsc 2015-02-28 20:33:11 UTC (rev 16973)
@@ -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 {
Modified: trunk/edk2/OvmfPkg/OvmfPkgX64.fdf
===================================================================
--- trunk/edk2/OvmfPkg/OvmfPkgX64.fdf 2015-02-28 20:33:00 UTC (rev 16972)
+++ trunk/edk2/OvmfPkg/OvmfPkgX64.fdf 2015-02-28 20:33:11 UTC (rev 16973)
@@ -227,6 +227,7 @@
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
Modified: trunk/edk2/OvmfPkg/XenBusDxe/ComponentName.c
===================================================================
--- trunk/edk2/OvmfPkg/XenBusDxe/ComponentName.c 2015-02-28 20:33:00 UTC
(rev 16972)
+++ trunk/edk2/OvmfPkg/XenBusDxe/ComponentName.c 2015-02-28 20:33:11 UTC
(rev 16973)
@@ -155,7 +155,7 @@
Status = EfiTestManagedDevice (
ControllerHandle,
gXenBusDxeDriverBinding.DriverBindingHandle,
- &gEfiPciIoProtocolGuid
+ &gXenIoProtocolGuid
);
if (EFI_ERROR (Status)) {
return Status;
Modified: trunk/edk2/OvmfPkg/XenBusDxe/GrantTable.c
===================================================================
--- trunk/edk2/OvmfPkg/XenBusDxe/GrantTable.c 2015-02-28 20:33:00 UTC (rev
16972)
+++ trunk/edk2/OvmfPkg/XenBusDxe/GrantTable.c 2015-02-28 20:33:11 UTC (rev
16973)
@@ -139,8 +139,7 @@
VOID
XenGrantTableInit (
- IN XENBUS_DEVICE *Dev,
- IN UINT64 MmioAddr
+ IN XENBUS_DEVICE *Dev
)
{
xen_add_to_physmap_t Parameters;
@@ -155,7 +154,7 @@
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;
Modified: trunk/edk2/OvmfPkg/XenBusDxe/GrantTable.h
===================================================================
--- trunk/edk2/OvmfPkg/XenBusDxe/GrantTable.h 2015-02-28 20:33:00 UTC (rev
16972)
+++ trunk/edk2/OvmfPkg/XenBusDxe/GrantTable.h 2015-02-28 20:33:11 UTC (rev
16973)
@@ -29,8 +29,7 @@
**/
VOID
XenGrantTableInit (
- IN XENBUS_DEVICE *Dev,
- IN UINT64 MmioAddr
+ IN XENBUS_DEVICE *Dev
);
/**
Modified: trunk/edk2/OvmfPkg/XenBusDxe/XenBus.c
===================================================================
--- trunk/edk2/OvmfPkg/XenBusDxe/XenBus.c 2015-02-28 20:33:00 UTC (rev
16972)
+++ trunk/edk2/OvmfPkg/XenBusDxe/XenBus.c 2015-02-28 20:33:11 UTC (rev
16973)
@@ -138,7 +138,7 @@
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 @@
}
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)) {
Modified: trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.c
===================================================================
--- trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.c 2015-02-28 20:33:00 UTC (rev
16972)
+++ trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.c 2015-02-28 20:33:11 UTC (rev
16973)
@@ -23,8 +23,6 @@
**/
-#include <IndustryStandard/Pci.h>
-#include <IndustryStandard/Acpi.h>
#include <Library/DebugLib.h>
#include <Library/XenHypercallLib.h>
@@ -233,34 +231,22 @@
)
{
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,
+ gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid,
This->DriverBindingHandle, ControllerHandle);
return Status;
@@ -326,19 +312,18 @@
{
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 @@
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 @@
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 @@
goto ErrorAllocated;
}
- XenGrantTableInit (Dev, MmioAddr);
+ XenGrantTableInit (Dev);
Status = XenStoreInit (Dev);
ASSERT_EFI_ERROR (Status);
@@ -417,7 +388,7 @@
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 @@
gBS->CloseProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid,
This->DriverBindingHandle, ControllerHandle);
- gBS->CloseProtocol (ControllerHandle, &gEfiPciIoProtocolGuid,
+ gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid,
This->DriverBindingHandle, ControllerHandle);
mMyDevice = NULL;
Modified: trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.h
===================================================================
--- trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.h 2015-02-28 20:33:00 UTC (rev
16972)
+++ trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.h 2015-02-28 20:33:11 UTC (rev
16973)
@@ -39,7 +39,7 @@
//
// Consumed Protocols
//
-#include <Protocol/PciIo.h>
+#include <Protocol/XenIo.h>
//
@@ -73,10 +73,6 @@
//
#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 @@
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;
Modified: trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.inf
===================================================================
--- trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.inf 2015-02-28 20:33:00 UTC (rev
16972)
+++ trunk/edk2/OvmfPkg/XenBusDxe/XenBusDxe.inf 2015-02-28 20:33:11 UTC (rev
16973)
@@ -67,8 +67,8 @@
[Protocols]
gEfiDriverBindingProtocolGuid
- gEfiPciIoProtocolGuid
gEfiComponentName2ProtocolGuid
gEfiComponentNameProtocolGuid
gXenBusProtocolGuid
+ gXenIoProtocolGuid
------------------------------------------------------------------------------
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-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits