#ifndef __NOTIFIER_H
#define __NOTIFIER_H

/*
 * Notifer chains loosely based on the according Linux framework
 */

struct notifier_block {
	int (*notifier_call)(struct notifier_block *, unsigned long, void *);
	struct list_head list;
};

struct notifier_head {
	struct list_head blocks;
};

int notifier_chain_register(struct notifier_head *nh, struct notifier_block *n);
int notifier_chain_unregister(struct notifier_head *nh, struct notifier_block *n);

int notifier_call_chain(struct notifier_head *nh, unsigned long val, void *v);

/*
 * Register a function which is called upon changes of
 * clock frequencies in the system.
 */
int clock_register_client(struct notifier_block *nb);
int clock_unregister_client(struct notifier_block *nb);
int clock_notifier_call_chain(void);

#define NOTIFIER_HEAD(name)					\
	struct notifier_head name = {				\
		.blocks = LIST_HEAD_INIT((name).blocks),	\
	};

#endif /* __NOTIFIER_H */

