2  * All the USB notify logic
 
   4  * (C) Copyright 2005 Greg Kroah-Hartman <gregkh@suse.de>
 
   6  * notifier functions originally based on those in kernel/sys.c
 
   7  * but fixed up to not be so broken.
 
  12 #include <linux/kernel.h>
 
  13 #include <linux/notifier.h>
 
  14 #include <linux/usb.h>
 
  15 #include <linux/mutex.h>
 
  18 static BLOCKING_NOTIFIER_HEAD(usb_notifier_list);
 
  21  * usb_register_notify - register a notifier callback whenever a usb change happens
 
  22  * @nb: pointer to the notifier block for the callback events.
 
  24  * These changes are either USB devices or busses being added or removed.
 
  26 void usb_register_notify(struct notifier_block *nb)
 
  28         blocking_notifier_chain_register(&usb_notifier_list, nb);
 
  30 EXPORT_SYMBOL_GPL(usb_register_notify);
 
  33  * usb_unregister_notify - unregister a notifier callback
 
  34  * @nb: pointer to the notifier block for the callback events.
 
  36  * usb_register_notify() must have been previously called for this function
 
  39 void usb_unregister_notify(struct notifier_block *nb)
 
  41         blocking_notifier_chain_unregister(&usb_notifier_list, nb);
 
  43 EXPORT_SYMBOL_GPL(usb_unregister_notify);
 
  46 void usb_notify_add_device(struct usb_device *udev)
 
  48         blocking_notifier_call_chain(&usb_notifier_list, USB_DEVICE_ADD, udev);
 
  51 void usb_notify_remove_device(struct usb_device *udev)
 
  53         /* Protect against simultaneous usbfs open */
 
  54         mutex_lock(&usbfs_mutex);
 
  55         blocking_notifier_call_chain(&usb_notifier_list,
 
  56                         USB_DEVICE_REMOVE, udev);
 
  57         mutex_unlock(&usbfs_mutex);
 
  60 void usb_notify_add_bus(struct usb_bus *ubus)
 
  62         blocking_notifier_call_chain(&usb_notifier_list, USB_BUS_ADD, ubus);
 
  65 void usb_notify_remove_bus(struct usb_bus *ubus)
 
  67         blocking_notifier_call_chain(&usb_notifier_list, USB_BUS_REMOVE, ubus);