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 145 GLOBAL 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 153 GLOBAL 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 161 GLOBAL 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 169 GLOBAL lv1_panic 170 SAVE_LR 171 LOAD_REGS_8 172 HVCALL 255 173 LOAD_LR 174 blr
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.