1 /*
2  * Reset a DECstation machine.
3  *
4  * Copyright (C) 199x  the Anonymous
5  * Copyright (C) 2001, 2002, 2003  Maciej W. Rozycki
6  */
7 #include <linux/interrupt.h>
8 #include <linux/linkage.h>
9 
10 #include <asm/addrspace.h>
11 
12 typedef void __noreturn (* noret_func_t)(void);
13 
back_to_prom(void)14 static inline void __noreturn back_to_prom(void)
15 {
16 	noret_func_t func = (void *)CKSEG1ADDR(0x1fc00000);
17 
18 	func();
19 }
20 
dec_machine_restart(char * command)21 void __noreturn dec_machine_restart(char *command)
22 {
23 	back_to_prom();
24 }
25 
dec_machine_halt(void)26 void __noreturn dec_machine_halt(void)
27 {
28 	back_to_prom();
29 }
30 
dec_machine_power_off(void)31 void __noreturn dec_machine_power_off(void)
32 {
33     /* DECstations don't have a software power switch */
34 	back_to_prom();
35 }
36 
dec_intr_halt(int irq,void * dev_id)37 irqreturn_t dec_intr_halt(int irq, void *dev_id)
38 {
39 	dec_machine_halt();
40 }
41