cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ps3-hvcall.S (2365B)


      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