^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) /* %o0: devhandle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * %o1: devino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * returns %o0: sysino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) ENTRY(sun4v_devino_to_sysino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) mov HV_FAST_INTR_DEVINO2SYSINO, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) mov %o1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) ENDPROC(sun4v_devino_to_sysino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) /* %o0: sysino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * returns %o0: intr_enabled (HV_INTR_{DISABLED,ENABLED})
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) ENTRY(sun4v_intr_getenabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) mov HV_FAST_INTR_GETENABLED, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) mov %o1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) ENDPROC(sun4v_intr_getenabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) /* %o0: sysino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * %o1: intr_enabled (HV_INTR_{DISABLED,ENABLED})
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) ENTRY(sun4v_intr_setenabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) mov HV_FAST_INTR_SETENABLED, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ENDPROC(sun4v_intr_setenabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) /* %o0: sysino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * returns %o0: intr_state (HV_INTR_STATE_*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) ENTRY(sun4v_intr_getstate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) mov HV_FAST_INTR_GETSTATE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) mov %o1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) ENDPROC(sun4v_intr_getstate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) /* %o0: sysino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) * %o1: intr_state (HV_INTR_STATE_*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ENTRY(sun4v_intr_setstate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) mov HV_FAST_INTR_SETSTATE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) ENDPROC(sun4v_intr_setstate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) /* %o0: sysino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) * returns %o0: cpuid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) ENTRY(sun4v_intr_gettarget)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) mov HV_FAST_INTR_GETTARGET, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) mov %o1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) ENDPROC(sun4v_intr_gettarget)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) /* %o0: sysino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) * %o1: cpuid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) ENTRY(sun4v_intr_settarget)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) mov HV_FAST_INTR_SETTARGET, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) ENDPROC(sun4v_intr_settarget)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) /* %o0: cpuid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) * %o1: pc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) * %o2: rtba
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) * %o3: arg0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) ENTRY(sun4v_cpu_start)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) mov HV_FAST_CPU_START, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) ENDPROC(sun4v_cpu_start)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) /* %o0: cpuid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) ENTRY(sun4v_cpu_stop)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) mov HV_FAST_CPU_STOP, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) ENDPROC(sun4v_cpu_stop)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) /* returns %o0: status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) ENTRY(sun4v_cpu_yield)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) mov HV_FAST_CPU_YIELD, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) ENDPROC(sun4v_cpu_yield)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) /* %o0: cpuid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) ENTRY(sun4v_cpu_poke)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) mov HV_FAST_CPU_POKE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) ENDPROC(sun4v_cpu_poke)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) /* %o0: type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) * %o1: queue paddr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) * %o2: num queue entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) ENTRY(sun4v_cpu_qconf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) mov HV_FAST_CPU_QCONF, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) ENDPROC(sun4v_cpu_qconf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) /* %o0: num cpus in cpu list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) * %o1: cpu list paddr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) * %o2: mondo block paddr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) ENTRY(sun4v_cpu_mondo_send)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) mov HV_FAST_CPU_MONDO_SEND, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) ENDPROC(sun4v_cpu_mondo_send)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) /* %o0: CPU ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) * returns %o0: -status if status non-zero, else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) * %o0: cpu state as HV_CPU_STATE_*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) ENTRY(sun4v_cpu_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) mov HV_FAST_CPU_STATE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) brnz,pn %o0, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) sub %g0, %o0, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) mov %o1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 1: retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) ENDPROC(sun4v_cpu_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) /* %o0: virtual address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) * %o1: must be zero
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) * %o2: TTE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) * %o3: HV_MMU_* flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) ENTRY(sun4v_mmu_map_perm_addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) mov HV_FAST_MMU_MAP_PERM_ADDR, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) ENDPROC(sun4v_mmu_map_perm_addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /* %o0: number of TSB descriptions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) * %o1: TSB descriptions real address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) ENTRY(sun4v_mmu_tsb_ctx0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) mov HV_FAST_MMU_TSB_CTX0, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) ENDPROC(sun4v_mmu_tsb_ctx0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) /* %o0: API group number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) * %o1: pointer to unsigned long major number storage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) * %o2: pointer to unsigned long minor number storage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) ENTRY(sun4v_get_version)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) mov HV_CORE_GET_VER, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) mov %o1, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) mov %o2, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) ta HV_CORE_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) stx %o1, [%o3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) stx %o2, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) ENDPROC(sun4v_get_version)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) /* %o0: API group number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) * %o1: desired major number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) * %o2: desired minor number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) * %o3: pointer to unsigned long actual minor number storage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) ENTRY(sun4v_set_version)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) mov HV_CORE_SET_VER, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) mov %o3, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) ta HV_CORE_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) ENDPROC(sun4v_set_version)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) /* %o0: pointer to unsigned long time
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) ENTRY(sun4v_tod_get)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) mov %o0, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) mov HV_FAST_TOD_GET, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) ENDPROC(sun4v_tod_get)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) /* %o0: time
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) ENTRY(sun4v_tod_set)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) mov HV_FAST_TOD_SET, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) ENDPROC(sun4v_tod_set)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) /* %o0: pointer to unsigned long status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) * returns %o0: signed character
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) ENTRY(sun4v_con_getchar)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) mov %o0, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) mov HV_FAST_CONS_GETCHAR, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) clr %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) clr %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) stx %o0, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) sra %o1, 0, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) ENDPROC(sun4v_con_getchar)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) /* %o0: signed long character
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) ENTRY(sun4v_con_putchar)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) mov HV_FAST_CONS_PUTCHAR, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) sra %o0, 0, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) ENDPROC(sun4v_con_putchar)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) /* %o0: buffer real address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) * %o1: buffer size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) * %o2: pointer to unsigned long bytes_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) ENTRY(sun4v_con_read)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) mov %o2, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) mov HV_FAST_CONS_READ, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) brnz %o0, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) cmp %o1, -1 /* break */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) be,a,pn %icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) mov %o1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) cmp %o1, -2 /* hup */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) be,a,pn %icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) mov %o1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 1: retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) ENDPROC(sun4v_con_read)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) /* %o0: buffer real address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) * %o1: buffer size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) * %o2: pointer to unsigned long bytes_written
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) ENTRY(sun4v_con_write)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) mov %o2, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) mov HV_FAST_CONS_WRITE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) ENDPROC(sun4v_con_write)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) /* %o0: soft state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) * %o1: address of description string
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) ENTRY(sun4v_mach_set_soft_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) mov HV_FAST_MACH_SET_SOFT_STATE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) ENDPROC(sun4v_mach_set_soft_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) /* %o0: exit code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) * Does not return.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) ENTRY(sun4v_mach_exit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) mov HV_FAST_MACH_EXIT, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) ENDPROC(sun4v_mach_exit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) /* %o0: buffer real address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) * %o1: buffer length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) * %o2: pointer to unsigned long real_buf_len
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) ENTRY(sun4v_mach_desc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) mov %o2, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) mov HV_FAST_MACH_DESC, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) ENDPROC(sun4v_mach_desc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) /* %o0: new timeout in milliseconds
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) * %o1: pointer to unsigned long orig_timeout
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) ENTRY(sun4v_mach_set_watchdog)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) mov %o1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) mov HV_FAST_MACH_SET_WATCHDOG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) brnz,a,pn %o4, 0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 0: retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) ENDPROC(sun4v_mach_set_watchdog)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) EXPORT_SYMBOL(sun4v_mach_set_watchdog)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) /* No inputs and does not return. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) ENTRY(sun4v_mach_sir)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) mov %o1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) mov HV_FAST_MACH_SIR, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) ENDPROC(sun4v_mach_sir)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) * %o1: ra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) * %o2: num_entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) ENTRY(sun4v_ldc_tx_qconf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) mov HV_FAST_LDC_TX_QCONF, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) ENDPROC(sun4v_ldc_tx_qconf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) * %o1: pointer to unsigned long ra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) * %o2: pointer to unsigned long num_entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) ENTRY(sun4v_ldc_tx_qinfo)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) mov %o1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) mov %o2, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) mov HV_FAST_LDC_TX_QINFO, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) stx %o2, [%g2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) ENDPROC(sun4v_ldc_tx_qinfo)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) * %o1: pointer to unsigned long head_off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) * %o2: pointer to unsigned long tail_off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) * %o2: pointer to unsigned long chan_state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) ENTRY(sun4v_ldc_tx_get_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) mov %o1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) mov %o2, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) mov %o3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) mov HV_FAST_LDC_TX_GET_STATE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) stx %o2, [%g2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) stx %o3, [%g3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) ENDPROC(sun4v_ldc_tx_get_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) * %o1: tail_off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) ENTRY(sun4v_ldc_tx_set_qtail)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) mov HV_FAST_LDC_TX_SET_QTAIL, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) ENDPROC(sun4v_ldc_tx_set_qtail)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) * %o1: ra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) * %o2: num_entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) ENTRY(sun4v_ldc_rx_qconf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) mov HV_FAST_LDC_RX_QCONF, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) ENDPROC(sun4v_ldc_rx_qconf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) * %o1: pointer to unsigned long ra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) * %o2: pointer to unsigned long num_entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) ENTRY(sun4v_ldc_rx_qinfo)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) mov %o1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) mov %o2, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) mov HV_FAST_LDC_RX_QINFO, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) stx %o2, [%g2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) ENDPROC(sun4v_ldc_rx_qinfo)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) * %o1: pointer to unsigned long head_off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) * %o2: pointer to unsigned long tail_off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) * %o2: pointer to unsigned long chan_state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) ENTRY(sun4v_ldc_rx_get_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) mov %o1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) mov %o2, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) mov %o3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) mov HV_FAST_LDC_RX_GET_STATE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) stx %o2, [%g2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) stx %o3, [%g3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) ENDPROC(sun4v_ldc_rx_get_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) * %o1: head_off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) ENTRY(sun4v_ldc_rx_set_qhead)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) mov HV_FAST_LDC_RX_SET_QHEAD, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) ENDPROC(sun4v_ldc_rx_set_qhead)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) * %o1: ra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) * %o2: num_entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) ENTRY(sun4v_ldc_set_map_table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) mov HV_FAST_LDC_SET_MAP_TABLE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) ENDPROC(sun4v_ldc_set_map_table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) * %o1: pointer to unsigned long ra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) * %o2: pointer to unsigned long num_entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) ENTRY(sun4v_ldc_get_map_table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) mov %o1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) mov %o2, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) mov HV_FAST_LDC_GET_MAP_TABLE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) stx %o2, [%g2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) ENDPROC(sun4v_ldc_get_map_table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) * %o1: dir_code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) * %o2: tgt_raddr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) * %o3: lcl_raddr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) * %o4: len
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) * %o5: pointer to unsigned long actual_len
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) ENTRY(sun4v_ldc_copy)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) mov %o5, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) mov HV_FAST_LDC_COPY, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) ENDPROC(sun4v_ldc_copy)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) * %o1: cookie
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) * %o2: pointer to unsigned long ra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) * %o3: pointer to unsigned long perm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) ENTRY(sun4v_ldc_mapin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) mov %o2, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) mov %o3, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) mov HV_FAST_LDC_MAPIN, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) stx %o2, [%g2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) ENDPROC(sun4v_ldc_mapin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) /* %o0: ra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) ENTRY(sun4v_ldc_unmap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) mov HV_FAST_LDC_UNMAP, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) ENDPROC(sun4v_ldc_unmap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) /* %o0: channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) * %o1: cookie
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) * %o2: mte_cookie
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) ENTRY(sun4v_ldc_revoke)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) mov HV_FAST_LDC_REVOKE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) ENDPROC(sun4v_ldc_revoke)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) /* %o0: device handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) * %o1: device INO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) * %o2: pointer to unsigned long cookie
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) ENTRY(sun4v_vintr_get_cookie)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) mov %o2, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) mov HV_FAST_VINTR_GET_COOKIE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) ENDPROC(sun4v_vintr_get_cookie)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) /* %o0: device handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) * %o1: device INO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) * %o2: cookie
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) ENTRY(sun4v_vintr_set_cookie)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) mov HV_FAST_VINTR_SET_COOKIE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) ENDPROC(sun4v_vintr_set_cookie)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) /* %o0: device handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) * %o1: device INO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) * %o2: pointer to unsigned long valid_state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) ENTRY(sun4v_vintr_get_valid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) mov %o2, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) mov HV_FAST_VINTR_GET_VALID, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) ENDPROC(sun4v_vintr_get_valid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) /* %o0: device handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) * %o1: device INO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) * %o2: valid_state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) ENTRY(sun4v_vintr_set_valid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) mov HV_FAST_VINTR_SET_VALID, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) ENDPROC(sun4v_vintr_set_valid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) /* %o0: device handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) * %o1: device INO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) * %o2: pointer to unsigned long state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) ENTRY(sun4v_vintr_get_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) mov %o2, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) mov HV_FAST_VINTR_GET_STATE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) ENDPROC(sun4v_vintr_get_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) /* %o0: device handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) * %o1: device INO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) * %o2: state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) ENTRY(sun4v_vintr_set_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) mov HV_FAST_VINTR_SET_STATE, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) ENDPROC(sun4v_vintr_set_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) /* %o0: device handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) * %o1: device INO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) * %o2: pointer to unsigned long cpuid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) ENTRY(sun4v_vintr_get_target)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) mov %o2, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) mov HV_FAST_VINTR_GET_TARGET, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) stx %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) ENDPROC(sun4v_vintr_get_target)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) /* %o0: device handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) * %o1: device INO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) * %o2: cpuid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) ENTRY(sun4v_vintr_set_target)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) mov HV_FAST_VINTR_SET_TARGET, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) ENDPROC(sun4v_vintr_set_target)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) /* %o0: NCS sub-function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) * %o1: sub-function arg real-address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) * %o2: sub-function arg size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) * returns %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) ENTRY(sun4v_ncs_request)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) mov HV_FAST_NCS_REQUEST, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) ENDPROC(sun4v_ncs_request)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) ENTRY(sun4v_svc_send)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) save %sp, -192, %sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) mov %i0, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) mov %i1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) mov %i2, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) mov HV_FAST_SVC_SEND, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) stx %o1, [%i3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) restore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) ENDPROC(sun4v_svc_send)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) ENTRY(sun4v_svc_recv)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) save %sp, -192, %sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) mov %i0, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) mov %i1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) mov %i2, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) mov HV_FAST_SVC_RECV, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) stx %o1, [%i3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) restore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) ENDPROC(sun4v_svc_recv)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) ENTRY(sun4v_svc_getstatus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) mov HV_FAST_SVC_GETSTATUS, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) mov %o1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) ENDPROC(sun4v_svc_getstatus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) ENTRY(sun4v_svc_setstatus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) mov HV_FAST_SVC_SETSTATUS, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) ENDPROC(sun4v_svc_setstatus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) ENTRY(sun4v_svc_clrstatus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) mov HV_FAST_SVC_CLRSTATUS, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) ENDPROC(sun4v_svc_clrstatus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) ENTRY(sun4v_mmustat_conf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) mov %o1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) mov HV_FAST_MMUSTAT_CONF, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) ENDPROC(sun4v_mmustat_conf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) ENTRY(sun4v_mmustat_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) mov %o0, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) mov HV_FAST_MMUSTAT_INFO, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) ENDPROC(sun4v_mmustat_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) ENTRY(sun4v_mmu_demap_all)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) clr %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) clr %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) mov HV_MMU_ALL, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) mov HV_FAST_MMU_DEMAP_ALL, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) ENDPROC(sun4v_mmu_demap_all)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) ENTRY(sun4v_niagara_getperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) mov %o0, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) mov HV_FAST_GET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) ENDPROC(sun4v_niagara_getperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) EXPORT_SYMBOL(sun4v_niagara_getperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) ENTRY(sun4v_niagara_setperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) mov HV_FAST_SET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) ENDPROC(sun4v_niagara_setperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) EXPORT_SYMBOL(sun4v_niagara_setperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) ENTRY(sun4v_niagara2_getperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) mov %o0, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) mov HV_FAST_N2_GET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) ENDPROC(sun4v_niagara2_getperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) EXPORT_SYMBOL(sun4v_niagara2_getperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) ENTRY(sun4v_niagara2_setperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) mov HV_FAST_N2_SET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) ENDPROC(sun4v_niagara2_setperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) EXPORT_SYMBOL(sun4v_niagara2_setperf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) ENTRY(sun4v_reboot_data_set)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) mov HV_FAST_REBOOT_DATA_SET, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) ENDPROC(sun4v_reboot_data_set)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) ENTRY(sun4v_vt_get_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) mov %o1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) mov HV_FAST_VT_GET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) ENDPROC(sun4v_vt_get_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) ENTRY(sun4v_vt_set_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) mov HV_FAST_VT_SET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) ENDPROC(sun4v_vt_set_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) ENTRY(sun4v_t5_get_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) mov %o1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) mov HV_FAST_T5_GET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) ENDPROC(sun4v_t5_get_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) ENTRY(sun4v_t5_set_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) mov HV_FAST_T5_SET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) ENDPROC(sun4v_t5_set_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) ENTRY(sun4v_m7_get_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) mov %o1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) mov HV_FAST_M7_GET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) ENDPROC(sun4v_m7_get_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) ENTRY(sun4v_m7_set_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) mov HV_FAST_M7_SET_PERFREG, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) ENDPROC(sun4v_m7_set_perfreg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) /* %o0: address of CCB array
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) * %o1: size (in bytes) of CCB array
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) * %o2: flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) * %o3: reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) * returns:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) * %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) * %o1: size (in bytes) of the CCB array that was accepted
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) * %o2: status data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) * %o3: reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) ENTRY(sun4v_ccb_submit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) mov %o5, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) mov HV_CCB_SUBMIT, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) stx %o1, [%o4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) stx %o2, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) ENDPROC(sun4v_ccb_submit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) EXPORT_SYMBOL(sun4v_ccb_submit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) /* %o0: completion area ra for the ccb to get info
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) * returns:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) * %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) * %o1: CCB state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) * %o2: position
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) * %o3: dax unit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) * %o4: queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) ENTRY(sun4v_ccb_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) mov %o1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) mov HV_CCB_INFO, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) sth %o1, [%g1 + CCB_INFO_OFFSET_CCB_STATE]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) sth %o2, [%g1 + CCB_INFO_OFFSET_QUEUE_POS]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) sth %o3, [%g1 + CCB_INFO_OFFSET_DAX_UNIT]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) sth %o4, [%g1 + CCB_INFO_OFFSET_QUEUE_NUM]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) ENDPROC(sun4v_ccb_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) EXPORT_SYMBOL(sun4v_ccb_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) /* %o0: completion area ra for the ccb to kill
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) * returns:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) * %o0: status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) * %o1: result of the kill
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) ENTRY(sun4v_ccb_kill)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) mov %o1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) mov HV_CCB_KILL, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) ta HV_FAST_TRAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) sth %o1, [%g1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) ENDPROC(sun4v_ccb_kill)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) EXPORT_SYMBOL(sun4v_ccb_kill)