/* A zero BufferSize doesn't seem to be prohibited, so do nothing in that case, successfully.  */
EFI_STATUS EFIAPI VirtioBlkReadBlocks(IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN UINTN BufferSize, OUT VOID *Buffer)
/* A zero BufferSize doesn't seem to be prohibited, so do nothing in that case, successfully.  */
EFI_STATUS EFIAPI VirtioBlkReadBlocks(IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN UINTN BufferSize, OUT VOID *Buffer)
{
  VBLK_DEV    *Dev;
  EFI_STATUS  Status;
  if (BufferSize == 0) {
    return EFI_SUCCESS;
  }
  Dev    = VIRTIO_BLK_FROM_BLOCK_IO (This);
  Status = VerifyReadWriteRequest (
             &Dev->BlockIoMedia,
             Lba,
             BufferSize,
             FALSE
             );
  if (EFI_ERROR (Status)) {
    return Status;
  }
  return SynchronousRequest (
           Dev,
           Lba,
           BufferSize,
           Buffer,
           FALSE
           );
}