Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys Save initial, boot-time limit values, and restore them u...
details: https://anonhg.NetBSD.org/src/rev/69cd58214d14
branches: trunk
changeset: 753801:69cd58214d14
user: pgoyette <pgoyette%NetBSD.org@localhost>
date: Sat Apr 10 19:02:39 2010 +0000
description:
Save initial, boot-time limit values, and restore them upon request
from sysmon_envsys(9).
diffstat:
sys/arch/x86/x86/ipmi.c | 16 +++++++++---
sys/dev/i2c/dbcool.c | 59 ++++++++++++++++++++++++++++++++++-------------
sys/dev/i2c/dbcool_var.h | 6 +++-
sys/dev/i2c/sdtemp.c | 14 +++++++++-
4 files changed, 70 insertions(+), 25 deletions(-)
diffs (255 lines):
diff -r aeb839e75d77 -r 69cd58214d14 sys/arch/x86/x86/ipmi.c
--- a/sys/arch/x86/x86/ipmi.c Sat Apr 10 19:01:00 2010 +0000
+++ b/sys/arch/x86/x86/ipmi.c Sat Apr 10 19:02:39 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ipmi.c,v 1.45 2010/03/22 23:21:29 dyoung Exp $ */
+/* $NetBSD: ipmi.c,v 1.46 2010/04/10 19:02:39 pgoyette Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipmi.c,v 1.45 2010/03/22 23:21:29 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipmi.c,v 1.46 2010/04/10 19:02:39 pgoyette Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -84,8 +84,8 @@
char i_envdesc[64];
int i_envtype; /* envsys compatible type */
int i_envnum; /* envsys index */
- sysmon_envsys_lim_t i_limits;
- uint32_t i_props;
+ sysmon_envsys_lim_t i_limits, i_deflims;
+ uint32_t i_props, i_defprops;
SLIST_ENTRY(ipmi_sensor) i_list;
};
@@ -1359,6 +1359,10 @@
/* Find the ipmi_sensor corresponding to this edata */
SLIST_FOREACH(ipmi_s, &ipmi_sensor_list, i_list) {
if (ipmi_s->i_envnum == edata->sensor) {
+ if (limits == NULL) {
+ limits = &ipmi_s->i_deflims;
+ props = &ipmi_s->i_defprops;
+ }
*props |= PROP_DRIVER_LIMITS;
ipmi_s->i_limits = *limits;
ipmi_s->i_props = *props;
@@ -1381,6 +1385,10 @@
ipmi_get_sensor_limits(sc, ipmi_s, limits, props);
ipmi_s->i_limits = *limits;
ipmi_s->i_props = *props;
+ if (ipmi_s->i_defprops == 0) {
+ ipmi_s->i_defprops = *props;
+ ipmi_s->i_deflims = *limits;
+ }
return;
}
}
diff -r aeb839e75d77 -r 69cd58214d14 sys/dev/i2c/dbcool.c
--- a/sys/dev/i2c/dbcool.c Sat Apr 10 19:01:00 2010 +0000
+++ b/sys/dev/i2c/dbcool.c Sat Apr 10 19:02:39 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dbcool.c,v 1.23 2010/04/01 05:26:48 macallan Exp $ */
+/* $NetBSD: dbcool.c,v 1.24 2010/04/10 19:02:39 pgoyette Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -49,7 +49,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dbcool.c,v 1.23 2010/04/01 05:26:48 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dbcool.c,v 1.24 2010/04/10 19:02:39 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1812,6 +1812,15 @@
(*props & PROP_CRITMAX) &&
(limits->sel_critmin >= limits->sel_critmax))
*props &= ~(PROP_CRITMIN | PROP_CRITMAX);
+
+ /*
+ * If this is the first time through, save these values
+ * in case user overrides them and then requests a reset.
+ */
+ if (sc->sc_defprops[index] == 0) {
+ sc->sc_defprops[index] = *props | PROP_DRIVER_LIMITS;
+ sc->sc_deflims[index] = *limits;
+ }
}
static void
@@ -1905,6 +1914,10 @@
int index = edata->sensor;
struct dbcool_softc *sc = sme->sme_cookie;
+ if (limits == NULL) {
+ limits = &sc->sc_deflims[index];
+ props = &sc->sc_defprops[index];
+ }
switch (edata->units) {
case ENVSYS_STEMP:
dbcool_set_temp_limits(sc, index, limits, props);
@@ -1944,12 +1957,16 @@
else if (limit > 127)
limit = 127;
}
- } else
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg,
+ (uint8_t)limit);
+ } else if (*props & PROP_DRIVER_LIMITS) {
if (sc->sc_temp_offset)
limit = 0x00;
else
limit = 0x80;
- sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg, (uint8_t)limit);
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg,
+ (uint8_t)limit);
+ }
if (*props & PROP_CRITMAX) {
limit = lims->sel_critmax - 273150000;
@@ -1966,12 +1983,16 @@
else if (limit > 127)
limit = 127;
}
- } else
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->hi_lim_reg,
+ (uint8_t)limit);
+ } else if (*props & PROP_DRIVER_LIMITS) {
if (sc->sc_temp_offset)
limit = 0xff;
else
limit = 0x7f;
- sc->sc_dc.dc_writereg(&sc->sc_dc, reg->hi_lim_reg, (uint8_t)limit);
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->hi_lim_reg,
+ (uint8_t)limit);
+ }
}
static void
@@ -1995,9 +2016,9 @@
limit = 0xff;
else if (limit < 0)
limit = 0;
- } else
- limit = 0;
- sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg, limit);
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg, limit);
+ } else if (*props & PROP_DRIVER_LIMITS)
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg, 0);
if (*props & PROP_CRITMAX) {
limit = lims->sel_critmax;
@@ -2007,9 +2028,9 @@
limit = 0xff;
else if (limit < 0)
limit = 0;
- } else
- limit = 0xff;
- sc->sc_dc.dc_writereg(&sc->sc_dc, reg->hi_lim_reg, limit);
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->hi_lim_reg, limit);
+ } else if (*props & PROP_DRIVER_LIMITS)
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->hi_lim_reg, 0xff);
}
static void
@@ -2032,9 +2053,13 @@
if (limit > 0xffff)
limit = 0xffff;
}
- } else
- limit = 0xffff;
- sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg, limit & 0xff);
- limit >>= 8;
- sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg + 1, limit & 0xff);
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg,
+ limit & 0xff);
+ limit >>= 8;
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg + 1,
+ limit & 0xff);
+ } else if (*props & PROP_DRIVER_LIMITS) {
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg, 0xff);
+ sc->sc_dc.dc_writereg(&sc->sc_dc, reg->lo_lim_reg + 1, 0xff);
+ }
}
diff -r aeb839e75d77 -r 69cd58214d14 sys/dev/i2c/dbcool_var.h
--- a/sys/dev/i2c/dbcool_var.h Sat Apr 10 19:01:00 2010 +0000
+++ b/sys/dev/i2c/dbcool_var.h Sat Apr 10 19:02:39 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dbcool_var.h,v 1.11 2010/03/01 03:14:49 pgoyette Exp $ */
+/* $NetBSD: dbcool_var.h,v 1.12 2010/04/10 19:02:39 pgoyette Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dbcool_var.h,v 1.11 2010/03/01 03:14:49 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dbcool_var.h,v 1.12 2010/04/10 19:02:39 pgoyette Exp $");
#include <dev/i2c/i2cvar.h>
@@ -119,6 +119,8 @@
struct sysmon_envsys *sc_sme;
struct dbcool_chipset sc_dc;
envsys_data_t sc_sensor[DBCOOL_MAXSENSORS];
+ sysmon_envsys_lim_t sc_deflims[DBCOOL_MAXSENSORS];
+ uint32_t sc_defprops[DBCOOL_MAXSENSORS];
int sc_root_sysctl_num;
int sc_sysctl_num[DBCOOL_MAXSENSORS];
struct reg_list *sc_regs[DBCOOL_MAXSENSORS];
diff -r aeb839e75d77 -r 69cd58214d14 sys/dev/i2c/sdtemp.c
--- a/sys/dev/i2c/sdtemp.c Sat Apr 10 19:01:00 2010 +0000
+++ b/sys/dev/i2c/sdtemp.c Sat Apr 10 19:02:39 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sdtemp.c,v 1.12 2010/03/14 18:05:49 pgoyette Exp $ */
+/* $NetBSD: sdtemp.c,v 1.13 2010/04/10 19:02:39 pgoyette Exp $ */
/*
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sdtemp.c,v 1.12 2010/03/14 18:05:49 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdtemp.c,v 1.13 2010/04/10 19:02:39 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -51,6 +51,8 @@
struct sysmon_envsys *sc_sme;
envsys_data_t *sc_sensor;
+ sysmon_envsys_lim_t sc_deflims;
+ uint32_t sc_defprops;
int sc_resolution;
uint16_t sc_capability;
};
@@ -327,6 +329,10 @@
iic_release_bus(sc->sc_tag, 0);
if (*props != 0)
*props |= PROP_DRIVER_LIMITS;
+ if (sc->sc_defprops == 0) {
+ sc->sc_deflims = *limits;
+ sc->sc_defprops = *props;
+ }
}
/* Send current limit values to the device */
@@ -337,6 +343,10 @@
uint16_t val;
struct sdtemp_softc *sc = sme->sme_cookie;
+ if (limits == NULL) {
+ limits = &sc->sc_deflims;
+ props = &sc->sc_defprops;
+ }
iic_acquire_bus(sc->sc_tag, 0);
if (*props & PROP_WARNMIN) {
val = __UK2C(limits->sel_warnmin);
Home |
Main Index |
Thread Index |
Old Index