mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1009 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1009 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Reset a Jazz machine.
 | |
|  *
 | |
|  * We don't trust the firmware so we do it the classic way by poking and
 | |
|  * stabbing at the keyboard controller ...
 | |
|  */
 | |
| #include <linux/jiffies.h>
 | |
| #include <asm/jazz.h>
 | |
| 
 | |
| #define KBD_STAT_IBF		0x02	/* Keyboard input buffer full */
 | |
| 
 | |
| static void jazz_write_output(unsigned char val)
 | |
| {
 | |
| 	int status;
 | |
| 
 | |
| 	do {
 | |
| 		status = jazz_kh->command;
 | |
| 	} while (status & KBD_STAT_IBF);
 | |
| 	jazz_kh->data = val;
 | |
| }
 | |
| 
 | |
| static void jazz_write_command(unsigned char val)
 | |
| {
 | |
| 	int status;
 | |
| 
 | |
| 	do {
 | |
| 		status = jazz_kh->command;
 | |
| 	} while (status & KBD_STAT_IBF);
 | |
| 	jazz_kh->command = val;
 | |
| }
 | |
| 
 | |
| static unsigned char jazz_read_status(void)
 | |
| {
 | |
| 	return jazz_kh->command;
 | |
| }
 | |
| 
 | |
| static inline void kb_wait(void)
 | |
| {
 | |
| 	unsigned long start = jiffies;
 | |
| 	unsigned long timeout = start + HZ/2;
 | |
| 
 | |
| 	do {
 | |
| 		if (! (jazz_read_status() & 0x02))
 | |
| 			return;
 | |
| 	} while (time_before_eq(jiffies, timeout));
 | |
| }
 | |
| 
 | |
| void jazz_machine_restart(char *command)
 | |
| {
 | |
| 	while(1) {
 | |
| 		kb_wait();
 | |
| 		jazz_write_command(0xd1);
 | |
| 		kb_wait();
 | |
| 		jazz_write_output(0x00);
 | |
| 	}
 | |
| }
 | 
