Linux Audio

Check our new training course

Loading...
v6.2
  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
v5.4
  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