1 /* 2 * Reset a Jazz machine. 3 * 4 * We don't trust the firmware so we do it the classic way by poking and 5 * stabbing at the keyboard controller ... 6 */ 7 #include <linux/jiffies.h> 8 #include <asm/jazz.h> 9 #include <asm/io.h> 10 #include <asm/system.h> 11 #include <asm/reboot.h> 12 #include <asm/delay.h> 13 14 #define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */ 15 16 static void jazz_write_output(unsigned char val) 17 { 18 int status; 19 20 do { 21 status = jazz_kh->command; 22 } while (status & KBD_STAT_IBF); 23 jazz_kh->data = val; 24 } 25 26 static void jazz_write_command(unsigned char val) 27 { 28 int status; 29 30 do { 31 status = jazz_kh->command; 32 } while (status & KBD_STAT_IBF); 33 jazz_kh->command = val; 34 } 35 36 static unsigned char jazz_read_status(void) 37 { 38 return jazz_kh->command; 39 } 40 41 static inline void kb_wait(void) 42 { 43 unsigned long start = jiffies; 44 unsigned long timeout = start + HZ/2; 45 46 do { 47 if (! (jazz_read_status() & 0x02)) 48 return; 49 } while (time_before_eq(jiffies, timeout)); 50 } 51 52 void jazz_machine_restart(char *command) 53 { 54 while(1) { 55 kb_wait(); 56 jazz_write_command (0xd1); 57 kb_wait(); 58 jazz_write_output (0x00); 59 } 60 } 61 62 void jazz_machine_halt(void) 63 { 64 } 65 66 void jazz_machine_power_off(void) 67 { 68 /* Jazz machines don't have a software power switch */ 69 } 70