1/** @file
2  Definitions from the VirtIo 1.0 specification (csprd05).
3
4  Copyright (C) 2016, Red Hat, Inc.
5
6  This program and the accompanying materials are licensed and made available
7  under the terms and conditions of the BSD License which accompanies this
8  distribution. The full text of the license may be found at
9  http://opensource.org/licenses/bsd-license.php
10
11  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
12  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13**/
14
15#ifndef _VIRTIO_1_0_H_
16#define _VIRTIO_1_0_H_
17
18#include <IndustryStandard/Virtio095.h>
19
20//
21// Subsystem Device IDs (to be) introduced in VirtIo 1.0
22//
23#define VIRTIO_SUBSYSTEM_GPU_DEVICE         16
24
25//
26// Structures for parsing the VirtIo 1.0 specific PCI capabilities from the
27// config space
28//
29#pragma pack (1)
30typedef struct {
31  UINT8 CapId;   // Capability identifier (generic)
32  UINT8 CapNext; // Link to next capability (generic)
33} VIRTIO_PCI_CAP_LINK;
34
35typedef struct {
36  UINT8  ConfigType; // Identifies the specific VirtIo 1.0 config structure
37  UINT8  Bar;        // The BAR that contains the structure
38  UINT8  Padding[3];
39  UINT32 Offset;     // Offset within Bar until the start of the structure
40  UINT32 Length;     // Length of the structure
41} VIRTIO_PCI_CAP;
42#pragma pack ()
43
44//
45// Values for the VIRTIO_PCI_CAP.ConfigType field
46//
47#define VIRTIO_PCI_CAP_COMMON_CFG 1 // Common configuration
48#define VIRTIO_PCI_CAP_NOTIFY_CFG 2 // Notifications
49#define VIRTIO_PCI_CAP_DEVICE_CFG 4 // Device specific configuration
50
51//
52// Structure pointed-to by Bar and Offset in VIRTIO_PCI_CAP when ConfigType is
53// VIRTIO_PCI_CAP_COMMON_CFG
54//
55#pragma pack (1)
56typedef struct {
57  UINT32 DeviceFeatureSelect;
58  UINT32 DeviceFeature;
59  UINT32 DriverFeatureSelect;
60  UINT32 DriverFeature;
61  UINT16 MsixConfig;
62  UINT16 NumQueues;
63  UINT8  DeviceStatus;
64  UINT8  ConfigGeneration;
65  UINT16 QueueSelect;
66  UINT16 QueueSize;
67  UINT16 QueueMsixVector;
68  UINT16 QueueEnable;
69  UINT16 QueueNotifyOff;
70  UINT64 QueueDesc;
71  UINT64 QueueAvail;
72  UINT64 QueueUsed;
73} VIRTIO_PCI_COMMON_CFG;
74#pragma pack ()
75
76//
77// VirtIo 1.0 device status bits
78//
79#define VSTAT_FEATURES_OK BIT3
80
81//
82// VirtIo 1.0 reserved (device-independent) feature bits
83//
84#define VIRTIO_F_VERSION_1 BIT32
85
86#endif // _VIRTIO_1_0_H_
87