Commit | Line | Data |
---|---|---|
632b0b53 RT |
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 | ||
bade7e1f RT |
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 | ||
632b0b53 RT |
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 | } | |
bade7e1f RT |
85 | |
86 | static inline int psp_check_tee_status(void) | |
87 | { | |
88 | return -ENODEV; | |
89 | } | |
632b0b53 RT |
90 | #endif /* CONFIG_CRYPTO_DEV_SP_PSP */ |
91 | #endif /* __PSP_TEE_H_ */ |