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