Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/jazz/reset.c
26442 views
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
59