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 | ||
65 | #else /* !CONFIG_CRYPTO_DEV_SP_PSP */ | |
66 | ||
67 | static inline int psp_tee_process_cmd(enum tee_cmd_id cmd_id, void *buf, | |
68 | size_t len, u32 *status) | |
69 | { | |
70 | return -ENODEV; | |
71 | } | |
72 | #endif /* CONFIG_CRYPTO_DEV_SP_PSP */ | |
73 | #endif /* __PSP_TEE_H_ */ |