Separate softc and device_t. Convert to aprint API and make the driver

less verbose by default.
This commit is contained in:
joerg 2007-10-17 23:30:58 +00:00
parent ebae510efc
commit 8302c6904b

View File

@ -1,4 +1,4 @@
/* $NetBSD: acpi_bat.c,v 1.57 2007/10/10 23:25:40 xtraeme Exp $ */ /* $NetBSD: acpi_bat.c,v 1.58 2007/10/17 23:30:58 joerg Exp $ */
/*- /*-
* Copyright (c) 2003 The NetBSD Foundation, Inc. * Copyright (c) 2003 The NetBSD Foundation, Inc.
@ -86,7 +86,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: acpi_bat.c,v 1.57 2007/10/10 23:25:40 xtraeme Exp $"); __KERNEL_RCSID(0, "$NetBSD: acpi_bat.c,v 1.58 2007/10/17 23:30:58 joerg Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -116,7 +116,7 @@ __KERNEL_RCSID(0, "$NetBSD: acpi_bat.c,v 1.57 2007/10/10 23:25:40 xtraeme Exp $"
#define ACPIBAT_NSENSORS 13 /* number of sensors */ #define ACPIBAT_NSENSORS 13 /* number of sensors */
struct acpibat_softc { struct acpibat_softc {
struct device sc_dev; /* base device glue */ device_t sc_dev; /* base device glue */
struct acpi_devnode *sc_node; /* our ACPI devnode */ struct acpi_devnode *sc_node; /* our ACPI devnode */
int sc_flags; /* see below */ int sc_flags; /* see below */
int sc_available; /* available information level */ int sc_available; /* available information level */
@ -172,10 +172,10 @@ static const char * const bat_hid[] = {
#define ABAT_ALV_INFO 2 /* battery info is available */ #define ABAT_ALV_INFO 2 /* battery info is available */
#define ABAT_ALV_STAT 3 /* battery status is available */ #define ABAT_ALV_STAT 3 /* battery status is available */
static int acpibat_match(struct device *, struct cfdata *, void *); static int acpibat_match(device_t, struct cfdata *, void *);
static void acpibat_attach(struct device *, struct device *, void *); static void acpibat_attach(device_t, struct device *, void *);
CFATTACH_DECL(acpibat, sizeof(struct acpibat_softc), CFATTACH_DECL_NEW(acpibat, sizeof(struct acpibat_softc),
acpibat_match, acpibat_attach, NULL, NULL); acpibat_match, acpibat_attach, NULL, NULL);
static void acpibat_clear_presence(struct acpibat_softc *); static void acpibat_clear_presence(struct acpibat_softc *);
@ -198,7 +198,7 @@ static int acpibat_gtredata(struct sysmon_envsys *, envsys_data_t *);
* Autoconfiguration `match' routine. * Autoconfiguration `match' routine.
*/ */
static int static int
acpibat_match(struct device *parent, struct cfdata *match, void *aux) acpibat_match(device_t parent, struct cfdata *match, void *aux)
{ {
struct acpi_attach_args *aa = aux; struct acpi_attach_args *aa = aux;
@ -214,15 +214,16 @@ acpibat_match(struct device *parent, struct cfdata *match, void *aux)
* Autoconfiguration `attach' routine. * Autoconfiguration `attach' routine.
*/ */
static void static void
acpibat_attach(struct device *parent, struct device *self, void *aux) acpibat_attach(device_t parent, device_t self, void *aux)
{ {
struct acpibat_softc *sc = (void *) self; struct acpibat_softc *sc = device_private(self);
struct acpi_attach_args *aa = aux; struct acpi_attach_args *aa = aux;
ACPI_STATUS rv; ACPI_STATUS rv;
aprint_naive(": ACPI Battery (Control Method)\n"); aprint_naive(": ACPI Battery (Control Method)\n");
aprint_normal(": ACPI Battery (Control Method)\n"); aprint_normal(": ACPI Battery (Control Method)\n");
sc->sc_dev = self;
sc->sc_node = aa->aa_node; sc->sc_node = aa->aa_node;
mutex_init(&sc->sc_mtx, MUTEX_DRIVER, IPL_NONE); mutex_init(&sc->sc_mtx, MUTEX_DRIVER, IPL_NONE);
@ -230,8 +231,8 @@ acpibat_attach(struct device *parent, struct device *self, void *aux)
ACPI_ALL_NOTIFY, ACPI_ALL_NOTIFY,
acpibat_notify_handler, sc); acpibat_notify_handler, sc);
if (ACPI_FAILURE(rv)) { if (ACPI_FAILURE(rv)) {
aprint_error("%s: unable to register DEVICE/SYSTEM NOTIFY " aprint_error_dev(self,
"handler: %s\n", sc->sc_dev.dv_xname, "unable to register DEVICE/SYSTEM NOTIFY handler: %s\n",
AcpiFormatException(rv)); AcpiFormatException(rv));
return; return;
} }
@ -297,8 +298,8 @@ acpibat_battery_present(struct acpibat_softc *sc)
rv = acpi_eval_integer(sc->sc_node->ad_handle, "_STA", &val); rv = acpi_eval_integer(sc->sc_node->ad_handle, "_STA", &val);
if (ACPI_FAILURE(rv)) { if (ACPI_FAILURE(rv)) {
printf("%s: failed to evaluate _STA: %s\n", aprint_error_dev(sc->sc_dev, "failed to evaluate _STA: %s\n",
sc->sc_dev.dv_xname, AcpiFormatException(rv)); AcpiFormatException(rv));
return -1; return -1;
} }
@ -334,20 +335,20 @@ acpibat_get_info(struct acpibat_softc *sc)
rv = acpi_eval_struct(sc->sc_node->ad_handle, "_BIF", &buf); rv = acpi_eval_struct(sc->sc_node->ad_handle, "_BIF", &buf);
if (ACPI_FAILURE(rv)) { if (ACPI_FAILURE(rv)) {
printf("%s: failed to evaluate _BIF: %s\n", aprint_error_dev(sc->sc_dev, "failed to evaluate _BIF: %s\n",
sc->sc_dev.dv_xname, AcpiFormatException(rv)); AcpiFormatException(rv));
return rv; return rv;
} }
p1 = (ACPI_OBJECT *)buf.Pointer; p1 = (ACPI_OBJECT *)buf.Pointer;
if (p1->Type != ACPI_TYPE_PACKAGE) { if (p1->Type != ACPI_TYPE_PACKAGE) {
printf("%s: expected PACKAGE, got %d\n", sc->sc_dev.dv_xname, aprint_error_dev(sc->sc_dev, "expected PACKAGE, got %d\n",
p1->Type); p1->Type);
goto out; goto out;
} }
if (p1->Package.Count < 13) { if (p1->Package.Count < 13) {
printf("%s: expected 13 elts, got %d\n", aprint_error_dev(sc->sc_dev, "expected 13 elements, got %d\n",
sc->sc_dev.dv_xname, p1->Package.Count); p1->Package.Count);
goto out; goto out;
} }
p2 = p1->Package.Elements; p2 = p1->Package.Elements;
@ -394,12 +395,12 @@ acpibat_get_info(struct acpibat_softc *sc)
mutex_exit(&sc->sc_mtx); mutex_exit(&sc->sc_mtx);
aprint_normal("%s: battery info: %s, %s, %s", sc->sc_dev.dv_xname, aprint_verbose_dev(sc->sc_dev, "battery info: %s, %s, %s",
p2[12].String.Pointer, p2[11].String.Pointer, p2[9].String.Pointer); p2[12].String.Pointer, p2[11].String.Pointer, p2[9].String.Pointer);
if (p2[10].String.Pointer) if (p2[10].String.Pointer)
aprint_normal(" %s", p2[10].String.Pointer); aprint_verbose(" %s", p2[10].String.Pointer);
aprint_normal("\n"); aprint_verbose("\n");
rv = AE_OK; rv = AE_OK;
@ -423,19 +424,21 @@ acpibat_get_status(struct acpibat_softc *sc)
rv = acpi_eval_struct(sc->sc_node->ad_handle, "_BST", &buf); rv = acpi_eval_struct(sc->sc_node->ad_handle, "_BST", &buf);
if (ACPI_FAILURE(rv)) { if (ACPI_FAILURE(rv)) {
printf("%s: failed to evaluate _BST: %s\n", aprint_error_dev(sc->sc_dev, "failed to evaluate _BST: %s\n",
sc->sc_dev.dv_xname, AcpiFormatException(rv)); AcpiFormatException(rv));
return rv; return rv;
} }
p1 = (ACPI_OBJECT *)buf.Pointer; p1 = (ACPI_OBJECT *)buf.Pointer;
if (p1->Type != ACPI_TYPE_PACKAGE) { if (p1->Type != ACPI_TYPE_PACKAGE) {
printf("bat: expected PACKAGE, got %d\n", p1->Type); aprint_error_dev(sc->sc_dev, "expected PACKAGE, got %d\n",
p1->Type);
rv = AE_ERROR; rv = AE_ERROR;
goto out; goto out;
} }
if (p1->Package.Count < 4) { if (p1->Package.Count < 4) {
printf("bat: expected 4 elts, got %d\n", p1->Package.Count); aprint_error_dev(sc->sc_dev, "expected 4 elts, got %d\n",
p1->Package.Count);
rv = AE_ERROR; rv = AE_ERROR;
goto out; goto out;
} }
@ -517,13 +520,12 @@ acpibat_print_info(struct acpibat_softc *sc)
else else
tech = "primary"; tech = "primary";
aprint_normal("%s: %s battery, Design %d.%03d%s, Last full %d.%03d%s " aprint_debug_dev(sc->sc_dev, "%s battery, Design %d.%03d%s "
"Warn %d.%03d%s Low %d.%03d%s\n", "Last full %d.%03d%s Warn %d.%03d%s Low %d.%03d%s\n",
sc->sc_dev.dv_xname, tech, tech, SCALE(sc->sc_data[ACPIBAT_DCAPACITY].value_cur), CAPUNITS(sc),
SCALE(sc->sc_data[ACPIBAT_DCAPACITY].value_cur), CAPUNITS(sc), SCALE(sc->sc_data[ACPIBAT_LFCCAPACITY].value_cur),CAPUNITS(sc),
SCALE(sc->sc_data[ACPIBAT_LFCCAPACITY].value_cur),CAPUNITS(sc), SCALE(sc->sc_data[ACPIBAT_WCAPACITY].value_cur), CAPUNITS(sc),
SCALE(sc->sc_data[ACPIBAT_WCAPACITY].value_cur), CAPUNITS(sc), SCALE(sc->sc_data[ACPIBAT_LCAPACITY].value_cur), CAPUNITS(sc));
SCALE(sc->sc_data[ACPIBAT_LCAPACITY].value_cur), CAPUNITS(sc));
} }
static void static void
@ -557,8 +559,8 @@ acpibat_print_stat(struct acpibat_softc *sc)
if (denom > 0) if (denom > 0)
percent = (sc->sc_data[ACPIBAT_CAPACITY].value_cur) / denom; percent = (sc->sc_data[ACPIBAT_CAPACITY].value_cur) / denom;
aprint_normal("%s: %s%s: %d.%03dV cap %d.%03d%s (%d%%) " aprint_debug_dev(sc->sc_dev, "%s%s: %d.%03dV cap %d.%03d%s (%d%%) "
"rate %d.%03d%s\n", sc->sc_dev.dv_xname, capstat, chargestat, "rate %d.%03d%s\n", capstat, chargestat,
SCALE(sc->sc_data[ACPIBAT_VOLTAGE].value_cur), SCALE(sc->sc_data[ACPIBAT_VOLTAGE].value_cur),
SCALE(sc->sc_data[ACPIBAT_CAPACITY].value_cur), CAPUNITS(sc), SCALE(sc->sc_data[ACPIBAT_CAPACITY].value_cur), CAPUNITS(sc),
percent, SCALE(value), RATEUNITS(sc)); percent, SCALE(value), RATEUNITS(sc));
@ -582,16 +584,16 @@ acpibat_update(void *arg)
/* presence is invalid */ /* presence is invalid */
if (acpibat_battery_present(sc) < 0) { if (acpibat_battery_present(sc) < 0) {
/* error */ /* error */
aprint_debug("%s: cannot get battery " aprint_debug_dev(sc->sc_dev,
"presence.\n", sc->sc_dev.dv_xname); "cannot get battery presence.\n");
return; return;
} }
if (ABAT_ISSET(sc, ABAT_F_PRESENT)) { if (ABAT_ISSET(sc, ABAT_F_PRESENT)) {
/* the battery is present. */ /* the battery is present. */
if (ABAT_ISSET(sc, ABAT_F_VERBOSE)) if (ABAT_ISSET(sc, ABAT_F_VERBOSE))
aprint_debug("%s: battery is present.\n", aprint_debug_dev(sc->sc_dev,
sc->sc_dev.dv_xname); "battery is present.\n");
if (ACPI_FAILURE(acpibat_get_info(sc))) if (ACPI_FAILURE(acpibat_get_info(sc)))
return; return;
if (ABAT_ISSET(sc, ABAT_F_VERBOSE)) if (ABAT_ISSET(sc, ABAT_F_VERBOSE))
@ -599,8 +601,8 @@ acpibat_update(void *arg)
} else { } else {
/* the battery is not present. */ /* the battery is not present. */
if (ABAT_ISSET(sc, ABAT_F_VERBOSE)) if (ABAT_ISSET(sc, ABAT_F_VERBOSE))
aprint_debug("%s: battery is not present.\n", aprint_debug_dev(sc->sc_dev,
sc->sc_dev.dv_xname); "battery is not present.\n");
return; return;
} }
} else { } else {
@ -630,8 +632,7 @@ acpibat_notify_handler(ACPI_HANDLE handle, UINT32 notify, void *context)
int rv; int rv;
#ifdef ACPI_BAT_DEBUG #ifdef ACPI_BAT_DEBUG
printf("%s: received notify message: 0x%x\n", aprint_debug_dev(sc->sc_dev, "received notify message: 0x%x\n", notify);
sc->sc_dev.dv_xname, notify);
#endif #endif
switch (notify) { switch (notify) {
@ -646,8 +647,9 @@ acpibat_notify_handler(ACPI_HANDLE handle, UINT32 notify, void *context)
rv = AcpiOsQueueForExecution(OSD_PRIORITY_LO, rv = AcpiOsQueueForExecution(OSD_PRIORITY_LO,
acpibat_update, sc); acpibat_update, sc);
if (ACPI_FAILURE(rv)) if (ACPI_FAILURE(rv))
printf("%s: unable to queue status check: %s\n", aprint_error_dev(sc->sc_dev,
sc->sc_dev.dv_xname, AcpiFormatException(rv)); "unable to queue status check: %s\n",
AcpiFormatException(rv));
break; break;
case ACPI_NOTIFY_BatteryStatusChanged: case ACPI_NOTIFY_BatteryStatusChanged:
@ -657,13 +659,14 @@ acpibat_notify_handler(ACPI_HANDLE handle, UINT32 notify, void *context)
rv = AcpiOsQueueForExecution(OSD_PRIORITY_LO, rv = AcpiOsQueueForExecution(OSD_PRIORITY_LO,
acpibat_update, sc); acpibat_update, sc);
if (ACPI_FAILURE(rv)) if (ACPI_FAILURE(rv))
printf("%s: unable to queue status check: %s\n", aprint_error_dev(sc->sc_dev,
sc->sc_dev.dv_xname, AcpiFormatException(rv)); "unable to queue status check: %s\n",
AcpiFormatException(rv));
break; break;
default: default:
printf("%s: received unknown notify message: 0x%x\n", aprint_error_dev(sc->sc_dev,
sc->sc_dev.dv_xname, notify); "received unknown notify message: 0x%x\n", notify);
} }
} }
@ -685,7 +688,7 @@ acpibat_init_envsys(struct acpibat_softc *sc)
sc->sc_data[index].units = unit; \ sc->sc_data[index].units = unit; \
sc->sc_data[index].state = ENVSYS_SVALID; \ sc->sc_data[index].state = ENVSYS_SVALID; \
snprintf(sc->sc_data[index].desc, sizeof(sc->sc_data->desc), \ snprintf(sc->sc_data[index].desc, sizeof(sc->sc_data->desc), \
"%s %s", sc->sc_dev.dv_xname, string); \ "%s %s", device_xname(sc->sc_dev), string); \
INITDATA(ACPIBAT_PRESENT, ENVSYS_INDICATOR, "present"); INITDATA(ACPIBAT_PRESENT, ENVSYS_INDICATOR, "present");
INITDATA(ACPIBAT_DCAPACITY, capunit, "design cap"); INITDATA(ACPIBAT_DCAPACITY, capunit, "design cap");
@ -719,7 +722,7 @@ acpibat_init_envsys(struct acpibat_softc *sc)
sc->sc_data[ACPIBAT_LCAPACITY].flags = ENVSYS_FMONNOTSUPP; sc->sc_data[ACPIBAT_LCAPACITY].flags = ENVSYS_FMONNOTSUPP;
sc->sc_sysmon.sme_sensor_data = sc->sc_data; sc->sc_sysmon.sme_sensor_data = sc->sc_data;
sc->sc_sysmon.sme_name = sc->sc_dev.dv_xname; sc->sc_sysmon.sme_name = device_xname(sc->sc_dev);
sc->sc_sysmon.sme_cookie = sc; sc->sc_sysmon.sme_cookie = sc;
sc->sc_sysmon.sme_gtredata = acpibat_gtredata; sc->sc_sysmon.sme_gtredata = acpibat_gtredata;
sc->sc_sysmon.sme_nsensors = ACPIBAT_NSENSORS; sc->sc_sysmon.sme_nsensors = ACPIBAT_NSENSORS;
@ -729,8 +732,7 @@ acpibat_init_envsys(struct acpibat_softc *sc)
sc->sc_updateinterval.tv_usec = 0; sc->sc_updateinterval.tv_usec = 0;
if (sysmon_envsys_register(&sc->sc_sysmon)) if (sysmon_envsys_register(&sc->sc_sysmon))
aprint_error("%s: unable to register with sysmon\n", aprint_error_dev(sc->sc_dev, "unable to register with sysmon\n");
sc->sc_dev.dv_xname);
} }
static int static int