Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Dec 1998 19:17:18 +0100 (CET)
From:      "Walter C. Pelissero" <wcp@luppolo.lpds.sublink.org>
To:        hackers@FreeBSD.ORG
Subject:   Auto power off for poor people
Message-ID:  <13942.39950.631562.882793@luppolo.lpds.sublink.org>

next in thread | raw e-mail | index | archive | help
Since I think it might be of general interest (I saw a few requests in
freebsd-questions), here are the patches I made to a 2.2.7 system to
get the power-off-on-shutdown feature.

I have to admit this is a dirty hack made in hurry just to have my ATX
mainboard do power off on shutdown.  It consists basically of code
cut'n'pasted from 3.0.  BTW it introduces a warning message during
compilation of kern_shutdown.c.  Who cares?

While at this.  It would be nice to have a shutdown on power-off
switch in FreeBSD 3.0.  Judging from the switch block in
apm_processevent() function it seems there is not even an hook for a
daemon doing this kind of job.  PMEV_POWERSTATECHANGE is ignored.  Am
I wrong?


*** /sys/kern/kern_shutdown.c.dist	Tue Dec 15 18:22:15 1998
--- /sys/kern/kern_shutdown.c	Tue Dec 15 18:22:15 1998
***************
*** 226,231 ****
--- 226,235 ----
  	}
  	splhigh();
  	if (howto & RB_HALT) {
+ 		/* Kludge for APM power off.
+ 		   Waiting for FreeBSD 3.0 -wcp12/15/98. */
+ 		apm_power_off(0, 0);
+ 
  		printf("\n");
  		printf("The operating system has halted.\n");
  		printf("Please press any key to reboot.\n\n");
*** /sys/i386/apm/apm.c.dist	Tue Dec 15 18:58:55 1998
--- /sys/i386/apm/apm.c	Tue Dec 15 18:58:56 1998
***************
*** 237,242 ****
--- 237,259 ----
  	return 0;
  }
  
+ /*
+  * Turn off the entire system.
+  */
+ void
+ apm_power_off(int howto, void *junk)
+ {
+   u_long eax, ebx, ecx;
+ 
+   /* Not halting powering off, or not active */
+   if (!apm_softc.active)
+     return;
+   eax = (APM_BIOS << 8) | APM_SETPWSTATE;
+   ebx = PMDV_ALLDEV;
+   ecx = PMST_OFF;
+   apm_int(&eax, &ebx, &ecx);
+ }
+ 
  /* APM Battery low handler */
  static void
  apm_battery_low(struct apm_softc *sc)

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?13942.39950.631562.882793>