notify.c (1768B)
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}