]> Zhao Yanbai Git Server - minix.git/commitdiff
Separated one-time keyboard initialization from per-console keyboard
authorBen Gras <ben@minix3.org>
Wed, 24 Aug 2005 08:15:23 +0000 (08:15 +0000)
committerBen Gras <ben@minix3.org>
Wed, 24 Aug 2005 08:15:23 +0000 (08:15 +0000)
initialization. One-time init is called from tty.

Side effect is that the one-time init is done after the sys_getmachine()
call, which makes set_leds() work, which makes numlock go off at booting.

drivers/tty/keyboard.c
drivers/tty/tty.c
drivers/tty/tty.h

index 355341213bb6be49b7ec1a4f142af04487be323d..ef96398644949acec31be0725606f7a9c1f2e649 100644 (file)
@@ -375,16 +375,20 @@ PUBLIC void kb_init(tp)
 tty_t *tp;
 {
 /* Initialize the keyboard driver. */
-  static int count = 0;
-  int i;
 
   tp->tty_devread = kb_read;   /* input function */
+}
+
+/*===========================================================================*
+ *                             kb_init_once                                         *
+ *===========================================================================*/
+PUBLIC void kb_init_once(void)
+{
+  int i;
+
   set_leds();                  /* turn off numlock led */
   scan_keyboard();             /* discard leftover keystroke */
 
-  /* The following initialization should only run once. */
-  if (! count ++) {
-
       /* Clear the function key observers array. Also see func_key(). */
       for (i=0; i<12; i++) {
           fkey_obs[i].proc_nr = NONE;  /* F1-F12 observers */
@@ -400,7 +404,6 @@ tty_t *tp;
       if ((i=sys_irqenable(&irq_hook_id)) != OK)
           panic("TTY", "Couldn't enable keyboard IRQs", i);
       kbd_irq_set |= (1 << KEYBOARD_IRQ);
-  }
 }
 
 /*===========================================================================*
index b44a7b8062c73331aab80f15d10666fb9f09d0be..6d1a0a0a67fdd1c3ebddd62fbffa602a8d494b94 100644 (file)
@@ -168,13 +168,16 @@ PUBLIC void main(void)
   /* Initialize the TTY driver. */
   tty_init();
 
-  printf("\n");
-
   /* Get kernel environment (protected_mode, pc_at and ega are needed). */ 
   if (OK != (s=sys_getmachine(&machine))) {
     panic("TTY","Couldn't obtain kernel environment.", s);
   }
 
+  /* Final one-time keyboard initialization. */
+  kb_init_once();
+
+  printf("\n");
+
   while (TRUE) {
 
        /* Check for and handle any events on any of the ttys. */
index 6a2048b17c03dcebb20478335632bd0cc762ea99..010a200d1742991b1d9e3eb5719f36581597c2e4 100644 (file)
@@ -156,6 +156,7 @@ _PROTOTYPE( void select_console, (int cons_line)                    );
 
 /* keyboard.c */
 _PROTOTYPE( void kb_init, (struct tty *tp)                             );
+_PROTOTYPE( void kb_init_once, (void)                                  );
 _PROTOTYPE( int kbd_loadmap, (message *m)                              );
 _PROTOTYPE( void do_panic_dumps, (message *m)                          );
 _PROTOTYPE( void do_fkey_ctl, (message *m)                             );