Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Nov 1996 09:19:43 -0700 (MST)
From:      Nate Williams <nate@mt.sri.com>
To:        Ron Bolin <rlb@mindspring.com>
Cc:        freebsd-current@freebsd.org
Subject:   Re: New Syscons.c still gives PS/2 Mouse problems. Suggestions?
Message-ID:  <199611141619.JAA05621@rocky.mt.sri.com>
In-Reply-To: <328A9413.794BDF32@mindspring.com>
References:  <328A9413.794BDF32@mindspring.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Ron Bolin writes:
> I did a cvsup and got the 1.86 version of syscons.c, and am still
> experiencing the wierd PS/2 mouse behavior.
> 
> Any thoughts?

S'ren hasn't yet applied the fixes that Bruce suggested.  In the
meantime, you can back out the following 'fix' which seems to be causing
the problem.


Nate

---------------
Index: syscons.c
===================================================================
RCS file: /home/CVS/src/sys/i386/isa/syscons.c,v
retrieving revision 1.182
retrieving revision 1.183
diff -c -r1.182 -r1.183
*** syscons.c	1996/10/26 20:16:58	1.182
--- syscons.c	1996/11/04 21:01:08	1.183
***************
*** 25,31 ****
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
!  *  $Id: syscons.c,v 1.182 1996/10/26 20:16:58 sos Exp $
   */
  
  #include "sc.h"
--- 25,31 ----
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
!  *  $Id: syscons.c,v 1.183 1996/11/04 21:01:08 sos Exp $
   */
  
  #include "sc.h"
***************
*** 572,606 ****
  	mark_all(cur_console);
      }
  
!     c = scgetc(SCGETC_NONBLOCK);
  
!     cur_tty = VIRTUAL_TTY(get_scr_num());
!     if (!(cur_tty->t_state & TS_ISOPEN))
! 	if (!((cur_tty = CONSOLE_TTY)->t_state & TS_ISOPEN))
! 	    return;
  
!     switch (c & 0xff00) {
!     case 0x0000: /* normal key */
! 	(*linesw[cur_tty->t_line].l_rint)(c & 0xFF, cur_tty);
  	break;
!     case NOKEY: /* nothing there */
! 	return;
!     case FKEY:  /* function key, return string */
! 	if (cp = get_fstr((u_int)c, (u_int *)&len)) {
! 	    while (len-- >  0)
! 		(*linesw[cur_tty->t_line].l_rint)(*cp++ & 0xFF, cur_tty);
  	}
- 	break;
-     case MKEY:  /* meta is active, prepend ESC */
- 	(*linesw[cur_tty->t_line].l_rint)(0x1b, cur_tty);
- 	(*linesw[cur_tty->t_line].l_rint)(c & 0xFF, cur_tty);
- 	break;
-     case BKEY:  /* backtab fixed sequence (esc [ Z) */
- 	(*linesw[cur_tty->t_line].l_rint)(0x1b, cur_tty);
- 	(*linesw[cur_tty->t_line].l_rint)('[', cur_tty);
- 	(*linesw[cur_tty->t_line].l_rint)('Z', cur_tty);
- 	break;
      }
      if (cur_console->status & MOUSE_ENABLED) {
  	cur_console->status &= ~MOUSE_VISIBLE;
  	remove_mouse_image(cur_console);
--- 572,611 ----
  	mark_all(cur_console);
      }
  
!     /* 
!      * Loop while there is still input to get from the keyboard.
!      * I don't think this is nessesary, and it doesn't fix
!      * the Xaccel-2.1 keyboard hang, but it can't hurt.		XXX
!      */
!     while ((c = scgetc(SCGETC_NONBLOCK)) != NOKEY) {
  
! 	cur_tty = VIRTUAL_TTY(get_scr_num());
! 	if (!(cur_tty->t_state & TS_ISOPEN))
! 	    if (!((cur_tty = CONSOLE_TTY)->t_state & TS_ISOPEN))
! 		return;
  
! 	switch (c & 0xff00) {
! 	case 0x0000: /* normal key */
! 	    (*linesw[cur_tty->t_line].l_rint)(c & 0xFF, cur_tty);
! 	    break;
! 	case FKEY:  /* function key, return string */
! 	    if (cp = get_fstr((u_int)c, (u_int *)&len)) {
! 	    	while (len-- >  0)
! 		    (*linesw[cur_tty->t_line].l_rint)(*cp++ & 0xFF, cur_tty);
! 	    }
  	break;
! 	case MKEY:  /* meta is active, prepend ESC */
! 	    (*linesw[cur_tty->t_line].l_rint)(0x1b, cur_tty);
! 	    (*linesw[cur_tty->t_line].l_rint)(c & 0xFF, cur_tty);
! 	    break;
! 	case BKEY:  /* backtab fixed sequence (esc [ Z) */
! 	    (*linesw[cur_tty->t_line].l_rint)(0x1b, cur_tty);
! 	    (*linesw[cur_tty->t_line].l_rint)('[', cur_tty);
! 	    (*linesw[cur_tty->t_line].l_rint)('Z', cur_tty);
! 	    break;
  	}
      }
+ 
      if (cur_console->status & MOUSE_ENABLED) {
  	cur_console->status &= ~MOUSE_VISIBLE;
  	remove_mouse_image(cur_console);
***************
*** 1442,1447 ****
--- 1447,1462 ----
      scr_stat *scp = cur_console;
      int s = spltty();
  
+     /* 
+      * With release 2.1 of the Xaccel server, the keyboard is left
+      * hanging pretty often. Apparently the interrupt from the
+      * keyboard is lost, and I don't know why (yet).
+      * This Ugly hack calls scintr if input is ready and
+      * conveniently hides the problem.			XXX
+      */
+     if (inb(KB_STAT) & KB_BUF_FULL)
+ 	scintr(0);
+ 
      /* should we just return ? */
      if ((scp->status&UNKNOWN_MODE) || blink_in_progress || switch_in_progress) {
  	timeout((timeout_func_t)scrn_timer, 0, hz/10);
***************
*** 2462,2471 ****
      static u_int chr = 0;
  
  next_code:
!     kbd_wait();
!     /* first see if there is something in the keyboard port */
!     if (inb(KB_STAT) & KB_BUF_FULL)
  	scancode = inb(KB_DATA);
      else if (flags & SCGETC_NONBLOCK)
  	return(NOKEY);
      else
--- 2477,2487 ----
      static u_int chr = 0;
  
  next_code:
!     /* check if there is anything in the keyboard buffer */
!     if (inb(KB_STAT) & KB_BUF_FULL) {
! 	DELAY(25);
  	scancode = inb(KB_DATA);
+     }
      else if (flags & SCGETC_NONBLOCK)
  	return(NOKEY);
      else
***************
*** 2830,2836 ****
  		    console[0]->smode.mode == VT_AUTO)
  		    switch_scr(cur_console, 0);
  		Debugger("manual escape to debugger");
- 		return(NOKEY);
  #else
  		printf("No debugger in kernel\n");
  #endif
--- 2846,2851 ----



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