162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * PS3 bootwrapper hvcalls. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2007 Sony Computer Entertainment Inc. 662306a36Sopenharmony_ci * Copyright 2007 Sony Corp. 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "ppc_asm.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci .machine "ppc64" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci * The PS3 hypervisor uses a 64 bit "C" language calling convention. 1562306a36Sopenharmony_ci * The routines here marshal arguments between the 32 bit wrapper 1662306a36Sopenharmony_ci * program and the 64 bit hvcalls. 1762306a36Sopenharmony_ci * 1862306a36Sopenharmony_ci * wrapper lv1 1962306a36Sopenharmony_ci * 32-bit (h,l) 64-bit 2062306a36Sopenharmony_ci * 2162306a36Sopenharmony_ci * 1: r3,r4 <-> r3 2262306a36Sopenharmony_ci * 2: r5,r6 <-> r4 2362306a36Sopenharmony_ci * 3: r7,r8 <-> r5 2462306a36Sopenharmony_ci * 4: r9,r10 <-> r6 2562306a36Sopenharmony_ci * 5: 8(r1),12(r1) <-> r7 2662306a36Sopenharmony_ci * 6: 16(r1),20(r1) <-> r8 2762306a36Sopenharmony_ci * 7: 24(r1),28(r1) <-> r9 2862306a36Sopenharmony_ci * 8: 32(r1),36(r1) <-> r10 2962306a36Sopenharmony_ci * 3062306a36Sopenharmony_ci */ 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci.macro GLOBAL name 3362306a36Sopenharmony_ci .section ".text" 3462306a36Sopenharmony_ci .balign 4 3562306a36Sopenharmony_ci .globl \name 3662306a36Sopenharmony_ci\name: 3762306a36Sopenharmony_ci.endm 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci.macro NO_SUPPORT name 4062306a36Sopenharmony_ci GLOBAL \name 4162306a36Sopenharmony_ci b ps3_no_support 4262306a36Sopenharmony_ci.endm 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci.macro HVCALL num 4562306a36Sopenharmony_ci li r11, \num 4662306a36Sopenharmony_ci .long 0x44000022 4762306a36Sopenharmony_ci extsw r3, r3 4862306a36Sopenharmony_ci.endm 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci.macro SAVE_LR offset=4 5162306a36Sopenharmony_ci mflr r0 5262306a36Sopenharmony_ci stw r0, \offset(r1) 5362306a36Sopenharmony_ci.endm 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci.macro LOAD_LR offset=4 5662306a36Sopenharmony_ci lwz r0, \offset(r1) 5762306a36Sopenharmony_ci mtlr r0 5862306a36Sopenharmony_ci.endm 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci.macro LOAD_64_REG target,high,low 6162306a36Sopenharmony_ci sldi r11, \high, 32 6262306a36Sopenharmony_ci or \target, r11, \low 6362306a36Sopenharmony_ci.endm 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci.macro LOAD_64_STACK target,offset 6662306a36Sopenharmony_ci ld \target, \offset(r1) 6762306a36Sopenharmony_ci.endm 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci.macro LOAD_R3 7062306a36Sopenharmony_ci LOAD_64_REG r3,r3,r4 7162306a36Sopenharmony_ci.endm 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci.macro LOAD_R4 7462306a36Sopenharmony_ci LOAD_64_REG r4,r5,r6 7562306a36Sopenharmony_ci.endm 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci.macro LOAD_R5 7862306a36Sopenharmony_ci LOAD_64_REG r5,r7,r8 7962306a36Sopenharmony_ci.endm 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci.macro LOAD_R6 8262306a36Sopenharmony_ci LOAD_64_REG r6,r9,r10 8362306a36Sopenharmony_ci.endm 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci.macro LOAD_R7 8662306a36Sopenharmony_ci LOAD_64_STACK r7,8 8762306a36Sopenharmony_ci.endm 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci.macro LOAD_R8 9062306a36Sopenharmony_ci LOAD_64_STACK r8,16 9162306a36Sopenharmony_ci.endm 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci.macro LOAD_R9 9462306a36Sopenharmony_ci LOAD_64_STACK r9,24 9562306a36Sopenharmony_ci.endm 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci.macro LOAD_R10 9862306a36Sopenharmony_ci LOAD_64_STACK r10,32 9962306a36Sopenharmony_ci.endm 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci.macro LOAD_REGS_0 10262306a36Sopenharmony_ci stwu 1,-16(1) 10362306a36Sopenharmony_ci stw 3, 8(1) 10462306a36Sopenharmony_ci.endm 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci.macro LOAD_REGS_5 10762306a36Sopenharmony_ci LOAD_R3 10862306a36Sopenharmony_ci LOAD_R4 10962306a36Sopenharmony_ci LOAD_R5 11062306a36Sopenharmony_ci LOAD_R6 11162306a36Sopenharmony_ci LOAD_R7 11262306a36Sopenharmony_ci.endm 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci.macro LOAD_REGS_6 11562306a36Sopenharmony_ci LOAD_REGS_5 11662306a36Sopenharmony_ci LOAD_R8 11762306a36Sopenharmony_ci.endm 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci.macro LOAD_REGS_8 12062306a36Sopenharmony_ci LOAD_REGS_6 12162306a36Sopenharmony_ci LOAD_R9 12262306a36Sopenharmony_ci LOAD_R10 12362306a36Sopenharmony_ci.endm 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci.macro STORE_REGS_0_1 12662306a36Sopenharmony_ci lwz r11, 8(r1) 12762306a36Sopenharmony_ci std r4, 0(r11) 12862306a36Sopenharmony_ci mr r4, r3 12962306a36Sopenharmony_ci li r3, 0 13062306a36Sopenharmony_ci addi r1,r1,16 13162306a36Sopenharmony_ci.endm 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci.macro STORE_REGS_5_2 13462306a36Sopenharmony_ci lwz r11, 16(r1) 13562306a36Sopenharmony_ci std r4, 0(r11) 13662306a36Sopenharmony_ci lwz r11, 20(r1) 13762306a36Sopenharmony_ci std r5, 0(r11) 13862306a36Sopenharmony_ci.endm 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci.macro STORE_REGS_6_1 14162306a36Sopenharmony_ci lwz r11, 24(r1) 14262306a36Sopenharmony_ci std r4, 0(r11) 14362306a36Sopenharmony_ci.endm 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ciGLOBAL lv1_get_logical_ppe_id 14662306a36Sopenharmony_ci SAVE_LR 14762306a36Sopenharmony_ci LOAD_REGS_0 14862306a36Sopenharmony_ci HVCALL 69 14962306a36Sopenharmony_ci STORE_REGS_0_1 15062306a36Sopenharmony_ci LOAD_LR 15162306a36Sopenharmony_ci blr 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ciGLOBAL lv1_get_logical_partition_id 15462306a36Sopenharmony_ci SAVE_LR 15562306a36Sopenharmony_ci LOAD_REGS_0 15662306a36Sopenharmony_ci HVCALL 74 15762306a36Sopenharmony_ci STORE_REGS_0_1 15862306a36Sopenharmony_ci LOAD_LR 15962306a36Sopenharmony_ci blr 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ciGLOBAL lv1_get_repository_node_value 16262306a36Sopenharmony_ci SAVE_LR 16362306a36Sopenharmony_ci LOAD_REGS_5 16462306a36Sopenharmony_ci HVCALL 91 16562306a36Sopenharmony_ci STORE_REGS_5_2 16662306a36Sopenharmony_ci LOAD_LR 16762306a36Sopenharmony_ci blr 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ciGLOBAL lv1_panic 17062306a36Sopenharmony_ci SAVE_LR 17162306a36Sopenharmony_ci LOAD_REGS_8 17262306a36Sopenharmony_ci HVCALL 255 17362306a36Sopenharmony_ci LOAD_LR 17462306a36Sopenharmony_ci blr 175