Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * arch/i386/mach-generic/mach_reboot.h | |
3 | * | |
4 | * Machine specific reboot functions for generic. | |
5 | * Split out from reboot.c by Osamu Tomita <tomita@cinet.co.jp> | |
6 | */ | |
7 | #ifndef _MACH_REBOOT_H | |
8 | #define _MACH_REBOOT_H | |
9 | ||
10 | static inline void kb_wait(void) | |
11 | { | |
12 | int i; | |
13 | ||
14 | for (i = 0; i < 0x10000; i++) | |
15 | if ((inb_p(0x64) & 0x02) == 0) | |
16 | break; | |
17 | } | |
18 | ||
19 | static inline void mach_reboot(void) | |
20 | { | |
21 | int i; | |
8b937898 TF |
22 | |
23 | /* old method, works on most machines */ | |
a6f5deb2 | 24 | for (i = 0; i < 10; i++) { |
8b937898 TF |
25 | kb_wait(); |
26 | udelay(50); | |
27 | outb(0xfe, 0x64); /* pulse reset low */ | |
28 | udelay(50); | |
29 | } | |
30 | ||
31 | /* New method: sets the "System flag" which, when set, indicates | |
32 | * successful completion of the keyboard controller self-test (Basic | |
33 | * Assurance Test, BAT). This is needed for some machines with no | |
34 | * keyboard plugged in. This read-modify-write sequence sets only the | |
35 | * system flag | |
36 | */ | |
37 | for (i = 0; i < 10; i++) { | |
38 | int cmd; | |
39 | ||
40 | outb(0x20, 0x64); /* read Controller Command Byte */ | |
41 | udelay(50); | |
42 | kb_wait(); | |
43 | udelay(50); | |
44 | cmd = inb(0x60); | |
45 | udelay(50); | |
1da177e4 LT |
46 | kb_wait(); |
47 | udelay(50); | |
59f4e7d5 TF |
48 | outb(0x60, 0x64); /* write Controller Command Byte */ |
49 | udelay(50); | |
50 | kb_wait(); | |
51 | udelay(50); | |
8b937898 | 52 | outb(cmd | 0x04, 0x60); /* set "System flag" */ |
59f4e7d5 TF |
53 | udelay(50); |
54 | kb_wait(); | |
55 | udelay(50); | |
56 | outb(0xfe, 0x64); /* pulse reset low */ | |
1da177e4 LT |
57 | udelay(50); |
58 | } | |
59 | } | |
60 | ||
61 | #endif /* !_MACH_REBOOT_H */ |