Skip site navigation (1)Skip section navigation (2)
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>