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