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