X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=OvmfPkg%2FInclude%2FIndustryStandard%2FVirtio10.h;h=c47bcbd41ab77dd5247016f19c10fbd829c2bd29;hb=HEAD;hp=c5efb5cfcb8a298f86c3c06a8942886f50ce96e0;hpb=4fb268029e2263eecac8250496e05fc309e770c6;p=mirror_edk2.git diff --git a/OvmfPkg/Include/IndustryStandard/Virtio10.h b/OvmfPkg/Include/IndustryStandard/Virtio10.h index c5efb5cfcb..c47bcbd41a 100644 --- a/OvmfPkg/Include/IndustryStandard/Virtio10.h +++ b/OvmfPkg/Include/IndustryStandard/Virtio10.h @@ -4,24 +4,24 @@ Copyright (C) 2016, Red Hat, Inc. Copyright (C) 2017, AMD, Inc. - This program and the accompanying materials are licensed and made available - under the terms and conditions of the BSD License which accompanies this - distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT - WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _VIRTIO_1_0_H_ #define _VIRTIO_1_0_H_ +#include #include // // Subsystem Device IDs (to be) introduced in VirtIo 1.0 // -#define VIRTIO_SUBSYSTEM_GPU_DEVICE 16 +#define VIRTIO_SUBSYSTEM_GPU_DEVICE 16 +// +// Subsystem Device IDs from the VirtIo spec at git commit 87fa6b5d8155; +// . +// +#define VIRTIO_SUBSYSTEM_FILESYSTEM 26 // // Structures for parsing the VirtIo 1.0 specific PCI capabilities from the @@ -29,25 +29,21 @@ // #pragma pack (1) typedef struct { - UINT8 CapId; // Capability identifier (generic) - UINT8 CapNext; // Link to next capability (generic) -} VIRTIO_PCI_CAP_LINK; - -typedef struct { - UINT8 ConfigType; // Identifies the specific VirtIo 1.0 config structure - UINT8 Bar; // The BAR that contains the structure - UINT8 Padding[3]; - UINT32 Offset; // Offset within Bar until the start of the structure - UINT32 Length; // Length of the structure + EFI_PCI_CAPABILITY_VENDOR_HDR VendorHdr; + UINT8 ConfigType; // Identifies the specific VirtIo 1.0 config structure + UINT8 Bar; // The BAR that contains the structure + UINT8 Padding[3]; + UINT32 Offset; // Offset within Bar until the start of the structure + UINT32 Length; // Length of the structure } VIRTIO_PCI_CAP; #pragma pack () // // Values for the VIRTIO_PCI_CAP.ConfigType field // -#define VIRTIO_PCI_CAP_COMMON_CFG 1 // Common configuration -#define VIRTIO_PCI_CAP_NOTIFY_CFG 2 // Notifications -#define VIRTIO_PCI_CAP_DEVICE_CFG 4 // Device specific configuration +#define VIRTIO_PCI_CAP_COMMON_CFG 1 // Common configuration +#define VIRTIO_PCI_CAP_NOTIFY_CFG 2 // Notifications +#define VIRTIO_PCI_CAP_DEVICE_CFG 4 // Device specific configuration // // Structure pointed-to by Bar and Offset in VIRTIO_PCI_CAP when ConfigType is @@ -55,34 +51,46 @@ typedef struct { // #pragma pack (1) typedef struct { - UINT32 DeviceFeatureSelect; - UINT32 DeviceFeature; - UINT32 DriverFeatureSelect; - UINT32 DriverFeature; - UINT16 MsixConfig; - UINT16 NumQueues; - UINT8 DeviceStatus; - UINT8 ConfigGeneration; - UINT16 QueueSelect; - UINT16 QueueSize; - UINT16 QueueMsixVector; - UINT16 QueueEnable; - UINT16 QueueNotifyOff; - UINT64 QueueDesc; - UINT64 QueueAvail; - UINT64 QueueUsed; + UINT32 DeviceFeatureSelect; + UINT32 DeviceFeature; + UINT32 DriverFeatureSelect; + UINT32 DriverFeature; + UINT16 MsixConfig; + UINT16 NumQueues; + UINT8 DeviceStatus; + UINT8 ConfigGeneration; + UINT16 QueueSelect; + UINT16 QueueSize; + UINT16 QueueMsixVector; + UINT16 QueueEnable; + UINT16 QueueNotifyOff; + UINT64 QueueDesc; + UINT64 QueueAvail; + UINT64 QueueUsed; } VIRTIO_PCI_COMMON_CFG; #pragma pack () // // VirtIo 1.0 device status bits // -#define VSTAT_FEATURES_OK BIT3 +#define VSTAT_FEATURES_OK BIT3 // // VirtIo 1.0 reserved (device-independent) feature bits // -#define VIRTIO_F_VERSION_1 BIT32 -#define VIRTIO_F_IOMMU_PLATFORM BIT33 +#define VIRTIO_F_VERSION_1 BIT32 +#define VIRTIO_F_IOMMU_PLATFORM BIT33 + +// +// MMIO VirtIo Header Offsets +// +#define VIRTIO_MMIO_OFFSET_QUEUE_READY 0x44 +#define VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO 0x80 +#define VIRTIO_MMIO_OFFSET_QUEUE_DESC_HI 0x84 +#define VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_LO 0x90 +#define VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_HI 0x94 +#define VIRTIO_MMIO_OFFSET_QUEUE_USED_LO 0xa0 +#define VIRTIO_MMIO_OFFSET_QUEUE_USED_HI 0xa4 +#define VIRTIO_MMIO_OFFSET_CONFIG_GENERATION 0xfc #endif // _VIRTIO_1_0_H_