1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun/* n2_asm.S: Hypervisor calls for NCS support. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2009 David S. Miller <davem@davemloft.net> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun#include <linux/linkage.h> 8*4882a593Smuzhiyun#include <asm/hypervisor.h> 9*4882a593Smuzhiyun#include "n2_core.h" 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* o0: queue type 12*4882a593Smuzhiyun * o1: RA of queue 13*4882a593Smuzhiyun * o2: num entries in queue 14*4882a593Smuzhiyun * o3: address of queue handle return 15*4882a593Smuzhiyun */ 16*4882a593SmuzhiyunENTRY(sun4v_ncs_qconf) 17*4882a593Smuzhiyun mov HV_FAST_NCS_QCONF, %o5 18*4882a593Smuzhiyun ta HV_FAST_TRAP 19*4882a593Smuzhiyun stx %o1, [%o3] 20*4882a593Smuzhiyun retl 21*4882a593Smuzhiyun nop 22*4882a593SmuzhiyunENDPROC(sun4v_ncs_qconf) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* %o0: queue handle 25*4882a593Smuzhiyun * %o1: address of queue type return 26*4882a593Smuzhiyun * %o2: address of queue base address return 27*4882a593Smuzhiyun * %o3: address of queue num entries return 28*4882a593Smuzhiyun */ 29*4882a593SmuzhiyunENTRY(sun4v_ncs_qinfo) 30*4882a593Smuzhiyun mov %o1, %g1 31*4882a593Smuzhiyun mov %o2, %g2 32*4882a593Smuzhiyun mov %o3, %g3 33*4882a593Smuzhiyun mov HV_FAST_NCS_QINFO, %o5 34*4882a593Smuzhiyun ta HV_FAST_TRAP 35*4882a593Smuzhiyun stx %o1, [%g1] 36*4882a593Smuzhiyun stx %o2, [%g2] 37*4882a593Smuzhiyun stx %o3, [%g3] 38*4882a593Smuzhiyun retl 39*4882a593Smuzhiyun nop 40*4882a593SmuzhiyunENDPROC(sun4v_ncs_qinfo) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun /* %o0: queue handle 43*4882a593Smuzhiyun * %o1: address of head offset return 44*4882a593Smuzhiyun */ 45*4882a593SmuzhiyunENTRY(sun4v_ncs_gethead) 46*4882a593Smuzhiyun mov %o1, %o2 47*4882a593Smuzhiyun mov HV_FAST_NCS_GETHEAD, %o5 48*4882a593Smuzhiyun ta HV_FAST_TRAP 49*4882a593Smuzhiyun stx %o1, [%o2] 50*4882a593Smuzhiyun retl 51*4882a593Smuzhiyun nop 52*4882a593SmuzhiyunENDPROC(sun4v_ncs_gethead) 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* %o0: queue handle 55*4882a593Smuzhiyun * %o1: address of tail offset return 56*4882a593Smuzhiyun */ 57*4882a593SmuzhiyunENTRY(sun4v_ncs_gettail) 58*4882a593Smuzhiyun mov %o1, %o2 59*4882a593Smuzhiyun mov HV_FAST_NCS_GETTAIL, %o5 60*4882a593Smuzhiyun ta HV_FAST_TRAP 61*4882a593Smuzhiyun stx %o1, [%o2] 62*4882a593Smuzhiyun retl 63*4882a593Smuzhiyun nop 64*4882a593SmuzhiyunENDPROC(sun4v_ncs_gettail) 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* %o0: queue handle 67*4882a593Smuzhiyun * %o1: new tail offset 68*4882a593Smuzhiyun */ 69*4882a593SmuzhiyunENTRY(sun4v_ncs_settail) 70*4882a593Smuzhiyun mov HV_FAST_NCS_SETTAIL, %o5 71*4882a593Smuzhiyun ta HV_FAST_TRAP 72*4882a593Smuzhiyun retl 73*4882a593Smuzhiyun nop 74*4882a593SmuzhiyunENDPROC(sun4v_ncs_settail) 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* %o0: queue handle 77*4882a593Smuzhiyun * %o1: address of devino return 78*4882a593Smuzhiyun */ 79*4882a593SmuzhiyunENTRY(sun4v_ncs_qhandle_to_devino) 80*4882a593Smuzhiyun mov %o1, %o2 81*4882a593Smuzhiyun mov HV_FAST_NCS_QHANDLE_TO_DEVINO, %o5 82*4882a593Smuzhiyun ta HV_FAST_TRAP 83*4882a593Smuzhiyun stx %o1, [%o2] 84*4882a593Smuzhiyun retl 85*4882a593Smuzhiyun nop 86*4882a593SmuzhiyunENDPROC(sun4v_ncs_qhandle_to_devino) 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /* %o0: queue handle 89*4882a593Smuzhiyun * %o1: new head offset 90*4882a593Smuzhiyun */ 91*4882a593SmuzhiyunENTRY(sun4v_ncs_sethead_marker) 92*4882a593Smuzhiyun mov HV_FAST_NCS_SETHEAD_MARKER, %o5 93*4882a593Smuzhiyun ta HV_FAST_TRAP 94*4882a593Smuzhiyun retl 95*4882a593Smuzhiyun nop 96*4882a593SmuzhiyunENDPROC(sun4v_ncs_sethead_marker) 97