2005-04-17 06:20:36 +08:00
|
|
|
/*
|
|
|
|
* arch/i386/mach-generic/mach_reboot.h
|
|
|
|
*
|
|
|
|
* Machine specific reboot functions for generic.
|
|
|
|
* Split out from reboot.c by Osamu Tomita <tomita@cinet.co.jp>
|
|
|
|
*/
|
|
|
|
#ifndef _MACH_REBOOT_H
|
|
|
|
#define _MACH_REBOOT_H
|
|
|
|
|
|
|
|
static inline void kb_wait(void)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < 0x10000; i++)
|
|
|
|
if ((inb_p(0x64) & 0x02) == 0)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void mach_reboot(void)
|
|
|
|
{
|
|
|
|
int i;
|
2005-11-06 00:25:54 +08:00
|
|
|
for (i = 0; i < 10; i++) {
|
2005-04-17 06:20:36 +08:00
|
|
|
kb_wait();
|
|
|
|
udelay(50);
|
2005-09-10 04:02:18 +08:00
|
|
|
outb(0x60, 0x64); /* write Controller Command Byte */
|
|
|
|
udelay(50);
|
|
|
|
kb_wait();
|
|
|
|
udelay(50);
|
|
|
|
outb(0x14, 0x60); /* set "System flag" */
|
|
|
|
udelay(50);
|
|
|
|
kb_wait();
|
|
|
|
udelay(50);
|
|
|
|
outb(0xfe, 0x64); /* pulse reset low */
|
2005-04-17 06:20:36 +08:00
|
|
|
udelay(50);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* !_MACH_REBOOT_H */
|