From owner-svn-src-all@FreeBSD.ORG Fri Mar 11 17:12:39 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 96120106564A; Fri, 11 Mar 2011 17:12:39 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 836C58FC13; Fri, 11 Mar 2011 17:12:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2BHCdrY087366; Fri, 11 Mar 2011 17:12:39 GMT (envelope-from avg@svn.freebsd.org) Received: (from avg@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2BHCdXi087361; Fri, 11 Mar 2011 17:12:39 GMT (envelope-from avg@svn.freebsd.org) Message-Id: <201103111712.p2BHCdXi087361@svn.freebsd.org> From: Andriy Gapon Date: Fri, 11 Mar 2011 17:12:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r219510 - stable/7/sys/dev/acpica X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Mar 2011 17:12:39 -0000 Author: avg Date: Fri Mar 11 17:12:39 2011 New Revision: 219510 URL: http://svn.freebsd.org/changeset/base/219510 Log: MFC r216503: small cleanup of acpi battery status setting and checking PR: kern/124744 Modified: stable/7/sys/dev/acpica/acpi_battery.c stable/7/sys/dev/acpica/acpi_cmbat.c stable/7/sys/dev/acpica/acpi_smbat.c stable/7/sys/dev/acpica/acpiio.h Directory Properties: stable/7/sys/ (props changed) stable/7/sys/cddl/contrib/opensolaris/ (props changed) stable/7/sys/contrib/dev/acpica/ (props changed) stable/7/sys/contrib/pf/ (props changed) Modified: stable/7/sys/dev/acpica/acpi_battery.c ============================================================================== --- stable/7/sys/dev/acpica/acpi_battery.c Fri Mar 11 17:01:14 2011 (r219509) +++ stable/7/sys/dev/acpica/acpi_battery.c Fri Mar 11 17:12:39 2011 (r219510) @@ -101,8 +101,9 @@ acpi_battery_get_info_expire(void) int acpi_battery_bst_valid(struct acpi_bst *bst) { - return (bst->state < ACPI_BATT_STAT_MAX && bst->cap != ACPI_BATT_UNKNOWN && - bst->volt != ACPI_BATT_UNKNOWN); + + return (bst->state != ACPI_BATT_STAT_NOT_PRESENT && + bst->cap != ACPI_BATT_UNKNOWN && bst->volt != ACPI_BATT_UNKNOWN); } /* Check _BIF results for validity. */ Modified: stable/7/sys/dev/acpica/acpi_cmbat.c ============================================================================== --- stable/7/sys/dev/acpica/acpi_cmbat.c Fri Mar 11 17:01:14 2011 (r219509) +++ stable/7/sys/dev/acpica/acpi_cmbat.c Fri Mar 11 17:12:39 2011 (r219510) @@ -278,6 +278,12 @@ acpi_cmbat_get_bst(void *arg) goto end; acpi_cmbat_info_updated(&sc->bst_lastupdated); + /* Clear out undefined/extended bits that might be set by hardware. */ + sc->bst.state &= ACPI_BATT_STAT_BST_MASK; + if ((sc->bst.state & ACPI_BATT_STAT_INVALID) == ACPI_BATT_STAT_INVALID) + ACPI_VPRINT(dev, acpi_device_get_parent_softc(dev), + "battery reports simultaneous charging and discharging\n"); + /* XXX If all batteries are critical, perhaps we should suspend. */ if (sc->bst.state & ACPI_BATT_STAT_CRITICAL) { if ((sc->flags & ACPI_BATT_STAT_CRITICAL) == 0) { Modified: stable/7/sys/dev/acpica/acpi_smbat.c ============================================================================== --- stable/7/sys/dev/acpica/acpi_smbat.c Fri Mar 11 17:01:14 2011 (r219509) +++ stable/7/sys/dev/acpica/acpi_smbat.c Fri Mar 11 17:12:39 2011 (r219510) @@ -389,6 +389,7 @@ acpi_smbat_get_bst(device_t dev, struct if (val > 0) { sc->bst.rate = val * factor; + sc->bst.state &= ~SMBATT_BS_DISCHARGING; sc->bst.state |= ACPI_BATT_STAT_CHARGING; } else if (val < 0) sc->bst.rate = (-val) * factor; Modified: stable/7/sys/dev/acpica/acpiio.h ============================================================================== --- stable/7/sys/dev/acpica/acpiio.h Fri Mar 11 17:01:14 2011 (r219509) +++ stable/7/sys/dev/acpica/acpiio.h Fri Mar 11 17:12:39 2011 (r219510) @@ -74,11 +74,22 @@ struct acpi_bst { uint32_t volt; /* Present Voltage */ }; +/* + * Note that the following definitions represent status bits for internal + * driver state. The first three of them (charging, discharging and critical) + * conveninetly conform to ACPI specification of status returned by _BST + * method. Other definitions (not present, etc) are synthetic. + * Also note that according to the specification the charging and discharging + * status bits must not be set at the same time. + */ #define ACPI_BATT_STAT_DISCHARG 0x0001 #define ACPI_BATT_STAT_CHARGING 0x0002 #define ACPI_BATT_STAT_CRITICAL 0x0004 -#define ACPI_BATT_STAT_NOT_PRESENT 0x0007 -#define ACPI_BATT_STAT_MAX 0x0007 +#define ACPI_BATT_STAT_INVALID \ + (ACPI_BATT_STAT_DISCHARG | ACPI_BATT_STAT_CHARGING) +#define ACPI_BATT_STAT_BST_MASK \ + (ACPI_BATT_STAT_INVALID | ACPI_BATT_STAT_CRITICAL) +#define ACPI_BATT_STAT_NOT_PRESENT ACPI_BATT_STAT_BST_MASK union acpi_battery_ioctl_arg { int unit; /* Device unit or ACPI_BATTERY_ALL_UNITS. */