/** * Entrypoint for 'VirtioBlockIo' driver */ EFI_STATUS InitVirtioBlockIo ( IN EFI_HANDLE ImageHandle ) { EFI_STATUS Status; Status = gBS->InstallProtocolInterface (&ImageHandle, &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE, &mVirtioBlockDevicePath); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: Failed to install the EFI_DEVICE_PATH " "protocol for the virtio block device (Status == %r)\n", __FUNCTION__, Status)); return Status; } Status = VirtioMmioInstallDevice (SGI_EXP_SYSPH_VIRTIO_BLOCK_BASE, ImageHandle); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: Failed to install Virtio block device (Status == %r)\n", __FUNCTION__, Status)); gBS->UninstallProtocolInterface (ImageHandle, &gEfiDevicePathProtocolGuid, &mVirtioBlockDevicePath); } return Status; }
EFI_STATUS EFIAPI ArmFvpInitialise ( IN EFI_HANDLE ImageHandle, 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 Status; }