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