linux/drivers/usb/core/notify.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * All the USB notify logic
   4 *
   5 * (C) Copyright 2005 Greg Kroah-Hartman <gregkh@suse.de>
   6 *
   7 * notifier functions originally based on those in kernel/sys.c
   8 * but fixed up to not be so broken.
   9 *
  10 * Released under the GPLv2 only.
  11 */
  12
  13
  14#include <linux/kernel.h>
  15#include <linux/export.h>
  16#include <linux/notifier.h>
  17#include <linux/usb.h>
  18#include <linux/mutex.h>
  19#include "usb.h"
  20
  21static BLOCKING_NOTIFIER_HEAD(usb_notifier_list);
  22
  23/**
  24 * usb_register_notify - register a notifier callback whenever a usb change happens
  25 * @nb: pointer to the notifier block for the callback events.
  26 *
  27 * These changes are either USB devices or busses being added or removed.
  28 */
  29void usb_register_notify(struct notifier_block *nb)
  30{
  31        blocking_notifier_chain_register(&usb_notifier_list, nb);
  32}
  33EXPORT_SYMBOL_GPL(usb_register_notify);
  34
  35/**
  36 * usb_unregister_notify - unregister a notifier callback
  37 * @nb: pointer to the notifier block for the callback events.
  38 *
  39 * usb_register_notify() must have been previously called for this function
  40 * to work properly.
  41 */
  42void usb_unregister_notify(struct notifier_block *nb)
  43{
  44        blocking_notifier_chain_unregister(&usb_notifier_list, nb);
  45}
  46EXPORT_SYMBOL_GPL(usb_unregister_notify);
  47
  48
  49void usb_notify_add_device(struct usb_device *udev)
  50{
  51        blocking_notifier_call_chain(&usb_notifier_list, USB_DEVICE_ADD, udev);
  52}
  53
  54void usb_notify_remove_device(struct usb_device *udev)
  55{
  56        blocking_notifier_call_chain(&usb_notifier_list,
  57                        USB_DEVICE_REMOVE, udev);
  58}
  59
  60void usb_notify_add_bus(struct usb_bus *ubus)
  61{
  62        blocking_notifier_call_chain(&usb_notifier_list, USB_BUS_ADD, ubus);
  63}
  64
  65void usb_notify_remove_bus(struct usb_bus *ubus)
  66{
  67        blocking_notifier_call_chain(&usb_notifier_list, USB_BUS_REMOVE, ubus);
  68}
  69