diff options
Diffstat (limited to 'include/services/trp/trp_helpers.h')
-rw-r--r-- | include/services/trp/trp_helpers.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/include/services/trp/trp_helpers.h b/include/services/trp/trp_helpers.h new file mode 100644 index 0000000..83ec740 --- /dev/null +++ b/include/services/trp/trp_helpers.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2022, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef TRP_HELPERS_H +#define TRP_HELPERS_H + +/* Definitions to help the assembler access the SMC/ERET args structure */ +#define TRP_ARGS_SIZE TRP_ARGS_END +#define TRP_ARG0 0x0 +#define TRP_ARG1 0x8 +#define TRP_ARG2 0x10 +#define TRP_ARG3 0x18 +#define TRP_ARG4 0x20 +#define TRP_ARG5 0x28 +#define TRP_ARG6 0x30 +#define TRP_ARG7 0x38 +#define TRP_ARGS_END 0x40 + +#ifndef __ASSEMBLER__ + +#include <platform_def.h> + +/* Data structure to hold SMC arguments */ +typedef struct trp_args { + uint64_t regs[TRP_ARGS_END >> 3]; +} __aligned(CACHE_WRITEBACK_GRANULE) trp_args_t; + +trp_args_t *set_smc_args(uint64_t arg0, + uint64_t arg1, + uint64_t arg2, + uint64_t arg3, + uint64_t arg4, + uint64_t arg5, + uint64_t arg6, + uint64_t arg7); + +__dead2 void trp_boot_abort(uint64_t err); + +/* TRP SMC result registers X0-X4 */ +#define TRP_SMC_RESULT_REGS 5 + +struct trp_smc_result { + unsigned long long x[TRP_SMC_RESULT_REGS]; +}; + +#endif /* __ASSEMBLER __ */ +#endif /* TRP_HELPERS_H */ |