cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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}