1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * PS3 bootwrapper hvcalls.
4 *
5 * Copyright (C) 2007 Sony Computer Entertainment Inc.
6 * Copyright 2007 Sony Corp.
7 */
8
9#include "ppc_asm.h"
10
11 .machine "ppc64"
12
13/*
14 * The PS3 hypervisor uses a 64 bit "C" language calling convention.
15 * The routines here marshal arguments between the 32 bit wrapper
16 * program and the 64 bit hvcalls.
17 *
18 * wrapper lv1
19 * 32-bit (h,l) 64-bit
20 *
21 * 1: r3,r4 <-> r3
22 * 2: r5,r6 <-> r4
23 * 3: r7,r8 <-> r5
24 * 4: r9,r10 <-> r6
25 * 5: 8(r1),12(r1) <-> r7
26 * 6: 16(r1),20(r1) <-> r8
27 * 7: 24(r1),28(r1) <-> r9
28 * 8: 32(r1),36(r1) <-> r10
29 *
30 */
31
32.macro GLOBAL name
33 .section ".text"
34 .balign 4
35 .globl \name
36\name:
37.endm
38
39.macro NO_SUPPORT name
40 GLOBAL \name
41 b ps3_no_support
42.endm
43
44.macro HVCALL num
45 li r11, \num
46 .long 0x44000022
47 extsw r3, r3
48.endm
49
50.macro SAVE_LR offset=4
51 mflr r0
52 stw r0, \offset(r1)
53.endm
54
55.macro LOAD_LR offset=4
56 lwz r0, \offset(r1)
57 mtlr r0
58.endm
59
60.macro LOAD_64_REG target,high,low
61 sldi r11, \high, 32
62 or \target, r11, \low
63.endm
64
65.macro LOAD_64_STACK target,offset
66 ld \target, \offset(r1)
67.endm
68
69.macro LOAD_R3
70 LOAD_64_REG r3,r3,r4
71.endm
72
73.macro LOAD_R4
74 LOAD_64_REG r4,r5,r6
75.endm
76
77.macro LOAD_R5
78 LOAD_64_REG r5,r7,r8
79.endm
80
81.macro LOAD_R6
82 LOAD_64_REG r6,r9,r10
83.endm
84
85.macro LOAD_R7
86 LOAD_64_STACK r7,8
87.endm
88
89.macro LOAD_R8
90 LOAD_64_STACK r8,16
91.endm
92
93.macro LOAD_R9
94 LOAD_64_STACK r9,24
95.endm
96
97.macro LOAD_R10
98 LOAD_64_STACK r10,32
99.endm
100
101.macro LOAD_REGS_0
102 stwu 1,-16(1)
103 stw 3, 8(1)
104.endm
105
106.macro LOAD_REGS_5
107 LOAD_R3
108 LOAD_R4
109 LOAD_R5
110 LOAD_R6
111 LOAD_R7
112.endm
113
114.macro LOAD_REGS_6
115 LOAD_REGS_5
116 LOAD_R8
117.endm
118
119.macro LOAD_REGS_8
120 LOAD_REGS_6
121 LOAD_R9
122 LOAD_R10
123.endm
124
125.macro STORE_REGS_0_1
126 lwz r11, 8(r1)
127 std r4, 0(r11)
128 mr r4, r3
129 li r3, 0
130 addi r1,r1,16
131.endm
132
133.macro STORE_REGS_5_2
134 lwz r11, 16(r1)
135 std r4, 0(r11)
136 lwz r11, 20(r1)
137 std r5, 0(r11)
138.endm
139
140.macro STORE_REGS_6_1
141 lwz r11, 24(r1)
142 std r4, 0(r11)
143.endm
144
145GLOBAL lv1_get_logical_ppe_id
146 SAVE_LR
147 LOAD_REGS_0
148 HVCALL 69
149 STORE_REGS_0_1
150 LOAD_LR
151 blr
152
153GLOBAL lv1_get_logical_partition_id
154 SAVE_LR
155 LOAD_REGS_0
156 HVCALL 74
157 STORE_REGS_0_1
158 LOAD_LR
159 blr
160
161GLOBAL lv1_get_repository_node_value
162 SAVE_LR
163 LOAD_REGS_5
164 HVCALL 91
165 STORE_REGS_5_2
166 LOAD_LR
167 blr
168
169GLOBAL lv1_panic
170 SAVE_LR
171 LOAD_REGS_8
172 HVCALL 255
173 LOAD_LR
174 blr
175

source code of linux/arch/powerpc/boot/ps3-hvcall.S