Commit 37380aa7 authored by Alan Cox's avatar Alan Cox Committed by Linus Torvalds

[PATCH] abstract out mach_reboot for x86 platforms

parent 05f534c9
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/mc146818rtc.h> #include <linux/mc146818rtc.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "mach_reboot.h"
/* /*
* Power off function, if any * Power off function, if any
...@@ -125,15 +126,6 @@ static unsigned char jump_to_bios [] = ...@@ -125,15 +126,6 @@ static unsigned char jump_to_bios [] =
0xea, 0x00, 0x00, 0xff, 0xff /* ljmp $0xffff,$0x0000 */ 0xea, 0x00, 0x00, 0xff, 0xff /* ljmp $0xffff,$0x0000 */
}; };
static inline void kb_wait(void)
{
int i;
for (i=0; i<0x10000; i++)
if ((inb_p(0x64) & 0x02) == 0)
break;
}
/* /*
* Switch to real mode and then execute the code * Switch to real mode and then execute the code
* specified by the code and length parameters. * specified by the code and length parameters.
...@@ -264,13 +256,7 @@ void machine_restart(char * __unused) ...@@ -264,13 +256,7 @@ void machine_restart(char * __unused)
/* rebooting needs to touch the page at absolute addr 0 */ /* rebooting needs to touch the page at absolute addr 0 */
*((unsigned short *)__va(0x472)) = reboot_mode; *((unsigned short *)__va(0x472)) = reboot_mode;
for (;;) { for (;;) {
int i; mach_reboot();
for (i=0; i<100; i++) {
kb_wait();
udelay(50);
outb(0xfe,0x64); /* pulse reset low */
udelay(50);
}
/* That didn't work - force a triple fault.. */ /* That didn't work - force a triple fault.. */
__asm__ __volatile__("lidt %0": :"m" (no_idt)); __asm__ __volatile__("lidt %0": :"m" (no_idt));
__asm__ __volatile__("int3"); __asm__ __volatile__("int3");
......
/*
* 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;
for (i = 0; i < 100; i++) {
kb_wait();
udelay(50);
outb(0xfe, 0x64); /* pulse reset low */
udelay(50);
}
}
#endif /* !_MACH_REBOOT_H */
/*
* arch/i386/mach-pc9800/mach_reboot.h
*
* Machine specific reboot functions for PC-9800.
* Written by Osamu Tomita <tomita@cinet.co.jp>
*/
#ifndef _MACH_REBOOT_H
#define _MACH_REBOOT_H
#ifdef CMOS_WRITE
#undef CMOS_WRITE
#define CMOS_WRITE(a,b) do{}while(0)
#endif
static inline void mach_reboot(void)
{
outb(0, 0xf0); /* signal CPU reset */
mdelay(1);
}
#endif /* !_MACH_REBOOT_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment