FreeBSD QandA 515

FreeBSD QandA

Q. ThinkPad 535 で Fn+* のキーが刻印通りに使うことができません。
   PC DOS J7/V などを使っているときはちゃんと動作しています。

A. ThinkPad 535の場合、起動時に sc0 のデバイスで キーボードをリセット
   しているのが原因だと思われます。リセットをしない様に修正すると Fn+* が
   刻印通りに使える様になるという報告があります。

   なお、Fn+F3 でサスペンドする様にするには apm に対してパッチ修正する必
   要があります。

   FreeBSD 2.2.5-RELEASE 以降を使っているときは以下の例の様に sc0 デバイ
   スに flags 0x20 を追加します。

   # syscons is the default console driver, resembling an SCO console
   device sc0 at isa? port "IO_KBD" tty irq 1 flags 0x20 vector scintr


   FreeBSD 2.2.2-RELEASE やそれ以前の場合このフラグが定義されていませんか
   ら、/sys/i386/isa/syscons.c を修正 (以下のパッチを当てる) してから sc0 
   デバイスに flags 0x20 を追加します。

   以下のパッチは 2.2.2-RELEASE に 2.2.5-RELEASE の該当する部分をマージし
   たものです。


   --- /sys/i386/isa/syscons.c.orig	Fri Jan 16 10:01:30 1998
   +++ /sys/i386/isa/syscons.c	Fri Jan 16 10:00:25 1998
   @@ -369,6 +369,19 @@
             printf("sc%d: keyboard scancode set %d\n", dev->id_unit, codeset);
    #endif /* DETECT_XT_KEYBOARD */
  
   +    if ( dev->id_flags & NORESET_KBD ) {
   +      write_kbd_command(sc_kbdc, KBDC_ECHO);
   +      printf ("sc%d: Noreset for keyboard.\n", dev->id_unit );
   +
   +      if (read_kbd_data(sc_kbdc) != KBDC_ECHO) {
   +	empty_both_buffers(sc_kbdc, 10 );
   +	test_controller(sc_kbdc);
   +	test_kbd_port(sc_kbdc);
   +	if (bootverbose)
   +	  printf("sc%d: failed to get response from the keyboard.\n", dev->id_unit);
   +	goto fail;
   +      }
   +    } else {
         /* reset keyboard hardware */
         if (!reset_kbd(sc_kbdc)) {
            /* KEYBOARD ERROR
   @@ -390,6 +403,7 @@
    	   printf("sc%d: failed to reset the keyboard.\n", dev->id_unit);
    	goto fail;
        }
   +   }
 
        /*
         * Allow us to set the XT_KEYBD flag in UserConfig so that keyboards
   --- /sys/i386/isa/syscons.h.orig	Wed Jan 14 17:20:21 1998
   +++ /sys/i386/isa/syscons.h	Fri Jan 16 09:52:57 1998
   @@ -71,6 +71,7 @@
    #define CHAR_CURSOR	0x00004
    #define DETECT_KBD	0x00008
    #define XT_KEYBD	0x00010
   +#define NORESET_KBD	0x00020
 
    /* attribute flags */
    #define NORMAL_ATTR             0x00

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。