120 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Confidential Computing Platform Capability checks4 *5 * Copyright (C) 2021 Advanced Micro Devices, Inc.6 *7 * Author: Tom Lendacky <thomas.lendacky@amd.com>8 */9 10#ifndef _LINUX_CC_PLATFORM_H11#define _LINUX_CC_PLATFORM_H12 13#include <linux/types.h>14#include <linux/stddef.h>15 16/**17 * enum cc_attr - Confidential computing attributes18 *19 * These attributes represent confidential computing features that are20 * currently active.21 */22enum cc_attr {23 /**24 * @CC_ATTR_MEM_ENCRYPT: Memory encryption is active25 *26 * The platform/OS is running with active memory encryption. This27 * includes running either as a bare-metal system or a hypervisor28 * and actively using memory encryption or as a guest/virtual machine29 * and actively using memory encryption.30 *31 * Examples include SME, SEV and SEV-ES.32 */33 CC_ATTR_MEM_ENCRYPT,34 35 /**36 * @CC_ATTR_HOST_MEM_ENCRYPT: Host memory encryption is active37 *38 * The platform/OS is running as a bare-metal system or a hypervisor39 * and actively using memory encryption.40 *41 * Examples include SME.42 */43 CC_ATTR_HOST_MEM_ENCRYPT,44 45 /**46 * @CC_ATTR_GUEST_MEM_ENCRYPT: Guest memory encryption is active47 *48 * The platform/OS is running as a guest/virtual machine and actively49 * using memory encryption.50 *51 * Examples include SEV and SEV-ES.52 */53 CC_ATTR_GUEST_MEM_ENCRYPT,54 55 /**56 * @CC_ATTR_GUEST_STATE_ENCRYPT: Guest state encryption is active57 *58 * The platform/OS is running as a guest/virtual machine and actively59 * using memory encryption and register state encryption.60 *61 * Examples include SEV-ES.62 */63 CC_ATTR_GUEST_STATE_ENCRYPT,64 65 /**66 * @CC_ATTR_GUEST_UNROLL_STRING_IO: String I/O is implemented with67 * IN/OUT instructions68 *69 * The platform/OS is running as a guest/virtual machine and uses70 * IN/OUT instructions in place of string I/O.71 *72 * Examples include TDX guest & SEV.73 */74 CC_ATTR_GUEST_UNROLL_STRING_IO,75 76 /**77 * @CC_ATTR_SEV_SNP: Guest SNP is active.78 *79 * The platform/OS is running as a guest/virtual machine and actively80 * using AMD SEV-SNP features.81 */82 CC_ATTR_GUEST_SEV_SNP,83 84 /**85 * @CC_ATTR_HOST_SEV_SNP: AMD SNP enabled on the host.86 *87 * The host kernel is running with the necessary features88 * enabled to run SEV-SNP guests.89 */90 CC_ATTR_HOST_SEV_SNP,91};92 93#ifdef CONFIG_ARCH_HAS_CC_PLATFORM94 95/**96 * cc_platform_has() - Checks if the specified cc_attr attribute is active97 * @attr: Confidential computing attribute to check98 *99 * The cc_platform_has() function will return an indicator as to whether the100 * specified Confidential Computing attribute is currently active.101 *102 * Context: Any context103 * Return:104 * * TRUE - Specified Confidential Computing attribute is active105 * * FALSE - Specified Confidential Computing attribute is not active106 */107bool cc_platform_has(enum cc_attr attr);108void cc_platform_set(enum cc_attr attr);109void cc_platform_clear(enum cc_attr attr);110 111#else /* !CONFIG_ARCH_HAS_CC_PLATFORM */112 113static inline bool cc_platform_has(enum cc_attr attr) { return false; }114static inline void cc_platform_set(enum cc_attr attr) { }115static inline void cc_platform_clear(enum cc_attr attr) { }116 117#endif /* CONFIG_ARCH_HAS_CC_PLATFORM */118 119#endif /* _LINUX_CC_PLATFORM_H */120