847 lines
24 KiB
Diff
847 lines
24 KiB
Diff
|
From 2ffbdf7cabe94a79eab77ba3ddeb8fd0506a93f7 Mon Sep 17 00:00:00 2001
|
||
|
From: Kate Hsuan <hpa@redhat.com>
|
||
|
Date: Tue, 16 Apr 2024 16:53:17 +0800
|
||
|
Subject: [PATCH 1/4] main: remove deprecated API
|
||
|
|
||
|
g_type_init() was deprecated since Glib 2.36.
|
||
|
---
|
||
|
src/main.cpp | 3 ---
|
||
|
1 file changed, 3 deletions(-)
|
||
|
|
||
|
diff --git a/src/main.cpp b/src/main.cpp
|
||
|
index 34715cb8..135fa3ff 100644
|
||
|
--- a/src/main.cpp
|
||
|
+++ b/src/main.cpp
|
||
|
@@ -322,9 +322,6 @@ int main(int argc, char *argv[]) {
|
||
|
g_unix_signal_add (SIGTERM, G_SOURCE_FUNC (sig_int_handler), NULL);
|
||
|
}
|
||
|
|
||
|
- // Initialize the GType/GObject system
|
||
|
- g_type_init();
|
||
|
-
|
||
|
// Create a main loop that will dispatch callbacks
|
||
|
g_main_loop = g_main_loop_new(NULL, FALSE);
|
||
|
if (g_main_loop == NULL) {
|
||
|
|
||
|
From 4aeed1e59a2901d95aefe881673842b9785c8cfa Mon Sep 17 00:00:00 2001
|
||
|
From: Kate Hsuan <hpa@redhat.com>
|
||
|
Date: Tue, 16 Apr 2024 16:56:31 +0800
|
||
|
Subject: [PATCH 2/4] thd_engine_default: Drop modem support
|
||
|
|
||
|
Don't new a intel_modem object.
|
||
|
---
|
||
|
src/thd_engine_default.cpp | 16 +---------------
|
||
|
1 file changed, 1 insertion(+), 15 deletions(-)
|
||
|
|
||
|
diff --git a/src/thd_engine_default.cpp b/src/thd_engine_default.cpp
|
||
|
index a81ecb39..330cc51d 100644
|
||
|
--- a/src/thd_engine_default.cpp
|
||
|
+++ b/src/thd_engine_default.cpp
|
||
|
@@ -48,9 +48,6 @@
|
||
|
#include "thd_sensor_rapl_power.h"
|
||
|
#include "thd_zone_rapl_power.h"
|
||
|
|
||
|
-#ifdef GLIB_SUPPORT
|
||
|
-#include "thd_cdev_modem.h"
|
||
|
-#endif
|
||
|
|
||
|
// Default CPU cooling devices, which are not part of thermal sysfs
|
||
|
// Since non trivial initialization is not supported, we init all fields even if they are not needed
|
||
|
@@ -622,18 +619,7 @@ int cthd_engine_default::add_replace_cdev(cooling_dev_t *config) {
|
||
|
}
|
||
|
if (!cdev_present) {
|
||
|
// create new
|
||
|
- if (config->type_string.compare("intel_modem") == 0) {
|
||
|
-#ifdef GLIB_SUPPORT
|
||
|
- /*
|
||
|
- * Add Modem as cdev
|
||
|
- * intel_modem is a modem identifier across all intel platforms.
|
||
|
- * The differences between the modems of various intel platforms
|
||
|
- * are to be taken care in the cdev implementation.
|
||
|
- */
|
||
|
- cdev = new cthd_cdev_modem(current_cdev_index, config->path_str);
|
||
|
-#endif
|
||
|
- } else
|
||
|
- cdev = new cthd_gen_sysfs_cdev(current_cdev_index, config->path_str);
|
||
|
+ cdev = new cthd_gen_sysfs_cdev(current_cdev_index, config->path_str);
|
||
|
if (!cdev)
|
||
|
return THD_ERROR;
|
||
|
cdev->set_cdev_type(config->type_string);
|
||
|
|
||
|
From 7fa7a2e0408d8efe570139c48c32afefc84480e9 Mon Sep 17 00:00:00 2001
|
||
|
From: Kate Hsuan <hpa@redhat.com>
|
||
|
Date: Tue, 16 Apr 2024 17:14:16 +0800
|
||
|
Subject: [PATCH 3/4] build: remove thd_cdev_modem and dbus-glib
|
||
|
|
||
|
thd_cdev_modem.cpp and .h were dropped. Moreover, dbus-glib was
|
||
|
dropped from the build scripts.
|
||
|
---
|
||
|
Makefile.am | 12 +-
|
||
|
configure.ac | 12 +-
|
||
|
src/thd_cdev_modem.cpp | 521 -----------------------------------------
|
||
|
src/thd_cdev_modem.h | 64 -----
|
||
|
src/thermald.h | 3 -
|
||
|
5 files changed, 3 insertions(+), 609 deletions(-)
|
||
|
delete mode 100644 src/thd_cdev_modem.cpp
|
||
|
delete mode 100644 src/thd_cdev_modem.h
|
||
|
|
||
|
diff --git a/Makefile.am b/Makefile.am
|
||
|
index dd2ef103..996388a3 100644
|
||
|
--- a/Makefile.am
|
||
|
+++ b/Makefile.am
|
||
|
@@ -5,9 +5,9 @@ SUBDIRS = . docs data
|
||
|
ACLOCAL_AMFLAGS =
|
||
|
|
||
|
# Global C Flags
|
||
|
-AM_CFLAGS = ${DBUS_CFLAGS}
|
||
|
+AM_CFLAGS = ${GLIB_CFLAGS}
|
||
|
AM_CXXFLAGS = \
|
||
|
- ${DBUS_CFLAGS} \
|
||
|
+ $(GLIB_CFLAGS) \
|
||
|
$(XML_CFLAGS) \
|
||
|
$(UPOWER_CFLAGS) \
|
||
|
$(EVDEV_CFLAGS) \
|
||
|
@@ -30,7 +30,6 @@ thermald_CPPFLAGS = \
|
||
|
|
||
|
thermald_includedir = @top_srcdir@
|
||
|
thermald_LDADD = \
|
||
|
- $(DBUS_LIBS) \
|
||
|
$(GLIB_LIBS) \
|
||
|
$(LIBNL_LIBS) \
|
||
|
$(LIBM) \
|
||
|
@@ -39,9 +38,6 @@ thermald_LDADD = \
|
||
|
$(UPOWER_LIBS) \
|
||
|
$(EVDEV_LIBS)
|
||
|
|
||
|
-BUILT_SOURCES = \
|
||
|
- thd_dbus_interface.h \
|
||
|
- thermald-resource.c
|
||
|
|
||
|
thermald_SOURCES = \
|
||
|
src/main.cpp \
|
||
|
@@ -74,7 +70,6 @@ thermald_SOURCES = \
|
||
|
src/thd_cdev_rapl_dram.cpp \
|
||
|
src/thd_cpu_default_binding.cpp \
|
||
|
src/thd_cdev_backlight.cpp \
|
||
|
- src/thd_cdev_modem.cpp \
|
||
|
src/thd_int3400.cpp \
|
||
|
src/thd_cdev_kbl_amdgpu.cpp \
|
||
|
src/thd_sensor_kbl_amdgpu_power.cpp \
|
||
|
@@ -93,9 +88,6 @@ thermald_SOURCES = \
|
||
|
man5_MANS = man/thermal-conf.xml.5
|
||
|
man8_MANS = man/thermald.8
|
||
|
|
||
|
-thd_dbus_interface.h: $(top_srcdir)/src/thd_dbus_interface.xml
|
||
|
- $(AM_V_GEN) dbus-binding-tool --prefix=thd_dbus_interface --mode=glib-server --output=$@ $<
|
||
|
-
|
||
|
thermald-resource.c: $(top_srcdir)/thermald-resource.gresource.xml
|
||
|
$(AM_V_GEN) glib-compile-resources --generate-source thermald-resource.gresource.xml
|
||
|
|
||
|
diff --git a/configure.ac b/configure.ac
|
||
|
index 334f38fe..b72019e4 100644
|
||
|
--- a/configure.ac
|
||
|
+++ b/configure.ac
|
||
|
@@ -62,20 +62,10 @@ GETTEXT_PACKAGE=thermald
|
||
|
AC_SUBST(GETTEXT_PACKAGE)
|
||
|
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package])
|
||
|
|
||
|
-dnl
|
||
|
-dnl Checks for new dbus-glib property access function
|
||
|
-dnl
|
||
|
-AC_CHECK_LIB([dbus-glib-1], [dbus_glib_global_set_disable_legacy_property_access], ac_have_dg_prop="1", ac_have_dg_prop="0")
|
||
|
-AC_DEFINE_UNQUOTED(HAVE_DBUS_GLIB_DISABLE_LEGACY_PROP_ACCESS, $ac_have_dg_prop, [Define if you have a dbus-glib with dbus_glib_global_set_disable_legacy_property_access()])
|
||
|
-
|
||
|
-PKG_CHECK_MODULES(DBUS, dbus-1 >= 1.1 dbus-glib-1 >= 0.94)
|
||
|
-AC_SUBST(DBUS_CFLAGS)
|
||
|
-AC_SUBST(DBUS_LIBS)
|
||
|
-
|
||
|
GLIB_VERSION_DEFINES="-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26"
|
||
|
DBUS_CFLAGS="$DBUS_CFLAGS $GLIB_VERSION_DEFINES"
|
||
|
|
||
|
-PKG_CHECK_MODULES(GLIB, gio-unix-2.0 >= 2.22 gmodule-2.0)
|
||
|
+PKG_CHECK_MODULES(GLIB, gio-unix-2.0 >= 2.22 gmodule-2.0 glib-2.0)
|
||
|
GLIB_CFLAGS="$GLIB_CFLAGS $GLIB_VERSION_DEFINES"
|
||
|
AC_SUBST(GLIB_CFLAGS)
|
||
|
AC_SUBST(GLIB_LIBS)
|
||
|
diff --git a/src/thd_cdev_modem.cpp b/src/thd_cdev_modem.cpp
|
||
|
deleted file mode 100644
|
||
|
index 6c3ff6cb..00000000
|
||
|
--- a/src/thd_cdev_modem.cpp
|
||
|
+++ /dev/null
|
||
|
@@ -1,521 +0,0 @@
|
||
|
-/*
|
||
|
- * thd_cdev_modem.cpp: thermal modem cooling implementation
|
||
|
- * Copyright (c) 2016, Intel Corporation.
|
||
|
- *
|
||
|
- * This program is free software; you can redistribute it and/or modify it
|
||
|
- * under the terms and conditions of the GNU General Public License
|
||
|
- * version 2 or later as published by the Free Software Foundation.
|
||
|
- *
|
||
|
- * This program is distributed in the hope 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.
|
||
|
- *
|
||
|
- *
|
||
|
- * Author Name <Rajagopalx.Aravindan@intel.com>
|
||
|
- *
|
||
|
- */
|
||
|
-
|
||
|
-/*
|
||
|
- * Modem Throttling Levels:
|
||
|
- * 0 - Disabled or No Throttling
|
||
|
- * 1 - Enabled
|
||
|
- */
|
||
|
-
|
||
|
-#include <stdint.h>
|
||
|
-#include <dbus/dbus.h>
|
||
|
-#include <string.h>
|
||
|
-
|
||
|
-#include "thd_cdev_modem.h"
|
||
|
-
|
||
|
-int cthd_cdev_modem::parse_ofono_property_changed_signal(DBusMessage* msg,
|
||
|
- const char* interface, const char* signal, const char* property,
|
||
|
- dbus_bool_t* new_value) {
|
||
|
- DBusMessageIter iter;
|
||
|
- DBusMessageIter var;
|
||
|
-
|
||
|
- char *property_name;
|
||
|
-
|
||
|
- dbus_message_iter_init(msg, &iter);
|
||
|
-
|
||
|
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) {
|
||
|
- thd_log_error("Invalid arguments in %s[%s]", interface, signal);
|
||
|
- return THD_ERROR;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_get_basic(&iter, &property_name);
|
||
|
-
|
||
|
- if (strlen(property) != strlen(property_name)
|
||
|
- || strcmp(property, property_name)) {
|
||
|
- thd_log_error("Unsupported property : %s", property_name);
|
||
|
- return THD_ERROR;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_next(&iter);
|
||
|
-
|
||
|
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
|
||
|
- thd_log_error("Invalid arguments in %s[%s(%s)]", interface, signal,
|
||
|
- property);
|
||
|
- return THD_ERROR;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_recurse(&iter, &var);
|
||
|
-
|
||
|
- if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN) {
|
||
|
- thd_log_error("Invalid arguments in %s[%s(%s)]", interface, signal,
|
||
|
- property);
|
||
|
- return THD_ERROR;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_get_basic(&var, new_value);
|
||
|
-
|
||
|
- return THD_SUCCESS;
|
||
|
-}
|
||
|
-
|
||
|
-DBusHandlerResult cthd_cdev_modem::ofono_signal_handler(DBusConnection *conn,
|
||
|
- DBusMessage *msg, void *user_data) {
|
||
|
- DBusError error;
|
||
|
- cthd_cdev_modem *cdev_modem = (cthd_cdev_modem *) user_data;
|
||
|
-
|
||
|
- const char *signal = "PropertyChanged";
|
||
|
-
|
||
|
- dbus_error_init(&error);
|
||
|
-
|
||
|
- if (dbus_message_is_signal(msg, THERMAL_MANAGEMENT_INTERFACE, signal)) {
|
||
|
- dbus_bool_t throttling;
|
||
|
-
|
||
|
- if (parse_ofono_property_changed_signal(msg,
|
||
|
- THERMAL_MANAGEMENT_INTERFACE, signal, "TransmitPowerThrottling",
|
||
|
- &throttling) != THD_SUCCESS)
|
||
|
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||
|
-
|
||
|
- if (cdev_modem) {
|
||
|
- cdev_modem->set_throttling_state(throttling ? true : false);
|
||
|
-
|
||
|
- cdev_modem->update_online_state(conn);
|
||
|
- cdev_modem->update_throttling_state(conn);
|
||
|
- thd_log_debug("TransmitPowerThrottling Initiated");
|
||
|
- }
|
||
|
-
|
||
|
- return DBUS_HANDLER_RESULT_HANDLED;
|
||
|
- } else if (dbus_message_is_signal(msg, MODEM_INTERFACE, signal)) {
|
||
|
- dbus_bool_t online;
|
||
|
-
|
||
|
- if (parse_ofono_property_changed_signal(msg, MODEM_INTERFACE, signal,
|
||
|
- "Online", &online) != THD_SUCCESS)
|
||
|
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||
|
-
|
||
|
- if (cdev_modem) {
|
||
|
- cdev_modem->set_online_state(online ? true : false);
|
||
|
- cdev_modem->update_online_state(conn);
|
||
|
- cdev_modem->update_throttling_state(conn);
|
||
|
- thd_log_debug("Modem online Initiated");
|
||
|
- }
|
||
|
-
|
||
|
- return DBUS_HANDLER_RESULT_HANDLED;
|
||
|
- }
|
||
|
-
|
||
|
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||
|
-}
|
||
|
-
|
||
|
-cthd_cdev_modem::cthd_cdev_modem(unsigned int _index, std::string control_path) :
|
||
|
- cthd_cdev(_index, "") {
|
||
|
- throttling = false;
|
||
|
- online = false;
|
||
|
-
|
||
|
- if (control_path.length() > 0)
|
||
|
- modem_path.assign(control_path);
|
||
|
- else
|
||
|
- modem_path.assign("/ril_0");
|
||
|
-}
|
||
|
-
|
||
|
-int cthd_cdev_modem::get_modem_property(DBusConnection* conn,
|
||
|
- const char* interface, const char* property, bool* value) {
|
||
|
- DBusError error;
|
||
|
- DBusMessage *msg;
|
||
|
- DBusMessage *reply;
|
||
|
- DBusMessageIter array;
|
||
|
- DBusMessageIter dict;
|
||
|
- int rc = THD_ERROR;
|
||
|
-
|
||
|
- dbus_error_init(&error);
|
||
|
-
|
||
|
- msg = dbus_message_new_method_call("org.ofono", modem_path.c_str(),
|
||
|
- interface, "GetProperties");
|
||
|
- if (msg == NULL) {
|
||
|
- thd_log_error("Error creating D-Bus message for GetProperties "
|
||
|
- "under %s : %s\n", modem_path.c_str(), error.message);
|
||
|
- return rc;
|
||
|
- }
|
||
|
-
|
||
|
- reply = dbus_connection_send_with_reply_and_block(conn, msg, 10000, &error);
|
||
|
- if (dbus_error_is_set(&error)) {
|
||
|
- thd_log_error("Error invoking GetProperties under %s : %s\n",
|
||
|
- modem_path.c_str(), error.message);
|
||
|
- dbus_error_free(&error);
|
||
|
- dbus_message_unref(msg);
|
||
|
- return rc;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_unref(msg);
|
||
|
-
|
||
|
- dbus_message_iter_init(reply, &array);
|
||
|
- if (dbus_message_iter_get_arg_type(&array) != DBUS_TYPE_ARRAY) {
|
||
|
- thd_log_error("GetProperties return type not array under %s!\n",
|
||
|
- modem_path.c_str());
|
||
|
- dbus_message_unref(reply);
|
||
|
- return rc;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_recurse(&array, &dict);
|
||
|
-
|
||
|
- while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
|
||
|
- DBusMessageIter key, var;
|
||
|
-
|
||
|
- char *property_name;
|
||
|
-
|
||
|
- dbus_message_iter_recurse(&dict, &key);
|
||
|
-
|
||
|
- if (dbus_message_iter_get_arg_type(&key) != DBUS_TYPE_STRING) {
|
||
|
- thd_log_error("GetProperties dict key type not string "
|
||
|
- "under %s!\n", modem_path.c_str());
|
||
|
- dbus_message_unref(reply);
|
||
|
- return rc;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_get_basic(&key, &property_name);
|
||
|
-
|
||
|
- /* Check if, this is the property we are interested in */
|
||
|
- if (strlen(property) != strlen(property_name)
|
||
|
- || strcmp(property, property_name)) {
|
||
|
- dbus_message_iter_next(&dict);
|
||
|
- continue;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_next(&key);
|
||
|
-
|
||
|
- if (dbus_message_iter_get_arg_type(&key) != DBUS_TYPE_VARIANT) {
|
||
|
- thd_log_error("GetProperties dict value type not "
|
||
|
- "variant under %s!\n", modem_path.c_str());
|
||
|
- dbus_message_unref(reply);
|
||
|
- return rc;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_recurse(&key, &var);
|
||
|
-
|
||
|
- if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN) {
|
||
|
- thd_log_error("GetProperties dict value(1) type not "
|
||
|
- "boolean under %s!\n", modem_path.c_str());
|
||
|
- dbus_message_unref(reply);
|
||
|
- return rc;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_get_basic(&var, value);
|
||
|
- rc = THD_SUCCESS;
|
||
|
- break;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_unref(reply);
|
||
|
-
|
||
|
- return rc;
|
||
|
-}
|
||
|
-
|
||
|
-int cthd_cdev_modem::update_online_state(DBusConnection* conn) {
|
||
|
- bool online_state;
|
||
|
-
|
||
|
- if (get_modem_property(conn, MODEM_INTERFACE, "Online",
|
||
|
- &online_state) == THD_SUCCESS) {
|
||
|
- online = online_state;
|
||
|
- return THD_SUCCESS;
|
||
|
- }
|
||
|
-
|
||
|
- return THD_ERROR;
|
||
|
-}
|
||
|
-
|
||
|
-int cthd_cdev_modem::update_throttling_state(DBusConnection *conn) {
|
||
|
- bool enabled;
|
||
|
-
|
||
|
- if (get_modem_property(conn, THERMAL_MANAGEMENT_INTERFACE,
|
||
|
- "TransmitPowerThrottling", &enabled) == THD_SUCCESS) {
|
||
|
- throttling = enabled;
|
||
|
- return THD_SUCCESS;
|
||
|
- }
|
||
|
-
|
||
|
- return THD_ERROR;
|
||
|
-}
|
||
|
-
|
||
|
-int cthd_cdev_modem::update() {
|
||
|
- DBusConnection *conn;
|
||
|
- DBusError error;
|
||
|
- std::string thermal_management_dbus_rule, modem_dbus_rule;
|
||
|
-
|
||
|
- /* Modem has only 2 throttling states, enabled or disabled */
|
||
|
- min_state = MODEM_THROTTLING_DISABLED;
|
||
|
- max_state = MODEM_THROTTLING_ENABLED;
|
||
|
-
|
||
|
- dbus_error_init(&error);
|
||
|
-
|
||
|
- conn = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
|
||
|
- if (dbus_error_is_set(&error)) {
|
||
|
- thd_log_error("Error connecting to system bus: %s:\n", error.message);
|
||
|
- dbus_error_free(&error);
|
||
|
- return THD_ERROR;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_connection_setup_with_g_main(conn, NULL);
|
||
|
-
|
||
|
- /*
|
||
|
- * Add a match rule as below ...
|
||
|
- * Type : Signal
|
||
|
- * From-Interface : org.ofono.Modem
|
||
|
- * Signal Name : PropertyChanged
|
||
|
- * Property Name : Online
|
||
|
- */
|
||
|
- modem_dbus_rule.append("type='signal'");
|
||
|
- modem_dbus_rule.append(",path='").append(modem_path).append("'");
|
||
|
- modem_dbus_rule.append(",interface='" MODEM_INTERFACE "'");
|
||
|
- modem_dbus_rule.append(",member='PropertyChanged'");
|
||
|
- modem_dbus_rule.append(",arg0='Online'");
|
||
|
-
|
||
|
- dbus_bus_add_match(conn, modem_dbus_rule.c_str(), &error);
|
||
|
- if (dbus_error_is_set(&error)) {
|
||
|
- thd_log_error("Error adding D-Bus rule \"%s\" : %s",
|
||
|
- modem_dbus_rule.c_str(), error.message);
|
||
|
- dbus_error_free(&error);
|
||
|
- return THD_ERROR;
|
||
|
- }
|
||
|
-
|
||
|
- /*
|
||
|
- * Add a match rule as below ...
|
||
|
- * Type : Signal
|
||
|
- * From-Interface : org.ofono.sofia3gr.ThermalManagement
|
||
|
- * Signal Name : PropertyChanged
|
||
|
- * Property Name : TransmitPowerThrottling
|
||
|
- */
|
||
|
- thermal_management_dbus_rule.append("type='signal'");
|
||
|
- thermal_management_dbus_rule.append(",path='").append(modem_path).append(
|
||
|
- "'");
|
||
|
- thermal_management_dbus_rule.append(",interface='").append(
|
||
|
- THERMAL_MANAGEMENT_INTERFACE).append("'");
|
||
|
- thermal_management_dbus_rule.append(",member='PropertyChanged'");
|
||
|
- thermal_management_dbus_rule.append(",arg0='TransmitPowerThrottling'");
|
||
|
-
|
||
|
- dbus_bus_add_match(conn, thermal_management_dbus_rule.c_str(), &error);
|
||
|
- if (dbus_error_is_set(&error)) {
|
||
|
- thd_log_error("Error adding D-Bus rule \"%s\" : %s",
|
||
|
- thermal_management_dbus_rule.c_str(), error.message);
|
||
|
- dbus_error_free(&error);
|
||
|
- return THD_ERROR;
|
||
|
- }
|
||
|
-
|
||
|
- /* Register a handler for the above added rules */
|
||
|
- dbus_connection_add_filter(conn, ofono_signal_handler, this, NULL);
|
||
|
-
|
||
|
- return THD_SUCCESS;
|
||
|
-}
|
||
|
-
|
||
|
-int cthd_cdev_modem::get_curr_state() {
|
||
|
-
|
||
|
- if (!online) {
|
||
|
- update_throttling_state();
|
||
|
- }
|
||
|
-
|
||
|
- if (throttling) {
|
||
|
- curr_state = MODEM_THROTTLING_ENABLED;
|
||
|
- thd_log_debug("Modem currently under throttling\n");
|
||
|
- } else {
|
||
|
- curr_state = MODEM_THROTTLING_DISABLED;
|
||
|
- thd_log_debug("Modem currently not under throttling\n");
|
||
|
- }
|
||
|
-
|
||
|
- return curr_state;
|
||
|
-}
|
||
|
-
|
||
|
-void cthd_cdev_modem::update_throttling_state() {
|
||
|
-
|
||
|
- DBusConnection *conn;
|
||
|
- DBusError error;
|
||
|
-
|
||
|
- dbus_error_init(&error);
|
||
|
- conn = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
|
||
|
-
|
||
|
- if (dbus_error_is_set(&error)) {
|
||
|
- thd_log_error("Error: %s", error.message);
|
||
|
- dbus_error_free(&error);
|
||
|
- return;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_connection_setup_with_g_main(conn, NULL);
|
||
|
-
|
||
|
- if (is_interface_up(conn) == THD_ERROR) {
|
||
|
- thd_log_warn("Thermal Interface not ready\n");
|
||
|
- return;
|
||
|
- }
|
||
|
-
|
||
|
- update_online_state(conn);
|
||
|
- update_throttling_state(conn);
|
||
|
-
|
||
|
-}
|
||
|
-
|
||
|
-int cthd_cdev_modem::is_interface_up(DBusConnection *conn) {
|
||
|
-
|
||
|
- DBusError error;
|
||
|
- DBusMessage *msg;
|
||
|
- DBusMessage *reply;
|
||
|
- int rc = THD_ERROR;
|
||
|
-
|
||
|
- dbus_error_init(&error);
|
||
|
-
|
||
|
- msg = dbus_message_new_method_call("org.ofono", modem_path.c_str(),
|
||
|
- THERMAL_MANAGEMENT_INTERFACE, "GetProperties");
|
||
|
-
|
||
|
- if (msg == NULL) {
|
||
|
- thd_log_error("Error creating D-Bus message for GetProperties "
|
||
|
- "under %s : %s\n", modem_path.c_str(), error.message);
|
||
|
- return rc;
|
||
|
- }
|
||
|
-
|
||
|
- reply = dbus_connection_send_with_reply_and_block(conn, msg, 10000, &error);
|
||
|
-
|
||
|
- if (dbus_error_is_set(&error)) {
|
||
|
- dbus_error_free(&error);
|
||
|
- dbus_message_unref(msg);
|
||
|
- return rc;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_unref(msg);
|
||
|
- dbus_message_unref(reply);
|
||
|
-
|
||
|
- return THD_SUCCESS;
|
||
|
-}
|
||
|
-
|
||
|
-void cthd_cdev_modem::set_curr_state(int state, int arg) {
|
||
|
-
|
||
|
- DBusConnection *conn;
|
||
|
- DBusError error;
|
||
|
-
|
||
|
- dbus_error_init(&error);
|
||
|
- conn = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
|
||
|
-
|
||
|
- if (dbus_error_is_set(&error)) {
|
||
|
- thd_log_error("Error : %s", error.message);
|
||
|
- dbus_error_free(&error);
|
||
|
- return;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_connection_setup_with_g_main(conn, NULL);
|
||
|
-
|
||
|
- update_online_state(conn);
|
||
|
-
|
||
|
- switch (state) {
|
||
|
- case MODEM_THROTTLING_ENABLED:
|
||
|
- if (!online)
|
||
|
- thd_log_debug("Modem not yet online, hence "
|
||
|
- "ignoring throttle request\n");
|
||
|
- else if (throttling)
|
||
|
- thd_log_debug("Modem already throttled, hence "
|
||
|
- "ignoring throttle request\n");
|
||
|
- else {
|
||
|
- thd_log_debug("Initiating modem throttling\n");
|
||
|
- throttle_modem(state);
|
||
|
- update_throttling_state(conn);
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case MODEM_THROTTLING_DISABLED:
|
||
|
- if (!online)
|
||
|
- thd_log_debug("Modem not yet online, hence "
|
||
|
- "ignoring de-throttle request\n");
|
||
|
- else if (!throttling)
|
||
|
- thd_log_debug("Modem already de-throttled, hence "
|
||
|
- "ignoring de-throttle request\n");
|
||
|
- else {
|
||
|
- thd_log_debug("Initiating modem de-throttling\n");
|
||
|
- throttle_modem(state);
|
||
|
- update_throttling_state(conn);
|
||
|
- }
|
||
|
- break;
|
||
|
- }
|
||
|
-}
|
||
|
-
|
||
|
-int cthd_cdev_modem::get_max_state() {
|
||
|
- return max_state;
|
||
|
-}
|
||
|
-
|
||
|
-int cthd_cdev_modem::is_throttling() {
|
||
|
- return throttling;
|
||
|
-}
|
||
|
-
|
||
|
-void cthd_cdev_modem::set_throttling_state(bool enabled) {
|
||
|
- throttling = enabled;
|
||
|
-}
|
||
|
-
|
||
|
-bool cthd_cdev_modem::is_online() {
|
||
|
- return online;
|
||
|
-}
|
||
|
-
|
||
|
-void cthd_cdev_modem::set_online_state(bool on) {
|
||
|
- online = on;
|
||
|
-}
|
||
|
-
|
||
|
-void cthd_cdev_modem::throttle_modem(int state) {
|
||
|
- DBusConnection *conn;
|
||
|
- DBusError error;
|
||
|
-
|
||
|
- DBusMessage *msg;
|
||
|
- DBusMessageIter iter;
|
||
|
- DBusMessageIter var;
|
||
|
-
|
||
|
- const char *property = "TransmitPowerThrottling";
|
||
|
-
|
||
|
- dbus_bool_t enable;
|
||
|
-
|
||
|
- char var_sig[] = { DBUS_TYPE_BOOLEAN, 0 };
|
||
|
-
|
||
|
- dbus_error_init(&error);
|
||
|
-
|
||
|
- conn = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
|
||
|
- if (dbus_error_is_set(&error)) {
|
||
|
- thd_log_error("Couldn't connect to system bus: %s:\n", error.message);
|
||
|
- dbus_error_free(&error);
|
||
|
- return;
|
||
|
- }
|
||
|
-
|
||
|
- msg = dbus_message_new_method_call("org.ofono", modem_path.c_str(),
|
||
|
- THERMAL_MANAGEMENT_INTERFACE, "SetProperty");
|
||
|
- if (msg == NULL) {
|
||
|
- thd_log_error("Couldn't create D-Bus message for SetProperty "
|
||
|
- "under %s : %s\n", modem_path.c_str(), error.message);
|
||
|
- return;
|
||
|
- }
|
||
|
-
|
||
|
- enable = (state == MODEM_THROTTLING_ENABLED) ? true : false;
|
||
|
-
|
||
|
- dbus_message_iter_init_append(msg, &iter);
|
||
|
-
|
||
|
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &property)) {
|
||
|
- thd_log_error("Error populating modem %s arguments: %s\n",
|
||
|
- enable ? "throttle" : "de-throttle", error.message);
|
||
|
- return;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, var_sig, &var);
|
||
|
-
|
||
|
- if (!dbus_message_iter_append_basic(&var, DBUS_TYPE_BOOLEAN, &enable)) {
|
||
|
- thd_log_error("Error populating modem %s arguments: %s\n",
|
||
|
- enable ? "throttle" : "de-throttle", error.message);
|
||
|
- return;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_message_iter_close_container(&iter, &var);
|
||
|
-
|
||
|
- // send message
|
||
|
- if (!dbus_connection_send(conn, msg, NULL)) {
|
||
|
- thd_log_error("Error sending modem throttle message to %s !\n",
|
||
|
- modem_path.c_str());
|
||
|
- return;
|
||
|
- }
|
||
|
-
|
||
|
- dbus_connection_flush(conn);
|
||
|
- dbus_message_unref(msg);
|
||
|
-}
|
||
|
diff --git a/src/thd_cdev_modem.h b/src/thd_cdev_modem.h
|
||
|
deleted file mode 100644
|
||
|
index c88ae7e0..00000000
|
||
|
--- a/src/thd_cdev_modem.h
|
||
|
+++ /dev/null
|
||
|
@@ -1,64 +0,0 @@
|
||
|
-/*
|
||
|
- * thd_cdev_modem.h: thermal modem cooling interface
|
||
|
- * Copyright (c) 2016, Intel Corporation.
|
||
|
- *
|
||
|
- * This program is free software; you can redistribute it and/or modify it
|
||
|
- * under the terms and conditions of the GNU General Public License
|
||
|
- * version 2 or later as published by the Free Software Foundation.
|
||
|
- *
|
||
|
- * This program is distributed in the hope 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.
|
||
|
- *
|
||
|
- *
|
||
|
- * Author Name <Rajagopalx.Aravindan@intel.com>
|
||
|
- *
|
||
|
- */
|
||
|
-
|
||
|
-#ifndef THD_CDEV_MODEM_H_
|
||
|
-#define THD_CDEV_MODEM_H_
|
||
|
-
|
||
|
-#include "thd_cdev.h"
|
||
|
-
|
||
|
-#define MODEM_INTERFACE "org.ofono.Modem"
|
||
|
-#define THERMAL_MANAGEMENT_INTERFACE "org.ofono.sofia3gr.ThermalManagement"
|
||
|
-
|
||
|
-enum modem_throttling_state {
|
||
|
- MODEM_THROTTLING_DISABLED = 0, MODEM_THROTTLING_ENABLED,
|
||
|
-};
|
||
|
-
|
||
|
-class cthd_cdev_modem: public cthd_cdev {
|
||
|
-private:
|
||
|
- std::string modem_path;
|
||
|
- bool online;
|
||
|
- bool throttling;
|
||
|
-
|
||
|
- bool is_online(void);
|
||
|
- void set_online_state(bool);
|
||
|
- int is_throttling(void);
|
||
|
- void set_throttling_state(bool);
|
||
|
- void throttle_modem(int state);
|
||
|
-
|
||
|
-public:
|
||
|
- cthd_cdev_modem(unsigned int _index, std::string control_path);
|
||
|
- int get_curr_state(void);
|
||
|
- void set_curr_state(int state, int arg);
|
||
|
- int get_max_state(void);
|
||
|
- int get_modem_property(DBusConnection *conn, const char *interface,
|
||
|
- const char *property, bool *value);
|
||
|
- int update_online_state(DBusConnection *conn);
|
||
|
- int update_throttling_state(DBusConnection *conn);
|
||
|
- int update(void);
|
||
|
- void update_throttling_state(void);
|
||
|
- int is_interface_up(DBusConnection *conn);
|
||
|
-
|
||
|
- static DBusHandlerResult
|
||
|
- ofono_signal_handler(DBusConnection *conn, DBusMessage *msg,
|
||
|
- void *user_data);
|
||
|
-
|
||
|
- static int
|
||
|
- parse_ofono_property_changed_signal(DBusMessage *msg, const char *interface,
|
||
|
- const char *signal, const char *property, dbus_bool_t *value);
|
||
|
-};
|
||
|
-#endif /* THD_CDEV_MODEM_H_ */
|
||
|
diff --git a/src/thermald.h b/src/thermald.h
|
||
|
index 45ee3b10..286c659d 100644
|
||
|
--- a/src/thermald.h
|
||
|
+++ b/src/thermald.h
|
||
|
@@ -69,9 +69,6 @@
|
||
|
#define LOCKF_SUPPORT
|
||
|
#ifdef GLIB_SUPPORT
|
||
|
#include <glib.h>
|
||
|
-#include <dbus/dbus.h>
|
||
|
-#include <dbus/dbus-glib-lowlevel.h>
|
||
|
-#include <dbus/dbus-glib.h>
|
||
|
#include <glib/gi18n.h>
|
||
|
#include <gmodule.h>
|
||
|
|
||
|
|
||
|
From 9124d3645dc174709b203849ff70abf989702f17 Mon Sep 17 00:00:00 2001
|
||
|
From: Kate Hsuan <hpa@redhat.com>
|
||
|
Date: Tue, 16 Apr 2024 17:39:00 +0800
|
||
|
Subject: [PATCH 4/4] main: unown dbus name when thermald is terminated
|
||
|
|
||
|
Unown the dbus name when thermeld is terminated.
|
||
|
---
|
||
|
src/main.cpp | 4 ++--
|
||
|
src/thd_dbus_interface.cpp | 18 +++++++++---------
|
||
|
2 files changed, 11 insertions(+), 11 deletions(-)
|
||
|
|
||
|
diff --git a/src/main.cpp b/src/main.cpp
|
||
|
index 135fa3ff..1ea74b76 100644
|
||
|
--- a/src/main.cpp
|
||
|
+++ b/src/main.cpp
|
||
|
@@ -87,7 +87,7 @@ gboolean exclusive_control = FALSE;
|
||
|
static GMainLoop *g_main_loop;
|
||
|
|
||
|
#ifdef GDBUS
|
||
|
-gint watcher_id = 0;
|
||
|
+gint own_id = 0;
|
||
|
#endif
|
||
|
|
||
|
// g_log handler. All logs will be directed here
|
||
|
@@ -374,7 +374,7 @@ int main(int argc, char *argv[]) {
|
||
|
thd_log_warn("Oops g main loop exit..\n");
|
||
|
|
||
|
#ifdef GDBUS
|
||
|
- g_bus_unwatch_name (watcher_id);
|
||
|
+ g_bus_unown_name (own_id);
|
||
|
#endif
|
||
|
|
||
|
fprintf(stdout, "Exiting ..\n");
|
||
|
diff --git a/src/thd_dbus_interface.cpp b/src/thd_dbus_interface.cpp
|
||
|
index cad86ba8..c75e56c2 100644
|
||
|
--- a/src/thd_dbus_interface.cpp
|
||
|
+++ b/src/thd_dbus_interface.cpp
|
||
|
@@ -588,7 +588,7 @@ gboolean thd_dbus_interface_get_sensor_temperature(PrefObject *obj, int index,
|
||
|
#pragma GCC diagnostic push
|
||
|
|
||
|
static GDBusInterfaceVTable interface_vtable;
|
||
|
-extern gint watcher_id;
|
||
|
+extern gint own_id;
|
||
|
|
||
|
static GDBusNodeInfo *
|
||
|
thd_dbus_load_introspection(const gchar *filename, GError **error)
|
||
|
@@ -1230,14 +1230,14 @@ int thd_dbus_server_init(gboolean (*exit_handler)(void)) {
|
||
|
interface_vtable.get_property = thd_dbus_handle_get_property;
|
||
|
interface_vtable.set_property = thd_dbus_handle_set_property;
|
||
|
|
||
|
- watcher_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
|
||
|
- "org.freedesktop.thermald",
|
||
|
- G_BUS_NAME_OWNER_FLAGS_REPLACE,
|
||
|
- thd_dbus_on_bus_acquired,
|
||
|
- thd_dbus_on_name_acquired,
|
||
|
- thd_dbus_on_name_lost,
|
||
|
- g_object_ref(value_obj),
|
||
|
- NULL);
|
||
|
+ own_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
|
||
|
+ "org.freedesktop.thermald",
|
||
|
+ G_BUS_NAME_OWNER_FLAGS_REPLACE,
|
||
|
+ thd_dbus_on_bus_acquired,
|
||
|
+ thd_dbus_on_name_acquired,
|
||
|
+ thd_dbus_on_name_lost,
|
||
|
+ g_object_ref(value_obj),
|
||
|
+ NULL);
|
||
|
|
||
|
return THD_SUCCESS;
|
||
|
}
|