From e94784c68de85297290b02153ac50c91cdf82b8c Mon Sep 17 00:00:00 2001 From: Olivier Martin Date: Fri, 13 Dec 2013 12:05:01 +0000 Subject: ArmPlatformPkg/ArmFvpDxe: Added Virtio Block support Right now the ARM Platform driver does not do much, but I expect to move most platform specific code into platform specific driver in the future. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin v5: - ensure / document that the VIRTIO_BLK_DEVICE_PATH structure must be packed - fix whitespace damage in definition of "mVirtioBlockDevicePath" - the platform driver is added to all platform DSC and FDF files in the previous patch; this patch focuses on virtio only Change-Id: I3505bfc5b31085b8017bd9e6895a155bd7a2eee9 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Reviewed-By: Olivier Martin git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14981 6f19259b-4bc3-4df7-8a09-765794883524 --- .../ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.c | 51 +++++++++++++++++++++- .../ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.inf | 3 ++ 2 files changed, 53 insertions(+), 1 deletion(-) (limited to 'ArmPlatformPkg/ArmVExpressPkg/ArmFvpDxe') diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.c b/ArmPlatformPkg/ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.c index 527a5b6731..15b5f429a9 100644 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.c +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.c @@ -13,6 +13,41 @@ **/ #include +#include +#include +#include + +#define ARM_FVP_BASE_VIRTIO_BLOCK_BASE 0x1c130000 + +#pragma pack(1) +typedef struct { + VENDOR_DEVICE_PATH Vendor; + EFI_DEVICE_PATH_PROTOCOL End; +} VIRTIO_BLK_DEVICE_PATH; +#pragma pack() + +VIRTIO_BLK_DEVICE_PATH mVirtioBlockDevicePath = +{ + { + { + HARDWARE_DEVICE_PATH, + HW_VENDOR_DP, + { + (UINT8)( sizeof(VENDOR_DEVICE_PATH) ), + (UINT8)((sizeof(VENDOR_DEVICE_PATH)) >> 8) + } + }, + EFI_CALLER_ID_GUID, + }, + { + END_DEVICE_PATH_TYPE, + END_ENTIRE_DEVICE_PATH_SUBTYPE, + { + sizeof (EFI_DEVICE_PATH_PROTOCOL), + 0 + } + } +}; EFI_STATUS EFIAPI @@ -21,6 +56,20 @@ ArmFvpInitialise ( IN EFI_SYSTEM_TABLE *SystemTable ) { + EFI_STATUS Status; + + Status = gBS->InstallProtocolInterface (&ImageHandle, + &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE, + &mVirtioBlockDevicePath); + if (EFI_ERROR (Status)) { + return Status; + } + + // Declare the Virtio BlockIo device + Status = VirtioMmioInstallDevice (ARM_FVP_BASE_VIRTIO_BLOCK_BASE, ImageHandle); + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_ERROR, "ArmFvpDxe: Failed to install Virtio block device\n")); + } - return EFI_SUCCESS; + return Status; } diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.inf b/ArmPlatformPkg/ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.inf index e39e6b6b53..893fd8d41d 100644 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.inf +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmFvpDxe/ArmFvpDxe.inf @@ -26,7 +26,10 @@ [Packages] MdePkg/MdePkg.dec ArmPlatformPkg/ArmPlatformPkg.dec + OvmfPkg/OvmfPkg.dec [LibraryClasses] UefiDriverEntryPoint UefiBootServicesTableLib + VirtioMmioDeviceLib + BaseMemoryLib -- cgit v1.2.3