xref: /aosp_15_r20/external/arm-trusted-firmware/drivers/scmi-msg/base.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /* SPDX-License-Identifier: BSD-3-Clause */
2*54fd6939SJiyong Park /*
3*54fd6939SJiyong Park  * Copyright (c) 2015-2019, Arm Limited and Contributors. All rights reserved.
4*54fd6939SJiyong Park  * Copyright (c) 2019-2020, Linaro Limited
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef SCMI_MSG_BASE_H
8*54fd6939SJiyong Park #define SCMI_MSG_BASE_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <stdint.h>
11*54fd6939SJiyong Park 
12*54fd6939SJiyong Park #define SCMI_PROTOCOL_VERSION_BASE	0x20000U
13*54fd6939SJiyong Park 
14*54fd6939SJiyong Park #define SCMI_DEFAULT_STRING_LENGTH	16U
15*54fd6939SJiyong Park 
16*54fd6939SJiyong Park enum scmi_base_message_id {
17*54fd6939SJiyong Park 	SCMI_BASE_DISCOVER_VENDOR			= 0x003,
18*54fd6939SJiyong Park 	SCMI_BASE_DISCOVER_SUB_VENDOR			= 0x004,
19*54fd6939SJiyong Park 	SCMI_BASE_DISCOVER_IMPLEMENTATION_VERSION	= 0x005,
20*54fd6939SJiyong Park 	SCMI_BASE_DISCOVER_LIST_PROTOCOLS		= 0x006,
21*54fd6939SJiyong Park 	SCMI_BASE_DISCOVER_AGENT			= 0x007,
22*54fd6939SJiyong Park 	SCMI_BASE_NOTIFY_ERRORS				= 0x008,
23*54fd6939SJiyong Park };
24*54fd6939SJiyong Park 
25*54fd6939SJiyong Park /*
26*54fd6939SJiyong Park  * PROTOCOL_ATTRIBUTES
27*54fd6939SJiyong Park  */
28*54fd6939SJiyong Park 
29*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRS_NUM_PROTOCOLS_POS	0
30*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRS_NUM_AGENTS_POS		8
31*54fd6939SJiyong Park 
32*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRS_NUM_PROTOCOLS_MASK	0xFFU
33*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRS_NUM_AGENTS_MASK	0xFF00U
34*54fd6939SJiyong Park 
35*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRIBUTES(NUM_PROTOCOLS, NUM_AGENTS) \
36*54fd6939SJiyong Park 	((((NUM_PROTOCOLS) << SCMI_BASE_PROTOCOL_ATTRS_NUM_PROTOCOLS_POS) & \
37*54fd6939SJiyong Park 	  SCMI_BASE_PROTOCOL_ATTRS_NUM_PROTOCOLS_MASK) | \
38*54fd6939SJiyong Park 	(((NUM_AGENTS) << SCMI_BASE_PROTOCOL_ATTRS_NUM_AGENTS_POS) & \
39*54fd6939SJiyong Park 	 SCMI_BASE_PROTOCOL_ATTRS_NUM_AGENTS_MASK))
40*54fd6939SJiyong Park 
41*54fd6939SJiyong Park /*
42*54fd6939SJiyong Park  * BASE_DISCOVER_VENDOR
43*54fd6939SJiyong Park  */
44*54fd6939SJiyong Park struct scmi_base_discover_vendor_p2a {
45*54fd6939SJiyong Park 	int32_t status;
46*54fd6939SJiyong Park 	char vendor_identifier[SCMI_DEFAULT_STRING_LENGTH];
47*54fd6939SJiyong Park };
48*54fd6939SJiyong Park 
49*54fd6939SJiyong Park /*
50*54fd6939SJiyong Park  * BASE_DISCOVER_SUB_VENDOR
51*54fd6939SJiyong Park  */
52*54fd6939SJiyong Park struct scmi_base_discover_sub_vendor_p2a {
53*54fd6939SJiyong Park 	int32_t status;
54*54fd6939SJiyong Park 	char sub_vendor_identifier[SCMI_DEFAULT_STRING_LENGTH];
55*54fd6939SJiyong Park };
56*54fd6939SJiyong Park 
57*54fd6939SJiyong Park /*
58*54fd6939SJiyong Park  * BASE_DISCOVER_IMPLEMENTATION_VERSION
59*54fd6939SJiyong Park  * No special structure right now, see protocol_version.
60*54fd6939SJiyong Park  */
61*54fd6939SJiyong Park 
62*54fd6939SJiyong Park /*
63*54fd6939SJiyong Park  * BASE_DISCOVER_LIST_PROTOCOLS
64*54fd6939SJiyong Park  */
65*54fd6939SJiyong Park struct scmi_base_discover_list_protocols_a2p {
66*54fd6939SJiyong Park 	uint32_t skip;
67*54fd6939SJiyong Park };
68*54fd6939SJiyong Park 
69*54fd6939SJiyong Park struct scmi_base_discover_list_protocols_p2a {
70*54fd6939SJiyong Park 	int32_t status;
71*54fd6939SJiyong Park 	uint32_t num_protocols;
72*54fd6939SJiyong Park 	uint32_t protocols[];
73*54fd6939SJiyong Park };
74*54fd6939SJiyong Park 
75*54fd6939SJiyong Park #endif /* SCMI_MSG_BASE_H */
76