linux/include/linux/interconnect.h
<<
>>
Prefs
   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) / 8 + ((x) % 8 ? 1 : 0))
  20#define Mbps_to_icc(x)  ((x) * 1000 / 8)
  21#define Gbps_to_icc(x)  ((x) * 1000 * 1000 / 8)
  22
  23struct icc_path;
  24struct device;
  25
  26#if IS_ENABLED(CONFIG_INTERCONNECT)
  27
  28struct icc_path *icc_get(struct device *dev, const int src_id,
  29                         const int dst_id);
  30struct icc_path *of_icc_get(struct device *dev, const char *name);
  31struct icc_path *devm_of_icc_get(struct device *dev, const char *name);
  32struct icc_path *of_icc_get_by_index(struct device *dev, int idx);
  33void icc_put(struct icc_path *path);
  34int icc_enable(struct icc_path *path);
  35int icc_disable(struct icc_path *path);
  36int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw);
  37void icc_set_tag(struct icc_path *path, u32 tag);
  38const char *icc_get_name(struct icc_path *path);
  39
  40#else
  41
  42static inline struct icc_path *icc_get(struct device *dev, const int src_id,
  43                                       const int dst_id)
  44{
  45        return NULL;
  46}
  47
  48static inline struct icc_path *of_icc_get(struct device *dev,
  49                                          const char *name)
  50{
  51        return NULL;
  52}
  53
  54static inline struct icc_path *devm_of_icc_get(struct device *dev,
  55                                                const char *name)
  56{
  57        return NULL;
  58}
  59
  60static inline struct icc_path *of_icc_get_by_index(struct device *dev, int idx)
  61{
  62        return NULL;
  63}
  64
  65static inline void icc_put(struct icc_path *path)
  66{
  67}
  68
  69static inline int icc_enable(struct icc_path *path)
  70{
  71        return 0;
  72}
  73
  74static inline int icc_disable(struct icc_path *path)
  75{
  76        return 0;
  77}
  78
  79static inline int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
  80{
  81        return 0;
  82}
  83
  84static inline void icc_set_tag(struct icc_path *path, u32 tag)
  85{
  86}
  87
  88static inline const char *icc_get_name(struct icc_path *path)
  89{
  90        return NULL;
  91}
  92
  93#endif /* CONFIG_INTERCONNECT */
  94
  95#endif /* __LINUX_INTERCONNECT_H */
  96