Module Name: src Committed By: macallan Date: Fri Jul 30 22:07:14 UTC 2021
Modified Files: src/sys/arch/macppc/dev: fancontrol.c fancontrolvar.h fcu.c Log Message: make thermal zone parameters configurable by sysctl To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/macppc/dev/fancontrol.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/macppc/dev/fancontrolvar.h cvs rdiff -u -r1.3 -r1.4 src/sys/arch/macppc/dev/fcu.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/macppc/dev/fancontrol.c diff -u src/sys/arch/macppc/dev/fancontrol.c:1.2 src/sys/arch/macppc/dev/fancontrol.c:1.3 --- src/sys/arch/macppc/dev/fancontrol.c:1.2 Wed Jul 28 00:36:00 2021 +++ src/sys/arch/macppc/dev/fancontrol.c Fri Jul 30 22:07:14 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: fancontrol.c,v 1.2 2021/07/28 00:36:00 macallan Exp $ */ +/* $NetBSD: fancontrol.c,v 1.3 2021/07/30 22:07:14 macallan Exp $ */ /*- * Copyright (c) 2021 Michael Lorenz @@ -27,13 +27,14 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fancontrol.c,v 1.2 2021/07/28 00:36:00 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fancontrol.c,v 1.3 2021/07/30 22:07:14 macallan Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/device.h> #include <sys/conf.h> #include <sys/bus.h> +#include <sys/sysctl.h> #include <dev/sysmon/sysmonvar.h> #include <macppc/dev/fancontrolvar.h> @@ -60,6 +61,10 @@ fancontrol_adjust_zone(fancontrol_zone_t return -1; } + if (z->Tmin < 30) z->Tmin = 30; + if (z->Tmin > 60) z->Tmin = 60; + if (z->Tmax > 95) z->Tmax = 95; + if (z->Tmax < (z->Tmin + 10)) z->Tmax = z->Tmin + 10; temp = (temp - 273150000) / 1000000; diff = temp - z->Tmin; DPRINTF("%s %d %d\n", z->name, temp, z->Tmin); @@ -76,3 +81,39 @@ fancontrol_adjust_zone(fancontrol_zone_t } return 0; } + +int +fancontrol_init_zone(fancontrol_zone_t *z, struct sysctlnode *me) +{ + struct sysctlnode *zone_node, *node; + + if (z->nfans <= 0) return 0; + + sysctl_createv(NULL, 0, NULL, (void *) &zone_node, + CTLFLAG_READWRITE | CTLFLAG_OWNDESC, + CTLTYPE_NODE, z->name, NULL, + NULL, 0, NULL, 0, + CTL_MACHDEP, + me->sysctl_num, + CTL_CREATE, CTL_EOL); + + sysctl_createv(NULL, 0, NULL, (void *) &node, + CTLFLAG_READWRITE | CTLFLAG_OWNDESC, + CTLTYPE_INT, "Tmin", "minimum temperature", + NULL, 0, (void *)&z->Tmin, 0, + CTL_MACHDEP, + me->sysctl_num, + zone_node->sysctl_num, + CTL_CREATE, CTL_EOL); + + sysctl_createv(NULL, 0, NULL, (void *) &node, + CTLFLAG_READWRITE | CTLFLAG_OWNDESC, + CTLTYPE_INT, "Tmax", "maximum temperature", + NULL, 0, (void *)&z->Tmax, 0, + CTL_MACHDEP, + me->sysctl_num, + zone_node->sysctl_num, + CTL_CREATE, CTL_EOL); + + return 0; +} Index: src/sys/arch/macppc/dev/fancontrolvar.h diff -u src/sys/arch/macppc/dev/fancontrolvar.h:1.1 src/sys/arch/macppc/dev/fancontrolvar.h:1.2 --- src/sys/arch/macppc/dev/fancontrolvar.h:1.1 Tue Jul 27 23:38:42 2021 +++ src/sys/arch/macppc/dev/fancontrolvar.h Fri Jul 30 22:07:14 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: fancontrolvar.h,v 1.1 2021/07/27 23:38:42 macallan Exp $ */ +/* $NetBSD: fancontrolvar.h,v 1.2 2021/07/30 22:07:14 macallan Exp $ */ /*- * Copyright (c) 2021 Michael Lorenz @@ -48,5 +48,6 @@ typedef struct _fancontrol_zone { } fancontrol_zone_t; int fancontrol_adjust_zone(fancontrol_zone_t *); +int fancontrol_init_zone(fancontrol_zone_t *, struct sysctlnode *); #endif /* FANCONTROLVAR_H */ Index: src/sys/arch/macppc/dev/fcu.c diff -u src/sys/arch/macppc/dev/fcu.c:1.3 src/sys/arch/macppc/dev/fcu.c:1.4 --- src/sys/arch/macppc/dev/fcu.c:1.3 Wed Jul 28 00:59:10 2021 +++ src/sys/arch/macppc/dev/fcu.c Fri Jul 30 22:07:14 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: fcu.c,v 1.3 2021/07/28 00:59:10 macallan Exp $ */ +/* $NetBSD: fcu.c,v 1.4 2021/07/30 22:07:14 macallan Exp $ */ /*- * Copyright (c) 2018 Michael Lorenz @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fcu.c,v 1.3 2021/07/28 00:59:10 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fcu.c,v 1.4 2021/07/30 22:07:14 macallan Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -35,6 +35,7 @@ __KERNEL_RCSID(0, "$NetBSD: fcu.c,v 1.3 #include <sys/conf.h> #include <sys/bus.h> #include <sys/kthread.h> +#include <sys/sysctl.h> #include <dev/i2c/i2cvar.h> @@ -78,8 +79,8 @@ struct fcu_softc { device_t sc_dev; i2c_tag_t sc_i2c; i2c_addr_t sc_addr; - - struct sysmon_envsys *sc_sme; + struct sysctlnode *sc_sysctl_me; + struct sysmon_envsys *sc_sme; envsys_data_t sc_sensors[32]; int sc_nsensors; fancontrol_zone_t sc_zones[FCU_ZONE_COUNT]; @@ -132,7 +133,7 @@ fcu_attach(device_t parent, device_t sel { struct fcu_softc *sc = device_private(self); struct i2c_attach_args *ia = aux; - int have_eeprom1 = 1; + int have_eeprom1 = 1, i; sc->sc_dev = self; sc->sc_i2c = ia->ia_tag; @@ -141,6 +142,12 @@ fcu_attach(device_t parent, device_t sel aprint_naive("\n"); aprint_normal(": Fan Control Unit\n"); + sysctl_createv(NULL, 0, NULL, (void *) &sc->sc_sysctl_me, + CTLFLAG_READWRITE, + CTLTYPE_NODE, device_xname(sc->sc_dev), NULL, + NULL, 0, NULL, 0, + CTL_MACHDEP, CTL_CREATE, CTL_EOL); + if (get_cpuid(0, sc->sc_eeprom0) < 160) { /* * XXX this should never happen, we depend on the EEPROM for @@ -164,19 +171,19 @@ fcu_attach(device_t parent, device_t sel sc->sc_zones[FCU_ZONE_CPU].nfans = 0; sc->sc_zones[FCU_ZONE_CASE].name = "Slots"; sc->sc_zones[FCU_ZONE_CASE].filter = is_case; - sc->sc_zones[FCU_ZONE_CASE].Tmin = 50; sc->sc_zones[FCU_ZONE_CASE].cookie = sc; - sc->sc_zones[FCU_ZONE_CASE].get_rpm = fcu_get_rpm; - sc->sc_zones[FCU_ZONE_CASE].set_rpm = fcu_set_rpm; + sc->sc_zones[FCU_ZONE_CASE].Tmin = 50; sc->sc_zones[FCU_ZONE_CASE].Tmax = 75; sc->sc_zones[FCU_ZONE_CASE].nfans = 0; - sc->sc_zones[FCU_ZONE_DRIVEBAY].name = "Drive bays"; + sc->sc_zones[FCU_ZONE_CASE].get_rpm = fcu_get_rpm; + sc->sc_zones[FCU_ZONE_CASE].set_rpm = fcu_set_rpm; + sc->sc_zones[FCU_ZONE_DRIVEBAY].name = "Drivebays"; sc->sc_zones[FCU_ZONE_DRIVEBAY].filter = is_drive; sc->sc_zones[FCU_ZONE_DRIVEBAY].cookie = sc; sc->sc_zones[FCU_ZONE_DRIVEBAY].get_rpm = fcu_get_rpm; sc->sc_zones[FCU_ZONE_DRIVEBAY].set_rpm = fcu_set_rpm; sc->sc_zones[FCU_ZONE_DRIVEBAY].Tmin = 30; - sc->sc_zones[FCU_ZONE_DRIVEBAY].Tmax = 60; + sc->sc_zones[FCU_ZONE_DRIVEBAY].Tmax = 50; sc->sc_zones[FCU_ZONE_DRIVEBAY].nfans = 0; sc->sc_sme = sysmon_envsys_create(); @@ -318,6 +325,11 @@ next: } sysmon_envsys_register(sc->sc_sme); + /* setup sysctls for our zones etc. */ + for (i = 0; i < FCU_ZONE_COUNT; i++) { + fancontrol_init_zone(&sc->sc_zones[i], sc->sc_sysctl_me); + } + sc->sc_dying = FALSE; kthread_create(PRI_NONE, 0, curcpu(), fcu_adjust, sc, &sc->sc_thread, "fan control");