linux/drivers/thermal/thermal_netlink.h
Daniel Lezcano 1773572863 thermal: netlink: Add the commands and the events for the thresholds
The thresholds exist but there is no notification neither action code
related to them yet.

These changes implement the netlink for the notifications when the
thresholds are crossed, added, deleted or flushed as well as the
commands which allows to get the list of the thresholds, flush them,
add and delete.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Link: https://patch.msgid.link/20241022155147.463475-3-daniel.lezcano@linaro.org
[ rjw: Use the thermal_zone guard for locking, subject edit ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2024-10-24 14:54:01 +02:00

179 lines
4.7 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) Linaro Ltd 2020
* Author: Daniel Lezcano <daniel.lezcano@linaro.org>
*/
struct thermal_genl_cpu_caps {
int cpu;
int performance;
int efficiency;
};
enum thermal_genl_multicast_groups {
THERMAL_GENL_SAMPLING_GROUP = 0,
THERMAL_GENL_EVENT_GROUP = 1,
THERMAL_GENL_MAX_GROUP = THERMAL_GENL_EVENT_GROUP,
};
#define THERMAL_NOTIFY_BIND 0
#define THERMAL_NOTIFY_UNBIND 1
struct thermal_genl_notify {
int mcgrp;
};
struct thermal_zone_device;
struct thermal_trip;
struct thermal_cooling_device;
/* Netlink notification function */
#ifdef CONFIG_THERMAL_NETLINK
int __init thermal_netlink_init(void);
void __init thermal_netlink_exit(void);
int thermal_genl_register_notifier(struct notifier_block *nb);
int thermal_genl_unregister_notifier(struct notifier_block *nb);
int thermal_notify_tz_create(const struct thermal_zone_device *tz);
int thermal_notify_tz_delete(const struct thermal_zone_device *tz);
int thermal_notify_tz_enable(const struct thermal_zone_device *tz);
int thermal_notify_tz_disable(const struct thermal_zone_device *tz);
int thermal_notify_tz_trip_down(const struct thermal_zone_device *tz,
const struct thermal_trip *trip);
int thermal_notify_tz_trip_up(const struct thermal_zone_device *tz,
const struct thermal_trip *trip);
int thermal_notify_tz_trip_change(const struct thermal_zone_device *tz,
const struct thermal_trip *trip);
int thermal_notify_cdev_state_update(const struct thermal_cooling_device *cdev,
int state);
int thermal_notify_cdev_add(const struct thermal_cooling_device *cdev);
int thermal_notify_cdev_delete(const struct thermal_cooling_device *cdev);
int thermal_notify_tz_gov_change(const struct thermal_zone_device *tz,
const char *name);
int thermal_genl_sampling_temp(int id, int temp);
int thermal_genl_cpu_capability_event(int count,
struct thermal_genl_cpu_caps *caps);
int thermal_notify_threshold_add(const struct thermal_zone_device *tz,
int temperature, int direction);
int thermal_notify_threshold_delete(const struct thermal_zone_device *tz,
int temperature, int direction);
int thermal_notify_threshold_flush(const struct thermal_zone_device *tz);
int thermal_notify_threshold_down(const struct thermal_zone_device *tz);
int thermal_notify_threshold_up(const struct thermal_zone_device *tz);
#else
static inline int thermal_netlink_init(void)
{
return 0;
}
static inline int thermal_notify_tz_create(const struct thermal_zone_device *tz)
{
return 0;
}
static inline int thermal_genl_register_notifier(struct notifier_block *nb)
{
return 0;
}
static inline int thermal_genl_unregister_notifier(struct notifier_block *nb)
{
return 0;
}
static inline int thermal_notify_tz_delete(const struct thermal_zone_device *tz)
{
return 0;
}
static inline int thermal_notify_tz_enable(const struct thermal_zone_device *tz)
{
return 0;
}
static inline int thermal_notify_tz_disable(const struct thermal_zone_device *tz)
{
return 0;
}
static inline int thermal_notify_tz_trip_down(const struct thermal_zone_device *tz,
const struct thermal_trip *trip)
{
return 0;
}
static inline int thermal_notify_tz_trip_up(const struct thermal_zone_device *tz,
const struct thermal_trip *trip)
{
return 0;
}
static inline int thermal_notify_tz_trip_change(const struct thermal_zone_device *tz,
const struct thermal_trip *trip)
{
return 0;
}
static inline int thermal_notify_cdev_state_update(const struct thermal_cooling_device *cdev,
int state)
{
return 0;
}
static inline int thermal_notify_cdev_add(const struct thermal_cooling_device *cdev)
{
return 0;
}
static inline int thermal_notify_cdev_delete(const struct thermal_cooling_device *cdev)
{
return 0;
}
static inline int thermal_notify_tz_gov_change(const struct thermal_zone_device *tz,
const char *name)
{
return 0;
}
static inline int thermal_genl_sampling_temp(int id, int temp)
{
return 0;
}
static inline int thermal_genl_cpu_capability_event(int count, struct thermal_genl_cpu_caps *caps)
{
return 0;
}
static inline int thermal_notify_threshold_add(const struct thermal_zone_device *tz,
int temperature, int direction)
{
return 0;
}
static inline int thermal_notify_threshold_delete(const struct thermal_zone_device *tz,
int temperature, int direction)
{
return 0;
}
static inline int thermal_notify_threshold_flush(const struct thermal_zone_device *tz)
{
return 0;
}
static inline int thermal_notify_threshold_down(const struct thermal_zone_device *tz)
{
return 0;
}
static inline int thermal_notify_threshold_up(const struct thermal_zone_device *tz)
{
return 0;
}
static inline void __init thermal_netlink_exit(void) {}
#endif /* CONFIG_THERMAL_NETLINK */