mirror of https://gitlab.com/qemu-project/qemu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.3 KiB
C
83 lines
2.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#ifndef QEMU_I386_TDX_QUOTE_GENERATOR_H
|
|
#define QEMU_I386_TDX_QUOTE_GENERATOR_H
|
|
|
|
#include "qom/object_interfaces.h"
|
|
#include "io/channel-socket.h"
|
|
#include "exec/hwaddr.h"
|
|
|
|
#define TDX_GET_QUOTE_STRUCTURE_VERSION 1ULL
|
|
|
|
#define TDX_VP_GET_QUOTE_SUCCESS 0ULL
|
|
#define TDX_VP_GET_QUOTE_IN_FLIGHT (-1ULL)
|
|
#define TDX_VP_GET_QUOTE_ERROR 0x8000000000000000ULL
|
|
#define TDX_VP_GET_QUOTE_QGS_UNAVAILABLE 0x8000000000000001ULL
|
|
|
|
/* Limit to avoid resource starvation. */
|
|
#define TDX_GET_QUOTE_MAX_BUF_LEN (128 * 1024)
|
|
#define TDX_MAX_GET_QUOTE_REQUEST 16
|
|
|
|
#define TDX_GET_QUOTE_HDR_SIZE 24
|
|
|
|
/* Format of pages shared with guest. */
|
|
struct tdx_get_quote_header {
|
|
/* Format version: must be 1 in little endian. */
|
|
uint64_t structure_version;
|
|
|
|
/*
|
|
* GetQuote status code in little endian:
|
|
* Guest must set error_code to 0 to avoid information leak.
|
|
* Qemu sets this before interrupting guest.
|
|
*/
|
|
uint64_t error_code;
|
|
|
|
/*
|
|
* in-message size in little endian: The message will follow this header.
|
|
* The in-message will be send to QGS.
|
|
*/
|
|
uint32_t in_len;
|
|
|
|
/*
|
|
* out-message size in little endian:
|
|
* On request, out_len must be zero to avoid information leak.
|
|
* On return, message size from QGS. Qemu overwrites this field.
|
|
* The message will follows this header. The in-message is overwritten.
|
|
*/
|
|
uint32_t out_len;
|
|
|
|
/*
|
|
* Message buffer follows.
|
|
* Guest sets message that will be send to QGS. If out_len > in_len, guest
|
|
* should zero remaining buffer to avoid information leak.
|
|
* Qemu overwrites this buffer with a message returned from QGS.
|
|
*/
|
|
};
|
|
|
|
typedef struct TdxGenerateQuoteTask {
|
|
hwaddr buf_gpa;
|
|
hwaddr payload_gpa;
|
|
uint64_t payload_len;
|
|
|
|
char *send_data;
|
|
uint64_t send_data_size;
|
|
uint64_t send_data_sent;
|
|
|
|
char *receive_buf;
|
|
uint64_t receive_buf_received;
|
|
|
|
uint64_t status_code;
|
|
struct tdx_get_quote_header hdr;
|
|
|
|
QIOChannelSocket *sioc;
|
|
guint watch;
|
|
QEMUTimer timer;
|
|
|
|
void (*completion)(struct TdxGenerateQuoteTask *task);
|
|
void *opaque;
|
|
} TdxGenerateQuoteTask;
|
|
|
|
void tdx_generate_quote(TdxGenerateQuoteTask *task, SocketAddress *qg_sock_addr);
|
|
|
|
#endif /* QEMU_I386_TDX_QUOTE_GENERATOR_H */
|