1 /* SPDX-License-Identifier: MIT */ 2 /* 3 * AMD Trusted Execution Environment (TEE) interface 4 * 5 * Author: Rijo Thomas <Rijo-john.Thomas@amd.com> 6 * 7 * Copyright 2019 Advanced Micro Devices, Inc. 8 * 9 */ 10 11 #ifndef __PSP_TEE_H_ 12 #define __PSP_TEE_H_ 13 14 #include <linux/types.h> 15 #include <linux/errno.h> 16 17 /* This file defines the Trusted Execution Environment (TEE) interface commands 18 * and the API exported by AMD Secure Processor driver to communicate with 19 * AMD-TEE Trusted OS. 20 */ 21 22 /** 23 * enum tee_cmd_id - TEE Interface Command IDs 24 * @TEE_CMD_ID_LOAD_TA: Load Trusted Application (TA) binary into 25 * TEE environment 26 * @TEE_CMD_ID_UNLOAD_TA: Unload TA binary from TEE environment 27 * @TEE_CMD_ID_OPEN_SESSION: Open session with loaded TA 28 * @TEE_CMD_ID_CLOSE_SESSION: Close session with loaded TA 29 * @TEE_CMD_ID_INVOKE_CMD: Invoke a command with loaded TA 30 * @TEE_CMD_ID_MAP_SHARED_MEM: Map shared memory 31 * @TEE_CMD_ID_UNMAP_SHARED_MEM: Unmap shared memory 32 */ 33 enum tee_cmd_id { 34 TEE_CMD_ID_LOAD_TA = 1, 35 TEE_CMD_ID_UNLOAD_TA, 36 TEE_CMD_ID_OPEN_SESSION, 37 TEE_CMD_ID_CLOSE_SESSION, 38 TEE_CMD_ID_INVOKE_CMD, 39 TEE_CMD_ID_MAP_SHARED_MEM, 40 TEE_CMD_ID_UNMAP_SHARED_MEM, 41 }; 42 43 #ifdef CONFIG_CRYPTO_DEV_SP_PSP 44 /** 45 * psp_tee_process_cmd() - Process command in Trusted Execution Environment 46 * @cmd_id: TEE command ID (&enum tee_cmd_id) 47 * @buf: Command buffer for TEE processing. On success, is updated 48 * with the response 49 * @len: Length of command buffer in bytes 50 * @status: On success, holds the TEE command execution status 51 * 52 * This function submits a command to the Trusted OS for processing in the 53 * TEE environment and waits for a response or until the command times out. 54 * 55 * Returns: 56 * 0 if TEE successfully processed the command 57 * -%ENODEV if PSP device not available 58 * -%EINVAL if invalid input 59 * -%ETIMEDOUT if TEE command timed out 60 * -%EBUSY if PSP device is not responsive 61 */ 62 int psp_tee_process_cmd(enum tee_cmd_id cmd_id, void *buf, size_t len, 63 u32 *status); 64 65 /** 66 * psp_check_tee_status() - Checks whether there is a TEE which a driver can 67 * talk to. 68 * 69 * This function can be used by AMD-TEE driver to query if there is TEE with 70 * which it can communicate. 71 * 72 * Returns: 73 * 0 if the device has TEE 74 * -%ENODEV if there is no TEE available 75 */ 76 int psp_check_tee_status(void); 77 78 #else /* !CONFIG_CRYPTO_DEV_SP_PSP */ 79 80 static inline int psp_tee_process_cmd(enum tee_cmd_id cmd_id, void *buf, 81 size_t len, u32 *status) 82 { 83 return -ENODEV; 84 } 85 86 static inline int psp_check_tee_status(void) 87 { 88 return -ENODEV; 89 } 90 #endif /* CONFIG_CRYPTO_DEV_SP_PSP */ 91 #endif /* __PSP_TEE_H_ */ 92
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.