/* * thermal_core.h * * Copyright (C) 2012 Intel Corp * Author: Durgadoss R * Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #ifndef __THERMAL_CORE_H__ #define __THERMAL_CORE_H__ #include #include /* Initial state of a cooling device during binding */ #define THERMAL_NO_TARGET -1UL /* * This structure is used to describe the behavior of * a certain cooling device on a certain trip point * in a certain thermal zone */ struct thermal_instance { int id; char name[THERMAL_NAME_LENGTH]; struct thermal_zone_device *tz; struct thermal_cooling_device *cdev; int trip; bool initialized; unsigned long upper; /* Highest cooling state for this trip point */ unsigned long lower; /* Lowest cooling state for this trip point */ unsigned long target; /* expected cooling state */ char attr_name[THERMAL_NAME_LENGTH]; struct device_attribute attr; char weight_attr_name[THERMAL_NAME_LENGTH]; struct device_attribute weight_attr; struct list_head tz_node; /* node in tz->thermal_instances */ struct list_head cdev_node; /* node in cdev->thermal_instances */ unsigned int weight; /* The weight of the cooling device */ }; int thermal_register_governor(struct thermal_governor *); void thermal_unregister_governor(struct thermal_governor *); struct thermal_governor *thermal_find_governor(const char *name); #ifdef CONFIG_THERMAL_GOV_CONTINUOUS int thermal_gov_continuous_register(void); void thermal_gov_continuous_unregister(void); #else static inline int thermal_gov_continuous_register(void) { return 0; } static inline void thermal_gov_continuous_unregister(void) {} #endif #ifdef CONFIG_THERMAL_GOV_STEP_WISE int thermal_gov_step_wise_register(void); void thermal_gov_step_wise_unregister(void); #else static inline int thermal_gov_step_wise_register(void) { return 0; } static inline void thermal_gov_step_wise_unregister(void) {} #endif /* CONFIG_THERMAL_GOV_STEP_WISE */ #ifdef CONFIG_THERMAL_GOV_FAIR_SHARE int thermal_gov_fair_share_register(void); void thermal_gov_fair_share_unregister(void); #else static inline int thermal_gov_fair_share_register(void) { return 0; } static inline void thermal_gov_fair_share_unregister(void) {} #endif /* CONFIG_THERMAL_GOV_FAIR_SHARE */ #ifdef CONFIG_THERMAL_GOV_BANG_BANG int thermal_gov_bang_bang_register(void); void thermal_gov_bang_bang_unregister(void); #else static inline int thermal_gov_bang_bang_register(void) { return 0; } static inline void thermal_gov_bang_bang_unregister(void) {} #endif /* CONFIG_THERMAL_GOV_BANG_BANG */ #ifdef CONFIG_THERMAL_GOV_PID int pid_thermal_gov_register(void); void pid_thermal_gov_unregister(void); #else static inline int pid_thermal_gov_register(void) { return 0; } static inline void pid_thermal_gov_unregister(void) {} #endif /* CONFIG_THERMAL_GOV_PID */ #ifdef CONFIG_THERMAL_GOV_USER_SPACE int thermal_gov_user_space_register(void); void thermal_gov_user_space_unregister(void); #else static inline int thermal_gov_user_space_register(void) { return 0; } static inline void thermal_gov_user_space_unregister(void) {} #endif /* CONFIG_THERMAL_GOV_USER_SPACE */ #ifdef CONFIG_THERMAL_GOV_POWER_ALLOCATOR int thermal_gov_power_allocator_register(void); void thermal_gov_power_allocator_unregister(void); #else static inline int thermal_gov_power_allocator_register(void) { return 0; } static inline void thermal_gov_power_allocator_unregister(void) {} #endif /* CONFIG_THERMAL_GOV_POWER_ALLOCATOR */ /* device tree support */ #ifdef CONFIG_THERMAL_OF int of_parse_thermal_zones(void); void of_thermal_destroy_zones(void); int of_thermal_get_ntrips(struct thermal_zone_device *); bool of_thermal_is_trip_valid(struct thermal_zone_device *, int); const struct thermal_trip * of_thermal_get_trip_points(struct thermal_zone_device *); #else static inline int of_parse_thermal_zones(void) { return 0; } static inline void of_thermal_destroy_zones(void) { } static inline int of_thermal_get_ntrips(struct thermal_zone_device *tz) { return 0; } static inline bool of_thermal_is_trip_valid(struct thermal_zone_device *tz, int trip) { return false; } static inline const struct thermal_trip * of_thermal_get_trip_points(struct thermal_zone_device *tz) { return NULL; } #endif #endif /* __THERMAL_CORE_H__ */