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