Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/powerd Power management daemon for sysmon. Current...
details: https://anonhg.NetBSD.org/src/rev/2beb0929e1cf
branches: trunk
changeset: 545939:2beb0929e1cf
user: thorpej <thorpej%NetBSD.org@localhost>
date: Fri Apr 18 04:54:49 2003 +0000
description:
Power management daemon for sysmon. Currently supports acting on
power switch state change events.
diffstat:
usr.sbin/powerd/Makefile | 11 +
usr.sbin/powerd/powerd.8 | 130 ++++++++++++++++++
usr.sbin/powerd/powerd.c | 327 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 468 insertions(+), 0 deletions(-)
diffs (truncated from 480 to 300 lines):
diff -r bf6c410da4c5 -r 2beb0929e1cf usr.sbin/powerd/Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/powerd/Makefile Fri Apr 18 04:54:49 2003 +0000
@@ -0,0 +1,11 @@
+# $NetBSD: Makefile,v 1.1 2003/04/18 04:54:49 thorpej Exp $
+
+NOMAN=1 # defined
+
+PROG= powerd
+SRCS= powerd.c
+
+DPADD+= ${LIBUTIL}
+LDADD+= -lutil
+
+.include <bsd.prog.mk>
diff -r bf6c410da4c5 -r 2beb0929e1cf usr.sbin/powerd/powerd.8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/powerd/powerd.8 Fri Apr 18 04:54:49 2003 +0000
@@ -0,0 +1,130 @@
+.\" $NetBSD: powerd.8,v 1.1 2003/04/18 04:54:50 thorpej Exp $
+.\"
+.\" Copyright (c) 2003 Wasabi Systems, Inc.
+.\" All rights reserved.
+.\"
+.\" Written by Jason R. Thorpe for Wasabi Systems, Inc.
+.\"
+.\" 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.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed for the NetBSD Project by
+.\" Wasabi Systems, Inc.
+.\" 4. The name of Wasabi Systems, Inc. may not be used to endorse
+.\" or promote products derived from this software without specific prior
+.\" written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``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 WASABI SYSTEMS, INC
+.\" 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.
+.\"
+.Dd April 17, 2003
+.Dt POWERD 8
+.Os
+.Sh NAME
+.Nm powerd
+.Nd power management daemon for sysmon
+.Sh SYNOPSIS
+.Nm
+.Op Fl d
+.Sh DESCRIPTION
+.Nm
+acts upon power management events posted by the kernel's power management
+facility.
+When events are posted,
+.Nm
+translates the event into a script name and a list of arguments.
+.Nm
+then runs the script in order to implement the power management policy
+defined by the system administrator.
+.Pp
+.Nm
+supports the following options:
+.Bl -tag -width xxxx
+.It Fl d
+Enable debugging mode. Verbose messages will be sent to stderr and
+.Nm
+will stay in the foreground of the controlling terminal.
+.El
+.Sh CONFIGURATION SCRIPTS
+All of
+.Nm Ns 's
+configuration is encapsulated into scripts that are run when power
+management events occur.
+.Nm
+will look for these scripts in two locations. The first location is
+.Pa /etc/powerd/scripts/<power_type> ,
+where
+.Pa <power_type>
+is defined by the power management mechanism supported by the system,
+e.g.
+.Dq apm
+or
+.Dq acpi .
+If the script is not found in the first location,
+.Nm
+looks in
+.Pa /etc/powerd/scripts .
+.Pp
+Configuration scripts are called with different arguments, depending on
+the script class. These classes are described in the following sections.
+.Ss POWER SWITCH SCRIPTS
+Power switch scripts are called when a state change event occurs on
+a power switch device.
+Power switch scripts are called with two arguments: the device with which
+the device is associated, and the event type.
+.Pp
+The following power switch script names are defined:
+.Bl -tag -width "power_button"
+.It power_button
+This script is called when an event occurs on a power button device.
+.It sleep_button
+This script is called when an event occurs on a sleep button device.
+.It lid_switch
+This script is called when an event occurs on a lid switch device.
+.El
+.Pp
+The following events are defined for power switch devices:
+.Bl -tag -width "released"
+.It pressed
+The button was pressed or the lid closed.
+.It released
+The button was released or the lid opened.
+Note that power and sleep button devices usually do not
+post this type of event.
+.El
+.Pp
+The following is an example of how a power button script might be invoked
+when a power button is pressed by the operator:
+.Bd -literal -offset indent
+/etc/powerd/scripts/power_button acpi0 pressed
+.Ed
+.Sh SEE ALSO
+.Xr acpi 4 ,
+.Xr apm 4 ,
+.Xr sysmon 4
+.Sh HISTORY
+.Nm
+first appeared in
+.Nx 2.0 .
+.Sh AUTHORS
+.Nm
+was written by
+.An Jason R. Thorpe
+.Aq thorpej%wasabisystems.com@localhost
+and contributed by Wasabi Systems, Inc.
diff -r bf6c410da4c5 -r 2beb0929e1cf usr.sbin/powerd/powerd.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/powerd/powerd.c Fri Apr 18 04:54:49 2003 +0000
@@ -0,0 +1,327 @@
+/* $NetBSD: powerd.c,v 1.1 2003/04/18 04:54:50 thorpej Exp $ */
+
+/*
+ * Copyright (c) 2003 Wasabi Systems, Inc.
+ * All rights reserved.
+ *
+ * Written by Jason R. Thorpe for Wasabi Systems, Inc.
+ *
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed for the NetBSD Project by
+ * Wasabi Systems, Inc.
+ * 4. The name of Wasabi Systems, Inc. may not be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``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 WASABI SYSTEMS, INC
+ * 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.
+ */
+
+/*
+ * Power management daemon for sysmon.
+ */
+
+#include <sys/param.h>
+#include <sys/event.h>
+#include <sys/power.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <util.h>
+
+int debug;
+
+static int kq;
+
+#define A_CNT(x) (sizeof((x)) / sizeof((x)[0]))
+
+#define _PATH_DEV_POWER "/dev/power"
+#define _PATH_POWERD_SCRIPTS "/etc/powerd/scripts"
+
+static void usage(void);
+static void run_script(const char *[]);
+static struct kevent *allocchange(void);
+static int wait_for_events(struct kevent *, size_t);
+static void dispatch_dev_power(struct kevent *);
+static void dispatch_power_event_switch_state_change(power_event_t *);
+
+static const char *script_paths[] = {
+ NULL,
+ _PATH_POWERD_SCRIPTS
+};
+
+int
+main(int argc, char *argv[])
+{
+ struct kevent *ev, events[16];
+ struct power_type power_type;
+ char *cp;
+ int ch, fd;
+
+ while ((ch = getopt(argc, argv, "d")) != -1) {
+ switch (ch) {
+ case 'd':
+ debug = 1;
+ break;
+
+ default:
+ usage();
+ }
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (argc)
+ usage();
+
+ if (debug == 0)
+ daemon(0, 0);
+
+ openlog("powerd", LOG_PID | LOG_NOWAIT, LOG_DAEMON);
+ pidfile(NULL);
+
+ kq = kqueue();
+ if (kq < 0) {
+ syslog(LOG_ERR, "kqueue: %m");
+ exit(EX_OSERR);
+ }
+
+ fd = open(_PATH_DEV_POWER, O_RDONLY|O_NONBLOCK, 0600);
+ if (fd < 0) {
+ syslog(LOG_ERR, "open %s: %m", _PATH_DEV_POWER);
+ exit(EX_OSERR);
+ }
+
+ if (ioctl(fd, POWER_IOC_GET_TYPE, &power_type) < 0) {
+ syslog(LOG_ERR, "POWER_IOC_GET_TYPE: %m");
+ exit(EX_OSERR);
+ }
+
+ asprintf(&cp, "%s/%s", _PATH_POWERD_SCRIPTS, power_type.power_type);
+ if (cp == NULL) {
+ syslog(LOG_ERR, "allocating script path: %m");
+ exit(EX_OSERR);
+ }
+ script_paths[0] = cp;
+
+ ev = allocchange();
+ EV_SET(ev, fd, EVFILT_READ, EV_ADD | EV_ENABLE,
+ 0, 0, (intptr_t) dispatch_dev_power);
+
+ for (;;) {
+ void (*handler)(struct kevent *);
+ int i, rv;
+
+ rv = wait_for_events(events, A_CNT(events));
+ for (i = 0; i < rv; i++) {
+ handler = (void *) events[i].udata;
+ (*handler)(&events[i]);
+ }
+ }
+}
+
+static void
+usage(void)
Home |
Main Index |
Thread Index |
Old Index