Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/mips/sni/reset.c
10818 views
1
/*
2
* linux/arch/mips/sni/process.c
3
*
4
* Reset a SNI machine.
5
*/
6
#include <asm/io.h>
7
#include <asm/reboot.h>
8
#include <asm/system.h>
9
#include <asm/sni.h>
10
11
/*
12
* This routine reboots the machine by asking the keyboard
13
* controller to pulse the reset-line low. We try that for a while,
14
* and if it doesn't work, we do some other stupid things.
15
*/
16
static inline void kb_wait(void)
17
{
18
int i;
19
20
for (i = 0; i < 0x10000; i++)
21
if ((inb_p(0x64) & 0x02) == 0)
22
break;
23
}
24
25
/* XXX This ends up at the ARC firmware prompt ... */
26
void sni_machine_restart(char *command)
27
{
28
int i, j;
29
30
/* This does a normal via the keyboard controller like a PC.
31
We can do that easier ... */
32
local_irq_disable();
33
for (;;) {
34
for (i = 0; i < 100; i++) {
35
kb_wait();
36
for (j = 0; j < 100000 ; j++)
37
/* nothing */;
38
outb_p(0xfe, 0x64); /* pulse reset low */
39
}
40
}
41
}
42
43
void sni_machine_power_off(void)
44
{
45
*(volatile unsigned char *)PCIMT_CSWCSM = 0xfd;
46
}
47
48