On 2016-03-14 05:53:23, Laszlo Ersek wrote:
> These header files are intentionally minimal, and intentionally kept apart
> from the VirtIo 0.9.5 headers.
> 
> Cc: Ard Biesheuvel <[email protected]>
> Cc: Jordan Justen <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Laszlo Ersek <[email protected]>
> ---
>  OvmfPkg/Include/IndustryStandard/Virtio10.h    | 81 ++++++++++++++++++++
>  OvmfPkg/Include/IndustryStandard/Virtio10Net.h | 31 ++++++++
>  2 files changed, 112 insertions(+)
> 
> diff --git a/OvmfPkg/Include/IndustryStandard/Virtio10.h 
> b/OvmfPkg/Include/IndustryStandard/Virtio10.h
> new file mode 100644
> index 000000000000..722475c4ea55
> --- /dev/null
> +++ b/OvmfPkg/Include/IndustryStandard/Virtio10.h
> @@ -0,0 +1,81 @@
> +/** @file
> +  Definitions from the VirtIo 1.0 specification (csprd05).
> +
> +  Copyright (C) 2016, Red Hat, 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.
> +**/
> +
> +#ifndef _VIRTIO_1_0_H_
> +#define _VIRTIO_1_0_H_
> +
> +#include <Base.h>
> +
> +//
> +// Structures for parsing the VirtIo 1.0 specific PCI capabilities from the
> +// config space
> +//
> +#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
> +} 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
> +
> +//
> +// Structure pointed-to by Bar and Offset in VIRTIO_PCI_CAP when ConfigType 
> is
> +// VIRTIO_PCI_CAP_COMMON_CFG
> +//
> +#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;
> +} VIRTIO_PCI_COMMON_CFG;
> +#pragma pack ()
> +
> +//
> +// VirtIo 1.0 device status bits
> +//
> +#define VSTAT_FEATURES_OK BIT3
> +
> +//
> +// VirtIo 1.0 reserved (device-independent) feature bits
> +//
> +#define VIRTIO_F_VERSION_1 BIT32
> +
> +#endif // _VIRTIO_1_0_H_
> diff --git a/OvmfPkg/Include/IndustryStandard/Virtio10Net.h 
> b/OvmfPkg/Include/IndustryStandard/Virtio10Net.h
> new file mode 100644
> index 000000000000..2befc661dc62
> --- /dev/null
> +++ b/OvmfPkg/Include/IndustryStandard/Virtio10Net.h
> @@ -0,0 +1,31 @@
> +/** @file
> +  Definitions from the VirtIo 1.0 specification (csprd05), specifically for 
> the
> +  network device.
> +
> +  Copyright (C) 2016, Red Hat, 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.
> +**/
> +
> +#ifndef _VIRTIO_1_0_NET_H_
> +#define _VIRTIO_1_0_NET_H_
> +
> +#include <IndustryStandard/VirtioNet.h>
> +
> +//
> +// VirtIo 1.0 packet header
> +//
> +#pragma pack (1)
> +typedef struct {
> +  VIRTIO_NET_REQ Legacy;

This naming seems a bit unfortunate.

I thought the nested version structures seemed a bit strange for edk2.
Then I took a look at EFI_ACPI_4_0_FIXED_ACPI_DESCRIPTION_TABLE vs
EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE.

What are your thoughts?

-Jordan

> +  UINT16         NumBuffers;
> +} VIRTIO_1_0_NET_REQ;
> +#pragma pack ()
> +
> +#endif // _VIRTIO_1_0_NET_H_
> -- 
> 1.8.3.1
> 
> 
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to