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 16static 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 26static 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 36static unsigned char jazz_read_status(void) 37{ 38 return jazz_kh->command; 39} 40 41static 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 52void 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 62void jazz_machine_halt(void) 63{ 64} 65 66void jazz_machine_power_off(void) 67{ 68 /* Jazz machines don't have a software power switch */ 69} 70