xref: /openbmc/linux/include/linux/scmi_protocol.h (revision b6f20ff8)
1aa4f886fSSudeep Holla // SPDX-License-Identifier: GPL-2.0
2aa4f886fSSudeep Holla /*
3aa4f886fSSudeep Holla  * SCMI Message Protocol driver header
4aa4f886fSSudeep Holla  *
5aa4f886fSSudeep Holla  * Copyright (C) 2018 ARM Ltd.
6aa4f886fSSudeep Holla  */
7aa4f886fSSudeep Holla #include <linux/types.h>
8aa4f886fSSudeep Holla 
9*b6f20ff8SSudeep Holla #define SCMI_MAX_STR_SIZE	16
10*b6f20ff8SSudeep Holla 
11*b6f20ff8SSudeep Holla /**
12*b6f20ff8SSudeep Holla  * struct scmi_revision_info - version information structure
13*b6f20ff8SSudeep Holla  *
14*b6f20ff8SSudeep Holla  * @major_ver: Major ABI version. Change here implies risk of backward
15*b6f20ff8SSudeep Holla  *	compatibility break.
16*b6f20ff8SSudeep Holla  * @minor_ver: Minor ABI version. Change here implies new feature addition,
17*b6f20ff8SSudeep Holla  *	or compatible change in ABI.
18*b6f20ff8SSudeep Holla  * @num_protocols: Number of protocols that are implemented, excluding the
19*b6f20ff8SSudeep Holla  *	base protocol.
20*b6f20ff8SSudeep Holla  * @num_agents: Number of agents in the system.
21*b6f20ff8SSudeep Holla  * @impl_ver: A vendor-specific implementation version.
22*b6f20ff8SSudeep Holla  * @vendor_id: A vendor identifier(Null terminated ASCII string)
23*b6f20ff8SSudeep Holla  * @sub_vendor_id: A sub-vendor identifier(Null terminated ASCII string)
24*b6f20ff8SSudeep Holla  */
25*b6f20ff8SSudeep Holla struct scmi_revision_info {
26*b6f20ff8SSudeep Holla 	u16 major_ver;
27*b6f20ff8SSudeep Holla 	u16 minor_ver;
28*b6f20ff8SSudeep Holla 	u8 num_protocols;
29*b6f20ff8SSudeep Holla 	u8 num_agents;
30*b6f20ff8SSudeep Holla 	u32 impl_ver;
31*b6f20ff8SSudeep Holla 	char vendor_id[SCMI_MAX_STR_SIZE];
32*b6f20ff8SSudeep Holla 	char sub_vendor_id[SCMI_MAX_STR_SIZE];
33*b6f20ff8SSudeep Holla };
34*b6f20ff8SSudeep Holla 
35aa4f886fSSudeep Holla /**
36aa4f886fSSudeep Holla  * struct scmi_handle - Handle returned to ARM SCMI clients for usage.
37aa4f886fSSudeep Holla  *
38aa4f886fSSudeep Holla  * @dev: pointer to the SCMI device
39*b6f20ff8SSudeep Holla  * @version: pointer to the structure containing SCMI version information
40aa4f886fSSudeep Holla  */
41aa4f886fSSudeep Holla struct scmi_handle {
42aa4f886fSSudeep Holla 	struct device *dev;
43*b6f20ff8SSudeep Holla 	struct scmi_revision_info *version;
44*b6f20ff8SSudeep Holla };
45*b6f20ff8SSudeep Holla 
46*b6f20ff8SSudeep Holla enum scmi_std_protocol {
47*b6f20ff8SSudeep Holla 	SCMI_PROTOCOL_BASE = 0x10,
48*b6f20ff8SSudeep Holla 	SCMI_PROTOCOL_POWER = 0x11,
49*b6f20ff8SSudeep Holla 	SCMI_PROTOCOL_SYSTEM = 0x12,
50*b6f20ff8SSudeep Holla 	SCMI_PROTOCOL_PERF = 0x13,
51*b6f20ff8SSudeep Holla 	SCMI_PROTOCOL_CLOCK = 0x14,
52*b6f20ff8SSudeep Holla 	SCMI_PROTOCOL_SENSOR = 0x15,
53aa4f886fSSudeep Holla };
54