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_scmi.h>
12 #include <internal/scmi.h>
13 #include <mod_msg_smt.h>
14 
15 static const struct fwk_element service_table[] = {
16     [SCMI_SERVICE_IDX_PSCI] = {
17         .name = "agent PSCI",
18         .data = &((struct mod_scmi_service_config) {
19             .transport_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MSG_SMT,
20                                                 SCMI_SERVICE_IDX_PSCI),
21             .transport_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MSG_SMT,
22                                                 MOD_MSG_SMT_API_IDX_SCMI_TRANSPORT),
23             .scmi_agent_id = SCMI_AGENT_ID_PSCI,
24             .transport_notification_init_id = FWK_ID_NONE_INIT,
25             .scmi_p2a_id = FWK_ID_NONE_INIT,
26         }),
27     },
28     [SCMI_SERVICE_IDX_OSPM_0] = {
29         .name = "agent OSPM0",
30         .data = &((struct mod_scmi_service_config) {
31             .transport_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MSG_SMT,
32                                                 SCMI_SERVICE_IDX_OSPM_0),
33             .transport_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MSG_SMT,
34                                                 MOD_MSG_SMT_API_IDX_SCMI_TRANSPORT),
35             .scmi_agent_id = SCMI_AGENT_ID_OSPM,
36             .transport_notification_init_id = FWK_ID_NONE_INIT,
37             .scmi_p2a_id = FWK_ID_NONE_INIT,
38         }),
39     },
40     [SCMI_SERVICE_IDX_OSPM_1] = {
41         .name = "agent OSPM1",
42         .data = &((struct mod_scmi_service_config) {
43             .transport_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MSG_SMT,
44                                                 SCMI_SERVICE_IDX_OSPM_1),
45             .transport_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MSG_SMT,
46                                                 MOD_MSG_SMT_API_IDX_SCMI_TRANSPORT),
47             .scmi_agent_id = SCMI_AGENT_ID_PERF,
48             .transport_notification_init_id = FWK_ID_NONE_INIT,
49             .scmi_p2a_id = FWK_ID_NONE_INIT,
50         }),
51     },
52     [SCMI_SERVICE_IDX_COUNT] = { 0 }
53 };
54 
get_service_table(fwk_id_t module_id)55 static const struct fwk_element *get_service_table(fwk_id_t module_id)
56 {
57     return service_table;
58 }
59 
60 static const struct mod_scmi_agent agent_table[] = {
61     [SCMI_AGENT_ID_OSPM] = {
62         .type = SCMI_AGENT_TYPE_OSPM,
63         .name = "OSPM",
64     },
65     [SCMI_AGENT_ID_PSCI] = {
66         .type = SCMI_AGENT_TYPE_PSCI,
67         .name = "PSCI",
68     },
69    [SCMI_AGENT_ID_PERF] = {
70         .type = SCMI_AGENT_TYPE_OSPM,
71         .name = "PERF",
72     },
73 };
74 
75 struct fwk_module_config config_scmi = {
76     .data = &((struct mod_scmi_config) {
77         .protocol_count_max = 9,
78         .agent_count = FWK_ARRAY_SIZE(agent_table) - 1,
79         .agent_table = agent_table,
80         .vendor_identifier = "Linaro",
81         .sub_vendor_identifier = "PMWG",
82     }),
83     .elements = FWK_MODULE_DYNAMIC_ELEMENTS(get_service_table),
84 };
85