Author: kevans
Date: Mon Dec 16 16:41:24 2019
New Revision: 355806
URL: https://svnweb.freebsd.org/changeset/base/355806

Log:
  kbd drivers: don't double register keyboard drivers
  
  Keyboard drivers are generally registered via linker set. In these cases,
  they're also available as kmods which use KPI for registering/unregistering
  keyboard drivers outside of the linker set.
  
  For built-in modules, we still fire off MOD_LOAD and maybe even MOD_UNLOAD
  if an error occurs, leading to registration via linker set and at MOD_LOAD
  time.
  
  This is a minor optimization at best, but it keeps the internal kbd driver
  tidy as a future change will merge the linker set driver list into its
  internal keyboard_drivers list via SYSINIT and simplify driver lookup by
  removing the need to consult the linker set.

Modified:
  head/sys/dev/adb/adb_kbd.c
  head/sys/dev/gpio/gpiokeys.c
  head/sys/dev/hyperv/input/hv_kbd.c
  head/sys/dev/kbdmux/kbdmux.c
  head/sys/dev/usb/input/ukbd.c
  head/sys/dev/vkbd/vkbd.c

Modified: head/sys/dev/adb/adb_kbd.c
==============================================================================
--- head/sys/dev/adb/adb_kbd.c  Mon Dec 16 15:41:32 2019        (r355805)
+++ head/sys/dev/adb/adb_kbd.c  Mon Dec 16 16:41:24 2019        (r355806)
@@ -850,11 +850,15 @@ akbd_modevent(module_t mod, int type, void *data)
 {
        switch (type) {
        case MOD_LOAD:
+#ifdef KLD_MODULE
                kbd_add_driver(&akbd_kbd_driver);
+#endif
                break;
 
        case MOD_UNLOAD:
+#ifdef KLD_MODULE
                kbd_delete_driver(&akbd_kbd_driver);
+#endif
                break;
 
        default:

Modified: head/sys/dev/gpio/gpiokeys.c
==============================================================================
--- head/sys/dev/gpio/gpiokeys.c        Mon Dec 16 15:41:32 2019        
(r355805)
+++ head/sys/dev/gpio/gpiokeys.c        Mon Dec 16 16:41:24 2019        
(r355806)
@@ -983,6 +983,8 @@ KEYBOARD_DRIVER(gpiokeys, gpiokeyssw, gpiokeys_configu
 static int
 gpiokeys_driver_load(module_t mod, int what, void *arg)
 {
+
+#ifdef KLD_MODULE
        switch (what) {
        case MOD_LOAD:
                kbd_add_driver(&gpiokeys_kbd_driver);
@@ -991,6 +993,7 @@ gpiokeys_driver_load(module_t mod, int what, void *arg
                kbd_delete_driver(&gpiokeys_kbd_driver);
                break;
        }
+#endif
        return (0);
 }
 

Modified: head/sys/dev/hyperv/input/hv_kbd.c
==============================================================================
--- head/sys/dev/hyperv/input/hv_kbd.c  Mon Dec 16 15:41:32 2019        
(r355805)
+++ head/sys/dev/hyperv/input/hv_kbd.c  Mon Dec 16 16:41:24 2019        
(r355806)
@@ -490,6 +490,8 @@ hv_kbd_intr(hv_kbd_sc *sc)
 int
 hvkbd_driver_load(module_t mod, int what, void *arg)
 {
+
+#ifdef KLD_MODULE
        switch (what) {
        case MOD_LOAD:
                kbd_add_driver(&hvkbd_kbd_driver);
@@ -498,6 +500,7 @@ hvkbd_driver_load(module_t mod, int what, void *arg)
                kbd_delete_driver(&hvkbd_kbd_driver);
                break;
        }
+#endif
        return (0);
 }
 

Modified: head/sys/dev/kbdmux/kbdmux.c
==============================================================================
--- head/sys/dev/kbdmux/kbdmux.c        Mon Dec 16 15:41:32 2019        
(r355805)
+++ head/sys/dev/kbdmux/kbdmux.c        Mon Dec 16 16:41:24 2019        
(r355806)
@@ -1423,11 +1423,15 @@ kbdmux_modevent(module_t mod, int type, void *data)
 
        switch (type) {
        case MOD_LOAD:
+#ifdef KLD_MODULE
                if ((error = kbd_add_driver(&kbdmux_kbd_driver)) != 0)
                        break;
+#endif
 
                if ((sw = kbd_get_switch(KEYBOARD_NAME)) == NULL) {
+#ifdef KLD_MODULE
                        kbd_delete_driver(&kbdmux_kbd_driver);
+#endif
                        error = ENXIO;
                        break;
                }
@@ -1436,14 +1440,18 @@ kbdmux_modevent(module_t mod, int type, void *data)
 
                if ((error = (*sw->probe)(0, NULL, 0)) != 0 ||
                    (error = (*sw->init)(0, &kbd, NULL, 0)) != 0) {
+#ifdef KLD_MODULE
                        kbd_delete_driver(&kbdmux_kbd_driver);
+#endif
                        break;
                }
 
 #ifdef KBD_INSTALL_CDEV
                if ((error = kbd_attach(kbd)) != 0) {
                        (*sw->term)(kbd);
+#ifdef KLD_MODULE
                        kbd_delete_driver(&kbdmux_kbd_driver);
+#endif
                        break;
                }
 #endif
@@ -1454,7 +1462,9 @@ kbdmux_modevent(module_t mod, int type, void *data)
                        kbd_detach(kbd);
 #endif
                        (*sw->term)(kbd);
+#ifdef KLD_MODULE
                        kbd_delete_driver(&kbdmux_kbd_driver);
+#endif
                        break;
                }
                break;
@@ -1470,7 +1480,9 @@ kbdmux_modevent(module_t mod, int type, void *data)
                        kbd_detach(kbd);
 #endif
                        (*sw->term)(kbd);
+#ifdef KLD_MODULE
                        kbd_delete_driver(&kbdmux_kbd_driver);
+#endif
                }
                error = 0;
                break;

Modified: head/sys/dev/usb/input/ukbd.c
==============================================================================
--- head/sys/dev/usb/input/ukbd.c       Mon Dec 16 15:41:32 2019        
(r355805)
+++ head/sys/dev/usb/input/ukbd.c       Mon Dec 16 16:41:24 2019        
(r355806)
@@ -2290,6 +2290,7 @@ KEYBOARD_DRIVER(ukbd, ukbdsw, ukbd_configure);
 static int
 ukbd_driver_load(module_t mod, int what, void *arg)
 {
+#ifdef KLD_MODULE
        switch (what) {
        case MOD_LOAD:
                kbd_add_driver(&ukbd_kbd_driver);
@@ -2298,6 +2299,7 @@ ukbd_driver_load(module_t mod, int what, void *arg)
                kbd_delete_driver(&ukbd_kbd_driver);
                break;
        }
+#endif
        return (0);
 }
 

Modified: head/sys/dev/vkbd/vkbd.c
==============================================================================
--- head/sys/dev/vkbd/vkbd.c    Mon Dec 16 15:41:32 2019        (r355805)
+++ head/sys/dev/vkbd/vkbd.c    Mon Dec 16 16:41:24 2019        (r355806)
@@ -1360,11 +1360,15 @@ vkbd_modevent(module_t mod, int type, void *data)
                        clone_cleanup(&vkbd_dev_clones);
                        return (ENOMEM);
                }
+#ifdef KLD_MODULE
                kbd_add_driver(&vkbd_kbd_driver);
+#endif
                break;
 
        case MOD_UNLOAD:
+#ifdef KLD_MODULE
                kbd_delete_driver(&vkbd_kbd_driver);
+#endif
                EVENTHANDLER_DEREGISTER(dev_clone, tag);
                clone_cleanup(&vkbd_dev_clones);
                break;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to