/** @file

  Virtio GPU Device specific type and macro definitions.

  At the time of this writing, the Virtio 1.0 specification has not
  incorporated the GPU device yet. The following work-in-progress specification
  is used as basis for the implementation:

  - https://lists.oasis-open.org/archives/virtio-dev/201605/msg00002.html
  - https://www.kraxel.org/virtio/

  This header file is minimal, and only defines the types and macros that are
  necessary for the OvmfPkg implementation.

  Copyright (C) 2016, Red Hat, Inc.

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _VIRTIO_GPU_H_
#define _VIRTIO_GPU_H_

#include <IndustryStandard/Virtio.h>

//
// Queue number for sending control commands.
//
#define VIRTIO_GPU_CONTROL_QUEUE  0

//
// Command and response types.
//
typedef enum {
  //
  // Commands related to mode setup:
  //
  // - create/release a host-side 2D resource,
  //
  VirtioGpuCmdGetDisplayInfo   = 0x0100,
  VirtioGpuCmdResourceCreate2d = 0x0101,
  VirtioGpuCmdResourceUnref    = 0x0102,
  //
  // - attach/detach guest RAM to/from a host-side 2D resource,
  //
  VirtioGpuCmdResourceAttachBacking = 0x0106,
  VirtioGpuCmdResourceDetachBacking = 0x0107,
  //
  // - assign/unassign a host-side 2D resource to/from a scanout ("head").
  //
  VirtioGpuCmdSetScanout = 0x0103,

  //
  // Commands related to drawing:
  //
  // - transfer a guest RAM update to the host-side 2D resource (does not imply
  //   host display refresh),
  //
  VirtioGpuCmdTransferToHost2d = 0x0105,
  //
  // - trigger a host display refresh from the 2D resource.
  //
  VirtioGpuCmdResourceFlush = 0x0104,

  //
  // Success code for all of the above commands.
  //
  VirtioGpuRespOkNodata      = 0x1100,
  VirtioGpuRespOkDisplayInfo = 0x1101,
} VIRTIO_GPU_CONTROL_TYPE;

//
// Common request/response header.
//
#define VIRTIO_GPU_FLAG_FENCE  BIT0

#pragma pack (1)
typedef struct {
  //
  // The guest sets Type to VirtioGpuCmd* in the requests. The host sets Type
  // to VirtioGpuResp* in the responses.
  //
  UINT32    Type;

  //
  // Fencing forces the host to complete the command before producing a
  // response.
  //
  UINT32    Flags;
  UINT64    FenceId;

  //
  // Unused.
  //
  UINT32    CtxId;
  UINT32    Padding;
} VIRTIO_GPU_CONTROL_HEADER;
#pragma pack ()

//
// Rectangle structure used by several operations.
//
#pragma pack (1)
typedef struct {
  UINT32    X;
  UINT32    Y;
  UINT32    Width;
  UINT32    Height;
} VIRTIO_GPU_RECTANGLE;
#pragma pack ()

//
// Request structure for VirtioGpuCmdResourceCreate2d.
//
typedef enum {
  //
  // 32-bit depth, BGRX component order, X component ignored.
  //
  VirtioGpuFormatB8G8R8X8Unorm = 2,
} VIRTIO_GPU_FORMATS;

#pragma pack (1)
typedef struct {
  VIRTIO_GPU_CONTROL_HEADER    Header;
  UINT32                       ResourceId; // note: 0 is invalid
  UINT32                       Format;     // from VIRTIO_GPU_FORMATS
  UINT32                       Width;
  UINT32                       Height;
} VIRTIO_GPU_RESOURCE_CREATE_2D;
#pragma pack ()

//
// Request structure for VirtioGpuCmdResourceUnref.
//
#pragma pack (1)
typedef struct {
  VIRTIO_GPU_CONTROL_HEADER    Header;
  UINT32                       ResourceId;
  UINT32                       Padding;
} VIRTIO_GPU_RESOURCE_UNREF;
#pragma pack ()

//
// Request structure for VirtioGpuCmdResourceAttachBacking.
//
// The spec allows for a scatter-gather list, but for simplicity we hard-code a
// single guest buffer.
//
#pragma pack (1)
typedef struct {
  UINT64    Addr;
  UINT32    Length;
  UINT32    Padding;
} VIRTIO_GPU_MEM_ENTRY;

typedef struct {
  VIRTIO_GPU_CONTROL_HEADER    Header;
  UINT32                       ResourceId;
  UINT32                       NrEntries; // number of entries: constant 1
  VIRTIO_GPU_MEM_ENTRY         Entry;
} VIRTIO_GPU_RESOURCE_ATTACH_BACKING;
#pragma pack ()

//
// Request structure for VirtioGpuCmdResourceDetachBacking.
//
#pragma pack (1)
typedef struct {
  VIRTIO_GPU_CONTROL_HEADER    Header;
  UINT32                       ResourceId;
  UINT32                       Padding;
} VIRTIO_GPU_RESOURCE_DETACH_BACKING;
#pragma pack ()

//
// Request structure for VirtioGpuCmdSetScanout.
//
#pragma pack (1)
typedef struct {
  VIRTIO_GPU_CONTROL_HEADER    Header;
  VIRTIO_GPU_RECTANGLE         Rectangle;
  UINT32                       ScanoutId;
  UINT32                       ResourceId;
} VIRTIO_GPU_SET_SCANOUT;
#pragma pack ()

//
// Request structure for VirtioGpuCmdTransferToHost2d.
//
#pragma pack (1)
typedef struct {
  VIRTIO_GPU_CONTROL_HEADER    Header;
  VIRTIO_GPU_RECTANGLE         Rectangle;
  UINT64                       Offset;
  UINT32                       ResourceId;
  UINT32                       Padding;
}  VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D;
#pragma pack ()

//
// Request structure for VirtioGpuCmdResourceFlush.
//
#pragma pack (1)
typedef struct {
  VIRTIO_GPU_CONTROL_HEADER    Header;
  VIRTIO_GPU_RECTANGLE         Rectangle;
  UINT32                       ResourceId;
  UINT32                       Padding;
} VIRTIO_GPU_RESOURCE_FLUSH;
#pragma pack ()

//
// Response structure for VirtioGpuCmdGetDisplayInfo
//
#define VIRTIO_GPU_MAX_SCANOUTS  16
#pragma pack (1)
typedef struct {
  VIRTIO_GPU_CONTROL_HEADER    Header;
  struct {
    VIRTIO_GPU_RECTANGLE    Rectangle;
    UINT32                  Enabled;
    UINT32                  Flags;
  } Pmodes[VIRTIO_GPU_MAX_SCANOUTS];
} VIRTIO_GPU_RESP_DISPLAY_INFO;
#pragma pack ()

#endif // _VIRTIO_GPU_H_
