summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/amd64/machdep.c17
-rw-r--r--sys/amd64/include/md_var.h3
-rw-r--r--sys/i386/apm/apm.c15
-rw-r--r--sys/i386/bios/apm.c15
-rw-r--r--sys/i386/i386/machdep.c17
-rw-r--r--sys/i386/include/apm_bios.h3
-rw-r--r--sys/i386/include/md_var.h3
-rw-r--r--sys/kern/kern_shutdown.c3
8 files changed, 68 insertions, 8 deletions
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index b59d92e..cf4d38f 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -35,9 +35,10 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $Id: machdep.c,v 1.246 1997/06/02 08:19:03 dfr Exp $
+ * $Id: machdep.c,v 1.247 1997/06/07 04:36:09 bde Exp $
*/
+#include "apm.h"
#include "npx.h"
#include "opt_sysvipc.h"
#include "opt_ddb.h"
@@ -98,6 +99,9 @@
#include <net/netisr.h>
+#if NAPM > 0
+#include <machine/apm_bios.h>
+#endif
#include <machine/cpu.h>
#include <machine/npx.h>
#include <machine/reg.h>
@@ -685,6 +689,17 @@ cpu_halt(void)
}
/*
+ * Turn the power off.
+ */
+void
+cpu_power_off(void)
+{
+#if NAPM > 0
+ apm_power_off();
+#endif
+}
+
+/*
* Clear registers on exec
*/
void
diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h
index a7e7856..337c0c4 100644
--- a/sys/amd64/include/md_var.h
+++ b/sys/amd64/include/md_var.h
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: md_var.h,v 1.13 1997/03/22 18:53:08 kato Exp $
+ * $Id: md_var.h,v 1.14 1997/06/07 04:36:05 bde Exp $
*/
#ifndef _MACHINE_MD_VAR_H_
@@ -57,6 +57,7 @@ struct reg;
void bcopyb __P((const void *from, void *to, size_t len));
void cpu_reset __P((void));
void cpu_halt __P((void));
+void cpu_power_down __P((void));
void cpu_switch_load_fs __P((void)) __asm(__STRING(cpu_switch_load_fs));
void cpu_switch_load_gs __P((void)) __asm(__STRING(cpu_switch_load_gs));
void doreti_iret __P((void)) __asm(__STRING(doreti_iret));
diff --git a/sys/i386/apm/apm.c b/sys/i386/apm/apm.c
index c39be9d..ad1db6d 100644
--- a/sys/i386/apm/apm.c
+++ b/sys/i386/apm/apm.c
@@ -15,7 +15,7 @@
*
* Sep, 1994 Implemented on FreeBSD 1.1.5.1R (Toshiba AVS001WD)
*
- * $Id: apm.c,v 1.55 1997/03/29 11:06:37 phk Exp $
+ * $Id: apm.c,v 1.56 1997/03/30 09:08:00 phk Exp $
*/
#include <sys/param.h>
@@ -223,6 +223,19 @@ apm_display(int newstate)
return 0;
}
+/*
+ * Turn off the entire system.
+ */
+void
+apm_display(void)
+{
+ u_long eax, ebx, ecx;
+
+ eax = (APM_BIOS << 8) | APM_SETPWSTATE;
+ ebx = PMDV_ALLDEV;
+ ecx = PMST_OFF;
+ apm_int(&eax, &ebx, &ecx);
+}
/* APM Battery low handler */
static void
diff --git a/sys/i386/bios/apm.c b/sys/i386/bios/apm.c
index c39be9d..ad1db6d 100644
--- a/sys/i386/bios/apm.c
+++ b/sys/i386/bios/apm.c
@@ -15,7 +15,7 @@
*
* Sep, 1994 Implemented on FreeBSD 1.1.5.1R (Toshiba AVS001WD)
*
- * $Id: apm.c,v 1.55 1997/03/29 11:06:37 phk Exp $
+ * $Id: apm.c,v 1.56 1997/03/30 09:08:00 phk Exp $
*/
#include <sys/param.h>
@@ -223,6 +223,19 @@ apm_display(int newstate)
return 0;
}
+/*
+ * Turn off the entire system.
+ */
+void
+apm_display(void)
+{
+ u_long eax, ebx, ecx;
+
+ eax = (APM_BIOS << 8) | APM_SETPWSTATE;
+ ebx = PMDV_ALLDEV;
+ ecx = PMST_OFF;
+ apm_int(&eax, &ebx, &ecx);
+}
/* APM Battery low handler */
static void
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index b59d92e..cf4d38f 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -35,9 +35,10 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $Id: machdep.c,v 1.246 1997/06/02 08:19:03 dfr Exp $
+ * $Id: machdep.c,v 1.247 1997/06/07 04:36:09 bde Exp $
*/
+#include "apm.h"
#include "npx.h"
#include "opt_sysvipc.h"
#include "opt_ddb.h"
@@ -98,6 +99,9 @@
#include <net/netisr.h>
+#if NAPM > 0
+#include <machine/apm_bios.h>
+#endif
#include <machine/cpu.h>
#include <machine/npx.h>
#include <machine/reg.h>
@@ -685,6 +689,17 @@ cpu_halt(void)
}
/*
+ * Turn the power off.
+ */
+void
+cpu_power_off(void)
+{
+#if NAPM > 0
+ apm_power_off();
+#endif
+}
+
+/*
* Clear registers on exec
*/
void
diff --git a/sys/i386/include/apm_bios.h b/sys/i386/include/apm_bios.h
index afbc879..59752c2 100644
--- a/sys/i386/include/apm_bios.h
+++ b/sys/i386/include/apm_bios.h
@@ -12,7 +12,7 @@
*
* Aug, 1994 Implemented on FreeBSD 1.1.5.1R (Toshiba AVS001WD)
*
- * $Id: apm_bios.h,v 1.16 1997/03/09 16:40:13 kato Exp $
+ * $Id: apm_bios.h,v 1.17 1997/03/29 11:07:12 phk Exp $
*/
#ifndef _MACHINE_APM_BIOS_H_
@@ -156,6 +156,7 @@ struct apmhook *apm_hook_establish (int apmh, struct apmhook *);
void apm_hook_disestablish (int apmh, struct apmhook *);
void apm_cpu_idle(void);
void apm_cpu_busy(void);
+void apm_power_off(void);
#endif /* !ASSEMBLER && !INITIALIZER */
diff --git a/sys/i386/include/md_var.h b/sys/i386/include/md_var.h
index a7e7856..337c0c4 100644
--- a/sys/i386/include/md_var.h
+++ b/sys/i386/include/md_var.h
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: md_var.h,v 1.13 1997/03/22 18:53:08 kato Exp $
+ * $Id: md_var.h,v 1.14 1997/06/07 04:36:05 bde Exp $
*/
#ifndef _MACHINE_MD_VAR_H_
@@ -57,6 +57,7 @@ struct reg;
void bcopyb __P((const void *from, void *to, size_t len));
void cpu_reset __P((void));
void cpu_halt __P((void));
+void cpu_power_down __P((void));
void cpu_switch_load_fs __P((void)) __asm(__STRING(cpu_switch_load_fs));
void cpu_switch_load_gs __P((void)) __asm(__STRING(cpu_switch_load_gs));
void doreti_iret __P((void)) __asm(__STRING(doreti_iret));
diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c
index f424e1d..c7cebca 100644
--- a/sys/kern/kern_shutdown.c
+++ b/sys/kern/kern_shutdown.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_shutdown.c 8.3 (Berkeley) 1/21/94
- * $Id: kern_shutdown.c,v 1.14 1997/04/26 11:46:14 peter Exp $
+ * $Id: kern_shutdown.c,v 1.15 1997/05/24 18:35:44 fsmp Exp $
*/
#include "opt_ddb.h"
@@ -248,6 +248,7 @@ boot(howto)
}
splhigh();
if (howto & RB_HALT) {
+ cpu_power_down();
printf("\n");
printf("The operating system has halted.\n");
printf("Please press any key to reboot.\n\n");
OpenPOWER on IntegriCloud