18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* n2_asm.S: Hypervisor calls for NCS support. 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright (C) 2009 David S. Miller <davem@davemloft.net> 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include <linux/linkage.h> 88c2ecf20Sopenharmony_ci#include <asm/hypervisor.h> 98c2ecf20Sopenharmony_ci#include "n2_core.h" 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci /* o0: queue type 128c2ecf20Sopenharmony_ci * o1: RA of queue 138c2ecf20Sopenharmony_ci * o2: num entries in queue 148c2ecf20Sopenharmony_ci * o3: address of queue handle return 158c2ecf20Sopenharmony_ci */ 168c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_qconf) 178c2ecf20Sopenharmony_ci mov HV_FAST_NCS_QCONF, %o5 188c2ecf20Sopenharmony_ci ta HV_FAST_TRAP 198c2ecf20Sopenharmony_ci stx %o1, [%o3] 208c2ecf20Sopenharmony_ci retl 218c2ecf20Sopenharmony_ci nop 228c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_qconf) 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci /* %o0: queue handle 258c2ecf20Sopenharmony_ci * %o1: address of queue type return 268c2ecf20Sopenharmony_ci * %o2: address of queue base address return 278c2ecf20Sopenharmony_ci * %o3: address of queue num entries return 288c2ecf20Sopenharmony_ci */ 298c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_qinfo) 308c2ecf20Sopenharmony_ci mov %o1, %g1 318c2ecf20Sopenharmony_ci mov %o2, %g2 328c2ecf20Sopenharmony_ci mov %o3, %g3 338c2ecf20Sopenharmony_ci mov HV_FAST_NCS_QINFO, %o5 348c2ecf20Sopenharmony_ci ta HV_FAST_TRAP 358c2ecf20Sopenharmony_ci stx %o1, [%g1] 368c2ecf20Sopenharmony_ci stx %o2, [%g2] 378c2ecf20Sopenharmony_ci stx %o3, [%g3] 388c2ecf20Sopenharmony_ci retl 398c2ecf20Sopenharmony_ci nop 408c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_qinfo) 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci /* %o0: queue handle 438c2ecf20Sopenharmony_ci * %o1: address of head offset return 448c2ecf20Sopenharmony_ci */ 458c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_gethead) 468c2ecf20Sopenharmony_ci mov %o1, %o2 478c2ecf20Sopenharmony_ci mov HV_FAST_NCS_GETHEAD, %o5 488c2ecf20Sopenharmony_ci ta HV_FAST_TRAP 498c2ecf20Sopenharmony_ci stx %o1, [%o2] 508c2ecf20Sopenharmony_ci retl 518c2ecf20Sopenharmony_ci nop 528c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_gethead) 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci /* %o0: queue handle 558c2ecf20Sopenharmony_ci * %o1: address of tail offset return 568c2ecf20Sopenharmony_ci */ 578c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_gettail) 588c2ecf20Sopenharmony_ci mov %o1, %o2 598c2ecf20Sopenharmony_ci mov HV_FAST_NCS_GETTAIL, %o5 608c2ecf20Sopenharmony_ci ta HV_FAST_TRAP 618c2ecf20Sopenharmony_ci stx %o1, [%o2] 628c2ecf20Sopenharmony_ci retl 638c2ecf20Sopenharmony_ci nop 648c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_gettail) 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci /* %o0: queue handle 678c2ecf20Sopenharmony_ci * %o1: new tail offset 688c2ecf20Sopenharmony_ci */ 698c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_settail) 708c2ecf20Sopenharmony_ci mov HV_FAST_NCS_SETTAIL, %o5 718c2ecf20Sopenharmony_ci ta HV_FAST_TRAP 728c2ecf20Sopenharmony_ci retl 738c2ecf20Sopenharmony_ci nop 748c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_settail) 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci /* %o0: queue handle 778c2ecf20Sopenharmony_ci * %o1: address of devino return 788c2ecf20Sopenharmony_ci */ 798c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_qhandle_to_devino) 808c2ecf20Sopenharmony_ci mov %o1, %o2 818c2ecf20Sopenharmony_ci mov HV_FAST_NCS_QHANDLE_TO_DEVINO, %o5 828c2ecf20Sopenharmony_ci ta HV_FAST_TRAP 838c2ecf20Sopenharmony_ci stx %o1, [%o2] 848c2ecf20Sopenharmony_ci retl 858c2ecf20Sopenharmony_ci nop 868c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_qhandle_to_devino) 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci /* %o0: queue handle 898c2ecf20Sopenharmony_ci * %o1: new head offset 908c2ecf20Sopenharmony_ci */ 918c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_sethead_marker) 928c2ecf20Sopenharmony_ci mov HV_FAST_NCS_SETHEAD_MARKER, %o5 938c2ecf20Sopenharmony_ci ta HV_FAST_TRAP 948c2ecf20Sopenharmony_ci retl 958c2ecf20Sopenharmony_ci nop 968c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_sethead_marker) 97