123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Copyright (c) 2018-2019, Linaro Ltd.
- * Author: Georgi Djakov <[email protected]>
- */
- #ifndef __LINUX_INTERCONNECT_H
- #define __LINUX_INTERCONNECT_H
- #include <linux/mutex.h>
- #include <linux/types.h>
- /* macros for converting to icc units */
- #define Bps_to_icc(x) ((x) / 1000)
- #define kBps_to_icc(x) (x)
- #define MBps_to_icc(x) ((x) * 1000)
- #define GBps_to_icc(x) ((x) * 1000 * 1000)
- #define bps_to_icc(x) (1)
- #define kbps_to_icc(x) ((x) / 8 + ((x) % 8 ? 1 : 0))
- #define Mbps_to_icc(x) ((x) * 1000 / 8)
- #define Gbps_to_icc(x) ((x) * 1000 * 1000 / 8)
- struct icc_path;
- struct device;
- /**
- * struct icc_bulk_data - Data used for bulk icc operations.
- *
- * @path: reference to the interconnect path (internal use)
- * @name: the name from the "interconnect-names" DT property
- * @avg_bw: average bandwidth in icc units
- * @peak_bw: peak bandwidth in icc units
- */
- struct icc_bulk_data {
- struct icc_path *path;
- const char *name;
- u32 avg_bw;
- u32 peak_bw;
- };
- #if IS_ENABLED(CONFIG_INTERCONNECT)
- struct icc_path *icc_get(struct device *dev, const int src_id,
- const int dst_id);
- struct icc_path *of_icc_get(struct device *dev, const char *name);
- struct icc_path *devm_of_icc_get(struct device *dev, const char *name);
- int devm_of_icc_bulk_get(struct device *dev, int num_paths, struct icc_bulk_data *paths);
- struct icc_path *of_icc_get_by_index(struct device *dev, int idx);
- void icc_put(struct icc_path *path);
- int icc_enable(struct icc_path *path);
- int icc_disable(struct icc_path *path);
- int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw);
- void icc_set_tag(struct icc_path *path, u32 tag);
- const char *icc_get_name(struct icc_path *path);
- int __must_check of_icc_bulk_get(struct device *dev, int num_paths,
- struct icc_bulk_data *paths);
- void icc_bulk_put(int num_paths, struct icc_bulk_data *paths);
- int icc_bulk_set_bw(int num_paths, const struct icc_bulk_data *paths);
- int icc_bulk_enable(int num_paths, const struct icc_bulk_data *paths);
- void icc_bulk_disable(int num_paths, const struct icc_bulk_data *paths);
- #else
- static inline struct icc_path *icc_get(struct device *dev, const int src_id,
- const int dst_id)
- {
- return NULL;
- }
- static inline struct icc_path *of_icc_get(struct device *dev,
- const char *name)
- {
- return NULL;
- }
- static inline struct icc_path *devm_of_icc_get(struct device *dev,
- const char *name)
- {
- return NULL;
- }
- static inline struct icc_path *of_icc_get_by_index(struct device *dev, int idx)
- {
- return NULL;
- }
- static inline void icc_put(struct icc_path *path)
- {
- }
- static inline int icc_enable(struct icc_path *path)
- {
- return 0;
- }
- static inline int icc_disable(struct icc_path *path)
- {
- return 0;
- }
- static inline int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
- {
- return 0;
- }
- static inline void icc_set_tag(struct icc_path *path, u32 tag)
- {
- }
- static inline const char *icc_get_name(struct icc_path *path)
- {
- return NULL;
- }
- static inline int of_icc_bulk_get(struct device *dev, int num_paths, struct icc_bulk_data *paths)
- {
- return 0;
- }
- static inline int devm_of_icc_bulk_get(struct device *dev, int num_paths,
- struct icc_bulk_data *paths)
- {
- return 0;
- }
- static inline void icc_bulk_put(int num_paths, struct icc_bulk_data *paths)
- {
- }
- static inline int icc_bulk_set_bw(int num_paths, const struct icc_bulk_data *paths)
- {
- return 0;
- }
- static inline int icc_bulk_enable(int num_paths, const struct icc_bulk_data *paths)
- {
- return 0;
- }
- static inline void icc_bulk_disable(int num_paths, const struct icc_bulk_data *paths)
- {
- }
- #endif /* CONFIG_INTERCONNECT */
- #endif /* __LINUX_INTERCONNECT_H */
|