1 /*
2  * Arm SCP/MCP Software
3  * Copyright (c) 2022, Linaro Limited and Contributors. All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef INTERNAL_OPTEE_SMT_H
9 #define INTERNAL_OPTEE_SMT_H
10 
11 #include <stdint.h>
12 
13 struct __attribute((packed)) mod_optee_smt_memory {
14     uint32_t reserved0;
15     uint32_t status;
16     uint64_t reserved1;
17     uint32_t flags;
18     uint32_t length; /* message_header + payload */
19     uint32_t message_header;
20     uint32_t payload[];
21 };
22 
23 #define MOD_OPTEE_SMT_MAX_CHANNELS 8
24 
25 #define MOD_OPTEE_SMT_MAILBOX_STATUS_FREE_POS 0
26 #define MOD_OPTEE_SMT_MAILBOX_STATUS_FREE_MASK \
27     (UINT32_C(0x1) << MOD_OPTEE_SMT_MAILBOX_STATUS_FREE_POS)
28 
29 #define MOD_OPTEE_SMT_MAILBOX_STATUS_ERROR_POS 1
30 #define MOD_OPTEE_SMT_MAILBOX_STATUS_ERROR_MASK \
31     (UINT32_C(0x1) << MOD_OPTEE_SMT_MAILBOX_STATUS_ERROR_POS)
32 
33 #define MOD_OPTEE_SMT_MAILBOX_FLAGS_IENABLED_POS 0
34 #define MOD_OPTEE_SMT_MAILBOX_FLAGS_IENABLED_MASK \
35     (UINT32_C(0x1) << MOD_OPTEE_SMT_MAILBOX_FLAGS_IENABLED_POS)
36 
37 #define MOD_OPTEE_SMT_MIN_PAYLOAD_SIZE \
38     sizeof(((struct mod_optee_smt_memory *)NULL)->payload[0])
39 
40 #define MOD_OPTEE_SMT_MIN_MAILBOX_SIZE \
41     (sizeof(struct mod_optee_smt_memory) + MOD_OPTEE_SMT_MIN_PAYLOAD_SIZE)
42 
43 #endif /* INTERNAL_OPTEE_SMT_H */
44