• Kirill A. Shutemov's avatar
    x86/tdx: Provide common base for SEAMCALL and TDCALL C wrappers · 527a534c
    Kirill A. Shutemov authored
    Secure Arbitration Mode (SEAM) is an extension of VMX architecture.  It
    defines a new VMX root operation (SEAM VMX root) and a new VMX non-root
    operation (SEAM VMX non-root) which are both isolated from the legacy
    VMX operation where the host kernel runs.
    
    A CPU-attested software module (called 'TDX module') runs in SEAM VMX
    root to manage and protect VMs running in SEAM VMX non-root.  SEAM VMX
    root is also used to host another CPU-attested software module (called
    'P-SEAMLDR') to load and update the TDX module.
    
    Host kernel transits to either P-SEAMLDR or TDX module via the new
    SEAMCALL instruction, which is essentially a VMExit from VMX root mode
    to SEAM VMX root mode.  SEAMCALLs are leaf functions defined by
    P-SEAMLDR and TDX module around the new SEAMCALL instruction.
    
    A guest kernel can also communicate with TDX module via TDCALL
    instruction.
    
    TDCALLs and SEAMCALLs use an ABI different from the x86-64 system-v ABI.
    RAX is used to carry both the SEAMCALL leaf function number (input) and
    the completion status (output).  Additional GPRs (RCX, RDX, R8-R11) may
    be further used as both input and output operands in individual leaf.
    
    TDCALL and SEAMCALL share the same ABI and require the largely same
    code to pass down arguments and retrieve results.
    
    Define an assembly macro that can be used to implement C wrapper for
    both TDCALL and SEAMCALL.
    Suggested-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/20220405232939.73860-3-kirill.shutemov@linux.intel.com
    527a534c
tdxcall.S 2.5 KB