mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
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 <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
This commit is contained in:
parent
f2162d3410
commit
d9fdfd851a
@ -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 {
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
||||
|
@ -155,7 +155,7 @@ XenBusDxeComponentNameGetControllerName (
|
||||
Status = EfiTestManagedDevice (
|
||||
ControllerHandle,
|
||||
gXenBusDxeDriverBinding.DriverBindingHandle,
|
||||
&gEfiPciIoProtocolGuid
|
||||
&gXenIoProtocolGuid
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
|
@ -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;
|
||||
|
@ -29,8 +29,7 @@
|
||||
**/
|
||||
VOID
|
||||
XenGrantTableInit (
|
||||
IN XENBUS_DEVICE *Dev,
|
||||
IN UINT64 MmioAddr
|
||||
IN XENBUS_DEVICE *Dev
|
||||
);
|
||||
|
||||
/**
|
||||
|
@ -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)) {
|
||||
|
@ -23,8 +23,6 @@
|
||||
|
||||
**/
|
||||
|
||||
#include <IndustryStandard/Pci.h>
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/XenHypercallLib.h>
|
||||
|
||||
@ -233,34 +231,22 @@ 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,
|
||||
gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid,
|
||||
This->DriverBindingHandle, ControllerHandle);
|
||||
|
||||
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;
|
||||
|
@ -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;
|
||||
|
@ -67,8 +67,8 @@
|
||||
|
||||
[Protocols]
|
||||
gEfiDriverBindingProtocolGuid
|
||||
gEfiPciIoProtocolGuid
|
||||
gEfiComponentName2ProtocolGuid
|
||||
gEfiComponentNameProtocolGuid
|
||||
gXenBusProtocolGuid
|
||||
gXenIoProtocolGuid
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user