14b05f815SKuppuswamy Sathyanarayanan /* SPDX-License-Identifier: GPL-2.0 */ 24b05f815SKuppuswamy Sathyanarayanan #ifndef _ASM_X86_SHARED_TDX_H 34b05f815SKuppuswamy Sathyanarayanan #define _ASM_X86_SHARED_TDX_H 44b05f815SKuppuswamy Sathyanarayanan 54c5b9aacSKirill A. Shutemov #include <linux/bits.h> 64c5b9aacSKirill A. Shutemov #include <linux/types.h> 74c5b9aacSKirill A. Shutemov 84c5b9aacSKirill A. Shutemov #define TDX_HYPERCALL_STANDARD 0 94c5b9aacSKirill A. Shutemov 104b05f815SKuppuswamy Sathyanarayanan #define TDX_CPUID_LEAF_ID 0x21 114b05f815SKuppuswamy Sathyanarayanan #define TDX_IDENT "IntelTDX " 124b05f815SKuppuswamy Sathyanarayanan 134c5b9aacSKirill A. Shutemov #ifndef __ASSEMBLY__ 144c5b9aacSKirill A. Shutemov 154c5b9aacSKirill A. Shutemov /* 164c5b9aacSKirill A. Shutemov * Used in __tdx_hypercall() to pass down and get back registers' values of 174c5b9aacSKirill A. Shutemov * the TDCALL instruction when requesting services from the VMM. 184c5b9aacSKirill A. Shutemov * 194c5b9aacSKirill A. Shutemov * This is a software only structure and not part of the TDX module/VMM ABI. 204c5b9aacSKirill A. Shutemov */ 214c5b9aacSKirill A. Shutemov struct tdx_hypercall_args { 220da908c2SKirill A. Shutemov u64 r8; 230da908c2SKirill A. Shutemov u64 r9; 244c5b9aacSKirill A. Shutemov u64 r10; 254c5b9aacSKirill A. Shutemov u64 r11; 264c5b9aacSKirill A. Shutemov u64 r12; 274c5b9aacSKirill A. Shutemov u64 r13; 284c5b9aacSKirill A. Shutemov u64 r14; 294c5b9aacSKirill A. Shutemov u64 r15; 300da908c2SKirill A. Shutemov u64 rdi; 310da908c2SKirill A. Shutemov u64 rsi; 320da908c2SKirill A. Shutemov u64 rbx; 330da908c2SKirill A. Shutemov u64 rdx; 344c5b9aacSKirill A. Shutemov }; 354c5b9aacSKirill A. Shutemov 364c5b9aacSKirill A. Shutemov /* Used to request services from the VMM */ 37*7a3a4018SKirill A. Shutemov u64 __tdx_hypercall(struct tdx_hypercall_args *args); 38*7a3a4018SKirill A. Shutemov u64 __tdx_hypercall_ret(struct tdx_hypercall_args *args); 394c5b9aacSKirill A. Shutemov 404c5b9aacSKirill A. Shutemov /* Called from __tdx_hypercall() for unrecoverable failure */ 414c5b9aacSKirill A. Shutemov void __tdx_hypercall_failed(void); 424c5b9aacSKirill A. Shutemov 434c5b9aacSKirill A. Shutemov #endif /* !__ASSEMBLY__ */ 444b05f815SKuppuswamy Sathyanarayanan #endif /* _ASM_X86_SHARED_TDX_H */ 45