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 #include <fwk_module.h>
9 #include <fwk_module_idx.h>
10 #include <scmi_agents.h>
11 #include <mod_msg_smt.h>
12 #include <mod_optee_mbx.h>
13 
14 
15 static const struct fwk_element mbx_element_table[] = {
16     [SCMI_CHANNEL_DEVICE_IDX_PSCI] = {
17         .name = "OP-TEE for PSCI",
18     .data = &((struct mod_optee_mbx_channel_config) {
19             .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MSG_SMT,
20                                          SCMI_SERVICE_IDX_PSCI),
21             .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MSG_SMT,
22                                              MOD_MSG_SMT_API_IDX_DRIVER_INPUT),
23         })
24     },
25     [SCMI_CHANNEL_DEVICE_IDX_OSPM_0] = {
26         .name = "OP-TEE for OSPM #0",
27         .data = &((struct mod_optee_mbx_channel_config) {
28             .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MSG_SMT,
29                                          SCMI_SERVICE_IDX_OSPM_0),
30             .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MSG_SMT,
31                                              MOD_MSG_SMT_API_IDX_DRIVER_INPUT),
32         })
33     },
34     [SCMI_CHANNEL_DEVICE_IDX_OSPM_1] = {
35         .name = "OP-TEE for OSPM #1",
36         .data = &((struct mod_optee_mbx_channel_config) {
37             .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MSG_SMT,
38                                          SCMI_SERVICE_IDX_OSPM_1),
39             .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MSG_SMT,
40                                              MOD_MSG_SMT_API_IDX_DRIVER_INPUT),
41         })
42     },
43     [SCMI_CHANNEL_DEVICE_IDX_COUNT] = { 0 },
44 };
45 
mbx_get_element_table(fwk_id_t module_id)46 static const struct fwk_element *mbx_get_element_table(fwk_id_t module_id)
47 {
48     return (const struct fwk_element *)mbx_element_table;
49 }
50 
51 struct fwk_module_config config_optee_mbx = {
52     .elements = FWK_MODULE_DYNAMIC_ELEMENTS(mbx_get_element_table),
53 };
54 
55 static struct fwk_element smt_element_table[] = {
56     [SCMI_SERVICE_IDX_PSCI] = {
57         .name = "PSCI",
58         .data = &((struct mod_msg_smt_channel_config) {
59             .type = MOD_MSG_SMT_CHANNEL_TYPE_REQUESTER,
60             .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_OPTEE_MBX,
61                                                  SCMI_CHANNEL_DEVICE_IDX_PSCI),
62             .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_OPTEE_MBX, 0),
63         })
64     },
65     [SCMI_SERVICE_IDX_OSPM_0] = {
66         .name = "OSPM0",
67         .data = &((struct mod_msg_smt_channel_config) {
68             .type = MOD_MSG_SMT_CHANNEL_TYPE_REQUESTER,
69             .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_OPTEE_MBX,
70                                                  SCMI_CHANNEL_DEVICE_IDX_OSPM_0),
71             .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_OPTEE_MBX, 0),
72         })
73     },
74     [SCMI_SERVICE_IDX_OSPM_1] = {
75         .name = "OSPM1",
76         .data = &((struct mod_msg_smt_channel_config) {
77             .type = MOD_MSG_SMT_CHANNEL_TYPE_REQUESTER,
78             .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_OPTEE_MBX,
79                                                  SCMI_CHANNEL_DEVICE_IDX_OSPM_1),
80             .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_OPTEE_MBX, 0),
81         })
82     },
83     [SCMI_SERVICE_IDX_COUNT] = { 0 },
84 };
85 
smt_get_element_table(fwk_id_t module_id)86 static const struct fwk_element *smt_get_element_table(fwk_id_t module_id)
87 {
88     return (const struct fwk_element *)smt_element_table;
89 }
90 
91 struct fwk_module_config config_msg_smt = {
92     .elements = FWK_MODULE_DYNAMIC_ELEMENTS(smt_get_element_table),
93 };
94