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