162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* cif.S: PROM entry/exit assembler trampolines. 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 1996, 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 562306a36Sopenharmony_ci * Copyright (C) 2005, 2006 David S. Miller <davem@davemloft.net> 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <asm/pstate.h> 962306a36Sopenharmony_ci#include <asm/cpudata.h> 1062306a36Sopenharmony_ci#include <asm/thread_info.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci .text 1362306a36Sopenharmony_ci .globl prom_cif_direct 1462306a36Sopenharmony_ciprom_cif_direct: 1562306a36Sopenharmony_ci save %sp, -192, %sp 1662306a36Sopenharmony_ci sethi %hi(p1275buf), %o1 1762306a36Sopenharmony_ci or %o1, %lo(p1275buf), %o1 1862306a36Sopenharmony_ci ldx [%o1 + 0x0008], %l2 ! prom_cif_handler 1962306a36Sopenharmony_ci mov %g4, %l0 2062306a36Sopenharmony_ci mov %g5, %l1 2162306a36Sopenharmony_ci mov %g6, %l3 2262306a36Sopenharmony_ci call %l2 2362306a36Sopenharmony_ci mov %i0, %o0 ! prom_args 2462306a36Sopenharmony_ci mov %l0, %g4 2562306a36Sopenharmony_ci mov %l1, %g5 2662306a36Sopenharmony_ci mov %l3, %g6 2762306a36Sopenharmony_ci ret 2862306a36Sopenharmony_ci restore 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci .globl prom_cif_callback 3162306a36Sopenharmony_ciprom_cif_callback: 3262306a36Sopenharmony_ci sethi %hi(p1275buf), %o1 3362306a36Sopenharmony_ci or %o1, %lo(p1275buf), %o1 3462306a36Sopenharmony_ci save %sp, -192, %sp 3562306a36Sopenharmony_ci TRAP_LOAD_THREAD_REG(%g6, %g1) 3662306a36Sopenharmony_ci LOAD_PER_CPU_BASE(%g5, %g6, %g4, %g3, %o0) 3762306a36Sopenharmony_ci ldx [%g6 + TI_TASK], %g4 3862306a36Sopenharmony_ci call prom_world 3962306a36Sopenharmony_ci mov 0, %o0 4062306a36Sopenharmony_ci ldx [%i1 + 0x000], %l2 4162306a36Sopenharmony_ci call %l2 4262306a36Sopenharmony_ci mov %i0, %o0 4362306a36Sopenharmony_ci mov %o0, %l1 4462306a36Sopenharmony_ci call prom_world 4562306a36Sopenharmony_ci mov 1, %o0 4662306a36Sopenharmony_ci ret 4762306a36Sopenharmony_ci restore %l1, 0, %o0 4862306a36Sopenharmony_ci 49