File Index
Files and directories
Sign in
FILE

tdx.h

File preview with syntax highlighting.

linux-6.19.14/arch/x86/virt/vmx/tdx/tdx.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _X86_VIRT_TDX_H
  3#define _X86_VIRT_TDX_H
  4
  5#include <linux/bits.h>
  6
  7/*
  8 * This file contains both macros and data structures defined by the TDX
  9 * architecture and Linux defined software data structures and functions.
 10 * The two should not be mixed together for better readability.  The
 11 * architectural definitions come first.
 12 */
 13
 14/*
 15 * TDX module SEAMCALL leaf functions
 16 */
 17#define TDH_VP_ENTER			0
 18#define TDH_MNG_ADDCX			1
 19#define TDH_MEM_PAGE_ADD		2
 20#define TDH_MEM_SEPT_ADD		3
 21#define TDH_VP_ADDCX			4
 22#define TDH_MEM_PAGE_AUG		6
 23#define TDH_MEM_RANGE_BLOCK		7
 24#define TDH_MNG_KEY_CONFIG		8
 25#define TDH_MNG_CREATE			9
 26#define TDH_MNG_RD			11
 27#define TDH_MR_EXTEND			16
 28#define TDH_MR_FINALIZE			17
 29#define TDH_VP_FLUSH			18
 30#define TDH_MNG_VPFLUSHDONE		19
 31#define TDH_VP_CREATE			10
 32#define TDH_MNG_KEY_FREEID		20
 33#define TDH_MNG_INIT			21
 34#define TDH_VP_INIT			22
 35#define TDH_PHYMEM_PAGE_RDMD		24
 36#define TDH_VP_RD			26
 37#define TDH_PHYMEM_PAGE_RECLAIM		28
 38#define TDH_MEM_PAGE_REMOVE		29
 39#define TDH_SYS_KEY_CONFIG		31
 40#define TDH_SYS_INIT			33
 41#define TDH_SYS_RD			34
 42#define TDH_SYS_LP_INIT			35
 43#define TDH_SYS_TDMR_INIT		36
 44#define TDH_MEM_TRACK			38
 45#define TDH_PHYMEM_CACHE_WB		40
 46#define TDH_PHYMEM_PAGE_WBINVD		41
 47#define TDH_VP_WR			43
 48#define TDH_SYS_CONFIG			45
 49
 50/*
 51 * SEAMCALL leaf:
 52 *
 53 * Bit 15:0	Leaf number
 54 * Bit 23:16	Version number
 55 */
 56#define TDX_VERSION_SHIFT		16
 57
 58/* TDX page types */
 59#define	PT_NDA		0x0
 60#define	PT_RSVD		0x1
 61
 62struct tdmr_reserved_area {
 63	u64 offset;
 64	u64 size;
 65} __packed;
 66
 67#define TDMR_INFO_ALIGNMENT	512
 68#define TDMR_INFO_PA_ARRAY_ALIGNMENT	512
 69
 70struct tdmr_info {
 71	u64 base;
 72	u64 size;
 73	u64 pamt_1g_base;
 74	u64 pamt_1g_size;
 75	u64 pamt_2m_base;
 76	u64 pamt_2m_size;
 77	u64 pamt_4k_base;
 78	u64 pamt_4k_size;
 79	/*
 80	 * The actual number of reserved areas depends on the value of
 81	 * field MD_FIELD_ID_MAX_RESERVED_PER_TDMR in the TDX module
 82	 * global metadata.
 83	 */
 84	DECLARE_FLEX_ARRAY(struct tdmr_reserved_area, reserved_areas);
 85} __packed __aligned(TDMR_INFO_ALIGNMENT);
 86
 87/* Bit definitions of TDX_FEATURES0 metadata field */
 88#define TDX_FEATURES0_NO_RBP_MOD	BIT(18)
 89
 90/*
 91 * Do not put any hardware-defined TDX structure representations below
 92 * this comment!
 93 */
 94
 95/* Kernel defined TDX module status during module initialization. */
 96enum tdx_module_status_t {
 97	TDX_MODULE_UNINITIALIZED,
 98	TDX_MODULE_INITIALIZED,
 99	TDX_MODULE_ERROR
100};
101
102struct tdx_memblock {
103	struct list_head list;
104	unsigned long start_pfn;
105	unsigned long end_pfn;
106	int nid;
107};
108
109/* Warn if kernel has less than TDMR_NR_WARN TDMRs after allocation */
110#define TDMR_NR_WARN 4
111
112struct tdmr_info_list {
113	void *tdmrs;	/* Flexible array to hold 'tdmr_info's */
114	int nr_consumed_tdmrs;	/* How many 'tdmr_info's are in use */
115
116	/* Metadata for finding target 'tdmr_info' and freeing @tdmrs */
117	int tdmr_sz;	/* Size of one 'tdmr_info' */
118	int max_tdmrs;	/* How many 'tdmr_info's are allocated */
119};
120
121#endif
~/ Read-only file preview.