1
2
3
4
5
6
7
8#include <linux/types.h>
9#include <linux/kernel.h>
10#include <linux/sched.h>
11#include <linux/module.h>
12
13#include <asm/openprom.h>
14#include <asm/oplib.h>
15#include <asm/auxio.h>
16
17extern void restore_current(void);
18
19DEFINE_SPINLOCK(prom_lock);
20
21
22void
23prom_reboot(char *bcommand)
24{
25 unsigned long flags;
26 spin_lock_irqsave(&prom_lock, flags);
27 (*(romvec->pv_reboot))(bcommand);
28
29 restore_current();
30 spin_unlock_irqrestore(&prom_lock, flags);
31}
32
33
34void
35prom_feval(char *fstring)
36{
37 unsigned long flags;
38 if(!fstring || fstring[0] == 0)
39 return;
40 spin_lock_irqsave(&prom_lock, flags);
41 if(prom_vers == PROM_V0)
42 (*(romvec->pv_fortheval.v0_eval))(strlen(fstring), fstring);
43 else
44 (*(romvec->pv_fortheval.v2_eval))(fstring);
45 restore_current();
46 spin_unlock_irqrestore(&prom_lock, flags);
47}
48EXPORT_SYMBOL(prom_feval);
49
50
51
52
53void
54prom_cmdline(void)
55{
56 unsigned long flags;
57
58 spin_lock_irqsave(&prom_lock, flags);
59 (*(romvec->pv_abort))();
60 restore_current();
61 spin_unlock_irqrestore(&prom_lock, flags);
62 set_auxio(AUXIO_LED, 0);
63}
64
65
66
67
68void __noreturn
69prom_halt(void)
70{
71 unsigned long flags;
72again:
73 spin_lock_irqsave(&prom_lock, flags);
74 (*(romvec->pv_halt))();
75
76 restore_current();
77 spin_unlock_irqrestore(&prom_lock, flags);
78 goto again;
79}
80
81typedef void (*sfunc_t)(void);
82
83
84void
85prom_setsync(sfunc_t funcp)
86{
87 if(!funcp) return;
88 *romvec->pv_synchook = funcp;
89}
90
91
92
93
94
95unsigned char
96prom_get_idprom(char *idbuf, int num_bytes)
97{
98 int len;
99
100 len = prom_getproplen(prom_root_node, "idprom");
101 if((len>num_bytes) || (len==-1)) return 0xff;
102 if(!prom_getproperty(prom_root_node, "idprom", idbuf, num_bytes))
103 return idbuf[0];
104
105 return 0xff;
106}
107
108
109int
110prom_version(void)
111{
112 return romvec->pv_romvers;
113}
114
115
116int
117prom_getrev(void)
118{
119 return prom_rev;
120}
121
122
123int
124prom_getprev(void)
125{
126 return prom_prev;
127}
128