/* SPDX-License-Identifier: MIT */ /* * AMD Trusted Execution Environment (TEE) interface * * Author: Rijo Thomas <Rijo-john.Thomas@amd.com> * * Copyright 2019 Advanced Micro Devices, Inc. * */ #ifndef __PSP_TEE_H_ #define __PSP_TEE_H_ #include <linux/types.h> #include <linux/errno.h> /* This file defines the Trusted Execution Environment (TEE) interface commands * and the API exported by AMD Secure Processor driver to communicate with * AMD-TEE Trusted OS. */ /** * enum tee_cmd_id - TEE Interface Command IDs * @TEE_CMD_ID_LOAD_TA: Load Trusted Application (TA) binary into * TEE environment * @TEE_CMD_ID_UNLOAD_TA: Unload TA binary from TEE environment * @TEE_CMD_ID_OPEN_SESSION: Open session with loaded TA * @TEE_CMD_ID_CLOSE_SESSION: Close session with loaded TA * @TEE_CMD_ID_INVOKE_CMD: Invoke a command with loaded TA * @TEE_CMD_ID_MAP_SHARED_MEM: Map shared memory * @TEE_CMD_ID_UNMAP_SHARED_MEM: Unmap shared memory */ enum tee_cmd_id { TEE_CMD_ID_LOAD_TA = 1, TEE_CMD_ID_UNLOAD_TA, TEE_CMD_ID_OPEN_SESSION, TEE_CMD_ID_CLOSE_SESSION, TEE_CMD_ID_INVOKE_CMD, TEE_CMD_ID_MAP_SHARED_MEM, TEE_CMD_ID_UNMAP_SHARED_MEM, }; #ifdef CONFIG_CRYPTO_DEV_SP_PSP /** * psp_tee_process_cmd() - Process command in Trusted Execution Environment * @cmd_id: TEE command ID (&enum tee_cmd_id) * @buf: Command buffer for TEE processing. On success, is updated * with the response * @len: Length of command buffer in bytes * @status: On success, holds the TEE command execution status * * This function submits a command to the Trusted OS for processing in the * TEE environment and waits for a response or until the command times out. * * Returns: * 0 if TEE successfully processed the command * -%ENODEV if PSP device not available * -%EINVAL if invalid input * -%ETIMEDOUT if TEE command timed out * -%EBUSY if PSP device is not responsive */ int psp_tee_process_cmd(enum tee_cmd_id cmd_id, void *buf, size_t len, u32 *status); /** * psp_check_tee_status() - Checks whether there is a TEE which a driver can * talk to. * * This function can be used by AMD-TEE driver to query if there is TEE with * which it can communicate. * * Returns: * 0 if the device has TEE * -%ENODEV if there is no TEE available */ int psp_check_tee_status(void); #else /* !CONFIG_CRYPTO_DEV_SP_PSP */ static inline int psp_tee_process_cmd(enum tee_cmd_id cmd_id, void *buf, size_t len, u32 *status) { return -ENODEV; } static inline int psp_check_tee_status(void) { return -ENODEV; } #endif /* CONFIG_CRYPTO_DEV_SP_PSP */ #endif /* __PSP_TEE_H_ */