Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/acpi Rework the sysctl-support.



details:   https://anonhg.NetBSD.org/src/rev/b2a2d9ab40c1
branches:  trunk
changeset: 753839:b2a2d9ab40c1
user:      jruoho <jruoho%NetBSD.org@localhost>
date:      Mon Apr 12 12:14:26 2010 +0000

description:
Rework the sysctl-support.

Changes:

        hw.wake                 ->      hw.acpi.wake
        hw.acpi.debug_layer     ->      hw.acpi.debug.layer
        hw.acpi.debug_level     ->      hw.acpi.debug.level

Additions:

        hw.acpi.stat.gpe        # Number of dispatched GPEs
        hw.acpi.stat.sci        # Number of SCI interrupts
        hw.acpi.stat.fixed      # Number of fixed events
        hw.acpi.stat.method     # Number of executed methods

ok jmcneill@

diffstat:

 sys/dev/acpi/acpi.c         |  141 ++++++++++++++++++++++++++++++++-----------
 sys/dev/acpi/acpi_debug.c   |   44 ++++++++-----
 sys/dev/acpi/acpi_wakedev.c |   73 +++++++++++++---------
 sys/dev/acpi/acpivar.h      |   14 +---
 4 files changed, 177 insertions(+), 95 deletions(-)

diffs (truncated from 456 to 300 lines):

diff -r ad42a13cb3f7 -r b2a2d9ab40c1 sys/dev/acpi/acpi.c
--- a/sys/dev/acpi/acpi.c       Mon Apr 12 12:04:54 2010 +0000
+++ b/sys/dev/acpi/acpi.c       Mon Apr 12 12:14:26 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: acpi.c,v 1.164 2010/04/08 04:40:51 jruoho Exp $        */
+/*     $NetBSD: acpi.c,v 1.165 2010/04/12 12:14:26 jruoho Exp $        */
 
 /*-
  * Copyright (c) 2003, 2007 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.164 2010/04/08 04:40:51 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.165 2010/04/12 12:14:26 jruoho Exp $");
 
 #include "opt_acpi.h"
 #include "opt_pcifixup.h"
@@ -133,6 +133,7 @@
 
 static int     acpi_print(void *aux, const char *);
 
+static int     sysctl_hw_acpi_fixedstats(SYSCTLFN_ARGS);
 static int     sysctl_hw_acpi_sleepstate(SYSCTLFN_ARGS);
 
 extern struct cfdriver acpi_cd;
@@ -1736,63 +1737,131 @@
 
 SYSCTL_SETUP(sysctl_acpi_setup, "sysctl hw.acpi subtree setup")
 {
-       const struct sysctlnode *node;
-       const struct sysctlnode *ssnode;
+       const struct sysctlnode *mnode, *rnode;
+       int err;
 
-       if (sysctl_createv(clog, 0, NULL, NULL,
-           CTLFLAG_PERMANENT,
-           CTLTYPE_NODE, "hw", NULL,
-           NULL, 0, NULL, 0,
-           CTL_HW, CTL_EOL) != 0)
+       err = sysctl_createv(clog, 0, NULL, &rnode,
+           CTLFLAG_PERMANENT, CTLTYPE_NODE, "hw",
+           NULL, NULL, 0, NULL, 0,
+           CTL_HW, CTL_EOL);
+
+       if (err != 0)
                return;
 
-       if (sysctl_createv(clog, 0, NULL, &node,
-           CTLFLAG_PERMANENT,
-           CTLTYPE_NODE, "acpi", NULL,
+       err = sysctl_createv(clog, 0, &rnode, &rnode,
+           CTLFLAG_PERMANENT, CTLTYPE_NODE,
+           "acpi", SYSCTL_DESCR("ACPI subsystem parameters"),
            NULL, 0, NULL, 0,
-           CTL_HW, CTL_CREATE, CTL_EOL) != 0)
+           CTL_CREATE, CTL_EOL);
+
+       if (err != 0)
                return;
 
-       sysctl_createv(NULL, 0, NULL, NULL, CTLFLAG_READONLY,
-           CTLTYPE_QUAD, "root",
-           SYSCTL_DESCR("ACPI root pointer"),
+       (void)sysctl_createv(NULL, 0, &rnode, NULL,
+           CTLFLAG_PERMANENT | CTLFLAG_READONLY, CTLTYPE_QUAD,
+           "root", SYSCTL_DESCR("ACPI root pointer"),
            NULL, 0, &acpi_root_pointer, sizeof(acpi_root_pointer),
-           CTL_HW, node->sysctl_num, CTL_CREATE, CTL_EOL);
-       sysctl_createv(NULL, 0, NULL, NULL, CTLFLAG_READONLY,
-           CTLTYPE_STRING, "supported_states",
-           SYSCTL_DESCR("Supported ACPI system states"),
+           CTL_CREATE, CTL_EOL);
+
+       (void)sysctl_createv(NULL, 0, &rnode, NULL,
+           CTLFLAG_PERMANENT | CTLFLAG_READONLY, CTLTYPE_STRING,
+           "supported_states", SYSCTL_DESCR("Supported system states"),
            NULL, 0, acpi_supported_states, 0,
-           CTL_HW, node->sysctl_num, CTL_CREATE, CTL_EOL);
+           CTL_CREATE, CTL_EOL);
+
+       err = sysctl_createv(NULL, 0, NULL, &mnode,
+           CTLFLAG_PERMANENT, CTLTYPE_NODE, "machdep",
+           NULL, NULL, 0, NULL, 0,
+           CTL_MACHDEP, CTL_EOL);
+
+       if (err == 0) {
+
+               (void)sysctl_createv(NULL, 0, &mnode, NULL,
+                   CTLFLAG_PERMANENT | CTLFLAG_READWRITE, CTLTYPE_INT,
+                   "sleep_state", SYSCTL_DESCR("System sleep state"),
+                   sysctl_hw_acpi_sleepstate, 0, NULL, 0,
+                   CTL_CREATE, CTL_EOL);
+       }
+
+       err = sysctl_createv(clog, 0, &rnode, &rnode,
+           CTLFLAG_PERMANENT, CTLTYPE_NODE,
+           "stat", SYSCTL_DESCR("ACPI statistics"),
+           NULL, 0, NULL, 0,
+           CTL_CREATE, CTL_EOL);
+
+       if (err != 0)
+               return;
+
+       (void)sysctl_createv(clog, 0, &rnode, NULL,
+           CTLFLAG_PERMANENT | CTLFLAG_READONLY, CTLTYPE_QUAD,
+           "gpe", SYSCTL_DESCR("Number of dispatched GPEs"),
+           NULL, 0, &AcpiGpeCount, sizeof(AcpiGpeCount),
+           CTL_CREATE, CTL_EOL);
 
-       /* ACPI sleepstate sysctl */
-       if (sysctl_createv(NULL, 0, NULL, &node,
-           CTLFLAG_PERMANENT,
-           CTLTYPE_NODE, "machdep", NULL,
-           NULL, 0, NULL, 0, CTL_MACHDEP, CTL_EOL) != 0)
-               return;
-       if (sysctl_createv(NULL, 0, &node, &ssnode,
-           CTLFLAG_READWRITE, CTLTYPE_INT, "sleep_state",
-           NULL, sysctl_hw_acpi_sleepstate, 0, NULL, 0, CTL_CREATE,
-           CTL_EOL) != 0)
-               return;
+       (void)sysctl_createv(clog, 0, &rnode, NULL,
+           CTLFLAG_PERMANENT | CTLFLAG_READONLY, CTLTYPE_QUAD,
+           "sci", SYSCTL_DESCR("Number of SCI interrupts"),
+           NULL, 0, &AcpiSciCount, sizeof(AcpiSciCount),
+           CTL_CREATE, CTL_EOL);
+
+       (void)sysctl_createv(clog, 0, &rnode, NULL,
+           CTLFLAG_PERMANENT | CTLFLAG_READONLY, CTLTYPE_QUAD,
+           "fixed", SYSCTL_DESCR("Number of fixed events"),
+           sysctl_hw_acpi_fixedstats, 0, NULL, 0,
+           CTL_CREATE, CTL_EOL);
+
+       (void)sysctl_createv(clog, 0, &rnode, NULL,
+           CTLFLAG_PERMANENT | CTLFLAG_READONLY, CTLTYPE_QUAD,
+           "method", SYSCTL_DESCR("Number of methods executed"),
+           NULL, 0, &AcpiMethodCount, sizeof(AcpiMethodCount),
+           CTL_CREATE, CTL_EOL);
+
+       CTASSERT(sizeof(AcpiGpeCount) == sizeof(uint64_t));
+       CTASSERT(sizeof(AcpiSciCount) == sizeof(uint64_t));
+}
+
+static int
+sysctl_hw_acpi_fixedstats(SYSCTLFN_ARGS)
+{
+       struct sysctlnode node;
+       uint64_t t;
+       int err, i;
+
+       for (i = t = 0; i < __arraycount(AcpiFixedEventCount); i++)
+               t += AcpiFixedEventCount[i];
+
+       node = *rnode;
+       node.sysctl_data = &t;
+
+       err = sysctl_lookup(SYSCTLFN_CALL(&node));
+
+       if (err || newp == NULL)
+               return err;
+
+       return 0;
 }
 
 static int
 sysctl_hw_acpi_sleepstate(SYSCTLFN_ARGS)
 {
-       int error, t;
        struct sysctlnode node;
+       int err, t;
 
        node = *rnode;
        t = acpi_sleepstate;
        node.sysctl_data = &t;
-       error = sysctl_lookup(SYSCTLFN_CALL(&node));
-       if (error || newp == NULL)
-               return error;
+
+       err = sysctl_lookup(SYSCTLFN_CALL(&node));
+
+       if (err || newp == NULL)
+               return err;
 
        if (acpi_softc == NULL)
                return ENOSYS;
 
+       if (t < ACPI_STATE_S0 || t > ACPI_STATE_S5)
+               return EINVAL;
+
        acpi_enter_sleep_state(acpi_softc, t);
 
        return 0;
diff -r ad42a13cb3f7 -r b2a2d9ab40c1 sys/dev/acpi/acpi_debug.c
--- a/sys/dev/acpi/acpi_debug.c Mon Apr 12 12:04:54 2010 +0000
+++ b/sys/dev/acpi/acpi_debug.c Mon Apr 12 12:14:26 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_debug.c,v 1.1 2010/01/31 11:26:20 jruoho Exp $ */
+/* $NetBSD: acpi_debug.c,v 1.2 2010/04/12 12:14:26 jruoho Exp $ */
 
 /*-
  * Copyright (c) 2010 Jukka Ruohonen <jruohonen%iki.fi@localhost>
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_debug.c,v 1.1 2010/01/31 11:26:20 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_debug.c,v 1.2 2010/04/12 12:14:26 jruoho Exp $");
 
 #include <sys/param.h>
 #include <sys/sysctl.h>
@@ -65,9 +65,8 @@
 void
 acpi_debug_init(void)
 {
-       const struct sysctlnode *node;
-       const char *layer;
-       const char *level;
+       const struct sysctlnode *rnode;
+       const char *layer, *level;
        int rv;
 
        KASSERT(acpi_debug_layer_d == NULL);
@@ -78,34 +77,45 @@
        if (rv != 0)
                goto fail;
 
-       rv = sysctl_createv(NULL, 0, NULL, NULL,
+       rv = sysctl_createv(NULL, 0, NULL, &rnode,
            CTLFLAG_PERMANENT, CTLTYPE_NODE, "hw",
-           NULL, NULL, 0, NULL, 0, CTL_HW, CTL_EOL);
+           NULL, NULL, 0, NULL, 0,
+           CTL_HW, CTL_EOL);
 
        if (rv != 0)
                goto fail;
 
-       rv = sysctl_createv(NULL, 0, NULL, &node,
+       rv = sysctl_createv(NULL, 0, &rnode, &rnode,
            CTLFLAG_PERMANENT, CTLTYPE_NODE, "acpi",
-           NULL, NULL, 0, NULL, 0, CTL_HW, CTL_CREATE, CTL_EOL);
+           NULL, NULL, 0, NULL, 0,
+           CTL_CREATE, CTL_EOL);
 
        if (rv != 0)
                goto fail;
 
-       rv = sysctl_createv(NULL, 0, NULL, NULL,
-           CTLFLAG_READWRITE, CTLTYPE_STRING, "debug_layer",
-           SYSCTL_DESCR("ACPI debug layer"),
-           acpi_debug_sysctl_layer, 0, acpi_debug_layer_s, ACPI_DEBUG_MAX,
-           CTL_HW, node->sysctl_num, CTL_CREATE, CTL_EOL);
+       rv = sysctl_createv(NULL, 0, &rnode, &rnode,
+           0, CTLTYPE_NODE, "debug",
+           SYSCTL_DESCR("ACPI debug subtree"),
+           NULL, 0, NULL, 0,
+           CTL_CREATE, CTL_EOL);
 
        if (rv != 0)
                goto fail;
 
-       rv = sysctl_createv(NULL, 0, NULL, NULL,
-           CTLFLAG_READWRITE, CTLTYPE_STRING, "debug_level",
+       rv = sysctl_createv(NULL, 0, &rnode, NULL,
+           CTLFLAG_READWRITE, CTLTYPE_STRING, "layer",
+           SYSCTL_DESCR("ACPI debug layer"),
+           acpi_debug_sysctl_layer, 0, acpi_debug_layer_s, ACPI_DEBUG_MAX,
+           CTL_CREATE, CTL_EOL);
+
+       if (rv != 0)
+               goto fail;
+
+       rv = sysctl_createv(NULL, 0, &rnode, NULL,
+           CTLFLAG_READWRITE, CTLTYPE_STRING, "level",
            SYSCTL_DESCR("ACPI debug level"),
            acpi_debug_sysctl_level, 0, acpi_debug_level_s, ACPI_DEBUG_MAX,
-           CTL_HW, node->sysctl_num, CTL_CREATE, CTL_EOL);
+           CTL_CREATE, CTL_EOL);
 
        if (rv != 0)
                goto fail;
diff -r ad42a13cb3f7 -r b2a2d9ab40c1 sys/dev/acpi/acpi_wakedev.c
--- a/sys/dev/acpi/acpi_wakedev.c       Mon Apr 12 12:04:54 2010 +0000
+++ b/sys/dev/acpi/acpi_wakedev.c       Mon Apr 12 12:14:26 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_wakedev.c,v 1.8 2010/03/16 07:18:55 jruoho Exp $ */
+/* $NetBSD: acpi_wakedev.c,v 1.9 2010/04/12 12:14:26 jruoho Exp $ */
 
 /*-
  * Copyright (c) 2009 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_wakedev.c,v 1.8 2010/03/16 07:18:55 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_wakedev.c,v 1.9 2010/04/12 12:14:26 jruoho Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -41,8 +41,6 @@
 #define _COMPONENT                ACPI_BUS_COMPONENT



Home | Main Index | Thread Index | Old Index