TianoCore EDK2 master
Loading...
Searching...
No Matches
VirtioBlk.h File Reference

Go to the source code of this file.

Data Structures

struct  VBLK_DEV
 

Macros

#define VBLK_SIG   SIGNATURE_32 ('V', 'B', 'L', 'K')
 
#define VIRTIO_BLK_FROM_BLOCK_IO(BlockIoPointer)    CR (BlockIoPointer, VBLK_DEV, BlockIo, VBLK_SIG)
 

Functions

EFI_STATUS EFIAPI VirtioBlkDriverBindingSupported (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE DeviceHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
 
EFI_STATUS EFIAPI VirtioBlkDriverBindingStart (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE DeviceHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
 
EFI_STATUS EFIAPI VirtioBlkDriverBindingStop (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE DeviceHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
 
EFI_STATUS EFIAPI VirtioBlkReset (IN EFI_BLOCK_IO_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
 
EFI_STATUS EFIAPI VirtioBlkReadBlocks (IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN UINTN BufferSize, OUT VOID *Buffer)
 
EFI_STATUS EFIAPI VirtioBlkWriteBlocks (IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN UINTN BufferSize, IN VOID *Buffer)
 
EFI_STATUS EFIAPI VirtioBlkFlushBlocks (IN EFI_BLOCK_IO_PROTOCOL *This)
 
EFI_STATUS EFIAPI VirtioBlkGetDriverName (IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName)
 
EFI_STATUS EFIAPI VirtioBlkGetDeviceName (IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE DeviceHandle, IN EFI_HANDLE ChildHandle, IN CHAR8 *Language, OUT CHAR16 **ControllerName)
 

Detailed Description

Internal definitions for the virtio-blk driver, which produces Block I/O Protocol instances for virtio-blk devices.

Copyright (C) 2012, Red Hat, Inc.

SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file VirtioBlk.h.

Macro Definition Documentation

◆ VBLK_SIG

#define VBLK_SIG   SIGNATURE_32 ('V', 'B', 'L', 'K')

Definition at line 21 of file VirtioBlk.h.

◆ VIRTIO_BLK_FROM_BLOCK_IO

#define VIRTIO_BLK_FROM_BLOCK_IO (   BlockIoPointer)     CR (BlockIoPointer, VBLK_DEV, BlockIo, VBLK_SIG)

Definition at line 40 of file VirtioBlk.h.

Function Documentation

◆ VirtioBlkDriverBindingStart()

EFI_STATUS EFIAPI VirtioBlkDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  DeviceHandle,
IN EFI_DEVICE_PATH_PROTOCOL RemainingDevicePath 
)

After we've pronounced support for a specific device in DriverBindingSupported(), we start managing said device (passed in by the Driver Execution Environment) with the following service.

See DriverBindingSupported() for specification references.

Parameters
[in]ThisThe EFI_DRIVER_BINDING_PROTOCOL object incorporating this driver (independently of any device).
[in]DeviceHandleThe supported device to drive.
[in]RemainingDevicePathRelevant only for bus drivers, ignored.
Return values
EFI_SUCCESSDriver instance has been created and initialized for the virtio-blk device, it is now accessible via EFI_BLOCK_IO_PROTOCOL.
EFI_OUT_OF_RESOURCESMemory allocation failed.
Returns
Error codes from the OpenProtocol() boot service, VirtioBlkInit(), or the InstallProtocolInterface() boot service.

After we've pronounced support for a specific device in DriverBindingSupported(), we start managing said device (passed in by the Driver Execution Environment) with the following service.

See DriverBindingSupported() for specification references.

Parameters
[in]ThisThe EFI_DRIVER_BINDING_PROTOCOL object incorporating this driver (independently of any device).
[in]DeviceHandleThe supported device to drive.
[in]RemainingDevicePathRelevant only for bus drivers, ignored.
Return values
EFI_SUCCESSDriver instance has been created and initialized for the virtio-blk device, it is now accessible via EFI_BLOCK_IO_PROTOCOL.
EFI_OUT_OF_RESOURCESMemory allocation failed.
Returns
Error codes from the OpenProtocol() boot service, the VirtIo protocol, VirtioBlkInit(), or the InstallProtocolInterface() boot service.

Definition at line 1092 of file VirtioBlk.c.

◆ VirtioBlkDriverBindingStop()

EFI_STATUS EFIAPI VirtioBlkDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  DeviceHandle,
IN UINTN  NumberOfChildren,
IN EFI_HANDLE ChildHandleBuffer 
)

Stop driving a virtio-blk device and remove its BlockIo interface.

This function replays the success path of DriverBindingStart() in reverse. The host side virtio-blk device is reset, so that the OS boot loader or the OS may reinitialize it.

Parameters
[in]ThisThe EFI_DRIVER_BINDING_PROTOCOL object incorporating this driver (independently of any device).
[in]DeviceHandleStop driving this device.
[in]NumberOfChildrenSince this function belongs to a device driver only (as opposed to a bus driver), the caller environment sets NumberOfChildren to zero, and we ignore it.
[in]ChildHandleBufferIgnored (corresponding to NumberOfChildren).

Definition at line 1197 of file VirtioBlk.c.

◆ VirtioBlkDriverBindingSupported()

EFI_STATUS EFIAPI VirtioBlkDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  DeviceHandle,
IN EFI_DEVICE_PATH_PROTOCOL RemainingDevicePath 
)

Device probe function for this driver.

The DXE core calls this function for any given device in order to see if the driver can drive the device.

Specs relevant in the general sense:

  • UEFI Spec 2.3.1 + Errata C:
    • 6.3 Protocol Handler Services – for accessing the underlying device
    • 10.1 EFI Driver Binding Protocol – for exporting ourselves
  • Driver Writer's Guide for UEFI 2.3.1 v1.01:
    • 5.1.3.4 OpenProtocol() and CloseProtocol() – for accessing the underlying device
    • 9 Driver Binding Protocol – for exporting ourselves
Parameters
[in]ThisThe EFI_DRIVER_BINDING_PROTOCOL object incorporating this driver (independently of any device).
[in]DeviceHandleThe device to probe.
[in]RemainingDevicePathRelevant only for bus drivers, ignored.
Return values
EFI_SUCCESSThe driver supports the device being probed.
EFI_UNSUPPORTEDBased on virtio-blk discovery, we do not support the device.
Returns
Error codes from the OpenProtocol() boot service.

Device probe function for this driver.

The DXE core calls this function for any given device in order to see if the driver can drive the device.

Specs relevant in the general sense:

  • UEFI Spec 2.3.1 + Errata C:
    • 6.3 Protocol Handler Services – for accessing the underlying device
    • 10.1 EFI Driver Binding Protocol – for exporting ourselves
  • Driver Writer's Guide for UEFI 2.3.1 v1.01:
    • 5.1.3.4 OpenProtocol() and CloseProtocol() – for accessing the underlying device
    • 9 Driver Binding Protocol – for exporting ourselves
Parameters
[in]ThisThe EFI_DRIVER_BINDING_PROTOCOL object incorporating this driver (independently of any device).
[in]DeviceHandleThe device to probe.
[in]RemainingDevicePathRelevant only for bus drivers, ignored.
Return values
EFI_SUCCESSThe driver supports the device being probed.
EFI_UNSUPPORTEDBased on virtio-blk discovery, we do not support the device.
Returns
Error codes from the OpenProtocol() boot service or the VirtIo protocol.

Definition at line 652 of file VirtioBlk.c.

◆ VirtioBlkFlushBlocks()

EFI_STATUS EFIAPI VirtioBlkFlushBlocks ( IN EFI_BLOCK_IO_PROTOCOL This)

FlushBlocks() operation for virtio-blk.

See

  • UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol, 12.8 EFI Block I/O Protocol, EFI_BLOCK_IO_PROTOCOL.FlushBlocks().
  • Driver Writer's Guide for UEFI 2.3.1 v1.01, 24.2.4 FlushBlocks() and FlushBlocksEx() Implementation.

If the underlying virtio-blk device doesn't support flushing (ie. write-caching), then this function should not be called by higher layers, according to EFI_BLOCK_IO_MEDIA characteristics set in VirtioBlkInit(). Should they do nonetheless, we do nothing, successfully.

Definition at line 596 of file VirtioBlk.c.

◆ VirtioBlkGetDeviceName()

EFI_STATUS EFIAPI VirtioBlkGetDeviceName ( IN EFI_COMPONENT_NAME_PROTOCOL This,
IN EFI_HANDLE  DeviceHandle,
IN EFI_HANDLE  ChildHandle,
IN CHAR8 *  Language,
OUT CHAR16 **  ControllerName 
)

Definition at line 1305 of file VirtioBlk.c.

◆ VirtioBlkGetDriverName()

EFI_STATUS EFIAPI VirtioBlkGetDriverName ( IN EFI_COMPONENT_NAME_PROTOCOL This,
IN CHAR8 *  Language,
OUT CHAR16 **  DriverName 
)

Definition at line 1288 of file VirtioBlk.c.

◆ VirtioBlkReadBlocks()

EFI_STATUS EFIAPI VirtioBlkReadBlocks ( IN EFI_BLOCK_IO_PROTOCOL This,
IN UINT32  MediaId,
IN EFI_LBA  Lba,
IN UINTN  BufferSize,
OUT VOID *  Buffer 
)

ReadBlocks() operation for virtio-blk.

See

  • UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol, 12.8 EFI Block I/O Protocol, EFI_BLOCK_IO_PROTOCOL.ReadBlocks().
  • Driver Writer's Guide for UEFI 2.3.1 v1.01, 24.2.2. ReadBlocks() and ReadBlocksEx() Implementation.

Parameter checks and conformant return values are implemented in VerifyReadWriteRequest() and SynchronousRequest().

A zero BufferSize doesn't seem to be prohibited, so do nothing in that case, successfully.

Definition at line 489 of file VirtioBlk.c.

◆ VirtioBlkReset()

EFI_STATUS EFIAPI VirtioBlkReset ( IN EFI_BLOCK_IO_PROTOCOL This,
IN BOOLEAN  ExtendedVerification 
)

Definition at line 82 of file VirtioBlk.c.

◆ VirtioBlkWriteBlocks()

EFI_STATUS EFIAPI VirtioBlkWriteBlocks ( IN EFI_BLOCK_IO_PROTOCOL This,
IN UINT32  MediaId,
IN EFI_LBA  Lba,
IN UINTN  BufferSize,
IN VOID *  Buffer 
)

WriteBlocks() operation for virtio-blk.

See

  • UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol, 12.8 EFI Block I/O Protocol, EFI_BLOCK_IO_PROTOCOL.WriteBlocks().
  • Driver Writer's Guide for UEFI 2.3.1 v1.01, 24.2.3 WriteBlocks() and WriteBlockEx() Implementation.

Parameter checks and conformant return values are implemented in VerifyReadWriteRequest() and SynchronousRequest().

A zero BufferSize doesn't seem to be prohibited, so do nothing in that case, successfully.

Definition at line 543 of file VirtioBlk.c.