lkml.org 
[lkml]   [2022]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v5 016/104] KVM: TDX: Add C wrapper functions for SEAMCALLs to the TDX module
    Date
    From: Sean Christopherson <sean.j.christopherson@intel.com>

    TDX SEAMCALL interface is defined in the TDX module specification. Define
    C wrapper functions for SEAMCALLs for readability.

    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
    ---
    arch/x86/kvm/vmx/tdx_ops.h | 161 +++++++++++++++++++++++++++++++++++++
    1 file changed, 161 insertions(+)
    create mode 100644 arch/x86/kvm/vmx/tdx_ops.h

    diff --git a/arch/x86/kvm/vmx/tdx_ops.h b/arch/x86/kvm/vmx/tdx_ops.h
    new file mode 100644
    index 000000000000..0bed43879b82
    --- /dev/null
    +++ b/arch/x86/kvm/vmx/tdx_ops.h
    @@ -0,0 +1,161 @@
    +/* SPDX-License-Identifier: GPL-2.0 */
    +/* constants/data definitions for TDX SEAMCALLs */
    +
    +#ifndef __KVM_X86_TDX_OPS_H
    +#define __KVM_X86_TDX_OPS_H
    +
    +#include <linux/compiler.h>
    +
    +#include <asm/asm.h>
    +#include <asm/kvm_host.h>
    +
    +#include "tdx_errno.h"
    +#include "tdx_arch.h"
    +#include "seamcall.h"
    +
    +#ifdef CONFIG_INTEL_TDX_HOST
    +
    +static inline u64 tdh_mng_addcx(hpa_t tdr, hpa_t addr)
    +{
    + return kvm_seamcall(TDH_MNG_ADDCX, addr, tdr, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_mem_page_add(hpa_t tdr, gpa_t gpa, hpa_t hpa, hpa_t source,
    + struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_MEM_PAGE_ADD, gpa, tdr, hpa, source, 0, out);
    +}
    +
    +static inline u64 tdh_mem_sept_add(hpa_t tdr, gpa_t gpa, int level, hpa_t page,
    + struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_MEM_SEPT_ADD, gpa | level, tdr, page, 0, 0, out);
    +}
    +
    +static inline u64 tdh_vp_addcx(hpa_t tdvpr, hpa_t addr)
    +{
    + return kvm_seamcall(TDH_VP_ADDCX, addr, tdvpr, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_mem_page_aug(hpa_t tdr, gpa_t gpa, hpa_t hpa,
    + struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_MEM_PAGE_AUG, gpa, tdr, hpa, 0, 0, out);
    +}
    +
    +static inline u64 tdh_mem_range_block(hpa_t tdr, gpa_t gpa, int level,
    + struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_MEM_RANGE_BLOCK, gpa | level, tdr, 0, 0, 0, out);
    +}
    +
    +static inline u64 tdh_mng_key_config(hpa_t tdr)
    +{
    + return kvm_seamcall(TDH_MNG_KEY_CONFIG, tdr, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_mng_create(hpa_t tdr, int hkid)
    +{
    + return kvm_seamcall(TDH_MNG_CREATE, tdr, hkid, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_vp_create(hpa_t tdr, hpa_t tdvpr)
    +{
    + return kvm_seamcall(TDH_VP_CREATE, tdvpr, tdr, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_mng_rd(hpa_t tdr, u64 field, struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_MNG_RD, tdr, field, 0, 0, 0, out);
    +}
    +
    +static inline u64 tdh_mr_extend(hpa_t tdr, gpa_t gpa, struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_MR_EXTEND, gpa, tdr, 0, 0, 0, out);
    +}
    +
    +static inline u64 tdh_mr_finalize(hpa_t tdr)
    +{
    + return kvm_seamcall(TDH_MR_FINALIZE, tdr, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_vp_flush(hpa_t tdvpr)
    +{
    + return kvm_seamcall(TDH_VP_FLUSH, tdvpr, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_mng_vpflushdone(hpa_t tdr)
    +{
    + return kvm_seamcall(TDH_MNG_VPFLUSHDONE, tdr, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_mng_key_freeid(hpa_t tdr)
    +{
    + return kvm_seamcall(TDH_MNG_KEY_FREEID, tdr, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_mng_init(hpa_t tdr, hpa_t td_params, struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_MNG_INIT, tdr, td_params, 0, 0, 0, out);
    +}
    +
    +static inline u64 tdh_vp_init(hpa_t tdvpr, u64 rcx)
    +{
    + return kvm_seamcall(TDH_VP_INIT, tdvpr, rcx, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_vp_rd(hpa_t tdvpr, u64 field, struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_VP_RD, tdvpr, field, 0, 0, 0, out);
    +}
    +
    +static inline u64 tdh_mng_key_reclaimid(hpa_t tdr)
    +{
    + return kvm_seamcall(TDH_MNG_KEY_RECLAIMID, tdr, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_phymem_page_reclaim(hpa_t page, struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_PHYMEM_PAGE_RECLAIM, page, 0, 0, 0, 0, out);
    +}
    +
    +static inline u64 tdh_mem_page_remove(hpa_t tdr, gpa_t gpa, int level,
    + struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_MEM_PAGE_REMOVE, gpa | level, tdr, 0, 0, 0, out);
    +}
    +
    +static inline u64 tdh_sys_lp_shutdown(void)
    +{
    + return kvm_seamcall(TDH_SYS_LP_SHUTDOWN, 0, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_mem_track(hpa_t tdr)
    +{
    + return kvm_seamcall(TDH_MEM_TRACK, tdr, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_mem_range_unblock(hpa_t tdr, gpa_t gpa, int level,
    + struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_MEM_RANGE_UNBLOCK, gpa | level, tdr, 0, 0, 0, out);
    +}
    +
    +static inline u64 tdh_phymem_cache_wb(bool resume)
    +{
    + return kvm_seamcall(TDH_PHYMEM_CACHE_WB, resume ? 1 : 0, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_phymem_page_wbinvd(hpa_t page)
    +{
    + return kvm_seamcall(TDH_PHYMEM_PAGE_WBINVD, page, 0, 0, 0, 0, NULL);
    +}
    +
    +static inline u64 tdh_vp_wr(hpa_t tdvpr, u64 field, u64 val, u64 mask,
    + struct tdx_module_output *out)
    +{
    + return kvm_seamcall(TDH_VP_WR, tdvpr, field, val, mask, 0, out);
    +}
    +#endif /* CONFIG_INTEL_TDX_HOST */
    +
    +#endif /* __KVM_X86_TDX_OPS_H */
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-03-04 21:07    [W:2.249 / U:1.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site