Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 1 | // SPDX-License-Identifier: BSD-2-Clause |
| 2 | /* |
| 3 | * Copyright (c) 2019, Linaro Limited |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 4 | * Copyright (c) 2020, Arm Limited |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 5 | */ |
| 6 | |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 7 | #include <ldelf.h> |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 8 | #include <trace.h> |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 9 | |
| 10 | #include "sys.h" |
| 11 | |
| 12 | int trace_level = TRACE_LEVEL; |
| 13 | const char trace_ext_prefix[] = "LD"; |
| 14 | |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 15 | void __panic(const char *file __maybe_unused, const int line __maybe_unused, |
| 16 | const char *func __maybe_unused) |
| 17 | { |
| 18 | if (!file && !func) |
| 19 | EMSG_RAW("Panic"); |
| 20 | else |
| 21 | EMSG_RAW("Panic at %s:%d %s%s%s", |
| 22 | file ? file : "?", file ? line : 0, |
| 23 | func ? "<" : "", func ? func : "", func ? ">" : ""); |
| 24 | |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 25 | _ldelf_panic(1); |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 26 | /*NOTREACHED*/ |
| 27 | while (true) |
| 28 | ; |
| 29 | } |
| 30 | |
| 31 | void sys_return_cleanup(void) |
| 32 | { |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 33 | _ldelf_return(0); |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 34 | /*NOTREACHED*/ |
| 35 | while (true) |
| 36 | ; |
| 37 | } |
| 38 | |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 39 | TEE_Result sys_map_zi(size_t num_bytes, uint32_t flags, vaddr_t *va, |
| 40 | size_t pad_begin, size_t pad_end) |
| 41 | { |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 42 | return _ldelf_map_zi(va, num_bytes, pad_begin, pad_end, flags); |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 43 | } |
| 44 | |
| 45 | TEE_Result sys_unmap(vaddr_t va, size_t num_bytes) |
| 46 | { |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 47 | return _ldelf_unmap(va, num_bytes); |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 48 | } |
| 49 | |
| 50 | TEE_Result sys_open_ta_bin(const TEE_UUID *uuid, uint32_t *handle) |
| 51 | { |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 52 | return _ldelf_open_bin(uuid, sizeof(TEE_UUID), handle); |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 53 | } |
| 54 | |
| 55 | TEE_Result sys_close_ta_bin(uint32_t handle) |
| 56 | { |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 57 | return _ldelf_close_bin(handle); |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 58 | } |
| 59 | |
| 60 | TEE_Result sys_map_ta_bin(vaddr_t *va, size_t num_bytes, uint32_t flags, |
| 61 | uint32_t handle, size_t offs, size_t pad_begin, |
| 62 | size_t pad_end) |
| 63 | { |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 64 | return _ldelf_map_bin(va, num_bytes, handle, offs, |
| 65 | pad_begin, pad_end, flags); |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 66 | } |
| 67 | |
| 68 | |
| 69 | TEE_Result sys_copy_from_ta_bin(void *dst, size_t num_bytes, uint32_t handle, |
| 70 | size_t offs) |
| 71 | { |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 72 | return _ldelf_cp_from_bin(dst, offs, num_bytes, handle); |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 73 | } |
| 74 | |
| 75 | TEE_Result sys_set_prot(vaddr_t va, size_t num_bytes, uint32_t flags) |
| 76 | { |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 77 | return _ldelf_set_prot(va, num_bytes, flags); |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 78 | } |
Jens Wiklander | 88796f8 | 2019-06-12 14:30:45 +0200 | [diff] [blame] | 79 | |
| 80 | TEE_Result sys_remap(vaddr_t old_va, vaddr_t *new_va, size_t num_bytes, |
| 81 | size_t pad_begin, size_t pad_end) |
| 82 | { |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 83 | return _ldelf_remap(old_va, new_va, num_bytes, pad_begin, pad_end); |
| 84 | } |
Jens Wiklander | 88796f8 | 2019-06-12 14:30:45 +0200 | [diff] [blame] | 85 | |
Balint Dobszay | baa5161 | 2020-12-11 16:25:47 +0100 | [diff] [blame] | 86 | TEE_Result sys_gen_random_num(void *buf, size_t blen) |
| 87 | { |
| 88 | return _ldelf_gen_rnd_num(buf, blen); |
Jens Wiklander | 88796f8 | 2019-06-12 14:30:45 +0200 | [diff] [blame] | 89 | } |