linux/arch/powerpc/boot/ps3-hvcall.S
<<
>>
Prefs
   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