Date: Wed, 14 Jun 2000 20:50:15 +0100 (BST) From: dwmalone@maths.tcd.ie To: FreeBSD-gnats-submit@freebsd.org Subject: kern/19273: Halt key for syscons. Message-ID: <200006142050.aa81880@walton.maths.tcd.ie>
next in thread | raw e-mail | index | archive | help
>Number: 19273
>Category: kern
>Synopsis: Syscons has no key for halting the machine.
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Jun 14 13:00:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: David Malone
>Release: FreeBSD 3.4-STABLE i386
>Organization:
School of Mathematics, Trinity College, Dublin 2, Ireland.
>Environment:
Any version of FreeBSD.
>Description:
The version of syscons in 4.X and 5.X provides a selection of keys
for triggering a reboot, a panic, break to the debugger, activate
the screen saver and suspend a machine using APM. However there is
no way to halt a machine, which is useful in these days of having
to hold the power button in for 10 seconds before the machine goes
off.
>How-To-Repeat:
N/A
>Fix:
The following patch seems to work fine and just copies the way the
control-alt-del action works. I couldn't test the pc98 bit, but it
should be simple enough not to cause any prbolems.
Index: sys/dev/kbd/kbd.c
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/sys/dev/kbd/kbd.c,v
retrieving revision 1.19
diff -u -r1.19 kbd.c
--- sys/dev/kbd/kbd.c 2000/05/26 02:03:00 1.19
+++ sys/dev/kbd/kbd.c 2000/06/14 18:30:41
@@ -1144,6 +1144,7 @@
/* NON-LOCKING KEYS */
case SPSC: case RBT: case SUSP: case STBY:
case DBG: case NEXT: case PREV: case PNC:
+ case HALT:
*accents = 0;
break;
case BTAB:
Index: sys/dev/syscons/syscons.c
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/sys/dev/syscons/syscons.c,v
retrieving revision 1.341
diff -u -r1.341 syscons.c
--- sys/dev/syscons/syscons.c 2000/05/01 10:53:12 1.341
+++ sys/dev/syscons/syscons.c 2000/06/14 18:27:44
@@ -3105,6 +3105,13 @@
#endif
break;
+ case HALT:
+#ifndef SC_DISABLE_REBOOT
+ halt_nice();
+#endif
+ break;
+
+
#if NAPM > 0
case SUSP:
apm_suspend(PMST_SUSPEND);
Index: sys/kern/kern_shutdown.c
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/sys/kern/kern_shutdown.c,v
retrieving revision 1.74
diff -u -r1.74 kern_shutdown.c
--- sys/kern/kern_shutdown.c 2000/05/05 09:58:21 1.74
+++ sys/kern/kern_shutdown.c 2000/06/14 18:25:35
@@ -162,6 +162,18 @@
}
return;
}
+void
+halt_nice()
+{
+ /* Send a signal to init(8) and have it shutdown the world */
+ if (initproc != NULL) {
+ psignal(initproc, SIGUSR1);
+ } else {
+ /* No init(8) running, so simply reboot */
+ boot(RB_NOSYNC|RB_HALT);
+ }
+ return;
+}
static int waittime = -1;
static struct pcb dumppcb;
Index: sys/pc98/pc98/syscons.c
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/sys/pc98/pc98/syscons.c,v
retrieving revision 1.146
diff -u -r1.146 syscons.c
--- sys/pc98/pc98/syscons.c 2000/04/27 13:34:29 1.146
+++ sys/pc98/pc98/syscons.c 2000/06/14 18:31:25
@@ -3124,6 +3124,12 @@
#endif
break;
+ case HALT:
+#ifndef SC_DISABLE_REBOOT
+ halt_nice();
+#endif
+ break;
+
#if NAPM > 0
case SUSP:
apm_suspend(PMST_SUSPEND);
Index: sys/sys/kbio.h
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/sys/sys/kbio.h,v
retrieving revision 1.5
diff -u -r1.5 kbio.h
--- sys/sys/kbio.h 1999/12/29 04:24:43 1.5
+++ sys/sys/kbio.h 2000/06/14 18:26:40
@@ -171,6 +171,7 @@
#define RCTRA 0x9e /* right ctrl key / alt lock */
#define LALTA 0x9f /* left alt key / alt lock */
#define RALTA 0xa0 /* right alt key / alt lock */
+#define HALT 0xa1 /* halt machine */
#define F(x) ((x)+F_FN-1)
#define S(x) ((x)+F_SCR-1)
Index: sys/sys/systm.h
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/sys/sys/systm.h,v
retrieving revision 1.116
diff -u -r1.116 systm.h
--- sys/sys/systm.h 2000/06/05 18:30:55 1.116
+++ sys/sys/systm.h 2000/06/14 18:37:07
@@ -185,6 +185,7 @@
/* Finalize the world. */
void shutdown_nice __P((void));
+void halt_nice __P((void));
/*
* Kernel to clock driver interface.
Index: usr.sbin/kbdcontrol/kbdcontrol.c
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/usr.sbin/kbdcontrol/kbdcontrol.c,v
retrieving revision 1.30
diff -u -r1.30 kbdcontrol.c
--- usr.sbin/kbdcontrol/kbdcontrol.c 1999/12/10 04:24:26 1.30
+++ usr.sbin/kbdcontrol/kbdcontrol.c 2000/06/14 18:34:34
@@ -197,6 +197,8 @@
return LALTA | 0x100;
case TRALTA:
return RALTA | 0x100;
+ case THALT:
+ return HALT | 0x100;
case TACC:
if (ACC(number) > L_ACC)
return -1;
@@ -428,6 +430,9 @@
case RALTA | 0x100:
fprintf(fp, " ralta ");
break;
+ case HALT | 0x100:
+ fprintf(fp, " halt ");
+ break;
default:
if (value & 0x100) {
if (val >= F_FN && val <= L_FN)
@@ -620,6 +625,9 @@
break;
case RALTA:
printf("RALTA, ");
+ break;
+ case HALT:
+ printf(" HALT, ");
break;
default:
if (value >= F_FN && value <= L_FN)
Index: usr.sbin/kbdcontrol/lex.h
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/usr.sbin/kbdcontrol/lex.h,v
retrieving revision 1.9
diff -u -r1.9 lex.h
--- usr.sbin/kbdcontrol/lex.h 1999/12/10 04:24:27 1.9
+++ usr.sbin/kbdcontrol/lex.h 2000/06/14 18:33:02
@@ -61,6 +61,7 @@
#define TRCTRA 286
#define TLALTA 287
#define TRALTA 288
+#define THALT 289
extern int number;
extern char letter;
Index: usr.sbin/kbdcontrol/lex.l
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/usr.sbin/kbdcontrol/lex.l,v
retrieving revision 1.11
diff -u -r1.11 lex.l
--- usr.sbin/kbdcontrol/lex.l 1999/12/10 04:24:27 1.11
+++ usr.sbin/kbdcontrol/lex.l 2000/06/14 18:32:39
@@ -68,6 +68,7 @@
rctrla { return TRCTRA; }
lalta|alta { return TLALTA; }
ralta { return TRALTA; }
+halt { return THALT; }
NUL|nul { number = 0; return TNUM; }
SOH|soh { number = 1; return TNUM; }
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200006142050.aa81880>
