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