powerpc: Move plpar_wrappers.h into arch/powerpc/platforms/pseries
[powerpc.git] / arch / powerpc / platforms / pseries / plpar_wrappers.h
1 #ifndef _PSERIES_PLPAR_WRAPPERS_H
2 #define _PSERIES_PLPAR_WRAPPERS_H
3
4 #include <asm/hvcall.h>
5
6 static inline long poll_pending(void)
7 {
8         unsigned long dummy;
9         return plpar_hcall(H_POLL_PENDING, 0, 0, 0, 0, &dummy, &dummy, &dummy);
10 }
11
12 static inline long prod_processor(void)
13 {
14         plpar_hcall_norets(H_PROD);
15         return 0;
16 }
17
18 static inline long cede_processor(void)
19 {
20         plpar_hcall_norets(H_CEDE);
21         return 0;
22 }
23
24 static inline long register_vpa(unsigned long flags, unsigned long proc,
25                 unsigned long vpa)
26 {
27         return plpar_hcall_norets(H_REGISTER_VPA, flags, proc, vpa);
28 }
29
30 void vpa_init(int cpu);
31
32 static inline long plpar_pte_remove(unsigned long flags, unsigned long ptex,
33                 unsigned long avpn, unsigned long *old_pteh_ret,
34                 unsigned long *old_ptel_ret)
35 {
36         unsigned long dummy;
37         return plpar_hcall(H_REMOVE, flags, ptex, avpn, 0, old_pteh_ret,
38                         old_ptel_ret, &dummy);
39 }
40
41 static inline long plpar_pte_read(unsigned long flags, unsigned long ptex,
42                 unsigned long *old_pteh_ret, unsigned long *old_ptel_ret)
43 {
44         unsigned long dummy;
45         return plpar_hcall(H_READ, flags, ptex, 0, 0, old_pteh_ret,
46                         old_ptel_ret, &dummy);
47 }
48
49 static inline long plpar_pte_protect(unsigned long flags, unsigned long ptex,
50                 unsigned long avpn)
51 {
52         return plpar_hcall_norets(H_PROTECT, flags, ptex, avpn);
53 }
54
55 static inline long plpar_tce_get(unsigned long liobn, unsigned long ioba,
56                 unsigned long *tce_ret)
57 {
58         unsigned long dummy;
59         return plpar_hcall(H_GET_TCE, liobn, ioba, 0, 0, tce_ret, &dummy,
60                         &dummy);
61 }
62
63 static inline long plpar_tce_put(unsigned long liobn, unsigned long ioba,
64                 unsigned long tceval)
65 {
66         return plpar_hcall_norets(H_PUT_TCE, liobn, ioba, tceval);
67 }
68
69 static inline long plpar_tce_put_indirect(unsigned long liobn,
70                 unsigned long ioba, unsigned long page, unsigned long count)
71 {
72         return plpar_hcall_norets(H_PUT_TCE_INDIRECT, liobn, ioba, page, count);
73 }
74
75 static inline long plpar_tce_stuff(unsigned long liobn, unsigned long ioba,
76                 unsigned long tceval, unsigned long count)
77 {
78         return plpar_hcall_norets(H_STUFF_TCE, liobn, ioba, tceval, count);
79 }
80
81 static inline long plpar_get_term_char(unsigned long termno,
82                 unsigned long *len_ret, char *buf_ret)
83 {
84         unsigned long *lbuf = (unsigned long *)buf_ret; /* TODO: alignment? */
85         return plpar_hcall(H_GET_TERM_CHAR, termno, 0, 0, 0, len_ret,
86                         lbuf + 0, lbuf + 1);
87 }
88
89 static inline long plpar_put_term_char(unsigned long termno, unsigned long len,
90                 const char *buffer)
91 {
92         unsigned long *lbuf = (unsigned long *)buffer;  /* TODO: alignment? */
93         return plpar_hcall_norets(H_PUT_TERM_CHAR, termno, len, lbuf[0],
94                         lbuf[1]);
95 }
96
97 static inline long plpar_set_xdabr(unsigned long address, unsigned long flags)
98 {
99         return plpar_hcall_norets(H_SET_XDABR, address, flags);
100 }
101
102 static inline long plpar_set_dabr(unsigned long val)
103 {
104         return plpar_hcall_norets(H_SET_DABR, val);
105 }
106
107 #endif /* _PSERIES_PLPAR_WRAPPERS_H */