cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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_ */