예제 #1
0
/**
 * 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;
}
예제 #2
0
파일: ArmFvpDxe.c 프로젝트: ikitayama/edk2
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;
}