|  | /* SPDX-License-Identifier: MIT */ | 
|  | /* | 
|  | * AMD Trusted Execution Environment (TEE) interface | 
|  | * | 
|  | * Author: Rijo Thomas <[email protected]> | 
|  | * | 
|  | * Copyright 2019 Advanced Micro Devices, Inc. | 
|  | * | 
|  | */ | 
|  |  | 
|  | #ifndef __PSP_TEE_H_ | 
|  | #define __PSP_TEE_H_ | 
|  |  | 
|  | #include <linux/types.h> | 
|  | #include <linux/errno.h> | 
|  |  | 
|  | /* This file defines the Trusted Execution Environment (TEE) interface commands | 
|  | * and the API exported by AMD Secure Processor driver to communicate with | 
|  | * AMD-TEE Trusted OS. | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * enum tee_cmd_id - TEE Interface Command IDs | 
|  | * @TEE_CMD_ID_LOAD_TA:          Load Trusted Application (TA) binary into | 
|  | *                               TEE environment | 
|  | * @TEE_CMD_ID_UNLOAD_TA:        Unload TA binary from TEE environment | 
|  | * @TEE_CMD_ID_OPEN_SESSION:     Open session with loaded TA | 
|  | * @TEE_CMD_ID_CLOSE_SESSION:    Close session with loaded TA | 
|  | * @TEE_CMD_ID_INVOKE_CMD:       Invoke a command with loaded TA | 
|  | * @TEE_CMD_ID_MAP_SHARED_MEM:   Map shared memory | 
|  | * @TEE_CMD_ID_UNMAP_SHARED_MEM: Unmap shared memory | 
|  | */ | 
|  | enum tee_cmd_id { | 
|  | TEE_CMD_ID_LOAD_TA = 1, | 
|  | TEE_CMD_ID_UNLOAD_TA, | 
|  | TEE_CMD_ID_OPEN_SESSION, | 
|  | TEE_CMD_ID_CLOSE_SESSION, | 
|  | TEE_CMD_ID_INVOKE_CMD, | 
|  | TEE_CMD_ID_MAP_SHARED_MEM, | 
|  | TEE_CMD_ID_UNMAP_SHARED_MEM, | 
|  | }; | 
|  |  | 
|  | #ifdef CONFIG_CRYPTO_DEV_SP_PSP | 
|  | /** | 
|  | * psp_tee_process_cmd() - Process command in Trusted Execution Environment | 
|  | * @cmd_id:     TEE command ID (&enum tee_cmd_id) | 
|  | * @buf:        Command buffer for TEE processing. On success, is updated | 
|  | *              with the response | 
|  | * @len:        Length of command buffer in bytes | 
|  | * @status:     On success, holds the TEE command execution status | 
|  | * | 
|  | * This function submits a command to the Trusted OS for processing in the | 
|  | * TEE environment and waits for a response or until the command times out. | 
|  | * | 
|  | * Returns: | 
|  | * 0 if TEE successfully processed the command | 
|  | * -%ENODEV    if PSP device not available | 
|  | * -%EINVAL    if invalid input | 
|  | * -%ETIMEDOUT if TEE command timed out | 
|  | * -%EBUSY     if PSP device is not responsive | 
|  | */ | 
|  | int psp_tee_process_cmd(enum tee_cmd_id cmd_id, void *buf, size_t len, | 
|  | u32 *status); | 
|  |  | 
|  | /** | 
|  | * psp_check_tee_status() - Checks whether there is a TEE which a driver can | 
|  | * talk to. | 
|  | * | 
|  | * This function can be used by AMD-TEE driver to query if there is TEE with | 
|  | * which it can communicate. | 
|  | * | 
|  | * Returns: | 
|  | * 0          if the device has TEE | 
|  | * -%ENODEV   if there is no TEE available | 
|  | */ | 
|  | int psp_check_tee_status(void); | 
|  |  | 
|  | #else /* !CONFIG_CRYPTO_DEV_SP_PSP */ | 
|  |  | 
|  | static inline int psp_tee_process_cmd(enum tee_cmd_id cmd_id, void *buf, | 
|  | size_t len, u32 *status) | 
|  | { | 
|  | return -ENODEV; | 
|  | } | 
|  |  | 
|  | static inline int psp_check_tee_status(void) | 
|  | { | 
|  | return -ENODEV; | 
|  | } | 
|  | #endif /* CONFIG_CRYPTO_DEV_SP_PSP */ | 
|  | #endif /* __PSP_TEE_H_ */ |