cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

devfreq_cooling.h (2763B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * devfreq_cooling: Thermal cooling device implementation for devices using
      4 *                  devfreq
      5 *
      6 * Copyright (C) 2014-2015 ARM Limited
      7 *
      8 */
      9
     10#ifndef __DEVFREQ_COOLING_H__
     11#define __DEVFREQ_COOLING_H__
     12
     13#include <linux/devfreq.h>
     14#include <linux/thermal.h>
     15
     16
     17/**
     18 * struct devfreq_cooling_power - Devfreq cooling power ops
     19 * @get_real_power:	When this is set, the framework uses it to ask the
     20 *			device driver for the actual power.
     21 *			Some devices have more sophisticated methods
     22 *			(like power counters) to approximate the actual power
     23 *			that they use.
     24 *			This function provides more accurate data to the
     25 *			thermal governor. When the driver does not provide
     26 *			such function, framework just uses pre-calculated
     27 *			table and scale the power by 'utilization'
     28 *			(based on 'busy_time' and 'total_time' taken from
     29 *			devfreq 'last_status').
     30 *			The value returned by this function must be lower
     31 *			or equal than the maximum power value
     32 *			for the current	state
     33 *			(which can be found in power_table[state]).
     34 *			When this interface is used, the power_table holds
     35 *			max total (static + dynamic) power value for each OPP.
     36 */
     37struct devfreq_cooling_power {
     38	int (*get_real_power)(struct devfreq *df, u32 *power,
     39			      unsigned long freq, unsigned long voltage);
     40};
     41
     42#ifdef CONFIG_DEVFREQ_THERMAL
     43
     44struct thermal_cooling_device *
     45of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
     46				  struct devfreq_cooling_power *dfc_power);
     47struct thermal_cooling_device *
     48of_devfreq_cooling_register(struct device_node *np, struct devfreq *df);
     49struct thermal_cooling_device *devfreq_cooling_register(struct devfreq *df);
     50void devfreq_cooling_unregister(struct thermal_cooling_device *dfc);
     51struct thermal_cooling_device *
     52devfreq_cooling_em_register(struct devfreq *df,
     53			    struct devfreq_cooling_power *dfc_power);
     54
     55#else /* !CONFIG_DEVFREQ_THERMAL */
     56
     57static inline struct thermal_cooling_device *
     58of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
     59				  struct devfreq_cooling_power *dfc_power)
     60{
     61	return ERR_PTR(-EINVAL);
     62}
     63
     64static inline struct thermal_cooling_device *
     65of_devfreq_cooling_register(struct device_node *np, struct devfreq *df)
     66{
     67	return ERR_PTR(-EINVAL);
     68}
     69
     70static inline struct thermal_cooling_device *
     71devfreq_cooling_register(struct devfreq *df)
     72{
     73	return ERR_PTR(-EINVAL);
     74}
     75
     76static inline struct thermal_cooling_device *
     77devfreq_cooling_em_register(struct devfreq *df,
     78			    struct devfreq_cooling_power *dfc_power)
     79{
     80	return ERR_PTR(-EINVAL);
     81}
     82
     83static inline void
     84devfreq_cooling_unregister(struct thermal_cooling_device *dfc)
     85{
     86}
     87
     88#endif /* CONFIG_DEVFREQ_THERMAL */
     89#endif /* __DEVFREQ_COOLING_H__ */