xref: /openbmc/linux/arch/powerpc/boot/ps3-hvcall.S (revision 95e9fd10)
1/*
2 *  PS3 bootwrapper hvcalls.
3 *
4 *  Copyright (C) 2007 Sony Computer Entertainment Inc.
5 *  Copyright 2007 Sony Corp.
6 *
7 *  This program is free software; you can redistribute it and/or modify
8 *  it under the terms of the GNU General Public License as published by
9 *  the Free Software Foundation; version 2 of the License.
10 *
11 *  This program is distributed in the hope that it will be useful,
12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 *  GNU General Public License for more details.
15 *
16 *  You should have received a copy of the GNU General Public License
17 *  along with this program; if not, write to the Free Software
18 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21#include "ppc_asm.h"
22
23	.machine "ppc64"
24
25/*
26 * The PS3 hypervisor uses a 64 bit "C" language calling convention.
27 * The routines here marshal arguments between the 32 bit wrapper
28 * program and the 64 bit hvcalls.
29 *
30 *  wrapper           lv1
31 *  32-bit (h,l)      64-bit
32 *
33 *  1: r3,r4          <-> r3
34 *  2: r5,r6          <-> r4
35 *  3: r7,r8          <-> r5
36 *  4: r9,r10         <-> r6
37 *  5: 8(r1),12(r1)   <-> r7
38 *  6: 16(r1),20(r1)  <-> r8
39 *  7: 24(r1),28(r1)  <-> r9
40 *  8: 32(r1),36(r1)  <-> r10
41 *
42 */
43
44.macro GLOBAL name
45	.section ".text"
46	.balign 4
47	.globl \name
48\name:
49.endm
50
51.macro NO_SUPPORT name
52	GLOBAL \name
53	b ps3_no_support
54.endm
55
56.macro HVCALL num
57	li r11, \num
58	.long 0x44000022
59	extsw r3, r3
60.endm
61
62.macro SAVE_LR offset=4
63	mflr r0
64	stw r0, \offset(r1)
65.endm
66
67.macro LOAD_LR offset=4
68	lwz r0, \offset(r1)
69	mtlr r0
70.endm
71
72.macro LOAD_64_REG target,high,low
73	sldi r11, \high, 32
74	or \target, r11, \low
75.endm
76
77.macro LOAD_64_STACK target,offset
78	ld \target, \offset(r1)
79.endm
80
81.macro LOAD_R3
82	LOAD_64_REG r3,r3,r4
83.endm
84
85.macro LOAD_R4
86	LOAD_64_REG r4,r5,r6
87.endm
88
89.macro LOAD_R5
90	LOAD_64_REG r5,r7,r8
91.endm
92
93.macro LOAD_R6
94	LOAD_64_REG r6,r9,r10
95.endm
96
97.macro LOAD_R7
98	LOAD_64_STACK r7,8
99.endm
100
101.macro LOAD_R8
102	LOAD_64_STACK r8,16
103.endm
104
105.macro LOAD_R9
106	LOAD_64_STACK r9,24
107.endm
108
109.macro LOAD_R10
110	LOAD_64_STACK r10,32
111.endm
112
113.macro LOAD_REGS_0
114	stwu 1,-16(1)
115	stw 3, 8(1)
116.endm
117
118.macro LOAD_REGS_5
119	LOAD_R3
120	LOAD_R4
121	LOAD_R5
122	LOAD_R6
123	LOAD_R7
124.endm
125
126.macro LOAD_REGS_6
127	LOAD_REGS_5
128	LOAD_R8
129.endm
130
131.macro LOAD_REGS_8
132	LOAD_REGS_6
133	LOAD_R9
134	LOAD_R10
135.endm
136
137.macro STORE_REGS_0_1
138	lwz r11, 8(r1)
139	std r4, 0(r11)
140	mr r4, r3
141	li r3, 0
142	addi r1,r1,16
143.endm
144
145.macro STORE_REGS_5_2
146	lwz r11, 16(r1)
147	std r4, 0(r11)
148	lwz r11, 20(r1)
149	std r5, 0(r11)
150.endm
151
152.macro STORE_REGS_6_1
153	lwz r11, 24(r1)
154	std r4, 0(r11)
155.endm
156
157GLOBAL lv1_get_logical_ppe_id
158	SAVE_LR
159	LOAD_REGS_0
160	HVCALL 69
161	STORE_REGS_0_1
162	LOAD_LR
163	blr
164
165GLOBAL lv1_get_logical_partition_id
166	SAVE_LR
167	LOAD_REGS_0
168	HVCALL 74
169	STORE_REGS_0_1
170	LOAD_LR
171	blr
172
173GLOBAL lv1_get_repository_node_value
174	SAVE_LR
175	LOAD_REGS_5
176	HVCALL 91
177	STORE_REGS_5_2
178	LOAD_LR
179	blr
180
181GLOBAL lv1_panic
182	SAVE_LR
183	LOAD_REGS_8
184	HVCALL 255
185	LOAD_LR
186	blr
187