#ifndef _LINUX_NOTIFIER_H
#define _LINUX_NOTIFIER_H
#include <linux/errno.h>
#include <linux/mutex.h>
#include <linux/rwsem.h>
#include <linux/srcu.h>
struct notifier_block;
notifier_fn_t;
struct notifier_block { … };
struct atomic_notifier_head { … };
struct blocking_notifier_head { … };
struct raw_notifier_head { … };
struct srcu_notifier_head { … };
#define ATOMIC_INIT_NOTIFIER_HEAD(name) …
#define BLOCKING_INIT_NOTIFIER_HEAD(name) …
#define RAW_INIT_NOTIFIER_HEAD(name) …
extern void srcu_init_notifier_head(struct srcu_notifier_head *nh);
#define srcu_cleanup_notifier_head(name) …
#define ATOMIC_NOTIFIER_INIT(name) …
#define BLOCKING_NOTIFIER_INIT(name) …
#define RAW_NOTIFIER_INIT(name) …
#define SRCU_NOTIFIER_INIT(name, pcpu) …
#define ATOMIC_NOTIFIER_HEAD(name) …
#define BLOCKING_NOTIFIER_HEAD(name) …
#define RAW_NOTIFIER_HEAD(name) …
#ifdef CONFIG_TREE_SRCU
#define _SRCU_NOTIFIER_HEAD(name, mod) …
#else
#define _SRCU_NOTIFIER_HEAD …
#endif
#define SRCU_NOTIFIER_HEAD(name) …
#define SRCU_NOTIFIER_HEAD_STATIC(name) …
#ifdef __KERNEL__
extern int atomic_notifier_chain_register(struct atomic_notifier_head *nh,
struct notifier_block *nb);
extern int blocking_notifier_chain_register(struct blocking_notifier_head *nh,
struct notifier_block *nb);
extern int raw_notifier_chain_register(struct raw_notifier_head *nh,
struct notifier_block *nb);
extern int srcu_notifier_chain_register(struct srcu_notifier_head *nh,
struct notifier_block *nb);
extern int atomic_notifier_chain_register_unique_prio(
struct atomic_notifier_head *nh, struct notifier_block *nb);
extern int blocking_notifier_chain_register_unique_prio(
struct blocking_notifier_head *nh, struct notifier_block *nb);
extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh,
struct notifier_block *nb);
extern int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh,
struct notifier_block *nb);
extern int raw_notifier_chain_unregister(struct raw_notifier_head *nh,
struct notifier_block *nb);
extern int srcu_notifier_chain_unregister(struct srcu_notifier_head *nh,
struct notifier_block *nb);
extern int atomic_notifier_call_chain(struct atomic_notifier_head *nh,
unsigned long val, void *v);
extern int blocking_notifier_call_chain(struct blocking_notifier_head *nh,
unsigned long val, void *v);
extern int raw_notifier_call_chain(struct raw_notifier_head *nh,
unsigned long val, void *v);
extern int srcu_notifier_call_chain(struct srcu_notifier_head *nh,
unsigned long val, void *v);
extern int blocking_notifier_call_chain_robust(struct blocking_notifier_head *nh,
unsigned long val_up, unsigned long val_down, void *v);
extern int raw_notifier_call_chain_robust(struct raw_notifier_head *nh,
unsigned long val_up, unsigned long val_down, void *v);
extern bool atomic_notifier_call_chain_is_empty(struct atomic_notifier_head *nh);
#define NOTIFY_DONE …
#define NOTIFY_OK …
#define NOTIFY_STOP_MASK …
#define NOTIFY_BAD …
#define NOTIFY_STOP …
static inline int notifier_from_errno(int err)
{ … }
static inline int notifier_to_errno(int ret)
{ … }
#define NETLINK_URELEASE …
#define KBD_KEYCODE …
#define KBD_UNBOUND_KEYCODE …
#define KBD_UNICODE …
#define KBD_KEYSYM …
#define KBD_POST_KEYSYM …
extern struct blocking_notifier_head reboot_notifier_list;
#endif
#endif