Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/mips/jazz/reset.c
10817 views
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
10
#define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */
11
12
static void jazz_write_output(unsigned char val)
13
{
14
int status;
15
16
do {
17
status = jazz_kh->command;
18
} while (status & KBD_STAT_IBF);
19
jazz_kh->data = val;
20
}
21
22
static void jazz_write_command(unsigned char val)
23
{
24
int status;
25
26
do {
27
status = jazz_kh->command;
28
} while (status & KBD_STAT_IBF);
29
jazz_kh->command = val;
30
}
31
32
static unsigned char jazz_read_status(void)
33
{
34
return jazz_kh->command;
35
}
36
37
static inline void kb_wait(void)
38
{
39
unsigned long start = jiffies;
40
unsigned long timeout = start + HZ/2;
41
42
do {
43
if (! (jazz_read_status() & 0x02))
44
return;
45
} while (time_before_eq(jiffies, timeout));
46
}
47
48
void jazz_machine_restart(char *command)
49
{
50
while(1) {
51
kb_wait();
52
jazz_write_command(0xd1);
53
kb_wait();
54
jazz_write_output(0x00);
55
}
56
}
57
58