forked from mirrors/linux
		
	The AMD-TEE driver should check if TEE is available before registering itself with TEE subsystem. This ensures that there is a TEE which the driver can talk to before proceeding with tee device node allocation. Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Tom Lendacky <thomas.lendacky@amd.com> Acked-by: Jens Wiklander <jens.wiklander@linaro.org> Co-developed-by: Devaraj Rangasamy <Devaraj.Rangasamy@amd.com> Signed-off-by: Devaraj Rangasamy <Devaraj.Rangasamy@amd.com> Signed-off-by: Rijo Thomas <Rijo-john.Thomas@amd.com> Reviewed-by: Gary R Hook <gary.hook@amd.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
		
			
				
	
	
		
			91 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: MIT */
 | 
						|
/*
 | 
						|
 * AMD Trusted Execution Environment (TEE) interface
 | 
						|
 *
 | 
						|
 * Author: Rijo Thomas <Rijo-john.Thomas@amd.com>
 | 
						|
 *
 | 
						|
 * 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_ */
 |