psp-tee.h (2716B)
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 */ 33enum 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 */ 62int 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 */ 76int psp_check_tee_status(void); 77 78#else /* !CONFIG_CRYPTO_DEV_SP_PSP */ 79 80static 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 86static inline int psp_check_tee_status(void) 87{ 88 return -ENODEV; 89} 90#endif /* CONFIG_CRYPTO_DEV_SP_PSP */ 91#endif /* __PSP_TEE_H_ */