1 /* SPDX-License-Identifier: GPL-2.0+ */
3 * Copyright (C) 2019-2020 Linaro Limited.
5 #ifndef _SCMI_AGENT_UCLASS_H
6 #define _SCMI_AGENT_UCLASS_H
8 #include <scmi_protocols.h>
15 * struct scmi_agent_priv - private data maintained by agent instance
17 * @num_agents: Number of agents
18 * @num_protocols: Number of protocols
19 * @impl_version: Implementation version
20 * @protocols: Array of protocol IDs
21 * @vendor: Vendor name
22 * @sub_vendor: Sub-vendor name
23 * @agent_name: Agent name
24 * @agent_id: Identifier of agent
25 * @base_dev: SCMI base protocol device
26 * @pwdom_dev: SCMI power domain management protocol device
27 * @clock_dev: SCMI clock protocol device
28 * @resetdom_dev: SCMI reset domain protocol device
29 * @voltagedom_dev: SCMI voltage domain protocol device
31 struct scmi_agent_priv {
41 struct udevice *base_dev;
42 struct udevice *pwdom_dev;
43 struct udevice *clock_dev;
44 struct udevice *resetdom_dev;
45 struct udevice *voltagedom_dev;
48 static inline u32 scmi_version(struct udevice *dev)
50 return ((struct scmi_agent_priv *)dev_get_uclass_plat(dev))->version;
53 static inline u32 scmi_num_agents(struct udevice *dev)
55 return ((struct scmi_agent_priv *)dev_get_uclass_plat(dev))->num_agents;
58 static inline u32 scmi_num_protocols(struct udevice *dev)
60 return ((struct scmi_agent_priv *)dev_get_uclass_plat(dev))->num_protocols;
63 static inline u32 scmi_impl_version(struct udevice *dev)
65 return ((struct scmi_agent_priv *)dev_get_uclass_plat(dev))->impl_version;
68 static inline u8 *scmi_protocols(struct udevice *dev)
70 return ((struct scmi_agent_priv *)dev_get_uclass_plat(dev))->protocols;
73 static inline u8 *scmi_vendor(struct udevice *dev)
75 return ((struct scmi_agent_priv *)dev_get_uclass_plat(dev))->vendor;
78 static inline u8 *scmi_sub_vendor(struct udevice *dev)
80 return ((struct scmi_agent_priv *)dev_get_uclass_plat(dev))->sub_vendor;
83 static inline u8 *scmi_agent_name(struct udevice *dev)
85 return ((struct scmi_agent_priv *)dev_get_uclass_plat(dev))->agent_name;
88 static inline u32 scmi_agent_id(struct udevice *dev)
90 return ((struct scmi_agent_priv *)dev_get_uclass_plat(dev))->agent_id;
94 * struct scmi_transport_ops - The functions that a SCMI transport layer must implement.
96 struct scmi_agent_ops {
98 * of_get_channel - Get SCMI channel from SCMI agent device tree node
100 * @dev: SCMI agent device using the transport
101 * @protocol: SCMI protocol device using the transport
102 * @channel: Output reference to SCMI channel upon success
103 * Return 0 upon success and a negative errno on failure
105 int (*of_get_channel)(struct udevice *dev, struct udevice *protocol,
106 struct scmi_channel **channel);
109 * process_msg - Request transport to get the SCMI message processed
111 * @dev: SCMI agent device using the transport
112 * @msg: SCMI message to be transmitted
114 int (*process_msg)(struct udevice *dev, struct scmi_channel *channel,
115 struct scmi_msg *msg);
118 #endif /* _SCMI_TRANSPORT_UCLASS_H */