/*
 * include/linux/platform.h - platform driver definitions
 *
 * Because of the prolific consumerism of the average American,
 * and the dominant marketing budgets of PC OEMs, we have been
 * blessed with frequent updates of the PC architecture. 
 *
 * While most of these calls are singular per architecture, they 
 * require an extra layer of abstraction on the x86 so the right
 * subsystem gets the right call. 
 *
 * Basically, this consolidates the power off and reboot callbacks 
 * into one structure, as well as adding power management hooks.
 *
 * When adding a platform driver, please make sure all callbacks are 
 * filled. There are defaults defined below that do nothing; use those
 * if you do not support that callback.
 */ 

#ifndef _PLATFORM_H_
#define _PLATFORM_H_
#ifdef __KERNEL__

#include <linux/types.h>

struct platform_t {
	char	* name;
	u32	suspend_states;
	void	(*reboot)(char * cmd);
	void	(*halt)(void);
	void	(*power_off)(void);
	int	(*suspend)(int state, int flags);
	void	(*idle)(void);
};

extern struct platform_t * platform;
extern void default_reboot(char * cmd);
extern void default_halt(void);
extern int default_suspend(int state, int flags);
extern void default_idle(void);

#endif /* __KERNEL__ */
#endif /* _PLATFORM_H */