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
psp_tee_process_cmd(enum tee_cmd_id cmd_id,void * buf,size_t len,u32 * status)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
psp_check_tee_status(void)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