xref: /openbmc/linux/drivers/interconnect/internal.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1dd018a9cSGeorgi Djakov /* SPDX-License-Identifier: GPL-2.0 */
2dd018a9cSGeorgi Djakov /*
3dd018a9cSGeorgi Djakov  * Interconnect framework internal structs
4dd018a9cSGeorgi Djakov  *
5dd018a9cSGeorgi Djakov  * Copyright (c) 2019, Linaro Ltd.
6dd018a9cSGeorgi Djakov  * Author: Georgi Djakov <georgi.djakov@linaro.org>
7dd018a9cSGeorgi Djakov  */
8dd018a9cSGeorgi Djakov 
9dd018a9cSGeorgi Djakov #ifndef __DRIVERS_INTERCONNECT_INTERNAL_H
10dd018a9cSGeorgi Djakov #define __DRIVERS_INTERCONNECT_INTERNAL_H
11dd018a9cSGeorgi Djakov 
12dd018a9cSGeorgi Djakov /**
13dd018a9cSGeorgi Djakov  * struct icc_req - constraints that are attached to each node
14dd018a9cSGeorgi Djakov  * @req_node: entry in list of requests for the particular @node
15dd018a9cSGeorgi Djakov  * @node: the interconnect node to which this constraint applies
16dd018a9cSGeorgi Djakov  * @dev: reference to the device that sets the constraints
177d374b20SGeorgi Djakov  * @enabled: indicates whether the path with this request is enabled
18dd018a9cSGeorgi Djakov  * @tag: path tag (optional)
19dd018a9cSGeorgi Djakov  * @avg_bw: an integer describing the average bandwidth in kBps
20dd018a9cSGeorgi Djakov  * @peak_bw: an integer describing the peak bandwidth in kBps
21dd018a9cSGeorgi Djakov  */
22dd018a9cSGeorgi Djakov struct icc_req {
23dd018a9cSGeorgi Djakov 	struct hlist_node req_node;
24dd018a9cSGeorgi Djakov 	struct icc_node *node;
25dd018a9cSGeorgi Djakov 	struct device *dev;
267d374b20SGeorgi Djakov 	bool enabled;
27dd018a9cSGeorgi Djakov 	u32 tag;
28dd018a9cSGeorgi Djakov 	u32 avg_bw;
29dd018a9cSGeorgi Djakov 	u32 peak_bw;
30dd018a9cSGeorgi Djakov };
31dd018a9cSGeorgi Djakov 
32dd018a9cSGeorgi Djakov /**
33dd018a9cSGeorgi Djakov  * struct icc_path - interconnect path structure
3405309830SGeorgi Djakov  * @name: a string name of the path (useful for ftrace)
35dd018a9cSGeorgi Djakov  * @num_nodes: number of hops (nodes)
36dd018a9cSGeorgi Djakov  * @reqs: array of the requests applicable to this path of nodes
37dd018a9cSGeorgi Djakov  */
38dd018a9cSGeorgi Djakov struct icc_path {
3905309830SGeorgi Djakov 	const char *name;
40dd018a9cSGeorgi Djakov 	size_t num_nodes;
416f0c60f1SKees Cook 	struct icc_req reqs[] __counted_by(num_nodes);
42dd018a9cSGeorgi Djakov };
43dd018a9cSGeorgi Djakov 
441d13d3b7SMike Tipton struct icc_path *icc_get(struct device *dev, const char *src, const char *dst);
45*770c69f0SMike Tipton int icc_debugfs_client_init(struct dentry *icc_dir);
461d13d3b7SMike Tipton 
47dd018a9cSGeorgi Djakov #endif
48