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