TianoCore EDK2 master
|
#include <IndustryStandard/Virtio.h>
Go to the source code of this file.
Data Structures | |
struct | _VIRTIO_DEVICE_PROTOCOL |
Macros | |
#define | VIRTIO_SPEC_REVISION(major, minor, revision) ((((major) & 0xFF) << 24) | (((minor) & 0xFF) << 16) | ((revision) & 0xFFFF)) |
#define | VIRTIO_DEVICE_PROTOCOL_GUID |
Enumerations | |
enum | VIRTIO_MAP_OPERATION { VirtioOperationBusMasterRead , VirtioOperationBusMasterWrite , VirtioOperationBusMasterCommonBuffer } |
Variables | |
EFI_GUID | gVirtioDeviceProtocolGuid |
Virtio Device
DISCLAIMER: the VIRTIO_DEVICE_PROTOCOL introduced here is a work in progress, and should not be used outside of the EDK II tree.
Copyright (c) 2013, ARM Ltd. All rights reserved.
Copyright (c) 2017, AMD Inc, All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file VirtioDevice.h.
#define VIRTIO_DEVICE_PROTOCOL_GUID |
Definition at line 25 of file VirtioDevice.h.
#define VIRTIO_SPEC_REVISION | ( | major, | |
minor, | |||
revision | |||
) | ((((major) & 0xFF) << 24) | (((minor) & 0xFF) << 16) | ((revision) & 0xFFFF)) |
Definition at line 22 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_ALLOCATE_SHARED) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINTN Pages, IN OUT VOID **HostAddress) |
Allocates pages that are suitable for an VirtioOperationBusMasterCommonBuffer mapping. This means that the buffer allocated by this function supports simultaneous access by both the processor and the bus master. The device address that the bus master uses to access the buffer must be retrieved with a call to VIRTIO_MAP_SHARED.
[in] | This | The protocol instance pointer. |
[in] | Pages | The number of pages to allocate. |
[in,out] | HostAddress | A pointer to store the system memory base address of the allocated range. |
EFI_SUCCESS | The requested memory pages were allocated. |
EFI_OUT_OF_RESOURCES | The memory pages could not be allocated. |
Definition at line 373 of file VirtioDevice.h.
typedef struct _VIRTIO_DEVICE_PROTOCOL VIRTIO_DEVICE_PROTOCOL |
Definition at line 29 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_DEVICE_READ) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINTN FieldOffset, IN UINTN FieldSize, IN UINTN BufferSize, OUT VOID *Buffer) |
Read a word from the device-specific I/O region of the Virtio Header.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | FieldOffset | Source offset. |
[in] | FieldSize | Source field size in bytes, must be in {1, 2, 4, 8}. |
[in] | BufferSize | Number of bytes available in the target buffer. Must equal FieldSize. |
[out] | Buffer | Target buffer. |
EFI_SUCCESS | The data was read successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and read size. |
EFI_OUT_OF_RESOURCES | The request could not be completed due to a lack of resources. |
EFI_INVALID_PARAMETER | One or more parameters are invalid. |
Definition at line 74 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_DEVICE_WRITE) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINTN FieldOffset, IN UINTN FieldSize, IN UINT64 Value) |
Write a word to the device-specific I/O region of the Virtio Header.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | FieldOffset | Destination offset. |
[in] | FieldSize | Destination field size in bytes, must be in {1, 2, 4, 8}. |
[out] | Value | Value to write. |
EFI_SUCCESS | The data was written successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and write size. |
EFI_OUT_OF_RESOURCES | The request could not be completed due to a lack of resources. |
EFI_INVALID_PARAMETER | One or more parameters are invalid. |
Definition at line 105 of file VirtioDevice.h.
typedef VOID(EFIAPI * VIRTIO_FREE_SHARED) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINTN Pages, IN VOID *HostAddress) |
Frees memory that was allocated with VIRTIO_ALLOCATE_SHARED.
[in] | This | The protocol instance pointer. |
[in] | Pages | The number of pages to free. |
[in] | HostAddress | The system memory base address of the allocated range. |
Definition at line 392 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_GET_DEVICE_FEATURES) (IN VIRTIO_DEVICE_PROTOCOL *This, OUT UINT64 *DeviceFeatures) |
Read the device features field from the Virtio Header.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[out] | DeviceFeatures | The device features field. |
EFI_SUCCESS | The data was read successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and read size. |
EFI_INVALID_PARAMETER | DeviceFeatures is NULL |
Definition at line 126 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_GET_DEVICE_STATUS) (IN VIRTIO_DEVICE_PROTOCOL *This, OUT UINT8 *DeviceStatus) |
Get the DeviceStatus field from the Virtio Header.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[out] | DeviceStatus | The 8-bit value for the Device status field |
EFI_SUCCESS | The data was read successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and read size. |
EFI_INVALID_PARAMETER | DeviceStatus is NULL |
Definition at line 328 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_GET_QUEUE_NUM_MAX) (IN VIRTIO_DEVICE_PROTOCOL *This, OUT UINT16 *QueueNumMax) |
Get the size of the virtqueue selected by the queue select field.
See Virtio spec Section 2.3
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[out] | QueueNumMax | The size of the virtqueue in bytes. Always a power of 2. |
EFI_SUCCESS | The data was read successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and read size. |
EFI_INVALID_PARAMETER | QueueNumMax is NULL |
Definition at line 286 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_MAP_SHARED) (IN VIRTIO_DEVICE_PROTOCOL *This, IN VIRTIO_MAP_OPERATION Operation, IN VOID *HostAddress, IN OUT UINTN *NumberOfBytes, OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, OUT VOID **Mapping) |
Provides the virtio device address required to access system memory from a DMA bus master.
The interface follows the same usage pattern as defined in UEFI spec 2.6 (Section 13.2 PCI Root Bridge I/O Protocol)
[in] | This | The protocol instance pointer. |
[in] | Operation | Indicates if the bus master is going to read or write to system memory. |
[in] | HostAddress | The system memory address to map to shared buffer address. |
[in,out] | NumberOfBytes | On input the number of bytes to map. On output the number of bytes that were mapped. |
[out] | DeviceAddress | The resulting shared map address for the bus master to access the hosts HostAddress. |
[out] | Mapping | A resulting token to pass to VIRTIO_UNMAP_SHARED. |
EFI_SUCCESS | The range was mapped for the returned NumberOfBytes. |
EFI_UNSUPPORTED | The HostAddress cannot be mapped as a common buffer. |
EFI_INVALID_PARAMETER | One or more parameters are invalid. |
EFI_OUT_OF_RESOURCES | The request could not be completed due to a lack of resources. |
EFI_DEVICE_ERROR | The system hardware could not map the requested address. |
Definition at line 436 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_SET_DEVICE_STATUS) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT8 DeviceStatus) |
Write the DeviceStatus field in the Virtio Header.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | DeviceStatus | The 8-bit value for the Device status field |
EFI_SUCCESS | The data was written successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and write size. |
Definition at line 347 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_SET_GUEST_FEATURES) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT64 Features) |
Write the guest features field in the Virtio Header.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | Features | The guest features field |
Definition at line 141 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_SET_PAGE_SIZE) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 PageSize) |
Write the guest page size.
Note: This operation is not implemented by the VirtIo over PCI. The PCI implementation of this protocol returns EFI_SUCCESS.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | PageSize | Size of the Guest page in bytes. Must be a power of 2. |
EFI_SUCCESS | The data was written successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and write size. |
Definition at line 263 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_SET_QUEUE_ADDRESS) (IN VIRTIO_DEVICE_PROTOCOL *This, IN VRING *Ring, IN UINT64 RingBaseShift) |
Write the queue address field(s) in the Virtio Header.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | Ring | The initialized VRING object to take the addresses from. The caller is responsible for ensuring that on input, all Ring->NumPages pages, starting at Ring->Base, have been successfully mapped with a single call to This->MapSharedBuffer() for CommonBuffer bus master operation. |
[in] | RingBaseShift | Adding this value using UINT64 arithmetic to the addresses found in Ring translates them from system memory to bus addresses. The caller shall calculate RingBaseShift as (DeviceAddress - (UINT64)(UINTN)HostAddress), where DeviceAddress and HostAddress (i.e., Ring->Base) were output and input parameters of This->MapSharedBuffer(), respectively. |
EFI_SUCCESS | The data was written successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and write size. |
Definition at line 174 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_SET_QUEUE_ALIGN) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 Alignment) |
Write the queue alignment field in the Virtio Header.
The queue to which the alignment applies is selected by the Queue Select field.
Note: This operation is not implemented by the VirtIo over PCI. The PCI implementation of this protocol returns EFI_SUCCESS.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | Alignment | The alignment boundary of the Used Ring in bytes. Must be a power of 2. |
EFI_SUCCESS | The data was written successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and write size. |
Definition at line 241 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_SET_QUEUE_NOTIFY) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 Index) |
Write the queue notify field in the Virtio Header.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | Address | The 32-bit Queue Notify field |
EFI_SUCCESS | The data was written successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and write size. |
Definition at line 216 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_SET_QUEUE_NUM) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 QueueSize) |
Write to the QueueNum field in the Virtio Header.
This function only applies to Virtio-MMIO and may be a stub for other implementations. See Virtio Spec appendix X.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | QueueSize | The number of elements in the queue. |
EFI_SUCCESS | The data was written successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and write size. |
Definition at line 308 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_SET_QUEUE_SEL) (IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 Index) |
Write the queue select field in the Virtio Header.
Writing to the queue select field sets the index of the queue to which operations such as SetQueueAlign and GetQueueNumMax apply.
[in] | This | This instance of VIRTIO_DEVICE_PROTOCOL |
[in] | Index | The index of the queue to select |
EFI_SUCCESS | The data was written successfully. |
EFI_UNSUPPORTED | The underlying IO device doesn't support the provided address offset and write size. |
Definition at line 197 of file VirtioDevice.h.
typedef EFI_STATUS(EFIAPI * VIRTIO_UNMAP_SHARED) (IN VIRTIO_DEVICE_PROTOCOL *This, IN VOID *Mapping) |
Completes the VIRTIO_MAP_SHARED operation and releases any corresponding resources.
[in] | This | The protocol instance pointer. |
[in] | Mapping | The mapping token returned from VIRTIO_MAP_SHARED. |
EFI_SUCCESS | The range was unmapped. |
EFI_INVALID_PARAMETER | Mapping is not a value that was returned by VIRTIO_MAP_SHARED. Passing an invalid Mapping token can cause undefined behavior. |
EFI_DEVICE_ERROR | The data was not committed to the target system memory. |
Definition at line 463 of file VirtioDevice.h.
enum VIRTIO_MAP_OPERATION |
Definition at line 34 of file VirtioDevice.h.