mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 01:35:35 +07:00
1ce50e7d40
Initially the thermal framework had a very simple notification mechanism to send generic netlink messages to the userspace. The notification function was never called from anywhere and the corresponding dead code was removed. It was probably a first attempt to introduce the netlink notification. At LPC2018, the presentation "Linux thermal: User kernel interface", proposed to create the notifications to the userspace via a kfifo. The advantage of the kfifo is the performance. It is usually used from a 1:1 communication channel where a driver captures data and sends it as fast as possible to a userspace process. The drawback is that only one process uses the notification channel exclusively, thus no other process is allowed to use the channel to get temperature or notifications. This patch defines a generic netlink API to discover the current thermal setup and adds event notifications as well as temperature sampling. As any genetlink protocol, it can evolve and the versioning allows to keep the backward compatibility. In order to prevent the user from getting flooded with data on a single channel, there are two multicast channels, one for the temperature sampling when the thermal zone is updated and another one for the events, so the user can get the events only without the thermal zone temperature sampling. Also, a list of commands to discover the thermal setup is added and can be extended when needed. Reviewed-by: Amit Kucheria <amit.kucheria@linaro.org> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Acked-by: Zhang Rui <rui.zhang@intel.com> Link: https://lore.kernel.org/r/20200706105538.2159-3-daniel.lezcano@linaro.org
92 lines
3.0 KiB
C
92 lines
3.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
#ifndef _UAPI_LINUX_THERMAL_H
|
|
#define _UAPI_LINUX_THERMAL_H
|
|
|
|
#define THERMAL_NAME_LENGTH 20
|
|
|
|
enum thermal_device_mode {
|
|
THERMAL_DEVICE_DISABLED = 0,
|
|
THERMAL_DEVICE_ENABLED,
|
|
};
|
|
|
|
enum thermal_trip_type {
|
|
THERMAL_TRIP_ACTIVE = 0,
|
|
THERMAL_TRIP_PASSIVE,
|
|
THERMAL_TRIP_HOT,
|
|
THERMAL_TRIP_CRITICAL,
|
|
};
|
|
|
|
/* Adding event notification support elements */
|
|
#define THERMAL_GENL_FAMILY_NAME "thermal"
|
|
#define THERMAL_GENL_VERSION 0x01
|
|
#define THERMAL_GENL_SAMPLING_GROUP_NAME "sampling"
|
|
#define THERMAL_GENL_EVENT_GROUP_NAME "event"
|
|
|
|
/* Attributes of thermal_genl_family */
|
|
enum thermal_genl_attr {
|
|
THERMAL_GENL_ATTR_UNSPEC,
|
|
THERMAL_GENL_ATTR_TZ,
|
|
THERMAL_GENL_ATTR_TZ_ID,
|
|
THERMAL_GENL_ATTR_TZ_TEMP,
|
|
THERMAL_GENL_ATTR_TZ_TRIP,
|
|
THERMAL_GENL_ATTR_TZ_TRIP_ID,
|
|
THERMAL_GENL_ATTR_TZ_TRIP_TYPE,
|
|
THERMAL_GENL_ATTR_TZ_TRIP_TEMP,
|
|
THERMAL_GENL_ATTR_TZ_TRIP_HYST,
|
|
THERMAL_GENL_ATTR_TZ_MODE,
|
|
THERMAL_GENL_ATTR_TZ_NAME,
|
|
THERMAL_GENL_ATTR_TZ_CDEV_WEIGHT,
|
|
THERMAL_GENL_ATTR_TZ_GOV,
|
|
THERMAL_GENL_ATTR_TZ_GOV_NAME,
|
|
THERMAL_GENL_ATTR_CDEV,
|
|
THERMAL_GENL_ATTR_CDEV_ID,
|
|
THERMAL_GENL_ATTR_CDEV_CUR_STATE,
|
|
THERMAL_GENL_ATTR_CDEV_MAX_STATE,
|
|
THERMAL_GENL_ATTR_CDEV_NAME,
|
|
THERMAL_GENL_ATTR_GOV_NAME,
|
|
|
|
__THERMAL_GENL_ATTR_MAX,
|
|
};
|
|
#define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1)
|
|
|
|
enum thermal_genl_sampling {
|
|
THERMAL_GENL_SAMPLING_TEMP,
|
|
__THERMAL_GENL_SAMPLING_MAX,
|
|
};
|
|
#define THERMAL_GENL_SAMPLING_MAX (__THERMAL_GENL_SAMPLING_MAX - 1)
|
|
|
|
/* Events of thermal_genl_family */
|
|
enum thermal_genl_event {
|
|
THERMAL_GENL_EVENT_UNSPEC,
|
|
THERMAL_GENL_EVENT_TZ_CREATE, /* Thermal zone creation */
|
|
THERMAL_GENL_EVENT_TZ_DELETE, /* Thermal zone deletion */
|
|
THERMAL_GENL_EVENT_TZ_DISABLE, /* Thermal zone disabed */
|
|
THERMAL_GENL_EVENT_TZ_ENABLE, /* Thermal zone enabled */
|
|
THERMAL_GENL_EVENT_TZ_TRIP_UP, /* Trip point crossed the way up */
|
|
THERMAL_GENL_EVENT_TZ_TRIP_DOWN, /* Trip point crossed the way down */
|
|
THERMAL_GENL_EVENT_TZ_TRIP_CHANGE, /* Trip point changed */
|
|
THERMAL_GENL_EVENT_TZ_TRIP_ADD, /* Trip point added */
|
|
THERMAL_GENL_EVENT_TZ_TRIP_DELETE, /* Trip point deleted */
|
|
THERMAL_GENL_EVENT_CDEV_ADD, /* Cdev bound to the thermal zone */
|
|
THERMAL_GENL_EVENT_CDEV_DELETE, /* Cdev unbound */
|
|
THERMAL_GENL_EVENT_CDEV_STATE_UPDATE, /* Cdev state updated */
|
|
THERMAL_GENL_EVENT_TZ_GOV_CHANGE, /* Governor policy changed */
|
|
__THERMAL_GENL_EVENT_MAX,
|
|
};
|
|
#define THERMAL_GENL_EVENT_MAX (__THERMAL_GENL_EVENT_MAX - 1)
|
|
|
|
/* Commands supported by the thermal_genl_family */
|
|
enum thermal_genl_cmd {
|
|
THERMAL_GENL_CMD_UNSPEC,
|
|
THERMAL_GENL_CMD_TZ_GET_ID, /* List of thermal zones id */
|
|
THERMAL_GENL_CMD_TZ_GET_TRIP, /* List of thermal trips */
|
|
THERMAL_GENL_CMD_TZ_GET_TEMP, /* Get the thermal zone temperature */
|
|
THERMAL_GENL_CMD_TZ_GET_GOV, /* Get the thermal zone governor */
|
|
THERMAL_GENL_CMD_TZ_GET_MODE, /* Get the thermal zone mode */
|
|
THERMAL_GENL_CMD_CDEV_GET, /* List of cdev id */
|
|
__THERMAL_GENL_CMD_MAX,
|
|
};
|
|
#define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1)
|
|
|
|
#endif /* _UAPI_LINUX_THERMAL_H */
|