/** @file
  Definitions from the VirtIo 1.0 specification (csprd05).

  Copyright (C) 2016, Red Hat, Inc.
  Copyright (C) 2017, AMD, Inc.

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#ifndef _VIRTIO_1_0_H_
#define _VIRTIO_1_0_H_

#include <IndustryStandard/Pci23.h>
#include <IndustryStandard/Virtio095.h>

//
// Subsystem Device IDs (to be) introduced in VirtIo 1.0
//
#define VIRTIO_SUBSYSTEM_GPU_DEVICE  16
//
// Subsystem Device IDs from the VirtIo spec at git commit 87fa6b5d8155;
// <https://github.com/oasis-tcs/virtio-spec/tree/87fa6b5d8155>.
//
#define VIRTIO_SUBSYSTEM_FILESYSTEM  26

//
// Structures for parsing the VirtIo 1.0 specific PCI capabilities from the
// config space
//
#pragma pack (1)
typedef struct {
  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

//
// 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
#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_
