Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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; |
Truxton Fulton | 8b93789 | 2007-07-21 17:10:38 +0200 | [diff] [blame] | 22 | |
| 23 | /* old method, works on most machines */ |
Andi Kleen | a6f5deb | 2005-11-05 17:25:54 +0100 | [diff] [blame] | 24 | for (i = 0; i < 10; i++) { |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 25 | kb_wait(); |
| 26 | udelay(50); |
Truxton Fulton | 8b93789 | 2007-07-21 17:10:38 +0200 | [diff] [blame] | 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); |
| 46 | kb_wait(); |
| 47 | udelay(50); |
Truxton Fulton | 59f4e7d | 2005-09-09 13:02:18 -0700 | [diff] [blame] | 48 | outb(0x60, 0x64); /* write Controller Command Byte */ |
| 49 | udelay(50); |
| 50 | kb_wait(); |
| 51 | udelay(50); |
Truxton Fulton | 05dfa35 | 2007-11-17 16:27:01 +0100 | [diff] [blame] | 52 | outb(cmd | 0x14, 0x60); /* set "System flag" and "Keyboard Disabled" */ |
Truxton Fulton | 59f4e7d | 2005-09-09 13:02:18 -0700 | [diff] [blame] | 53 | udelay(50); |
| 54 | kb_wait(); |
| 55 | udelay(50); |
| 56 | outb(0xfe, 0x64); /* pulse reset low */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 57 | udelay(50); |
| 58 | } |
| 59 | } |
| 60 | |
| 61 | #endif /* !_MACH_REBOOT_H */ |