File Index
Files and directories
Sign in
FILE

interconnect.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/interconnect.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Copyright (c) 2018-2019, Linaro Ltd.
  4 * Author: Georgi Djakov <georgi.djakov@linaro.org>
  5 */
  6
  7#ifndef __LINUX_INTERCONNECT_H
  8#define __LINUX_INTERCONNECT_H
  9
 10#include <linux/mutex.h>
 11#include <linux/types.h>
 12
 13/* macros for converting to icc units */
 14#define Bps_to_icc(x)	((x) / 1000)
 15#define kBps_to_icc(x)	(x)
 16#define MBps_to_icc(x)	((x) * 1000)
 17#define GBps_to_icc(x)	((x) * 1000 * 1000)
 18#define bps_to_icc(x)	(1)
 19#define kbps_to_icc(x)	(((x) + 7) / 8)
 20#define Mbps_to_icc(x)	((x) * 1000 / 8)
 21#define Gbps_to_icc(x)	((x) * 1000 * 1000 / 8)
 22
 23/* macro to indicate dynamic id allocation */
 24#define ICC_ALLOC_DYN_ID	-1
 25
 26struct icc_path;
 27struct device;
 28
 29/**
 30 * struct icc_bulk_data - Data used for bulk icc operations.
 31 *
 32 * @path: reference to the interconnect path (internal use)
 33 * @name: the name from the "interconnect-names" DT property
 34 * @avg_bw: average bandwidth in icc units
 35 * @peak_bw: peak bandwidth in icc units
 36 */
 37struct icc_bulk_data {
 38	struct icc_path	*path;
 39	const char *name;
 40	u32 avg_bw;
 41	u32 peak_bw;
 42};
 43
 44#if IS_ENABLED(CONFIG_INTERCONNECT)
 45
 46struct icc_path *of_icc_get(struct device *dev, const char *name);
 47struct icc_path *devm_of_icc_get(struct device *dev, const char *name);
 48int devm_of_icc_bulk_get(struct device *dev, int num_paths, struct icc_bulk_data *paths);
 49struct icc_path *of_icc_get_by_index(struct device *dev, int idx);
 50void icc_put(struct icc_path *path);
 51int icc_enable(struct icc_path *path);
 52int icc_disable(struct icc_path *path);
 53int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw);
 54void icc_set_tag(struct icc_path *path, u32 tag);
 55const char *icc_get_name(struct icc_path *path);
 56int __must_check of_icc_bulk_get(struct device *dev, int num_paths,
 57				 struct icc_bulk_data *paths);
 58void icc_bulk_put(int num_paths, struct icc_bulk_data *paths);
 59int icc_bulk_set_bw(int num_paths, const struct icc_bulk_data *paths);
 60int icc_bulk_enable(int num_paths, const struct icc_bulk_data *paths);
 61void icc_bulk_disable(int num_paths, const struct icc_bulk_data *paths);
 62
 63#else
 64
 65static inline struct icc_path *of_icc_get(struct device *dev,
 66					  const char *name)
 67{
 68	return NULL;
 69}
 70
 71static inline struct icc_path *devm_of_icc_get(struct device *dev,
 72						const char *name)
 73{
 74	return NULL;
 75}
 76
 77static inline struct icc_path *of_icc_get_by_index(struct device *dev, int idx)
 78{
 79	return NULL;
 80}
 81
 82static inline void icc_put(struct icc_path *path)
 83{
 84}
 85
 86static inline int icc_enable(struct icc_path *path)
 87{
 88	return 0;
 89}
 90
 91static inline int icc_disable(struct icc_path *path)
 92{
 93	return 0;
 94}
 95
 96static inline int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
 97{
 98	return 0;
 99}
100
101static inline void icc_set_tag(struct icc_path *path, u32 tag)
102{
103}
104
105static inline const char *icc_get_name(struct icc_path *path)
106{
107	return NULL;
108}
109
110static inline int of_icc_bulk_get(struct device *dev, int num_paths, struct icc_bulk_data *paths)
111{
112	return 0;
113}
114
115static inline int devm_of_icc_bulk_get(struct device *dev, int num_paths,
116				       struct icc_bulk_data *paths)
117{
118	return 0;
119}
120
121static inline void icc_bulk_put(int num_paths, struct icc_bulk_data *paths)
122{
123}
124
125static inline int icc_bulk_set_bw(int num_paths, const struct icc_bulk_data *paths)
126{
127	return 0;
128}
129
130static inline int icc_bulk_enable(int num_paths, const struct icc_bulk_data *paths)
131{
132	return 0;
133}
134
135static inline void icc_bulk_disable(int num_paths, const struct icc_bulk_data *paths)
136{
137}
138
139#endif /* CONFIG_INTERCONNECT */
140
141#endif /* __LINUX_INTERCONNECT_H */
~/ Read-only file preview.