Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Mar 1997 15:57:30 +0900
From:      Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
To:        Ian Kallen <spidaman@well.com>
Cc:        freebsd-mobile@freebsd.org, freebsd-hackers@freebsd.org, yokota@zodiac.mech.utsunomiya-u.ac.jp
Subject:   Re: (Dell Latitude) psm0/sc0 conflicts killing X? 
Message-ID:  <199703280657.PAA29688@zodiac.mech.utsunomiya-u.ac.jp>
In-Reply-To: Your message of "Thu, 27 Mar 1997 21:14:55 PST." <Pine.GSO.3.93.970327210748.20706A-100000@well.com> 
References:  <Pine.GSO.3.93.970327210748.20706A-100000@well.com> 

next in thread | previous in thread | raw e-mail | index | archive | help

>Yes, I got almost the exact same messages, including 
>     sc0: kbdc is LOCKED!! (scintr)

Now, may I assume you got the messages in the following order, the
return code was "fa" ("zz" in the fifth line) and the keyboard did NOT
freeze?

    sc0: enabling tty intr. (set_keyboard)
    sc0: about to send command and data (set_keyboard)
    sc0: kbdc is LOCKED!! (scintr)
    sc0: kbdc is LOCKED!! (scintr)
    sc0: command:xx data:yy ret:zz (set_keybard)
                                ~~
    sc0: kbdc is LOCKED!! (scintr)

>well, if you have a fix, I'd be happy to test it for you :)  Shall I
>revert to the original syscons.c or will patching it with the debugging
>stuff be OK?

Please revert to the original syscons.c and apply the following patch.
It is known to work, that is, kbdcontrol can change key repeat rate
and the X server doesn't lock up the keyboard. 

This patch doesn't generate debug messages, so it will be more
suitable for daily use than the previous one.

Kazu

--- syscons.c-dist	Mon Mar  3 10:09:00 1997
+++ syscons.c	Mon Mar 17 08:02:35 1997
@@ -3110,11 +3111,12 @@
 
     /* disable the keyboard and mouse interrupt */
     s = spltty();
+#if 0
     c = get_controller_command_byte(sc_kbdc);
     if ((c == -1) 
 	|| !set_controller_command_byte(sc_kbdc, 
             kbdc_get_device_mask(sc_kbdc),
-            KBD_ENABLE_KBD_PORT | KBD_DISABLE_KBD_INT
+            KBD_DISABLE_KBD_PORT | KBD_DISABLE_KBD_INT
                 | KBD_DISABLE_AUX_PORT | KBD_DISABLE_AUX_INT)) {
 	/* CONTROLLER ERROR */
         kbdc_lock(sc_kbdc, FALSE);
@@ -3129,15 +3131,21 @@
      * by the lock flag set via `kbdc_lock()'
      */
     splx(s);
+#endif
 
-    send_kbd_command_and_data(sc_kbdc, command, data);
+    if (send_kbd_command_and_data(sc_kbdc, command, data) != KBD_ACK)
+        send_kbd_command(sc_kbdc, KBDC_ENABLE_KBD);
 
+#if 0
     /* restore the interrupts */
     if (!set_controller_command_byte(sc_kbdc,
             kbdc_get_device_mask(sc_kbdc),
 	    c & (KBD_KBD_CONTROL_BITS | KBD_AUX_CONTROL_BITS))) { 
 	/* CONTROLLER ERROR */
     }
+#else
+    splx(s);
+#endif
     kbdc_lock(sc_kbdc, FALSE);
 }
 







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