Date: Mon, 10 Jul 2000 02:50:07 -0700 (PDT) From: David Malone <dwmalone@maths.tcd.ie> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/19273: Halt key for syscons. Message-ID: <200007100950.CAA86994@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/19273; it has been noted by GNATS. From: David Malone <dwmalone@maths.tcd.ie> To: FreeBSD-gnats-submit@freebsd.org Cc: Subject: Re: kern/19273: Halt key for syscons. Date: Mon, 10 Jul 2000 10:48:05 +0100 Here is another version of the halt patch which defines a powerdown action for syscons, aswell as the halt action in the old patch. David. Index: src/sys/kern/kern_shutdown.c =================================================================== RCS file: /cvs/FreeBSD-CVS/src/sys/kern/kern_shutdown.c,v retrieving revision 1.76 diff -u -r1.76 kern_shutdown.c --- src/sys/kern/kern_shutdown.c 2000/07/04 11:25:22 1.76 +++ src/sys/kern/kern_shutdown.c 2000/07/10 07:43:56 @@ -162,6 +162,30 @@ } 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 halt */ + boot(RB_NOSYNC|RB_HALT); + } + return; +} +void +pdwn_nice() +{ + /* Send a signal to init(8) and have it shutdown the world */ + if (initproc != NULL) { + psignal(initproc, SIGUSR2); + } else { + /* No init(8) running, so simply halt and poweroff */ + boot(RB_NOSYNC|RB_HALT|RB_POWEROFF); + } + return; +} static int waittime = -1; static struct pcb dumppcb; Index: src/sys/pc98/pc98/syscons.c =================================================================== RCS file: /cvs/FreeBSD-CVS/src/sys/pc98/pc98/syscons.c,v retrieving revision 1.147 diff -u -r1.147 syscons.c --- src/sys/pc98/pc98/syscons.c 2000/06/25 09:55:12 1.147 +++ src/sys/pc98/pc98/syscons.c 2000/07/10 07:45:08 @@ -3117,6 +3117,18 @@ #endif break; + case HALT: +#ifndef SC_DISABLE_REBOOT + halt_nice(); +#endif + break; + + case PDWN: +#ifndef SC_DISABLE_REBOOT + pdwn_nice(); +#endif + break; + #if NAPM > 0 case SUSP: apm_suspend(PMST_SUSPEND); Index: src/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 --- src/sys/sys/kbio.h 1999/12/29 04:24:43 1.5 +++ src/sys/sys/kbio.h 2000/07/10 07:45:45 @@ -171,6 +171,8 @@ #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 PDWN 0xa2 /* halt machine and power down */ #define F(x) ((x)+F_FN-1) #define S(x) ((x)+F_SCR-1) Index: src/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 --- src/sys/sys/systm.h 2000/06/05 18:30:55 1.116 +++ src/sys/sys/systm.h 2000/07/10 07:46:17 @@ -185,6 +185,8 @@ /* Finalize the world. */ void shutdown_nice __P((void)); +void halt_nice __P((void)); +void pdwn_nice __P((void)); /* * Kernel to clock driver interface. Index: src/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 --- src/usr.sbin/kbdcontrol/kbdcontrol.c 1999/12/10 04:24:26 1.30 +++ src/usr.sbin/kbdcontrol/kbdcontrol.c 2000/07/10 07:47:56 @@ -197,6 +197,10 @@ return LALTA | 0x100; case TRALTA: return RALTA | 0x100; + case THALT: + return HALT | 0x100; + case TPDWN: + return PDWN | 0x100; case TACC: if (ACC(number) > L_ACC) return -1; @@ -428,6 +432,12 @@ case RALTA | 0x100: fprintf(fp, " ralta "); break; + case HALT | 0x100: + fprintf(fp, " halt "); + break; + case PDWN | 0x100: + fprintf(fp, " pdwn "); + break; default: if (value & 0x100) { if (val >= F_FN && val <= L_FN) @@ -620,6 +630,12 @@ break; case RALTA: printf("RALTA, "); + break; + case HALT: + printf(" HALT, "); + break; + case PDWN: + printf(" PDWN, "); break; default: if (value >= F_FN && value <= L_FN) Index: src/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 --- src/usr.sbin/kbdcontrol/lex.h 1999/12/10 04:24:27 1.9 +++ src/usr.sbin/kbdcontrol/lex.h 2000/07/10 07:48:39 @@ -61,6 +61,8 @@ #define TRCTRA 286 #define TLALTA 287 #define TRALTA 288 +#define THALT 289 +#define TPDWN 290 extern int number; extern char letter; Index: src/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 --- src/usr.sbin/kbdcontrol/lex.l 1999/12/10 04:24:27 1.11 +++ src/usr.sbin/kbdcontrol/lex.l 2000/07/10 07:49:01 @@ -68,6 +68,8 @@ rctrla { return TRCTRA; } lalta|alta { return TLALTA; } ralta { return TRALTA; } +halt { return THALT; } +pdwn { return TPDWN; } NUL|nul { number = 0; return TNUM; } SOH|soh { number = 1; return TNUM; } Index: src/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 --- src/sys/dev/kbd/kbd.c 2000/05/26 02:03:00 1.19 +++ src/sys/dev/kbd/kbd.c 2000/07/10 07:39:23 @@ -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: case PDWN: *accents = 0; break; case BTAB: Index: src/sys/dev/syscons/syscons.c =================================================================== RCS file: /cvs/FreeBSD-CVS/src/sys/dev/syscons/syscons.c,v retrieving revision 1.342 diff -u -r1.342 syscons.c --- src/sys/dev/syscons/syscons.c 2000/06/25 09:55:07 1.342 +++ src/sys/dev/syscons/syscons.c 2000/07/10 07:40:23 @@ -3098,6 +3098,19 @@ #endif break; + case HALT: +#ifndef SC_DISABLE_REBOOT + halt_nice(); +#endif + break; + + case PDWN: +#ifndef SC_DISABLE_REBOOT + pdwn_nice(); +#endif + break; + + #if NAPM > 0 case SUSP: apm_suspend(PMST_SUSPEND); 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?200007100950.CAA86994>