reset.c (1045B)
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 13static 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 23static 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 33static unsigned char jazz_read_status(void) 34{ 35 return jazz_kh->command; 36} 37 38static 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 49void 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}