xref: /optee_os/lib/libutee/include/tee_internal_api_extensions.h (revision e4ad5ccd3994b1abe0fd638c786b8d719732e2a5)
11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
2b0104773SPascal Brand /*
3b0104773SPascal Brand  * Copyright (c) 2014, STMicroelectronics International N.V.
4*e4ad5ccdSAleksandr Anisimov  * Copyright (c) 2020, Open Mobile Platform LLC
5b0104773SPascal Brand  */
6b0104773SPascal Brand 
7b0104773SPascal Brand #ifndef TEE_INTERNAL_API_EXTENSIONS_H
8b0104773SPascal Brand #define TEE_INTERNAL_API_EXTENSIONS_H
9b0104773SPascal Brand 
10b0104773SPascal Brand /* trace support */
114de4bebcSJens Wiklander #include <trace.h>
12cebdec51SJens Wiklander #include <stdio.h>
13dd3247beSEtienne Carriere #include <tee_api_defines_extensions.h>
14fa530828SPascal Brand #include <tee_api_types.h>
15b0104773SPascal Brand 
16b0104773SPascal Brand void tee_user_mem_mark_heap(void);
17b0104773SPascal Brand size_t tee_user_mem_check_heap(void);
18b0104773SPascal Brand /* Hint implementation defines */
19b0104773SPascal Brand #define TEE_USER_MEM_HINT_NO_FILL_ZERO       0x80000000
20b0104773SPascal Brand 
21fa530828SPascal Brand /*
22fa530828SPascal Brand  * Cache maintenance support (TA requires the CACHE_MAINTENANCE property)
23fa530828SPascal Brand  *
24fa530828SPascal Brand  * TEE_CacheClean() Write back to memory any dirty data cache lines. The line
25fa530828SPascal Brand  *                  is marked as not dirty. The valid bit is unchanged.
26fa530828SPascal Brand  *
27fa530828SPascal Brand  * TEE_CacheFlush() Purges any valid data cache lines. Any dirty cache lines
28fa530828SPascal Brand  *                  are first written back to memory, then the cache line is
29fa530828SPascal Brand  *                  invalidated.
30fa530828SPascal Brand  *
31fa530828SPascal Brand  * TEE_CacheInvalidate() Invalidate any valid data cache lines. Any dirty line
32fa530828SPascal Brand  *                       are not written back to memory.
33fa530828SPascal Brand  */
34fa530828SPascal Brand TEE_Result TEE_CacheClean(char *buf, size_t len);
35fa530828SPascal Brand TEE_Result TEE_CacheFlush(char *buf, size_t len);
36fa530828SPascal Brand TEE_Result TEE_CacheInvalidate(char *buf, size_t len);
37fa530828SPascal Brand 
3887065172SJens Wiklander /*
3987065172SJens Wiklander  * tee_map_zi() - Map zero initialized memory
4087065172SJens Wiklander  * @len:	Number of bytes
4187065172SJens Wiklander  * @flags:	0 or TEE_MEMORY_ACCESS_ANY_OWNER to allow sharing with other TAs
4287065172SJens Wiklander  *
4387065172SJens Wiklander  * Returns valid pointer on success or NULL on error.
4487065172SJens Wiklander  */
4587065172SJens Wiklander void *tee_map_zi(size_t len, uint32_t flags);
4687065172SJens Wiklander 
4787065172SJens Wiklander /*
4887065172SJens Wiklander  * tee_unmap() - Unmap previously mapped memory
4987065172SJens Wiklander  * @buf:	Buffer
5087065172SJens Wiklander  * @len:	Number of bytes
5187065172SJens Wiklander  *
5287065172SJens Wiklander  * Note that supplied @buf and @len has to match exactly what has
5387065172SJens Wiklander  * previously been returned by tee_map_zi().
5487065172SJens Wiklander  *
5587065172SJens Wiklander  * Return TEE_SUCCESS on success or TEE_ERRROR_* on failure.
5687065172SJens Wiklander  */
5787065172SJens Wiklander TEE_Result tee_unmap(void *buf, size_t len);
5887065172SJens Wiklander 
59791ee55cSJerome Forissier /*
60791ee55cSJerome Forissier  * Convert a UUID string @s into a TEE_UUID @uuid
61791ee55cSJerome Forissier  * Expected format for @s is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
62791ee55cSJerome Forissier  * 'x' being any hexadecimal digit (0-9a-fA-F)
63791ee55cSJerome Forissier  */
64791ee55cSJerome Forissier TEE_Result tee_uuid_from_str(TEE_UUID *uuid, const char *s);
65791ee55cSJerome Forissier 
66*e4ad5ccdSAleksandr Anisimov /*
67*e4ad5ccdSAleksandr Anisimov  * tee_invoke_supp_plugin() - invoke a tee-supplicant's plugin
68*e4ad5ccdSAleksandr Anisimov  * @uuid:       uuid of the plugin
69*e4ad5ccdSAleksandr Anisimov  * @cmd:        command for the plugin
70*e4ad5ccdSAleksandr Anisimov  * @sub_cmd:    subcommand for the plugin
71*e4ad5ccdSAleksandr Anisimov  * @buf:        data [for/from] the plugin [in/out]
72*e4ad5ccdSAleksandr Anisimov  * @len:        length of the input buf
73*e4ad5ccdSAleksandr Anisimov  * @outlen:     pointer to length of the output data (if they will be used)
74*e4ad5ccdSAleksandr Anisimov  *
75*e4ad5ccdSAleksandr Anisimov  * Return TEE_SUCCESS on success or TEE_ERRROR_* on failure.
76*e4ad5ccdSAleksandr Anisimov  */
77*e4ad5ccdSAleksandr Anisimov TEE_Result tee_invoke_supp_plugin(const TEE_UUID *uuid, uint32_t cmd,
78*e4ad5ccdSAleksandr Anisimov 				  uint32_t sub_cmd, void *buf, size_t len,
79*e4ad5ccdSAleksandr Anisimov 				  size_t *outlen);
80*e4ad5ccdSAleksandr Anisimov 
81b0104773SPascal Brand #endif
82