diff options
| author | Alexander Leidinger <netchild@FreeBSD.org> | 2007-10-15 20:00:24 +0000 |
|---|---|---|
| committer | Alexander Leidinger <netchild@FreeBSD.org> | 2007-10-15 20:00:24 +0000 |
| commit | 9f05d312b3420dcf1476ff8959d9922ba1b327a9 (patch) | |
| tree | f092392b1cc9ab1131c8c9929cf8ba4640ca09b3 /sys | |
| parent | b6cbf52f09e56f0d1adaec77782966f02af3a724 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/amd64/conf/GENERIC.hints | 8 | ||||
| -rw-r--r-- | sys/conf/files | 3 | ||||
| -rw-r--r-- | sys/conf/files.amd64 | 1 | ||||
| -rw-r--r-- | sys/conf/files.i386 | 1 | ||||
| -rw-r--r-- | sys/dev/coretemp/coretemp.c | 79 | ||||
| -rw-r--r-- | sys/dev/it/it.c | 346 | ||||
| -rw-r--r-- | sys/dev/it/itvar.h | 95 | ||||
| -rw-r--r-- | sys/dev/lm/lm78.c | 909 | ||||
| -rw-r--r-- | sys/dev/lm/lm78_isa.c | 251 | ||||
| -rw-r--r-- | sys/dev/lm/lm78var.h | 158 | ||||
| -rw-r--r-- | sys/i386/conf/GENERIC.hints | 8 | ||||
| -rw-r--r-- | sys/kern/kern_sensors.c | 421 | ||||
| -rw-r--r-- | sys/modules/Makefile | 10 | ||||
| -rw-r--r-- | sys/modules/it/Makefile | 9 | ||||
| -rw-r--r-- | sys/modules/lm/Makefile | 9 | ||||
| -rw-r--r-- | sys/sys/sensors.h | 168 | ||||
| -rw-r--r-- | sys/sys/sysctl.h | 5 |
17 files changed, 37 insertions, 2444 deletions
diff --git a/sys/amd64/conf/GENERIC.hints b/sys/amd64/conf/GENERIC.hints index 594d9ca451d41..940034397dec8 100644 --- a/sys/amd64/conf/GENERIC.hints +++ b/sys/amd64/conf/GENERIC.hints @@ -33,11 +33,3 @@ hint.sio.3.port="0x2E8" hint.sio.3.irq="9" hint.ppc.0.at="isa" hint.ppc.0.irq="7" -hint.lm.0.at="isa" -hint.lm.0.port="0x290" -hint.it.0.at="isa" -hint.it.0.port="0x290" -hint.it.1.at="isa" -hint.it.1.port="0xc00" -hint.it.2.at="isa" -hint.it.2.port="0xd00" diff --git a/sys/conf/files b/sys/conf/files index af6b58d260569..34d52350ab70f 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -758,8 +758,6 @@ dev/le/if_le_pci.c optional le pci dev/le/lance.c optional le dev/led/led.c standard dev/lge/if_lge.c optional lge -dev/lm/lm78.c optional lm -dev/lm/lm78_isa.c optional lm isa dev/lmc/if_lmc.c optional lmc dev/mc146818/mc146818.c optional mc146818 dev/mca/mca_bus.c optional mca @@ -1448,7 +1446,6 @@ kern/kern_prot.c standard kern/kern_resource.c standard kern/kern_rwlock.c standard kern/kern_sema.c standard -kern/kern_sensors.c standard kern/kern_shutdown.c standard kern/kern_sig.c standard kern/kern_subr.c standard diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64 index d4ff13016bb05..2a9a60adad540 100644 --- a/sys/conf/files.amd64 +++ b/sys/conf/files.amd64 @@ -169,7 +169,6 @@ dev/ipmi/ipmi_smbus.c optional ipmi smbus dev/ipmi/ipmi_smbios.c optional ipmi dev/ipmi/ipmi_ssif.c optional ipmi smbus dev/ipmi/ipmi_pci.c optional ipmi pci -dev/it/it.c optional it isa dev/fdc/fdc.c optional fdc dev/fdc/fdc_acpi.c optional fdc dev/fdc/fdc_isa.c optional fdc isa diff --git a/sys/conf/files.i386 b/sys/conf/files.i386 index 9122c4a7427cc..fc477980caaa0 100644 --- a/sys/conf/files.i386 +++ b/sys/conf/files.i386 @@ -204,7 +204,6 @@ dev/ipmi/ipmi_smbus.c optional ipmi smbus dev/ipmi/ipmi_smbios.c optional ipmi dev/ipmi/ipmi_ssif.c optional ipmi smbus dev/ipmi/ipmi_pci.c optional ipmi pci -dev/it/it.c optional it isa dev/kbd/kbd.c optional atkbd | sc | ukbd | vt dev/le/if_le_isa.c optional le isa dev/mem/memutil.c optional mem diff --git a/sys/dev/coretemp/coretemp.c b/sys/dev/coretemp/coretemp.c index fcc000592037f..61e4606fbe912 100644 --- a/sys/dev/coretemp/coretemp.c +++ b/sys/dev/coretemp/coretemp.c @@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$"); #include <sys/module.h> #include <sys/conf.h> #include <sys/kernel.h> -#include <sys/sensors.h> +#include <sys/sysctl.h> #include <sys/proc.h> /* for curthread */ #include <sys/sched.h> @@ -50,13 +50,10 @@ __FBSDID("$FreeBSD$"); #include <machine/cpufunc.h> #include <machine/md_var.h> -extern int smp_cpus; - struct coretemp_softc { - struct ksensordev sc_sensordev; - struct ksensor sc_sensor; - device_t sc_dev; - int sc_tjmax; + device_t sc_dev; + int sc_tjmax; + struct sysctl_oid *sc_oid; }; /* @@ -68,7 +65,7 @@ static int coretemp_attach(device_t dev); static int coretemp_detach(device_t dev); static int coretemp_get_temp(device_t dev); -static void coretemp_refresh(void *arg); +static int coretemp_get_temp_sysctl(SYSCTL_HANDLER_ARGS); static device_method_t coretemp_methods[] = { /* Device interface */ @@ -177,17 +174,14 @@ coretemp_attach(device_t dev) } /* - * Add hw.sensors.cpuN.temp0 MIB. + * Add the "temperature" MIB to dev.cpu.N. */ - strlcpy(sc->sc_sensordev.xname, device_get_nameunit(pdev), - sizeof(sc->sc_sensordev.xname)); - sc->sc_sensor.type = SENSOR_TEMP; - sensor_attach(&sc->sc_sensordev, &sc->sc_sensor); - if (sensor_task_register(sc, coretemp_refresh, 2)) { - device_printf(dev, "unable to register update task\n"); - return (ENXIO); - } - sensordev_install(&sc->sc_sensordev); + sc->sc_oid = SYSCTL_ADD_PROC(device_get_sysctl_ctx(pdev), + SYSCTL_CHILDREN(device_get_sysctl_tree(pdev)), + OID_AUTO, "temperature", + CTLTYPE_INT | CTLFLAG_RD, + dev, 0, coretemp_get_temp_sysctl, "I", + "Current temperature in degC"); return (0); } @@ -197,8 +191,7 @@ coretemp_detach(device_t dev) { struct coretemp_softc *sc = device_get_softc(dev); - sensordev_deinstall(&sc->sc_sensordev); - sensor_task_unregister(sc); + sysctl_remove_oid(sc->sc_oid, 1, 0); return (0); } @@ -213,21 +206,25 @@ coretemp_get_temp(device_t dev) struct coretemp_softc *sc = device_get_softc(dev); char stemp[16]; + thread_lock(curthread); + sched_bind(curthread, cpu); + thread_unlock(curthread); + /* - * Bind to specific CPU to read the correct temperature. - * If not all CPUs are initialised, then only read from - * cpu0, returning -1 on all other CPUs. + * The digital temperature reading is located at bit 16 + * of MSR_THERM_STATUS. + * + * There is a bit on that MSR that indicates whether the + * temperature is valid or not. + * + * The temperature is computed by subtracting the temperature + * reading by Tj(max). */ - if (smp_cpus > 1) { - thread_lock(curthread); - sched_bind(curthread, cpu); - msr = rdmsr(MSR_THERM_STATUS); - sched_unbind(curthread); - thread_unlock(curthread); - } else if (cpu != 0) - return (-1); - else - msr = rdmsr(MSR_THERM_STATUS); + msr = rdmsr(MSR_THERM_STATUS); + + thread_lock(curthread); + sched_unbind(curthread); + thread_unlock(curthread); /* * Check for Thermal Status and Thermal Status Log. @@ -267,21 +264,13 @@ coretemp_get_temp(device_t dev) return (temp); } -static void -coretemp_refresh(void *arg) +static int +coretemp_get_temp_sysctl(SYSCTL_HANDLER_ARGS) { - struct coretemp_softc *sc = arg; - device_t dev = sc->sc_dev; - struct ksensor *s = &sc->sc_sensor; + device_t dev = (device_t) arg1; int temp; temp = coretemp_get_temp(dev); - if (temp == -1) { - s->flags |= SENSOR_FINVALID; - s->value = 0; - } else { - s->flags &= ~SENSOR_FINVALID; - s->value = temp * 1000000 + 273150000; - } + return (sysctl_handle_int(oidp, &temp, 0, req)); } diff --git a/sys/dev/it/it.c b/sys/dev/it/it.c deleted file mode 100644 index a5f0a8e329938..0000000000000 --- a/sys/dev/it/it.c +++ /dev/null @@ -1,346 +0,0 @@ -/* $FreeBSD$ */ -/* $OpenBSD: it.c,v 1.22 2007/03/22 16:55:31 deraadt Exp $ */ - -/*- - * Copyright (c) 2003 Julien Bordet <zejames@greyhats.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/kernel.h> -#include <sys/bus.h> -#include <sys/module.h> -#include <machine/bus.h> -#include <machine/resource.h> - -#include <sys/rman.h> - -#include <isa/isavar.h> -#include <sys/systm.h> - -#include <sys/sensors.h> - -#include <dev/it/itvar.h> - -#if defined(ITDEBUG) -#define DPRINTF(x) do { printf x; } while (0) -#else -#define DPRINTF(x) -#endif - -/* - * IT87-compatible chips can typically measure voltages up to 4.096 V. - * To measure higher voltages the input is attenuated with (external) - * resistors. Negative voltages are measured using a reference - * voltage. So we have to convert the sensor values back to real - * voltages by applying the appropriate resistor factor. - */ -#define RFACT_NONE 10000 -#define RFACT(x, y) (RFACT_NONE * ((x) + (y)) / (y)) - -int it_probe(struct device *); -int it_attach(struct device *); -int it_detach(struct device *); -u_int8_t it_readreg(struct it_softc *, int); -void it_writereg(struct it_softc *, int, int); -void it_setup_volt(struct it_softc *, int, int); -void it_setup_temp(struct it_softc *, int, int); -void it_setup_fan(struct it_softc *, int, int); - -void it_generic_stemp(struct it_softc *, struct ksensor *); -void it_generic_svolt(struct it_softc *, struct ksensor *); -void it_generic_fanrpm(struct it_softc *, struct ksensor *); - -void it_refresh_sensor_data(struct it_softc *); -void it_refresh(void *); - -extern struct cfdriver it_cd; - -static device_method_t it_methods[] = { - /* Methods from the device interface */ - DEVMETHOD(device_probe, it_probe), - DEVMETHOD(device_attach, it_attach), - DEVMETHOD(device_detach, it_detach), - - /* Terminate method list */ - { 0, 0 } -}; - -static driver_t it_driver = { - "it", - it_methods, - sizeof (struct it_softc) -}; - -static devclass_t it_devclass; - -DRIVER_MODULE(it, isa, it_driver, it_devclass, NULL, NULL); - - -const int it_vrfact[] = { - RFACT_NONE, - RFACT_NONE, - RFACT_NONE, - RFACT(68, 100), - RFACT(30, 10), - RFACT(21, 10), - RFACT(83, 20), - RFACT(68, 100), - RFACT_NONE -}; - -int -it_probe(struct device *dev) -{ - struct resource *iores; - int iorid = 0; - bus_space_tag_t iot; - bus_space_handle_t ioh; - u_int8_t cr; - - iores = bus_alloc_resource(dev, SYS_RES_IOPORT, &iorid, - 0ul, ~0ul, 8, RF_ACTIVE); - if (iores == NULL) { - DPRINTF(("%s: can't map i/o space\n", __func__)); - return 1; - } - iot = rman_get_bustag(iores); - ioh = rman_get_bushandle(iores); - - /* Check Vendor ID */ - bus_space_write_1(iot, ioh, ITC_ADDR, ITD_CHIPID); - cr = bus_space_read_1(iot, ioh, ITC_DATA); - bus_release_resource(dev, SYS_RES_IOPORT, iorid, iores); - DPRINTF(("it: vendor id 0x%x\n", cr)); - if (cr != IT_ID_IT87) - return 1; - - return 0; -} - -int -it_attach(struct device *dev) -{ - struct it_softc *sc = device_get_softc(dev); - int i; - u_int8_t cr; - - sc->sc_dev = dev; - sc->sc_iores = bus_alloc_resource(dev, SYS_RES_IOPORT, &sc->sc_iorid, - 0ul, ~0ul, 8, RF_ACTIVE); - if (sc->sc_iores == NULL) { - device_printf(dev, "can't map i/o space\n"); - return 1; - } - sc->sc_iot = rman_get_bustag(sc->sc_iores); - sc->sc_ioh = rman_get_bushandle(sc->sc_iores); - - sc->numsensors = IT_NUM_SENSORS; - - it_setup_fan(sc, 0, 3); - it_setup_volt(sc, 3, 9); - it_setup_temp(sc, 12, 3); - - if (sensor_task_register(sc, it_refresh, 5)) { - device_printf(sc->sc_dev, "unable to register update task\n"); - return 1; - } - - /* Activate monitoring */ - cr = it_readreg(sc, ITD_CONFIG); - cr |= 0x01 | 0x08; - it_writereg(sc, ITD_CONFIG, cr); - - /* Initialize sensors */ - strlcpy(sc->sensordev.xname, device_get_nameunit(sc->sc_dev), - sizeof(sc->sensordev.xname)); - for (i = 0; i < sc->numsensors; ++i) - sensor_attach(&sc->sensordev, &sc->sensors[i]); - sensordev_install(&sc->sensordev); - - return 0; -} - -int -it_detach(struct device *dev) -{ - struct it_softc *sc = device_get_softc(dev); - int error; - - sensordev_deinstall(&sc->sensordev); - sensor_task_unregister(sc); - - error = bus_release_resource(dev, SYS_RES_IOPORT, sc->sc_iorid, - sc->sc_iores); - if (error) - return error; - - return 0; -} - -u_int8_t -it_readreg(struct it_softc *sc, int reg) -{ - bus_space_write_1(sc->sc_iot, sc->sc_ioh, ITC_ADDR, reg); - return (bus_space_read_1(sc->sc_iot, sc->sc_ioh, ITC_DATA)); -} - -void -it_writereg(struct it_softc *sc, int reg, int val) -{ - bus_space_write_1(sc->sc_iot, sc->sc_ioh, ITC_ADDR, reg); - bus_space_write_1(sc->sc_iot, sc->sc_ioh, ITC_DATA, val); -} - -void -it_setup_volt(struct it_softc *sc, int start, int n) -{ - int i; - - for (i = 0; i < n; ++i) { - sc->sensors[start + i].type = SENSOR_VOLTS_DC; - } - - snprintf(sc->sensors[start + 0].desc, sizeof(sc->sensors[0].desc), - "VCORE_A"); - snprintf(sc->sensors[start + 1].desc, sizeof(sc->sensors[1].desc), - "VCORE_B"); - snprintf(sc->sensors[start + 2].desc, sizeof(sc->sensors[2].desc), - "+3.3V"); - snprintf(sc->sensors[start + 3].desc, sizeof(sc->sensors[3].desc), - "+5V"); - snprintf(sc->sensors[start + 4].desc, sizeof(sc->sensors[4].desc), - "+12V"); - snprintf(sc->sensors[start + 5].desc, sizeof(sc->sensors[5].desc), - "Unused"); - snprintf(sc->sensors[start + 6].desc, sizeof(sc->sensors[6].desc), - "-12V"); - snprintf(sc->sensors[start + 7].desc, sizeof(sc->sensors[7].desc), - "+5VSB"); - snprintf(sc->sensors[start + 8].desc, sizeof(sc->sensors[8].desc), - "VBAT"); -} - -void -it_setup_temp(struct it_softc *sc, int start, int n) -{ - int i; - - for (i = 0; i < n; ++i) - sc->sensors[start + i].type = SENSOR_TEMP; -} - -void -it_setup_fan(struct it_softc *sc, int start, int n) -{ - int i; - - for (i = 0; i < n; ++i) - sc->sensors[start + i].type = SENSOR_FANRPM; -} - -void -it_generic_stemp(struct it_softc *sc, struct ksensor *sensors) -{ - int i, sdata; - - for (i = 0; i < 3; i++) { - sdata = it_readreg(sc, ITD_SENSORTEMPBASE + i); - /* Convert temperature to Fahrenheit degres */ - sensors[i].value = sdata * 1000000 + 273150000; - } -} - -void -it_generic_svolt(struct it_softc *sc, struct ksensor *sensors) -{ - int i, sdata; - - for (i = 0; i < 9; i++) { - sdata = it_readreg(sc, ITD_SENSORVOLTBASE + i); - DPRINTF(("sdata[volt%d] 0x%x\n", i, sdata)); - /* voltage returned as (mV >> 4) */ - sensors[i].value = (sdata << 4); - /* these two values are negative and formula is different */ - if (i == 5 || i == 6) - sensors[i].value = ((sdata << 4) - IT_VREF); - /* rfact is (factor * 10^4) */ - sensors[i].value *= it_vrfact[i]; - /* division by 10 gets us back to uVDC */ - sensors[i].value /= 10; - if (i == 5 || i == 6) - sensors[i].value += IT_VREF * 1000; - } -} - -void -it_generic_fanrpm(struct it_softc *sc, struct ksensor *sensors) -{ - int i, sdata, divisor, odivisor, ndivisor; - - odivisor = ndivisor = divisor = it_readreg(sc, ITD_FAN); - for (i = 0; i < 3; i++, divisor >>= 3) { - sensors[i].flags &= ~SENSOR_FINVALID; - if ((sdata = it_readreg(sc, ITD_SENSORFANBASE + i)) == 0xff) { - sensors[i].flags |= SENSOR_FINVALID; - if (i == 2) - ndivisor ^= 0x40; - else { - ndivisor &= ~(7 << (i * 3)); - ndivisor |= ((divisor + 1) & 7) << (i * 3); - } - } else if (sdata == 0) { - sensors[i].value = 0; - } else { - if (i == 2) - divisor = divisor & 1 ? 3 : 1; - sensors[i].value = 1350000 / (sdata << (divisor & 7)); - } - } - if (ndivisor != odivisor) - it_writereg(sc, ITD_FAN, ndivisor); -} - -/* - * pre: last read occurred >= 1.5 seconds ago - * post: sensors[] current data are the latest from the chip - */ -void -it_refresh_sensor_data(struct it_softc *sc) -{ - /* Refresh our stored data for every sensor */ - it_generic_stemp(sc, &sc->sensors[12]); - it_generic_svolt(sc, &sc->sensors[3]); - it_generic_fanrpm(sc, &sc->sensors[0]); -} - -void -it_refresh(void *arg) -{ - struct it_softc *sc = (struct it_softc *)arg; - - it_refresh_sensor_data(sc); -} diff --git a/sys/dev/it/itvar.h b/sys/dev/it/itvar.h deleted file mode 100644 index 2395db3bceb1b..0000000000000 --- a/sys/dev/it/itvar.h +++ /dev/null @@ -1,95 +0,0 @@ -/* $FreeBSD$ */ -/* $OpenBSD: itvar.h,v 1.4 2007/03/22 16:55:31 deraadt Exp $ */ - -/*- - * Copyright (c) 2003 Julien Bordet <zejames@greyhats.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _DEV_ISA_ITVAR_H -#define _DEV_ISA_ITVAR_H - -#define IT_NUM_SENSORS 15 - -/* chip ids */ -#define IT_ID_IT87 0x90 - -/* ctl registers */ - -#define ITC_ADDR 0x05 -#define ITC_DATA 0x06 - -/* data registers */ - -#define ITD_CONFIG 0x00 -#define ITD_ISR1 0x01 -#define ITD_ISR2 0x02 -#define ITD_ISR3 0x03 -#define ITD_SMI1 0x04 -#define ITD_SMI2 0x05 -#define ITD_SMI3 0x06 -#define ITD_IMR1 0x07 -#define ITD_IMR2 0x08 -#define ITD_IMR3 0x09 -#define ITD_VID 0x0a -#define ITD_FAN 0x0b - -#define ITD_FANMINBASE 0x10 -#define ITD_FANENABLE 0x13 - -#define ITD_SENSORFANBASE 0x0d /* Fan from 0x0d to 0x0f */ -#define ITD_SENSORVOLTBASE 0x20 /* Fan from 0x20 to 0x28 */ -#define ITD_SENSORTEMPBASE 0x29 /* Fan from 0x29 to 0x2b */ - -#define ITD_VOLTMAXBASE 0x30 -#define ITD_VOLTMINBASE 0x31 - -#define ITD_TEMPMAXBASE 0x40 -#define ITD_TEMPMINBASE 0x41 - -#define ITD_SBUSADDR 0x48 -#define ITD_VOLTENABLE 0x50 -#define ITD_TEMPENABLE 0x51 - -#define ITD_CHIPID 0x58 - -#define IT_VREF (4096) /* Vref = 4.096 V */ - -struct it_softc { - struct device *sc_dev; - - struct resource *sc_iores; - int sc_iorid; - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; - - struct ksensor sensors[IT_NUM_SENSORS]; - struct ksensordev sensordev; - u_int numsensors; - void (*refresh_sensor_data)(struct it_softc *); - - u_int8_t (*it_readreg)(struct it_softc *, int); - void (*it_writereg)(struct it_softc *, int, int); -}; - -#endif diff --git a/sys/dev/lm/lm78.c b/sys/dev/lm/lm78.c deleted file mode 100644 index 311a7899215da..0000000000000 --- a/sys/dev/lm/lm78.c +++ /dev/null @@ -1,909 +0,0 @@ -/* $FreeBSD$ */ -/* $OpenBSD: lm78.c,v 1.18 2007/05/26 22:47:39 cnst Exp $ */ - -/*- - * Copyright (c) 2005, 2006 Mark Kettenis - * Copyright (c) 2006, 2007 Constantine A. Murenin - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/bus.h> -#include <sys/sensors.h> -#include <machine/bus.h> - -#include <dev/lm/lm78var.h> - -#if defined(LMDEBUG) -#define DPRINTF(x) do { printf x; } while (0) -#else -#define DPRINTF(x) -#endif - -/* - * LM78-compatible chips can typically measure voltages up to 4.096 V. - * To measure higher voltages the input is attenuated with (external) - * resistors. Negative voltages are measured using inverting op amps - * and resistors. So we have to convert the sensor values back to - * real voltages by applying the appropriate resistor factor. - */ -#define RFACT_NONE 10000 -#define RFACT(x, y) (RFACT_NONE * ((x) + (y)) / (y)) -#define NRFACT(x, y) (-RFACT_NONE * (x) / (y)) - -int lm_match(struct lm_softc *); -int wb_match(struct lm_softc *); -int def_match(struct lm_softc *); - -void lm_setup_sensors(struct lm_softc *, struct lm_sensor *); -void lm_refresh(void *); - -void lm_refresh_sensor_data(struct lm_softc *); -void lm_refresh_volt(struct lm_softc *, int); -void lm_refresh_temp(struct lm_softc *, int); -void lm_refresh_fanrpm(struct lm_softc *, int); - -void wb_refresh_sensor_data(struct lm_softc *); -void wb_w83637hf_refresh_vcore(struct lm_softc *, int); -void wb_refresh_nvolt(struct lm_softc *, int); -void wb_w83627ehf_refresh_nvolt(struct lm_softc *, int); -void wb_refresh_temp(struct lm_softc *, int); -void wb_refresh_fanrpm(struct lm_softc *, int); -void wb_w83792d_refresh_fanrpm(struct lm_softc *, int); - -void as_refresh_temp(struct lm_softc *, int); - -struct lm_chip { - int (*chip_match)(struct lm_softc *); -}; - -struct lm_chip lm_chips[] = { - { wb_match }, - { lm_match }, - { def_match } /* Must be last */ -}; - -struct lm_sensor lm78_sensors[] = { - /* Voltage */ - { "VCore A", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE }, - { "VCore B", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT_NONE }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(68, 100) }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x24, lm_refresh_volt, RFACT(30, 10) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x25, lm_refresh_volt, NRFACT(240, 60) }, - { "-5V", SENSOR_VOLTS_DC, 0, 0x26, lm_refresh_volt, NRFACT(100, 60) }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, lm_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, lm_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, lm_refresh_fanrpm }, - - { NULL } -}; - -struct lm_sensor w83627hf_sensors[] = { - /* Voltage */ - { "VCore A", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE }, - { "VCore B", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT_NONE }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 50) }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x24, lm_refresh_volt, RFACT(28, 10) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x25, wb_refresh_nvolt, RFACT(232, 56) }, - { "-5V", SENSOR_VOLTS_DC, 0, 0x26, wb_refresh_nvolt, RFACT(120, 56) }, - { "5VSB", SENSOR_VOLTS_DC, 5, 0x50, lm_refresh_volt, RFACT(17, 33) }, - { "VBAT", SENSOR_VOLTS_DC, 5, 0x51, lm_refresh_volt, RFACT_NONE }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 1, 0x50, wb_refresh_temp }, - { "", SENSOR_TEMP, 2, 0x50, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, wb_refresh_fanrpm }, - - { NULL } -}; - -/* - * The W83627EHF can measure voltages up to 2.048 V instead of the - * traditional 4.096 V. For measuring positive voltages, this can be - * accounted for by halving the resistor factor. Negative voltages - * need special treatment, also because the reference voltage is 2.048 V - * instead of the traditional 3.6 V. - */ -struct lm_sensor w83627ehf_sensors[] = { - /* Voltage */ - { "VCore", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE / 2}, - { "+12V", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT(56, 10) / 2 }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT(34, 34) / 2 }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 34) / 2 }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x24, wb_w83627ehf_refresh_nvolt }, - { "", SENSOR_VOLTS_DC, 0, 0x25, lm_refresh_volt, RFACT_NONE / 2 }, - { "", SENSOR_VOLTS_DC, 0, 0x26, lm_refresh_volt, RFACT_NONE / 2 }, - { "3.3VSB", SENSOR_VOLTS_DC, 5, 0x50, lm_refresh_volt, RFACT(34, 34) / 2 }, - { "VBAT", SENSOR_VOLTS_DC, 5, 0x51, lm_refresh_volt, RFACT_NONE / 2 }, - { "", SENSOR_VOLTS_DC, 5, 0x52, lm_refresh_volt, RFACT_NONE / 2 }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 1, 0x50, wb_refresh_temp }, - { "", SENSOR_TEMP, 2, 0x50, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, wb_refresh_fanrpm }, - - { NULL } -}; - -/* - * w83627dhg is almost identical to w83627ehf, except that - * it has 9 instead of 10 voltage sensors - */ -struct lm_sensor w83627dhg_sensors[] = { - /* Voltage */ - { "VCore", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE / 2}, - { "+12V", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT(56, 10) / 2 }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT(34, 34) / 2 }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 34) / 2 }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x24, wb_w83627ehf_refresh_nvolt }, - { "", SENSOR_VOLTS_DC, 0, 0x25, lm_refresh_volt, RFACT_NONE / 2 }, - { "", SENSOR_VOLTS_DC, 0, 0x26, lm_refresh_volt, RFACT_NONE / 2 }, - { "3.3VSB", SENSOR_VOLTS_DC, 5, 0x50, lm_refresh_volt, RFACT(34, 34) / 2 }, - { "VBAT", SENSOR_VOLTS_DC, 5, 0x51, lm_refresh_volt, RFACT_NONE / 2 }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 1, 0x50, wb_refresh_temp }, - { "", SENSOR_TEMP, 2, 0x50, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, wb_refresh_fanrpm }, - - { NULL } -}; - -struct lm_sensor w83637hf_sensors[] = { - /* Voltage */ - { "VCore", SENSOR_VOLTS_DC, 0, 0x20, wb_w83637hf_refresh_vcore }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT(28, 10) }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 51) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x24, wb_refresh_nvolt, RFACT(232, 56) }, - { "5VSB", SENSOR_VOLTS_DC, 5, 0x50, lm_refresh_volt, RFACT(34, 51) }, - { "VBAT", SENSOR_VOLTS_DC, 5, 0x51, lm_refresh_volt, RFACT_NONE }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 1, 0x50, wb_refresh_temp }, - { "", SENSOR_TEMP, 2, 0x50, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, wb_refresh_fanrpm }, - - { NULL } -}; - -struct lm_sensor w83697hf_sensors[] = { - /* Voltage */ - { "VCore", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 50) }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x24, lm_refresh_volt, RFACT(28, 10) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x25, wb_refresh_nvolt, RFACT(232, 56) }, - { "-5V", SENSOR_VOLTS_DC, 0, 0x26, wb_refresh_nvolt, RFACT(120, 56) }, - { "5VSB", SENSOR_VOLTS_DC, 5, 0x50, lm_refresh_volt, RFACT(17, 33) }, - { "VBAT", SENSOR_VOLTS_DC, 5, 0x51, lm_refresh_volt, RFACT_NONE }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 1, 0x50, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, wb_refresh_fanrpm }, - - { NULL } -}; - -/* - * The datasheet doesn't mention the (internal) resistors used for the - * +5V, but using the values from the W83782D datasheets seems to - * provide sensible results. - */ -struct lm_sensor w83781d_sensors[] = { - /* Voltage */ - { "VCore A", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE }, - { "VCore B", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT_NONE }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 50) }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x24, lm_refresh_volt, RFACT(28, 10) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x25, lm_refresh_volt, NRFACT(2100, 604) }, - { "-5V", SENSOR_VOLTS_DC, 0, 0x26, lm_refresh_volt, NRFACT(909, 604) }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 1, 0x50, wb_refresh_temp }, - { "", SENSOR_TEMP, 2, 0x50, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, lm_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, lm_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, lm_refresh_fanrpm }, - - { NULL } -}; - -struct lm_sensor w83782d_sensors[] = { - /* Voltage */ - { "VCore", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE }, - { "VINR0", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT_NONE }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 50) }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x24, lm_refresh_volt, RFACT(28, 10) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x25, wb_refresh_nvolt, RFACT(232, 56) }, - { "-5V", SENSOR_VOLTS_DC, 0, 0x26, wb_refresh_nvolt, RFACT(120, 56) }, - { "5VSB", SENSOR_VOLTS_DC, 5, 0x50, lm_refresh_volt, RFACT(17, 33) }, - { "VBAT", SENSOR_VOLTS_DC, 5, 0x51, lm_refresh_volt, RFACT_NONE }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 1, 0x50, wb_refresh_temp }, - { "", SENSOR_TEMP, 2, 0x50, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, wb_refresh_fanrpm }, - - { NULL } -}; - -struct lm_sensor w83783s_sensors[] = { - /* Voltage */ - { "VCore", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 50) }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x24, lm_refresh_volt, RFACT(28, 10) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x25, wb_refresh_nvolt, RFACT(232, 56) }, - { "-5V", SENSOR_VOLTS_DC, 0, 0x26, wb_refresh_nvolt, RFACT(120, 56) }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 1, 0x50, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, wb_refresh_fanrpm }, - - { NULL } -}; - -struct lm_sensor w83791d_sensors[] = { - /* Voltage */ - { "VCore", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE }, - { "VINR0", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT_NONE }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 50) }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x24, lm_refresh_volt, RFACT(28, 10) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x25, wb_refresh_nvolt, RFACT(232, 56) }, - { "-5V", SENSOR_VOLTS_DC, 0, 0x26, wb_refresh_nvolt, RFACT(120, 56) }, - { "5VSB", SENSOR_VOLTS_DC, 0, 0xb0, lm_refresh_volt, RFACT(17, 33) }, - { "VBAT", SENSOR_VOLTS_DC, 0, 0xb1, lm_refresh_volt, RFACT_NONE }, - { "VINR1", SENSOR_VOLTS_DC, 0, 0xb2, lm_refresh_volt, RFACT_NONE }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 0, 0xc0, wb_refresh_temp }, - { "", SENSOR_TEMP, 0, 0xc8, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0xba, wb_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0xbb, wb_refresh_fanrpm }, - - { NULL } -}; - -struct lm_sensor w83792d_sensors[] = { - /* Voltage */ - { "VCore A", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE }, - { "VCore B", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT_NONE }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "-5V", SENSOR_VOLTS_DC, 0, 0x23, wb_refresh_nvolt, RFACT(120, 56) }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x24, lm_refresh_volt, RFACT(28, 10) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x25, wb_refresh_nvolt, RFACT(232, 56) }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x26, lm_refresh_volt, RFACT(34, 50) }, - { "5VSB", SENSOR_VOLTS_DC, 0, 0xb0, lm_refresh_volt, RFACT(17, 33) }, - { "VBAT", SENSOR_VOLTS_DC, 0, 0xb1, lm_refresh_volt, RFACT_NONE }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 0, 0xc0, wb_refresh_temp }, - { "", SENSOR_TEMP, 0, 0xc8, wb_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, wb_w83792d_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, wb_w83792d_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, wb_w83792d_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0xb8, wb_w83792d_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0xb9, wb_w83792d_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0xba, wb_w83792d_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0xbe, wb_w83792d_refresh_fanrpm }, - - { NULL } -}; - -struct lm_sensor as99127f_sensors[] = { - /* Voltage */ - { "VCore A", SENSOR_VOLTS_DC, 0, 0x20, lm_refresh_volt, RFACT_NONE }, - { "VCore B", SENSOR_VOLTS_DC, 0, 0x21, lm_refresh_volt, RFACT_NONE }, - { "+3.3V", SENSOR_VOLTS_DC, 0, 0x22, lm_refresh_volt, RFACT_NONE }, - { "+5V", SENSOR_VOLTS_DC, 0, 0x23, lm_refresh_volt, RFACT(34, 50) }, - { "+12V", SENSOR_VOLTS_DC, 0, 0x24, lm_refresh_volt, RFACT(28, 10) }, - { "-12V", SENSOR_VOLTS_DC, 0, 0x25, wb_refresh_nvolt, RFACT(232, 56) }, - { "-5V", SENSOR_VOLTS_DC, 0, 0x26, wb_refresh_nvolt, RFACT(120, 56) }, - - /* Temperature */ - { "", SENSOR_TEMP, 0, 0x27, lm_refresh_temp }, - { "", SENSOR_TEMP, 1, 0x50, as_refresh_temp }, - { "", SENSOR_TEMP, 2, 0x50, as_refresh_temp }, - - /* Fans */ - { "", SENSOR_FANRPM, 0, 0x28, lm_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x29, lm_refresh_fanrpm }, - { "", SENSOR_FANRPM, 0, 0x2a, lm_refresh_fanrpm }, - - { NULL } -}; - -void -lm_probe(struct lm_softc *sc) -{ - int i; - - for (i = 0; i < sizeof(lm_chips) / sizeof(lm_chips[0]); i++) - if (lm_chips[i].chip_match(sc)) - break; -} - -void -lm_attach(struct lm_softc *sc) -{ - u_int i, config; - - /* No point in doing anything if we don't have any sensors. */ - if (sc->numsensors == 0) - return; - - if (sensor_task_register(sc, lm_refresh, 5)) { - device_printf(sc->sc_dev, "unable to register update task\n"); - return; - } - - /* Start the monitoring loop */ - config = sc->lm_readreg(sc, LM_CONFIG); - sc->lm_writereg(sc, LM_CONFIG, config | 0x01); - - /* Add sensors */ - strlcpy(sc->sensordev.xname, device_get_nameunit(sc->sc_dev), - sizeof(sc->sensordev.xname)); - for (i = 0; i < sc->numsensors; ++i) - sensor_attach(&sc->sensordev, &sc->sensors[i]); - sensordev_install(&sc->sensordev); -} - -int -lm_detach(struct lm_softc *sc) -{ - int i; - - /* Remove sensors */ - sensordev_deinstall(&sc->sensordev); - for (i = 0; i < sc->numsensors; i++) - sensor_detach(&sc->sensordev, &sc->sensors[i]); - - sensor_task_unregister(sc); - - return 0; -} - -int -lm_match(struct lm_softc *sc) -{ - int chipid; - const char *cdesc; - char fulldesc[64]; - - /* See if we have an LM78 or LM79. */ - chipid = sc->lm_readreg(sc, LM_CHIPID) & LM_CHIPID_MASK; - switch(chipid) { - case LM_CHIPID_LM78: - cdesc = "LM78"; - break; - case LM_CHIPID_LM78J: - cdesc = "LM78J"; - break; - case LM_CHIPID_LM79: - cdesc = "LM79"; - break; - case LM_CHIPID_LM81: - cdesc = "LM81"; - break; - default: - return 0; - } - snprintf(fulldesc, sizeof(fulldesc), - "National Semiconductor %s Hardware Monitor", cdesc); - device_set_desc_copy(sc->sc_dev, fulldesc); - - lm_setup_sensors(sc, lm78_sensors); - sc->refresh_sensor_data = lm_refresh_sensor_data; - return 1; -} - -int -def_match(struct lm_softc *sc) -{ - int chipid; - char fulldesc[64]; - - chipid = sc->lm_readreg(sc, LM_CHIPID) & LM_CHIPID_MASK; - snprintf(fulldesc, sizeof(fulldesc), - "unknown Hardware Monitor (ID 0x%x)", chipid); - device_set_desc_copy(sc->sc_dev, fulldesc); - - lm_setup_sensors(sc, lm78_sensors); - sc->refresh_sensor_data = lm_refresh_sensor_data; - return 1; -} - -int -wb_match(struct lm_softc *sc) -{ - int banksel, vendid, devid; - const char *cdesc; - char desc[64]; - char fulldesc[64]; - - /* Read vendor ID */ - banksel = sc->lm_readreg(sc, WB_BANKSEL); - sc->lm_writereg(sc, WB_BANKSEL, WB_BANKSEL_HBAC); - vendid = sc->lm_readreg(sc, WB_VENDID) << 8; - sc->lm_writereg(sc, WB_BANKSEL, 0); - vendid |= sc->lm_readreg(sc, WB_VENDID); - sc->lm_writereg(sc, WB_BANKSEL, banksel); - DPRINTF((" winbond vend id 0x%x\n", vendid)); - if (vendid != WB_VENDID_WINBOND && vendid != WB_VENDID_ASUS) - return 0; - - /* Read device/chip ID */ - sc->lm_writereg(sc, WB_BANKSEL, WB_BANKSEL_B0); - devid = sc->lm_readreg(sc, LM_CHIPID); - sc->chipid = sc->lm_readreg(sc, WB_BANK0_CHIPID); - sc->lm_writereg(sc, WB_BANKSEL, banksel); - DPRINTF((" winbond chip id 0x%x\n", sc->chipid)); - switch(sc->chipid) { - case WB_CHIPID_W83627HF: - cdesc = "W83627HF"; - lm_setup_sensors(sc, w83627hf_sensors); - break; - case WB_CHIPID_W83627THF: - cdesc = "W83627THF"; - lm_setup_sensors(sc, w83637hf_sensors); - break; - case WB_CHIPID_W83627EHF: - cdesc = "W83627EHF"; - lm_setup_sensors(sc, w83627ehf_sensors); - break; - case WB_CHIPID_W83627DHG: - cdesc = "W83627DHG"; - lm_setup_sensors(sc, w83627dhg_sensors); - break; - case WB_CHIPID_W83637HF: - cdesc = "W83637HF"; - sc->lm_writereg(sc, WB_BANKSEL, WB_BANKSEL_B0); - if (sc->lm_readreg(sc, WB_BANK0_CONFIG) & WB_CONFIG_VMR9) - sc->vrm9 = 1; - sc->lm_writereg(sc, WB_BANKSEL, banksel); - lm_setup_sensors(sc, w83637hf_sensors); - break; - case WB_CHIPID_W83697HF: - cdesc = "W83697HF"; - lm_setup_sensors(sc, w83697hf_sensors); - break; - case WB_CHIPID_W83781D: - case WB_CHIPID_W83781D_2: - cdesc = "W83781D"; - lm_setup_sensors(sc, w83781d_sensors); - break; - case WB_CHIPID_W83782D: - cdesc = "W83782D"; - lm_setup_sensors(sc, w83782d_sensors); - break; - case WB_CHIPID_W83783S: - cdesc = "W83783S"; - lm_setup_sensors(sc, w83783s_sensors); - break; - case WB_CHIPID_W83791D: - cdesc = "W83791D"; - lm_setup_sensors(sc, w83791d_sensors); - break; - case WB_CHIPID_W83791SD: - cdesc = "W83791SD"; - break; - case WB_CHIPID_W83792D: - if (devid >= 0x10 && devid <= 0x29) - snprintf(desc, sizeof(desc), - "W83792D rev %c", 'A' + devid - 0x10); - else - snprintf(desc, sizeof(desc), - "W83792D rev 0x%x", devid); - cdesc = desc; - lm_setup_sensors(sc, w83792d_sensors); - break; - case WB_CHIPID_AS99127F: - if (vendid == WB_VENDID_ASUS) { - cdesc = "AS99127F"; - lm_setup_sensors(sc, w83781d_sensors); - } else { - cdesc = "AS99127F rev 2"; - lm_setup_sensors(sc, as99127f_sensors); - } - break; - default: - snprintf(fulldesc, sizeof(fulldesc), - "unknown Winbond Hardware Monitor (Chip ID 0x%x)", - sc->chipid); - device_set_desc_copy(sc->sc_dev, fulldesc); - /* Handle as a standard LM78. */ - lm_setup_sensors(sc, lm78_sensors); - sc->refresh_sensor_data = lm_refresh_sensor_data; - return 1; - } - - if (cdesc[0] == 'W') - snprintf(fulldesc, sizeof(fulldesc), - "Winbond %s Hardware Monitor", cdesc); - else - snprintf(fulldesc, sizeof(fulldesc), - "ASUS %s Hardware Monitor", cdesc); - device_set_desc_copy(sc->sc_dev, fulldesc); - - sc->refresh_sensor_data = wb_refresh_sensor_data; - return 1; -} - -void -lm_setup_sensors(struct lm_softc *sc, struct lm_sensor *sensors) -{ - int i; - - for (i = 0; sensors[i].desc; i++) { - sc->sensors[i].type = sensors[i].type; - strlcpy(sc->sensors[i].desc, sensors[i].desc, - sizeof(sc->sensors[i].desc)); - sc->numsensors++; - } - sc->lm_sensors = sensors; -} - -void -lm_refresh(void *arg) -{ - struct lm_softc *sc = arg; - - sc->refresh_sensor_data(sc); -} - -void -lm_refresh_sensor_data(struct lm_softc *sc) -{ - int i; - - for (i = 0; i < sc->numsensors; i++) - sc->lm_sensors[i].refresh(sc, i); -} - -void -lm_refresh_volt(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int data; - - data = sc->lm_readreg(sc, sc->lm_sensors[n].reg); - sensor->value = (data << 4); - sensor->value *= sc->lm_sensors[n].rfact; - sensor->value /= 10; -} - -void -lm_refresh_temp(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int sdata; - - /* - * The data sheet suggests that the range of the temperature - * sensor is between -55 degC and +125 degC. - */ - sdata = sc->lm_readreg(sc, sc->lm_sensors[n].reg); - if (sdata > 0x7d && sdata < 0xc9) { - sensor->flags |= SENSOR_FINVALID; - sensor->value = 0; - } else { - if (sdata & 0x80) - sdata -= 0x100; - sensor->flags &= ~SENSOR_FINVALID; - sensor->value = sdata * 1000000 + 273150000; - } -} - -void -lm_refresh_fanrpm(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int data, divisor = 1; - - /* - * We might get more accurate fan readings by adjusting the - * divisor, but that might interfere with APM or other SMM - * BIOS code reading the fan speeds. - */ - - /* FAN3 has a fixed fan divisor. */ - if (sc->lm_sensors[n].reg == LM_FAN1 || - sc->lm_sensors[n].reg == LM_FAN2) { - data = sc->lm_readreg(sc, LM_VIDFAN); - if (sc->lm_sensors[n].reg == LM_FAN1) - divisor = (data >> 4) & 0x03; - else - divisor = (data >> 6) & 0x03; - } - - data = sc->lm_readreg(sc, sc->lm_sensors[n].reg); - if (data == 0xff || data == 0x00) { - sensor->flags |= SENSOR_FINVALID; - sensor->value = 0; - } else { - sensor->flags &= ~SENSOR_FINVALID; - sensor->value = 1350000 / (data << divisor); - } -} - -void -wb_refresh_sensor_data(struct lm_softc *sc) -{ - int banksel, bank, i; - - /* - * Properly save and restore bank selection register. - */ - - banksel = bank = sc->lm_readreg(sc, WB_BANKSEL); - for (i = 0; i < sc->numsensors; i++) { - if (bank != sc->lm_sensors[i].bank) { - bank = sc->lm_sensors[i].bank; - sc->lm_writereg(sc, WB_BANKSEL, bank); - } - sc->lm_sensors[i].refresh(sc, i); - } - sc->lm_writereg(sc, WB_BANKSEL, banksel); -} - -void -wb_w83637hf_refresh_vcore(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int data; - - data = sc->lm_readreg(sc, sc->lm_sensors[n].reg); - - /* - * Depending on the voltage detection method, - * one of the following formulas is used: - * VRM8 method: value = raw * 0.016V - * VRM9 method: value = raw * 0.00488V + 0.70V - */ - if (sc->vrm9) - sensor->value = (data * 4880) + 700000; - else - sensor->value = (data * 16000); -} - -void -wb_refresh_nvolt(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int data; - - data = sc->lm_readreg(sc, sc->lm_sensors[n].reg); - sensor->value = ((data << 4) - WB_VREF); - sensor->value *= sc->lm_sensors[n].rfact; - sensor->value /= 10; - sensor->value += WB_VREF * 1000; -} - -void -wb_w83627ehf_refresh_nvolt(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int data; - - data = sc->lm_readreg(sc, sc->lm_sensors[n].reg); - sensor->value = ((data << 3) - WB_W83627EHF_VREF); - sensor->value *= RFACT(232, 10); - sensor->value /= 10; - sensor->value += WB_W83627EHF_VREF * 1000; -} - -void -wb_refresh_temp(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int sdata; - - /* - * The data sheet suggests that the range of the temperature - * sensor is between -55 degC and +125 degC. However, values - * around -48 degC seem to be a very common bogus values. - * Since such values are unreasonably low, we use -45 degC for - * the lower limit instead. - */ - sdata = sc->lm_readreg(sc, sc->lm_sensors[n].reg) << 1; - sdata += sc->lm_readreg(sc, sc->lm_sensors[n].reg + 1) >> 7; - if (sdata > 0x0fa && sdata < 0x1a6) { - sensor->flags |= SENSOR_FINVALID; - sensor->value = 0; - } else { - if (sdata & 0x100) - sdata -= 0x200; - sensor->flags &= ~SENSOR_FINVALID; - sensor->value = sdata * 500000 + 273150000; - } -} - -void -wb_refresh_fanrpm(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int fan, data, divisor = 0; - - /* - * This is madness; the fan divisor bits are scattered all - * over the place. - */ - - if (sc->lm_sensors[n].reg == LM_FAN1 || - sc->lm_sensors[n].reg == LM_FAN2 || - sc->lm_sensors[n].reg == LM_FAN3) { - data = sc->lm_readreg(sc, WB_BANK0_VBAT); - fan = (sc->lm_sensors[n].reg - LM_FAN1); - if ((data >> 5) & (1 << fan)) - divisor |= 0x04; - } - - if (sc->lm_sensors[n].reg == LM_FAN1 || - sc->lm_sensors[n].reg == LM_FAN2) { - data = sc->lm_readreg(sc, LM_VIDFAN); - if (sc->lm_sensors[n].reg == LM_FAN1) - divisor |= (data >> 4) & 0x03; - else - divisor |= (data >> 6) & 0x03; - } else if (sc->lm_sensors[n].reg == LM_FAN3) { - data = sc->lm_readreg(sc, WB_PIN); - divisor |= (data >> 6) & 0x03; - } else if (sc->lm_sensors[n].reg == WB_BANK0_FAN4 || - sc->lm_sensors[n].reg == WB_BANK0_FAN5) { - data = sc->lm_readreg(sc, WB_BANK0_FAN45); - if (sc->lm_sensors[n].reg == WB_BANK0_FAN4) - divisor |= (data >> 0) & 0x07; - else - divisor |= (data >> 4) & 0x07; - } - - data = sc->lm_readreg(sc, sc->lm_sensors[n].reg); - if (data == 0xff || data == 0x00) { - sensor->flags |= SENSOR_FINVALID; - sensor->value = 0; - } else { - sensor->flags &= ~SENSOR_FINVALID; - sensor->value = 1350000 / (data << divisor); - } -} - -void -wb_w83792d_refresh_fanrpm(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int reg, shift, data, divisor = 1; - - switch (sc->lm_sensors[n].reg) { - case 0x28: - reg = 0x47; shift = 0; - break; - case 0x29: - reg = 0x47; shift = 4; - break; - case 0x2a: - reg = 0x5b; shift = 0; - break; - case 0xb8: - reg = 0x5b; shift = 4; - break; - case 0xb9: - reg = 0x5c; shift = 0; - break; - case 0xba: - reg = 0x5c; shift = 4; - break; - case 0xbe: - reg = 0x9e; shift = 0; - break; - default: - reg = 0; shift = 0; - break; - } - - data = sc->lm_readreg(sc, sc->lm_sensors[n].reg); - if (data == 0xff || data == 0x00) { - sensor->flags |= SENSOR_FINVALID; - sensor->value = 0; - } else { - if (reg != 0) - divisor = (sc->lm_readreg(sc, reg) >> shift) & 0x7; - sensor->flags &= ~SENSOR_FINVALID; - sensor->value = 1350000 / (data << divisor); - } -} - -void -as_refresh_temp(struct lm_softc *sc, int n) -{ - struct ksensor *sensor = &sc->sensors[n]; - int sdata; - - /* - * It seems a shorted temperature diode produces an all-ones - * bit pattern. - */ - sdata = sc->lm_readreg(sc, sc->lm_sensors[n].reg) << 1; - sdata += sc->lm_readreg(sc, sc->lm_sensors[n].reg + 1) >> 7; - if (sdata == 0x1ff) { - sensor->flags |= SENSOR_FINVALID; - sensor->value = 0; - } else { - if (sdata & 0x100) - sdata -= 0x200; - sensor->flags &= ~SENSOR_FINVALID; - sensor->value = sdata * 500000 + 273150000; - } -} diff --git a/sys/dev/lm/lm78_isa.c b/sys/dev/lm/lm78_isa.c deleted file mode 100644 index 7449d00bcf35a..0000000000000 --- a/sys/dev/lm/lm78_isa.c +++ /dev/null @@ -1,251 +0,0 @@ -/* $FreeBSD$ */ -/* $OpenBSD: lm78_isa.c,v 1.2 2007/07/01 21:48:57 cnst Exp $ */ - -/*- - * Copyright (c) 2005, 2006 Mark Kettenis - * Copyright (c) 2007 Constantine A. Murenin, Google Summer of Code - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/kernel.h> -#include <sys/bus.h> -#include <sys/module.h> - -#include <sys/module.h> -#include <sys/bus.h> -#include <machine/bus.h> -#include <machine/resource.h> -#include <sys/rman.h> - -#include <isa/isavar.h> - -#include <sys/systm.h> - -#include <sys/sensors.h> - -#include <dev/lm/lm78var.h> - -/* ISA registers */ -#define LMC_ADDR 0x05 -#define LMC_DATA 0x06 - -extern struct cfdriver lm_cd; - -#if defined(LMDEBUG) -#define DPRINTF(x) do { printf x; } while (0) -#else -#define DPRINTF(x) -#endif - -struct lm_isa_softc { - struct lm_softc sc_lmsc; - - struct resource *sc_iores; - int sc_iorid; - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; -}; - -static int lm_isa_probe(struct device *); -static int lm_isa_attach(struct device *); -static int lm_isa_detach(struct device *); -u_int8_t lm_isa_readreg(struct lm_softc *, int); -void lm_isa_writereg(struct lm_softc *, int, int); - -static device_method_t lm_isa_methods[] = { - /* Methods from the device interface */ - DEVMETHOD(device_probe, lm_isa_probe), - DEVMETHOD(device_attach, lm_isa_attach), - DEVMETHOD(device_detach, lm_isa_detach), - - /* Terminate method list */ - { 0, 0 } -}; - -static driver_t lm_isa_driver = { - "lm", - lm_isa_methods, - sizeof (struct lm_isa_softc) -}; - -static devclass_t lm_devclass; - -DRIVER_MODULE(lm, isa, lm_isa_driver, lm_devclass, NULL, NULL); - -int -lm_isa_probe(struct device *dev) -{ - struct lm_isa_softc *sc = device_get_softc(dev); - struct resource *iores; - int iorid = 0; - bus_space_tag_t iot; - bus_space_handle_t ioh; - int banksel, vendid, chipid, addr; - - iores = bus_alloc_resource(dev, SYS_RES_IOPORT, &iorid, - 0ul, ~0ul, 8, RF_ACTIVE); - if (iores == NULL) { - DPRINTF(("%s: can't map i/o space\n", __func__)); - return (1); - } - iot = rman_get_bustag(iores); - ioh = rman_get_bushandle(iores); - - /* Probe for Winbond chips. */ - bus_space_write_1(iot, ioh, LMC_ADDR, WB_BANKSEL); - banksel = bus_space_read_1(iot, ioh, LMC_DATA); - bus_space_write_1(iot, ioh, LMC_ADDR, WB_VENDID); - vendid = bus_space_read_1(iot, ioh, LMC_DATA); - if (((banksel & 0x80) && vendid == (WB_VENDID_WINBOND >> 8)) || - (!(banksel & 0x80) && vendid == (WB_VENDID_WINBOND & 0xff))) - goto found; - - /* Probe for ITE chips (and don't attach if we find one). */ - bus_space_write_1(iot, ioh, LMC_ADDR, 0x58 /*ITD_CHIPID*/); - vendid = bus_space_read_1(iot, ioh, LMC_DATA); - if (vendid == 0x90 /*IT_ID_IT87*/) - goto notfound; - - /* - * Probe for National Semiconductor LM78/79/81. - * - * XXX This assumes the address has not been changed from the - * power up default. This is probably a reasonable - * assumption, and if it isn't true, we should be able to - * access the chip using the serial bus. - */ - bus_space_write_1(iot, ioh, LMC_ADDR, LM_SBUSADDR); - addr = bus_space_read_1(iot, ioh, LMC_DATA); - if ((addr & 0xfc) == 0x2c) { - bus_space_write_1(iot, ioh, LMC_ADDR, LM_CHIPID); - chipid = bus_space_read_1(iot, ioh, LMC_DATA); - - switch (chipid & LM_CHIPID_MASK) { - case LM_CHIPID_LM78: - case LM_CHIPID_LM78J: - case LM_CHIPID_LM79: - case LM_CHIPID_LM81: - goto found; - } - } - - notfound: - bus_release_resource(dev, SYS_RES_IOPORT, iorid, iores); - - return (1); - - found: - /* Bus-independent probe */ - sc->sc_lmsc.sc_dev = dev; - sc->sc_iot = iot; - sc->sc_ioh = ioh; - sc->sc_lmsc.lm_writereg = lm_isa_writereg; - sc->sc_lmsc.lm_readreg = lm_isa_readreg; - lm_probe(&sc->sc_lmsc); - - bus_release_resource(dev, SYS_RES_IOPORT, iorid, iores); - sc->sc_iot = 0; - sc->sc_ioh = 0; - - return (0); -} - -int -lm_isa_attach(struct device *dev) -{ - struct lm_isa_softc *sc = device_get_softc(dev); -#ifdef notyet - struct lm_softc *lmsc; - int i; - u_int8_t sbusaddr; -#endif - - sc->sc_iores = bus_alloc_resource(dev, SYS_RES_IOPORT, &sc->sc_iorid, - 0ul, ~0ul, 8, RF_ACTIVE); - if (sc->sc_iores == NULL) { - device_printf(dev, "can't map i/o space\n"); - return (1); - } - sc->sc_iot = rman_get_bustag(sc->sc_iores); - sc->sc_ioh = rman_get_bushandle(sc->sc_iores); - - /* Bus-independent attachment */ - lm_attach(&sc->sc_lmsc); - -#ifdef notyet - /* - * Most devices supported by this driver can attach to iic(4) - * as well. However, we prefer to attach them to isa(4) since - * that causes less overhead and is more reliable. We look - * through all previously attached devices, and if we find an - * identical chip at the same serial bus address, we stop - * updating its sensors and mark them as invalid. - */ - - sbusaddr = lm_isa_readreg(&sc->sc_lmsc, LM_SBUSADDR); - if (sbusaddr == 0) - return (0); - - for (i = 0; i < lm_cd.cd_ndevs; i++) { - lmsc = lm_cd.cd_devs[i]; - if (lmsc == &sc->sc_lmsc) - continue; - if (lmsc && lmsc->sbusaddr == sbusaddr && - lmsc->chipid == sc->sc_lmsc.chipid) - config_detach(&lmsc->sc_dev, 0); - } -#endif - return (0); -} - -int -lm_isa_detach(struct device *dev) -{ - struct lm_isa_softc *sc = device_get_softc(dev); - int error; - - /* Bus-independent detachment */ - error = lm_detach(&sc->sc_lmsc); - if (error) - return (error); - - error = bus_release_resource(dev, SYS_RES_IOPORT, sc->sc_iorid, - sc->sc_iores); - if (error) - return (error); - - return (0); -} - -u_int8_t -lm_isa_readreg(struct lm_softc *lmsc, int reg) -{ - struct lm_isa_softc *sc = (struct lm_isa_softc *)lmsc; - - bus_space_write_1(sc->sc_iot, sc->sc_ioh, LMC_ADDR, reg); - return (bus_space_read_1(sc->sc_iot, sc->sc_ioh, LMC_DATA)); -} - -void -lm_isa_writereg(struct lm_softc *lmsc, int reg, int val) -{ - struct lm_isa_softc *sc = (struct lm_isa_softc *)lmsc; - - bus_space_write_1(sc->sc_iot, sc->sc_ioh, LMC_ADDR, reg); - bus_space_write_1(sc->sc_iot, sc->sc_ioh, LMC_DATA, val); -} diff --git a/sys/dev/lm/lm78var.h b/sys/dev/lm/lm78var.h deleted file mode 100644 index 1b0ce32cec538..0000000000000 --- a/sys/dev/lm/lm78var.h +++ /dev/null @@ -1,158 +0,0 @@ -/* $FreeBSD$ */ -/* $OpenBSD: lm78var.h,v 1.12 2007/05/25 02:26:43 cnst Exp $ */ - -/*- - * Copyright (c) 2005, 2006 Mark Kettenis - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * National Semiconductor LM78/79/81 registers - */ - -#define LM_POST_RAM 0x00 /* POST RAM occupies 0x00 -- 0x1f */ -#define LM_VALUE_RAM 0x20 /* Value RAM occupies 0x20 -- 0x3f */ -#define LM_FAN1 0x28 /* FAN1 reading */ -#define LM_FAN2 0x29 /* FAN2 reading */ -#define LM_FAN3 0x2a /* FAN3 reading */ - -#define LM_CONFIG 0x40 /* Configuration */ -#define LM_ISR1 0x41 /* Interrupt Status 1 */ -#define LM_ISR2 0x42 /* Interrupt Status 2 */ -#define LM_SMI1 0x43 /* SMI# Mask 1 */ -#define LM_SMI2 0x44 /* SMI# Mask 2 */ -#define LM_NMI1 0x45 /* NMI Mask 1 */ -#define LM_NMI2 0x46 /* NMI Mask 2 */ -#define LM_VIDFAN 0x47 /* VID/Fan Divisor */ -#define LM_SBUSADDR 0x48 /* Serial Bus Address */ -#define LM_CHIPID 0x49 /* Chip Reset/ID */ - -/* Chip IDs */ - -#define LM_CHIPID_LM78 0x00 -#define LM_CHIPID_LM78J 0x40 -#define LM_CHIPID_LM79 0xC0 -#define LM_CHIPID_LM81 0x80 -#define LM_CHIPID_MASK 0xfe - -/* - * Winbond registers - * - * Several models exists. The W83781D is mostly compatible with the - * LM78, but has two extra temperatures. Later models add extra - * voltage sensors, fans and bigger fan divisors to accomodate slow - * running fans. To accomodate the extra sensors some models have - * different memory banks. - */ - -#define WB_T23ADDR 0x4a /* Temperature 2 and 3 Serial Bus Address */ -#define WB_PIN 0x4b /* Pin Control */ -#define WB_BANKSEL 0x4e /* Bank Select */ -#define WB_VENDID 0x4f /* Vendor ID */ - -/* Bank 0 regs */ -#define WB_BANK0_CHIPID 0x58 /* Chip ID */ -#define WB_BANK0_FAN45 0x5c /* Fan 4/5 Divisor Control (W83791D only) */ -#define WB_BANK0_VBAT 0x5d /* VBAT Monitor Control */ -#define WB_BANK0_FAN4 0xba /* Fan 4 reading (W83791D only) */ -#define WB_BANK0_FAN5 0xbb /* Fan 5 reading (W83791D only) */ - -#define WB_BANK0_CONFIG 0x18 /* VRM & OVT Config (W83627THF/W83637HF) */ - -/* Bank 1 registers */ -#define WB_BANK1_T2H 0x50 /* Temperature 2 High Byte */ -#define WB_BANK1_T2L 0x51 /* Temperature 2 Low Byte */ - -/* Bank 2 registers */ -#define WB_BANK2_T3H 0x50 /* Temperature 3 High Byte */ -#define WB_BANK2_T3L 0x51 /* Temperature 3 Low Byte */ - -/* Bank 4 registers (W83782D/W83627HF and later models only) */ -#define WB_BANK4_T1OFF 0x54 /* Temperature 1 Offset */ -#define WB_BANK4_T2OFF 0x55 /* Temperature 2 Offset */ -#define WB_BANK4_T3OFF 0x56 /* Temperature 3 Offset */ - -/* Bank 5 registers (W83782D/W83627HF and later models only) */ -#define WB_BANK5_5VSB 0x50 /* 5VSB reading */ -#define WB_BANK5_VBAT 0x51 /* VBAT reading */ - -/* Bank selection */ -#define WB_BANKSEL_B0 0x00 /* Bank 0 */ -#define WB_BANKSEL_B1 0x01 /* Bank 1 */ -#define WB_BANKSEL_B2 0x02 /* Bank 2 */ -#define WB_BANKSEL_B3 0x03 /* Bank 3 */ -#define WB_BANKSEL_B4 0x04 /* Bank 4 */ -#define WB_BANKSEL_B5 0x05 /* Bank 5 */ -#define WB_BANKSEL_HBAC 0x80 /* Register 0x4f High Byte Access */ - -/* Vendor IDs */ -#define WB_VENDID_WINBOND 0x5ca3 /* Winbond */ -#define WB_VENDID_ASUS 0x12c3 /* ASUS */ - -/* Chip IDs */ -#define WB_CHIPID_W83781D 0x10 -#define WB_CHIPID_W83781D_2 0x11 -#define WB_CHIPID_W83627HF 0x21 -#define WB_CHIPID_AS99127F 0x31 /* Asus W83781D clone */ -#define WB_CHIPID_W83782D 0x30 -#define WB_CHIPID_W83783S 0x40 -#define WB_CHIPID_W83697HF 0x60 -#define WB_CHIPID_W83791D 0x71 -#define WB_CHIPID_W83791SD 0x72 -#define WB_CHIPID_W83792D 0x7a -#define WB_CHIPID_W83637HF 0x80 -#define WB_CHIPID_W83627THF 0x90 -#define WB_CHIPID_W83627EHF 0xa1 -#define WB_CHIPID_W83627DHG 0xc1 - -/* Config bits */ -#define WB_CONFIG_VMR9 0x01 - -/* Reference voltage (mV) */ -#define WB_VREF 3600 -#define WB_W83627EHF_VREF 2048 - -#define WB_MAX_SENSORS 19 - -struct lm_softc; - -struct lm_sensor { - char *desc; - enum sensor_type type; - u_int8_t bank; - u_int8_t reg; - void (*refresh)(struct lm_softc *, int); - int rfact; -}; - -struct lm_softc { - struct device *sc_dev; - - struct ksensor sensors[WB_MAX_SENSORS]; - struct ksensordev sensordev; - struct lm_sensor *lm_sensors; - u_int numsensors; - void (*refresh_sensor_data) (struct lm_softc *); - - u_int8_t (*lm_readreg)(struct lm_softc *, int); - void (*lm_writereg)(struct lm_softc *, int, int); - - u_int8_t sbusaddr; - u_int8_t chipid; - u_int8_t vrm9; -}; - -void lm_probe(struct lm_softc *); -void lm_attach(struct lm_softc *); -int lm_detach(struct lm_softc *); diff --git a/sys/i386/conf/GENERIC.hints b/sys/i386/conf/GENERIC.hints index e1567b29f51ad..ed1faa74b1aa3 100644 --- a/sys/i386/conf/GENERIC.hints +++ b/sys/i386/conf/GENERIC.hints @@ -76,11 +76,3 @@ hint.le.0.disabled="1" hint.le.0.port="0x280" hint.le.0.irq="10" hint.le.0.drq="0" -hint.lm.0.at="isa" -hint.lm.0.port="0x290" -hint.it.0.at="isa" -hint.it.0.port="0x290" -hint.it.1.at="isa" -hint.it.1.port="0xc00" -hint.it.2.at="isa" -hint.it.2.port="0xd00" diff --git a/sys/kern/kern_sensors.c b/sys/kern/kern_sensors.c deleted file mode 100644 index 2ffbad29a0024..0000000000000 --- a/sys/kern/kern_sensors.c +++ /dev/null @@ -1,421 +0,0 @@ -/* $FreeBSD$ */ -/* $OpenBSD: kern_sensors.c,v 1.19 2007/06/04 18:42:05 deraadt Exp $ */ -/* $OpenBSD: kern_sysctl.c,v 1.154 2007/06/01 17:29:10 beck Exp $ */ - -/*- - * Copyright (c) 2005 David Gwynne <dlg@openbsd.org> - * Copyright (c) 2006 Constantine A. Murenin <cnst+openbsd@bugmail.mojo.ru> - * Copyright (c) 2007 Constantine A. Murenin <cnst+GSoC2007@FreeBSD.org> - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/kthread.h> -#include <sys/queue.h> -#include <sys/types.h> -#include <sys/time.h> -#include <sys/lock.h> -#include <sys/mutex.h> - -#include <sys/sysctl.h> -#include <sys/sensors.h> - -int sensordev_count = 0; -SLIST_HEAD(, ksensordev) sensordev_list = SLIST_HEAD_INITIALIZER(sensordev_list); - -struct ksensordev *sensordev_get(int); -struct ksensor *sensor_find(struct ksensordev *, enum sensor_type, int); - -struct sensor_task { - void *arg; - void (*func)(void *); - - int period; - time_t nextrun; - volatile int running; - TAILQ_ENTRY(sensor_task) entry; -}; - -void sensor_task_thread(void *); -void sensor_task_schedule(struct sensor_task *); - -TAILQ_HEAD(, sensor_task) tasklist = TAILQ_HEAD_INITIALIZER(tasklist); - -#ifndef NOSYSCTL8HACK -void sensor_sysctl8magic_install(struct ksensordev *); -void sensor_sysctl8magic_deinstall(struct ksensordev *); -#endif - -void -sensordev_install(struct ksensordev *sensdev) -{ - struct ksensordev *v, *nv; - - mtx_lock(&Giant); - if (sensordev_count == 0) { - sensdev->num = 0; - SLIST_INSERT_HEAD(&sensordev_list, sensdev, list); - } else { - for (v = SLIST_FIRST(&sensordev_list); - (nv = SLIST_NEXT(v, list)) != NULL; v = nv) - if (nv->num - v->num > 1) - break; - sensdev->num = v->num + 1; - SLIST_INSERT_AFTER(v, sensdev, list); - } - sensordev_count++; - mtx_unlock(&Giant); - -#ifndef NOSYSCTL8HACK - sensor_sysctl8magic_install(sensdev); -#endif -} - -void -sensor_attach(struct ksensordev *sensdev, struct ksensor *sens) -{ - struct ksensor *v, *nv; - struct ksensors_head *sh; - int i; - - mtx_lock(&Giant); - sh = &sensdev->sensors_list; - if (sensdev->sensors_count == 0) { - for (i = 0; i < SENSOR_MAX_TYPES; i++) - sensdev->maxnumt[i] = 0; - sens->numt = 0; - SLIST_INSERT_HEAD(sh, sens, list); - } else { - for (v = SLIST_FIRST(sh); - (nv = SLIST_NEXT(v, list)) != NULL; v = nv) - if (v->type == sens->type && (v->type != nv->type || - (v->type == nv->type && nv->numt - v->numt > 1))) - break; - /* sensors of the same type go after each other */ - if (v->type == sens->type) - sens->numt = v->numt + 1; - else - sens->numt = 0; - SLIST_INSERT_AFTER(v, sens, list); - } - /* we only increment maxnumt[] if the sensor was added - * to the last position of sensors of this type - */ - if (sensdev->maxnumt[sens->type] == sens->numt) - sensdev->maxnumt[sens->type]++; - sensdev->sensors_count++; - mtx_unlock(&Giant); -} - -void -sensordev_deinstall(struct ksensordev *sensdev) -{ - mtx_lock(&Giant); - sensordev_count--; - SLIST_REMOVE(&sensordev_list, sensdev, ksensordev, list); - mtx_unlock(&Giant); - -#ifndef NOSYSCTL8HACK - sensor_sysctl8magic_deinstall(sensdev); -#endif -} - -void -sensor_detach(struct ksensordev *sensdev, struct ksensor *sens) -{ - struct ksensors_head *sh; - - mtx_lock(&Giant); - sh = &sensdev->sensors_list; - sensdev->sensors_count--; - SLIST_REMOVE(sh, sens, ksensor, list); - /* we only decrement maxnumt[] if this is the tail - * sensor of this type - */ - if (sens->numt == sensdev->maxnumt[sens->type] - 1) - sensdev->maxnumt[sens->type]--; - mtx_unlock(&Giant); -} - -struct ksensordev * -sensordev_get(int num) -{ - struct ksensordev *sd; - - SLIST_FOREACH(sd, &sensordev_list, list) - if (sd->num == num) - return (sd); - - return (NULL); -} - -struct ksensor * -sensor_find(struct ksensordev *sensdev, enum sensor_type type, int numt) -{ - struct ksensor *s; - struct ksensors_head *sh; - - sh = &sensdev->sensors_list; - SLIST_FOREACH(s, sh, list) - if (s->type == type && s->numt == numt) - return (s); - - return (NULL); -} - -int -sensor_task_register(void *arg, void (*func)(void *), int period) -{ - struct sensor_task *st; - int create_thread = 0; - - st = malloc(sizeof(struct sensor_task), M_DEVBUF, M_NOWAIT); - if (st == NULL) - return (1); - - st->arg = arg; - st->func = func; - st->period = period; - - st->running = 1; - - if (TAILQ_EMPTY(&tasklist)) - create_thread = 1; - - st->nextrun = 0; - TAILQ_INSERT_HEAD(&tasklist, st, entry); - - if (create_thread) - if (kthread_create(sensor_task_thread, NULL, NULL, 0, 0, - "sensors") != 0) - panic("sensors kthread"); - - wakeup(&tasklist); - - return (0); -} - -void -sensor_task_unregister(void *arg) -{ - struct sensor_task *st; - - TAILQ_FOREACH(st, &tasklist, entry) - if (st->arg == arg) - st->running = 0; -} - -void -sensor_task_thread(void *arg) -{ - struct sensor_task *st, *nst; - time_t now; - - while (!TAILQ_EMPTY(&tasklist)) { - while ((nst = TAILQ_FIRST(&tasklist))->nextrun > - (now = time_uptime)) - tsleep(&tasklist, PWAIT, "timeout", - (nst->nextrun - now) * hz); - - while ((st = nst) != NULL) { - nst = TAILQ_NEXT(st, entry); - - if (st->nextrun > now) - break; - - /* take it out while we work on it */ - TAILQ_REMOVE(&tasklist, st, entry); - - if (!st->running) { - free(st, M_DEVBUF); - continue; - } - - /* run the task */ - st->func(st->arg); - /* stick it back in the tasklist */ - sensor_task_schedule(st); - } - } - - kthread_exit(0); -} - -void -sensor_task_schedule(struct sensor_task *st) -{ - struct sensor_task *cst; - - st->nextrun = time_uptime + st->period; - - TAILQ_FOREACH(cst, &tasklist, entry) { - if (cst->nextrun > st->nextrun) { - TAILQ_INSERT_BEFORE(cst, st, entry); - return; - } - } - - /* must be an empty list, or at the end of the list */ - TAILQ_INSERT_TAIL(&tasklist, st, entry); -} - -/* - * sysctl glue code - */ -int sysctl_handle_sensordev(SYSCTL_HANDLER_ARGS); -int sysctl_handle_sensor(SYSCTL_HANDLER_ARGS); -int sysctl_sensors_handler(SYSCTL_HANDLER_ARGS); - - -#ifndef NOSYSCTL8HACK - -SYSCTL_NODE(_hw, OID_AUTO, sensors, CTLFLAG_RD, NULL, - "Hardware Sensors sysctl internal magic"); -SYSCTL_NODE(_hw, HW_SENSORS, _sensors, CTLFLAG_RD, sysctl_sensors_handler, - "Hardware Sensors XP MIB interface"); - -#else /* NOSYSCTL8HACK */ - -SYSCTL_NODE(_hw, HW_SENSORS, sensors, CTLFLAG_RD, sysctl_sensors_handler, - "Hardware Sensors"); - -#endif /* !NOSYSCTL8HACK */ - - -#ifndef NOSYSCTL8HACK - -/* - * XXX: - * FreeBSD's sysctl(9) .oid_handler functionality is not accustomed - * for the CTLTYPE_NODE handler to handle the undocumented sysctl - * magic calls. As soon as such functionality is developed, - * sysctl_sensors_handler() should be converted to handle all such - * calls, and these sysctl_add_oid(9) calls should be removed - * "with a big axe". This whole sysctl_add_oid(9) business is solely - * to please sysctl(8). - */ - -void -sensor_sysctl8magic_install(struct ksensordev *sensdev) -{ - struct sysctl_oid_list *ol; - struct sysctl_ctx_list *cl = &sensdev->clist; - struct ksensor *s; - struct ksensors_head *sh = &sensdev->sensors_list; - - sysctl_ctx_init(cl); - ol = SYSCTL_CHILDREN(SYSCTL_ADD_NODE(cl, &SYSCTL_NODE_CHILDREN(_hw, - sensors), sensdev->num, sensdev->xname, CTLFLAG_RD, NULL, "")); - SLIST_FOREACH(s, sh, list) { - char n[32]; - - snprintf(n, sizeof(n), "%s%d", sensor_type_s[s->type], s->numt); - SYSCTL_ADD_PROC(cl, ol, OID_AUTO, n, CTLTYPE_STRUCT | - CTLFLAG_RD, s, 0, sysctl_handle_sensor, "S,sensor", ""); - } -} - -void -sensor_sysctl8magic_deinstall(struct ksensordev *sensdev) -{ - struct sysctl_ctx_list *cl = &sensdev->clist; - - sysctl_ctx_free(cl); -} - -#endif /* !NOSYSCTL8HACK */ - - -int -sysctl_handle_sensordev(SYSCTL_HANDLER_ARGS) -{ - struct ksensordev *ksd = arg1; - struct sensordev *usd; - int error; - - if (req->newptr) - return (EPERM); - - /* Grab a copy, to clear the kernel pointers */ - usd = malloc(sizeof(*usd), M_TEMP, M_WAITOK); - bzero(usd, sizeof(*usd)); - usd->num = ksd->num; - strlcpy(usd->xname, ksd->xname, sizeof(usd->xname)); - memcpy(usd->maxnumt, ksd->maxnumt, sizeof(usd->maxnumt)); - usd->sensors_count = ksd->sensors_count; - - error = SYSCTL_OUT(req, usd, sizeof(struct sensordev)); - - free(usd, M_TEMP); - return (error); -} - -int -sysctl_handle_sensor(SYSCTL_HANDLER_ARGS) -{ - struct ksensor *ks = arg1; - struct sensor *us; - int error; - - if (req->newptr) - return (EPERM); - - /* Grab a copy, to clear the kernel pointers */ - us = malloc(sizeof(*us), M_TEMP, M_WAITOK); - bzero(us, sizeof(*us)); - memcpy(us->desc, ks->desc, sizeof(ks->desc)); - us->tv = ks->tv; - us->value = ks->value; - us->type = ks->type; - us->status = ks->status; - us->numt = ks->numt; - us->flags = ks->flags; - - error = SYSCTL_OUT(req, us, sizeof(struct sensor)); - - free(us, M_TEMP); - return (error); -} - -int -sysctl_sensors_handler(SYSCTL_HANDLER_ARGS) -{ - int *name = arg1; - u_int namelen = arg2; - struct ksensordev *ksd; - struct ksensor *ks; - int dev, numt; - enum sensor_type type; - - if (namelen != 1 && namelen != 3) - return (ENOTDIR); - - dev = name[0]; - if ((ksd = sensordev_get(dev)) == NULL) - return (ENOENT); - if (namelen == 1) - return (sysctl_handle_sensordev(NULL, ksd, 0, req)); - - type = name[1]; - numt = name[2]; - if ((ks = sensor_find(ksd, type, numt)) == NULL) - return (ENOENT); - return (sysctl_handle_sensor(NULL, ks, 0, req)); -} diff --git a/sys/modules/Makefile b/sys/modules/Makefile index 252b2e0edf0f2..85a3d96629024 100644 --- a/sys/modules/Makefile +++ b/sys/modules/Makefile @@ -131,7 +131,6 @@ SUBDIR= ${_3dfx} \ iscsi \ isp \ ispfw \ - ${_it} \ ${_iwi} \ ${_iwifw} \ ${_ixgb} \ @@ -147,7 +146,6 @@ SUBDIR= ${_3dfx} \ ${_linprocfs} \ ${_linsysfs} \ ${_linux} \ - ${_lm} \ lmc \ lpt \ mac_biba \ @@ -455,11 +453,9 @@ _ipmi= ipmi _ips= ips _ipw= ipw _ipwfw= ipwfw -_it= it _iwi= iwi _iwifw= iwifw -_ixgb= ixgb -_lm= lm +_ixgb= ixgb _mly= mly _nfe= nfe _nve= nve @@ -515,12 +511,10 @@ _ipmi= ipmi _ips= ips _ipw= ipw _ipwfw= ipwfw -_it= it -_ixgb= ixgb +_ixgb= ixgb _linprocfs= linprocfs _linsysfs= linsysfs _linux= linux -_lm= lm _mly= mly _ndis= ndis _nfe= nfe diff --git a/sys/modules/it/Makefile b/sys/modules/it/Makefile deleted file mode 100644 index f2f064b44abf0..0000000000000 --- a/sys/modules/it/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# $FreeBSD$ - -.PATH: ${.CURDIR}/../../dev/it - -KMOD= it -SRCS= it.c -SRCS+= device_if.h bus_if.h isa_if.h - -.include <bsd.kmod.mk> diff --git a/sys/modules/lm/Makefile b/sys/modules/lm/Makefile deleted file mode 100644 index cb0791a879429..0000000000000 --- a/sys/modules/lm/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# $FreeBSD$ - -.PATH: ${.CURDIR}/../../dev/lm - -KMOD= lm -SRCS= lm78.c lm78_isa.c -SRCS+= device_if.h bus_if.h isa_if.h - -.include <bsd.kmod.mk> diff --git a/sys/sys/sensors.h b/sys/sys/sensors.h deleted file mode 100644 index 15306ad1739c0..0000000000000 --- a/sys/sys/sensors.h +++ /dev/null @@ -1,168 +0,0 @@ -/* $FreeBSD$ */ -/* $OpenBSD: sensors.h,v 1.23 2007/03/22 16:55:31 deraadt Exp $ */ - -/*- - * Copyright (c) 2003, 2004 Alexander Yurchenko <grange@openbsd.org> - * Copyright (c) 2006 Constantine A. Murenin <cnst+openbsd@bugmail.mojo.ru> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _SYS_SENSORS_H_ -#define _SYS_SENSORS_H_ - -/* Sensor types */ -enum sensor_type { - SENSOR_TEMP, /* temperature (muK) */ - SENSOR_FANRPM, /* fan revolution speed */ - SENSOR_VOLTS_DC, /* voltage (muV DC) */ - SENSOR_VOLTS_AC, /* voltage (muV AC) */ - SENSOR_OHMS, /* resistance */ - SENSOR_WATTS, /* power */ - SENSOR_AMPS, /* current (muA) */ - SENSOR_WATTHOUR, /* power capacity */ - SENSOR_AMPHOUR, /* power capacity */ - SENSOR_INDICATOR, /* boolean indicator */ - SENSOR_INTEGER, /* generic integer value */ - SENSOR_PERCENT, /* percent */ - SENSOR_LUX, /* illuminance (mulx) */ - SENSOR_DRIVE, /* disk */ - SENSOR_TIMEDELTA, /* system time error (nSec) */ - SENSOR_MAX_TYPES -}; - -static const char * const sensor_type_s[SENSOR_MAX_TYPES + 1] = { - "temp", - "fan", - "volt", - "acvolt", - "resistance", - "power", - "current", - "watthour", - "amphour", - "indicator", - "raw", - "percent", - "illuminance", - "drive", - "timedelta", - "undefined" -}; - -#define SENSOR_DRIVE_EMPTY 1 -#define SENSOR_DRIVE_READY 2 -#define SENSOR_DRIVE_POWERUP 3 -#define SENSOR_DRIVE_ONLINE 4 -#define SENSOR_DRIVE_IDLE 5 -#define SENSOR_DRIVE_ACTIVE 6 -#define SENSOR_DRIVE_REBUILD 7 -#define SENSOR_DRIVE_POWERDOWN 8 -#define SENSOR_DRIVE_FAIL 9 -#define SENSOR_DRIVE_PFAIL 10 - -/* Sensor states */ -enum sensor_status { - SENSOR_S_UNSPEC, /* status is unspecified */ - SENSOR_S_OK, /* status is ok */ - SENSOR_S_WARN, /* status is warning */ - SENSOR_S_CRIT, /* status is critical */ - SENSOR_S_UNKNOWN /* status is unknown */ -}; - -/* Sensor data: - * New fields should be added at the end to encourage backwards compat - */ -struct sensor { - char desc[32]; /* sensor description, may be empty */ - struct timeval tv; /* sensor value last change time */ - int64_t value; /* current value */ - enum sensor_type type; /* sensor type */ - enum sensor_status status; /* sensor status */ - int numt; /* sensor number of .type type */ - int flags; /* sensor flags */ -#define SENSOR_FINVALID 0x0001 /* sensor is invalid */ -#define SENSOR_FUNKNOWN 0x0002 /* sensor value is unknown */ -}; - -/* Sensor device data: - * New fields should be added at the end to encourage backwards compat - */ -struct sensordev { - int num; /* sensordev number */ - char xname[16]; /* unix device name */ - int maxnumt[SENSOR_MAX_TYPES]; - int sensors_count; -}; - -#define MAXSENSORDEVICES 32 - -#ifdef _KERNEL -#include <sys/queue.h> -#ifndef NOSYSCTL8HACK - #include <sys/sysctl.h> -#endif - -/* Sensor data */ -struct ksensor { - SLIST_ENTRY(ksensor) list; /* device-scope list */ - char desc[32]; /* sensor description, may be empty */ - struct timeval tv; /* sensor value last change time */ - int64_t value; /* current value */ - enum sensor_type type; /* sensor type */ - enum sensor_status status; /* sensor status */ - int numt; /* sensor number of .type type */ - int flags; /* sensor flags, ie. SENSOR_FINVALID */ -}; -SLIST_HEAD(ksensors_head, ksensor); - -/* Sensor device data */ -struct ksensordev { - SLIST_ENTRY(ksensordev) list; - int num; /* sensordev number */ - char xname[16]; /* unix device name */ - int maxnumt[SENSOR_MAX_TYPES]; - int sensors_count; - struct ksensors_head sensors_list; -#ifndef NOSYSCTL8HACK - struct sysctl_ctx_list clist; /* XXX: sysctl(9) .oid_handler() for - * CTLTYPE_NODE type doesn't support - * the undocumented sysctl magic. - */ -#endif /* !NOSYSCTL8HACK */ -}; - -/* struct ksensordev */ -void sensordev_install(struct ksensordev *); -void sensordev_deinstall(struct ksensordev *); - -/* struct ksensor */ -void sensor_attach(struct ksensordev *, struct ksensor *); -void sensor_detach(struct ksensordev *, struct ksensor *); - -/* task scheduling */ -int sensor_task_register(void *, void (*)(void *), int); -void sensor_task_unregister(void *); - -#endif /* _KERNEL */ - -#endif /* !_SYS_SENSORS_H_ */ diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index a861a4b1714d4..5d07d6b40f5bd 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -487,8 +487,7 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry); #define HW_FLOATINGPT 10 /* int: has HW floating point? */ #define HW_MACHINE_ARCH 11 /* string: machine architecture */ #define HW_REALMEM 12 /* int: 'real' memory */ -#define HW_SENSORS 13 /* node: hardware monitors */ -#define HW_MAXID 14 /* number of valid hw ids */ +#define HW_MAXID 13 /* number of valid hw ids */ #define CTL_HW_NAMES { \ { 0, 0 }, \ @@ -502,9 +501,7 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry); { "disknames", CTLTYPE_STRUCT }, \ { "diskstats", CTLTYPE_STRUCT }, \ { "floatingpoint", CTLTYPE_INT }, \ - { "machine_arch", CTLTYPE_STRING }, \ { "realmem", CTLTYPE_ULONG }, \ - { "sensors", CTLTYPE_NODE}, \ } /* |
