forked from mirrors/linux
		
	 d8a33ac435
			
		
	
	
		d8a33ac435
		
	
	
	
	
		
			
			Resend of earlier patch (no changes) from Catalin used to provide device feature change notification. Signed-off-by: Catalin BOIE <catab at umbrella.ro> Acked-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *	Routines to manage notifier chains for passing status changes to any
 | |
|  *	interested routines. We need this instead of hard coded call lists so
 | |
|  *	that modules can poke their nose into the innards. The network devices
 | |
|  *	needed them so here they are for the rest of you.
 | |
|  *
 | |
|  *				Alan Cox <Alan.Cox@linux.org>
 | |
|  */
 | |
|  
 | |
| #ifndef _LINUX_NOTIFIER_H
 | |
| #define _LINUX_NOTIFIER_H
 | |
| #include <linux/errno.h>
 | |
| 
 | |
| struct notifier_block
 | |
| {
 | |
| 	int (*notifier_call)(struct notifier_block *self, unsigned long, void *);
 | |
| 	struct notifier_block *next;
 | |
| 	int priority;
 | |
| };
 | |
| 
 | |
| 
 | |
| #ifdef __KERNEL__
 | |
| 
 | |
| extern int notifier_chain_register(struct notifier_block **list, struct notifier_block *n);
 | |
| extern int notifier_chain_unregister(struct notifier_block **nl, struct notifier_block *n);
 | |
| extern int notifier_call_chain(struct notifier_block **n, unsigned long val, void *v);
 | |
| 
 | |
| #define NOTIFY_DONE		0x0000		/* Don't care */
 | |
| #define NOTIFY_OK		0x0001		/* Suits me */
 | |
| #define NOTIFY_STOP_MASK	0x8000		/* Don't call further */
 | |
| #define NOTIFY_BAD		(NOTIFY_STOP_MASK|0x0002)	/* Bad/Veto action	*/
 | |
| /*
 | |
|  * Clean way to return from the notifier and stop further calls.
 | |
|  */
 | |
| #define NOTIFY_STOP		(NOTIFY_OK|NOTIFY_STOP_MASK)
 | |
| 
 | |
| /*
 | |
|  *	Declared notifiers so far. I can imagine quite a few more chains
 | |
|  *	over time (eg laptop power reset chains, reboot chain (to clean 
 | |
|  *	device units up), device [un]mount chain, module load/unload chain,
 | |
|  *	low memory chain, screenblank chain (for plug in modular screenblankers) 
 | |
|  *	VC switch chains (for loadable kernel svgalib VC switch helpers) etc...
 | |
|  */
 | |
|  
 | |
| /* netdevice notifier chain */
 | |
| #define NETDEV_UP	0x0001	/* For now you can't veto a device up/down */
 | |
| #define NETDEV_DOWN	0x0002
 | |
| #define NETDEV_REBOOT	0x0003	/* Tell a protocol stack a network interface
 | |
| 				   detected a hardware crash and restarted
 | |
| 				   - we can use this eg to kick tcp sessions
 | |
| 				   once done */
 | |
| #define NETDEV_CHANGE	0x0004	/* Notify device state change */
 | |
| #define NETDEV_REGISTER 0x0005
 | |
| #define NETDEV_UNREGISTER	0x0006
 | |
| #define NETDEV_CHANGEMTU	0x0007
 | |
| #define NETDEV_CHANGEADDR	0x0008
 | |
| #define NETDEV_GOING_DOWN	0x0009
 | |
| #define NETDEV_CHANGENAME	0x000A
 | |
| #define NETDEV_FEAT_CHANGE	0x000B
 | |
| 
 | |
| #define SYS_DOWN	0x0001	/* Notify of system down */
 | |
| #define SYS_RESTART	SYS_DOWN
 | |
| #define SYS_HALT	0x0002	/* Notify of system halt */
 | |
| #define SYS_POWER_OFF	0x0003	/* Notify of system power off */
 | |
| 
 | |
| #define NETLINK_URELEASE	0x0001	/* Unicast netlink socket released */
 | |
| 
 | |
| #define CPU_ONLINE		0x0002 /* CPU (unsigned)v is up */
 | |
| #define CPU_UP_PREPARE		0x0003 /* CPU (unsigned)v coming up */
 | |
| #define CPU_UP_CANCELED		0x0004 /* CPU (unsigned)v NOT coming up */
 | |
| #define CPU_DOWN_PREPARE	0x0005 /* CPU (unsigned)v going down */
 | |
| #define CPU_DOWN_FAILED		0x0006 /* CPU (unsigned)v NOT going down */
 | |
| #define CPU_DEAD		0x0007 /* CPU (unsigned)v dead */
 | |
| 
 | |
| #endif /* __KERNEL__ */
 | |
| #endif /* _LINUX_NOTIFIER_H */
 |