aboutsummaryrefslogtreecommitdiff
path: root/core/include/kernel/tee_ta_manager.h
blob: 253f645b74974dad68e3cb7976cccca66d839282 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
 * Copyright (c) 2014, STMicroelectronics International N.V.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef TEE_TA_MANAGER_H
#define TEE_TA_MANAGER_H

#include <kernel/tee_common.h>

#include "tee_api_types.h"
#include "tee_api_types.h"
#include "tee_ta.h"
#include <kernel/kta_types.h>
#include "tee_ta_manager_unpg.h"
#include "utee_types.h"

/*-----------------------------------------------------------------------------
 * Initializes virtual memory management by reserving virtual memory for
 * memory areas not available TA virtual memroy allocation.
 *
 * Spare physical pages are passed in the memory range between ta_start and
 * ta_spare_end.  Spare physical pages are supposed to be mapped with "no
 * access" attribute.
 *
 * All addresses will be rounded up the the next page.
 *
 * Parameters:
 * ro_start - start of read only section for paging,
 * ro_end   - end of read only section for paging,
 * ta_start - start of section used for TA virtual memory
 * ta_spare_end - end of spare pages used for paging
 *
 * Returns:
 *        void
 *---------------------------------------------------------------------------*/
void tee_ta_vmem_init(tee_vaddr_t ro_start, tee_vaddr_t ro_end,
		      tee_vaddr_t ta_start, tee_vaddr_t ta_spare_end);

TEE_Result tee_ta_open_session(TEE_ErrorOrigin *err,
			       struct tee_ta_session **sess,
			       struct tee_ta_session_head *open_sessions,
			       const TEE_UUID *uuid,
			       const TEE_Identity *clnt_id,
			       uint32_t cancel_req_to,
			       struct tee_ta_param *param);

TEE_Result tee_ta_invoke_command(TEE_ErrorOrigin *err,
				 struct tee_ta_session *sess,
				 uint32_t cancel_req_to, uint32_t cmd,
				 struct tee_ta_param *param);

TEE_Result tee_ta_cancel_command(TEE_ErrorOrigin *err,
				 struct tee_ta_session *sess);

/*-----------------------------------------------------------------------------
 * Function called to close a TA.
 * Parameters:
 * id   - The session id (in)
 * Returns:
 *        TEE_Result
 *---------------------------------------------------------------------------*/
TEE_Result tee_ta_close_session(uint32_t id,
				struct tee_ta_session_head *open_sessions);

TEE_Result tee_ta_get_current_session(struct tee_ta_session **sess);

void tee_ta_set_current_session(struct tee_ta_session *sess);

TEE_Result tee_ta_get_client_id(TEE_Identity *id);

/*
 * Get pointer of executable part of the TA located in virtual kernel memory
 */
uintptr_t tee_ta_get_exec(const struct tee_ta_ctx *const ctx);

/* Returns OK is sess is a valid session pointer or static TA */
TEE_Result tee_ta_verify_session_pointer(struct tee_ta_session *sess,
					 struct tee_ta_session_head
					 *open_sessions);

int tee_ta_set_trace_level(int level);
void tee_ta_dump_current(void);
void tee_ta_dump_all(void);

#ifdef CFG_CACHE_API
TEE_Result tee_uta_cache_operation(struct tee_ta_session *s,
				   enum utee_cache_operation op,
				   void *va, size_t len);
#endif

#endif