[PATCH] W1: Change the type 'unsigned long' member of 'struct w1_bus_master' to ...
[linux-2.6/verdex.git] / arch / powerpc / platforms / pseries / hvCall.S
blobdb7c19fe92972ccb3fc750e2d53a71737c608552
1 /*
2  * This file contains the generic code to perform a call to the
3  * pSeries LPAR hypervisor.
4  * NOTE: this file will go away when we move to inline this work.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version
9  * 2 of the License, or (at your option) any later version.
10  */
11 #include <asm/hvcall.h>
12 #include <asm/processor.h>
13 #include <asm/ppc_asm.h>
14         
15 #define STK_PARM(i)     (48 + ((i)-3)*8)
17         .text
19 /* long plpar_hcall(unsigned long opcode,               R3
20                         unsigned long arg1,             R4
21                         unsigned long arg2,             R5
22                         unsigned long arg3,             R6
23                         unsigned long arg4,             R7
24                         unsigned long *out1,            R8
25                         unsigned long *out2,            R9
26                         unsigned long *out3);           R10
27  */
28 _GLOBAL(plpar_hcall)
29         HMT_MEDIUM
31         mfcr    r0
33         std     r8,STK_PARM(r8)(r1)     /* Save out ptrs */
34         std     r9,STK_PARM(r9)(r1)
35         std     r10,STK_PARM(r10)(r1)
37         stw     r0,8(r1)
39         HVSC                            /* invoke the hypervisor */
41         lwz     r0,8(r1)
43         ld      r8,STK_PARM(r8)(r1)     /* Fetch r4-r6 ret args */
44         ld      r9,STK_PARM(r9)(r1)
45         ld      r10,STK_PARM(r10)(r1)
46         std     r4,0(r8)
47         std     r5,0(r9)
48         std     r6,0(r10)
50         mtcrf   0xff,r0
51         blr                             /* return r3 = status */
54 /* Simple interface with no output values (other than status) */
55 _GLOBAL(plpar_hcall_norets)
56         HMT_MEDIUM
58         mfcr    r0
59         stw     r0,8(r1)
61         HVSC                            /* invoke the hypervisor */
63         lwz     r0,8(r1)
64         mtcrf   0xff,r0
65         blr                             /* return r3 = status */
68 /* long plpar_hcall_8arg_2ret(unsigned long opcode,     R3
69                         unsigned long arg1,             R4
70                         unsigned long arg2,             R5
71                         unsigned long arg3,             R6
72                         unsigned long arg4,             R7
73                         unsigned long arg5,             R8
74                         unsigned long arg6,             R9
75                         unsigned long arg7,             R10
76                         unsigned long arg8,             112(R1)
77                         unsigned long *out1);           120(R1)
78  */
79 _GLOBAL(plpar_hcall_8arg_2ret)
80         HMT_MEDIUM
82         mfcr    r0
83         ld      r11,STK_PARM(r11)(r1)   /* put arg8 in R11 */
84         stw     r0,8(r1)
86         HVSC                            /* invoke the hypervisor */
88         lwz     r0,8(r1)
89         ld      r10,STK_PARM(r12)(r1)   /* Fetch r4 ret arg */
90         std     r4,0(r10)
91         mtcrf   0xff,r0
92         blr                             /* return r3 = status */
95 /* long plpar_hcall_4out(unsigned long opcode,          R3
96                         unsigned long arg1,             R4
97                         unsigned long arg2,             R5
98                         unsigned long arg3,             R6
99                         unsigned long arg4,             R7
100                         unsigned long *out1,            R8
101                         unsigned long *out2,            R9
102                         unsigned long *out3,            R10
103                         unsigned long *out4);           112(R1)
104  */
105 _GLOBAL(plpar_hcall_4out)
106         HMT_MEDIUM
108         mfcr    r0
109         stw     r0,8(r1)
111         std     r8,STK_PARM(r8)(r1)     /* Save out ptrs */
112         std     r9,STK_PARM(r9)(r1)
113         std     r10,STK_PARM(r10)(r1)
115         HVSC                            /* invoke the hypervisor */
117         lwz     r0,8(r1)
119         ld      r8,STK_PARM(r8)(r1)     /* Fetch r4-r7 ret args */
120         ld      r9,STK_PARM(r9)(r1)
121         ld      r10,STK_PARM(r10)(r1)
122         ld      r11,STK_PARM(r11)(r1)
123         std     r4,0(r8)
124         std     r5,0(r9)
125         std     r6,0(r10)
126         std     r7,0(r11)
128         mtcrf   0xff,r0
129         blr                             /* return r3 = status */