/* TDX TD-Scope Metadata. To be used by TDG.VM.WR and TDG.VM.RD */ #define TDCS_CONFIG_FLAGS 0x1110000300000016 #define TDCS_TD_CTLS 0x1110000300000017 #define TDCS_NOTIFY_ENABLES 0x9100000000000010 #define TDCS_TOPOLOGY_ENUM_CONFIGURED 0x9100000000000019
/* * These registers are clobbered to hold arguments for each * TDVMCALL. They are safe to expose to the VMM. * Each bit in this mask represents a register ID. Bit field * details can be found in TDX GHCI specification, section * titled "TDCALL [TDG.VP.VMCALL] leaf".
*/ #define TDVMCALL_EXPOSE_REGS_MASK \
(TDX_RDX | TDX_RBX | TDX_RSI | TDX_RDI | TDX_R8 | TDX_R9 | \
TDX_R10 | TDX_R11 | TDX_R12 | TDX_R13 | TDX_R14 | TDX_R15)
/* TDX supported page sizes from the TDX module ABI. */ #define TDX_PS_4K 0 #define TDX_PS_2M 1 #define TDX_PS_1G 2 #define TDX_PS_NR (TDX_PS_1G + 1)
#ifndef __ASSEMBLER__
#include <linux/compiler_attributes.h>
/* * Used in __tdcall*() to gather the input/output registers' values of the * TDCALL instruction when requesting services from the TDX module. This is a * software only structure and not part of the TDX module/VMM ABI
*/ struct tdx_module_args { /* callee-clobbered */
u64 rcx;
u64 rdx;
u64 r8;
u64 r9; /* extra callee-clobbered */
u64 r10;
u64 r11; /* callee-saved + rdi/rsi */
u64 r12;
u64 r13;
u64 r14;
u64 r15;
u64 rbx;
u64 rdi;
u64 rsi;
};
/* Used to communicate with the TDX module */
u64 __tdcall(u64 fn, struct tdx_module_args *args);
u64 __tdcall_ret(u64 fn, struct tdx_module_args *args);
u64 __tdcall_saved_ret(u64 fn, struct tdx_module_args *args);
/* Used to request services from the VMM */
u64 __tdx_hypercall(struct tdx_module_args *args);
/* * Wrapper for standard use of __tdx_hypercall with no output aside from * return code.
*/ staticinline u64 _tdx_hypercall(u64 fn, u64 r12, u64 r13, u64 r14, u64 r15)
{ struct tdx_module_args args = {
.r10 = TDX_HYPERCALL_STANDARD,
.r11 = fn,
.r12 = r12,
.r13 = r13,
.r14 = r14,
.r15 = r15,
};
return __tdx_hypercall(&args);
}
/* Called from __tdx_hypercall() for unrecoverable failure */ void __noreturn __tdx_hypercall_failed(void);
/* * The TDG.VP.VMCALL-Instruction-execution sub-functions are defined * independently from but are currently matched 1:1 with VMX EXIT_REASONs. * Reusing the KVM EXIT_REASON macros makes it easier to connect the host and * guest sides of these calls.
*/ static __always_inline u64 hcall_func(u64 exit_reason)
{ return exit_reason;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.