162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci /* %o0: devhandle 362306a36Sopenharmony_ci * %o1: devino 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * returns %o0: sysino 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ciENTRY(sun4v_devino_to_sysino) 862306a36Sopenharmony_ci mov HV_FAST_INTR_DEVINO2SYSINO, %o5 962306a36Sopenharmony_ci ta HV_FAST_TRAP 1062306a36Sopenharmony_ci retl 1162306a36Sopenharmony_ci mov %o1, %o0 1262306a36Sopenharmony_ciENDPROC(sun4v_devino_to_sysino) 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci /* %o0: sysino 1562306a36Sopenharmony_ci * 1662306a36Sopenharmony_ci * returns %o0: intr_enabled (HV_INTR_{DISABLED,ENABLED}) 1762306a36Sopenharmony_ci */ 1862306a36Sopenharmony_ciENTRY(sun4v_intr_getenabled) 1962306a36Sopenharmony_ci mov HV_FAST_INTR_GETENABLED, %o5 2062306a36Sopenharmony_ci ta HV_FAST_TRAP 2162306a36Sopenharmony_ci retl 2262306a36Sopenharmony_ci mov %o1, %o0 2362306a36Sopenharmony_ciENDPROC(sun4v_intr_getenabled) 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci /* %o0: sysino 2662306a36Sopenharmony_ci * %o1: intr_enabled (HV_INTR_{DISABLED,ENABLED}) 2762306a36Sopenharmony_ci */ 2862306a36Sopenharmony_ciENTRY(sun4v_intr_setenabled) 2962306a36Sopenharmony_ci mov HV_FAST_INTR_SETENABLED, %o5 3062306a36Sopenharmony_ci ta HV_FAST_TRAP 3162306a36Sopenharmony_ci retl 3262306a36Sopenharmony_ci nop 3362306a36Sopenharmony_ciENDPROC(sun4v_intr_setenabled) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci /* %o0: sysino 3662306a36Sopenharmony_ci * 3762306a36Sopenharmony_ci * returns %o0: intr_state (HV_INTR_STATE_*) 3862306a36Sopenharmony_ci */ 3962306a36Sopenharmony_ciENTRY(sun4v_intr_getstate) 4062306a36Sopenharmony_ci mov HV_FAST_INTR_GETSTATE, %o5 4162306a36Sopenharmony_ci ta HV_FAST_TRAP 4262306a36Sopenharmony_ci retl 4362306a36Sopenharmony_ci mov %o1, %o0 4462306a36Sopenharmony_ciENDPROC(sun4v_intr_getstate) 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci /* %o0: sysino 4762306a36Sopenharmony_ci * %o1: intr_state (HV_INTR_STATE_*) 4862306a36Sopenharmony_ci */ 4962306a36Sopenharmony_ciENTRY(sun4v_intr_setstate) 5062306a36Sopenharmony_ci mov HV_FAST_INTR_SETSTATE, %o5 5162306a36Sopenharmony_ci ta HV_FAST_TRAP 5262306a36Sopenharmony_ci retl 5362306a36Sopenharmony_ci nop 5462306a36Sopenharmony_ciENDPROC(sun4v_intr_setstate) 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci /* %o0: sysino 5762306a36Sopenharmony_ci * 5862306a36Sopenharmony_ci * returns %o0: cpuid 5962306a36Sopenharmony_ci */ 6062306a36Sopenharmony_ciENTRY(sun4v_intr_gettarget) 6162306a36Sopenharmony_ci mov HV_FAST_INTR_GETTARGET, %o5 6262306a36Sopenharmony_ci ta HV_FAST_TRAP 6362306a36Sopenharmony_ci retl 6462306a36Sopenharmony_ci mov %o1, %o0 6562306a36Sopenharmony_ciENDPROC(sun4v_intr_gettarget) 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci /* %o0: sysino 6862306a36Sopenharmony_ci * %o1: cpuid 6962306a36Sopenharmony_ci */ 7062306a36Sopenharmony_ciENTRY(sun4v_intr_settarget) 7162306a36Sopenharmony_ci mov HV_FAST_INTR_SETTARGET, %o5 7262306a36Sopenharmony_ci ta HV_FAST_TRAP 7362306a36Sopenharmony_ci retl 7462306a36Sopenharmony_ci nop 7562306a36Sopenharmony_ciENDPROC(sun4v_intr_settarget) 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci /* %o0: cpuid 7862306a36Sopenharmony_ci * %o1: pc 7962306a36Sopenharmony_ci * %o2: rtba 8062306a36Sopenharmony_ci * %o3: arg0 8162306a36Sopenharmony_ci * 8262306a36Sopenharmony_ci * returns %o0: status 8362306a36Sopenharmony_ci */ 8462306a36Sopenharmony_ciENTRY(sun4v_cpu_start) 8562306a36Sopenharmony_ci mov HV_FAST_CPU_START, %o5 8662306a36Sopenharmony_ci ta HV_FAST_TRAP 8762306a36Sopenharmony_ci retl 8862306a36Sopenharmony_ci nop 8962306a36Sopenharmony_ciENDPROC(sun4v_cpu_start) 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci /* %o0: cpuid 9262306a36Sopenharmony_ci * 9362306a36Sopenharmony_ci * returns %o0: status 9462306a36Sopenharmony_ci */ 9562306a36Sopenharmony_ciENTRY(sun4v_cpu_stop) 9662306a36Sopenharmony_ci mov HV_FAST_CPU_STOP, %o5 9762306a36Sopenharmony_ci ta HV_FAST_TRAP 9862306a36Sopenharmony_ci retl 9962306a36Sopenharmony_ci nop 10062306a36Sopenharmony_ciENDPROC(sun4v_cpu_stop) 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci /* returns %o0: status */ 10362306a36Sopenharmony_ciENTRY(sun4v_cpu_yield) 10462306a36Sopenharmony_ci mov HV_FAST_CPU_YIELD, %o5 10562306a36Sopenharmony_ci ta HV_FAST_TRAP 10662306a36Sopenharmony_ci retl 10762306a36Sopenharmony_ci nop 10862306a36Sopenharmony_ciENDPROC(sun4v_cpu_yield) 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci /* %o0: cpuid 11162306a36Sopenharmony_ci * 11262306a36Sopenharmony_ci * returns %o0: status 11362306a36Sopenharmony_ci */ 11462306a36Sopenharmony_ciENTRY(sun4v_cpu_poke) 11562306a36Sopenharmony_ci mov HV_FAST_CPU_POKE, %o5 11662306a36Sopenharmony_ci ta HV_FAST_TRAP 11762306a36Sopenharmony_ci retl 11862306a36Sopenharmony_ci nop 11962306a36Sopenharmony_ciENDPROC(sun4v_cpu_poke) 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci /* %o0: type 12262306a36Sopenharmony_ci * %o1: queue paddr 12362306a36Sopenharmony_ci * %o2: num queue entries 12462306a36Sopenharmony_ci * 12562306a36Sopenharmony_ci * returns %o0: status 12662306a36Sopenharmony_ci */ 12762306a36Sopenharmony_ciENTRY(sun4v_cpu_qconf) 12862306a36Sopenharmony_ci mov HV_FAST_CPU_QCONF, %o5 12962306a36Sopenharmony_ci ta HV_FAST_TRAP 13062306a36Sopenharmony_ci retl 13162306a36Sopenharmony_ci nop 13262306a36Sopenharmony_ciENDPROC(sun4v_cpu_qconf) 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci /* %o0: num cpus in cpu list 13562306a36Sopenharmony_ci * %o1: cpu list paddr 13662306a36Sopenharmony_ci * %o2: mondo block paddr 13762306a36Sopenharmony_ci * 13862306a36Sopenharmony_ci * returns %o0: status 13962306a36Sopenharmony_ci */ 14062306a36Sopenharmony_ciENTRY(sun4v_cpu_mondo_send) 14162306a36Sopenharmony_ci mov HV_FAST_CPU_MONDO_SEND, %o5 14262306a36Sopenharmony_ci ta HV_FAST_TRAP 14362306a36Sopenharmony_ci retl 14462306a36Sopenharmony_ci nop 14562306a36Sopenharmony_ciENDPROC(sun4v_cpu_mondo_send) 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci /* %o0: CPU ID 14862306a36Sopenharmony_ci * 14962306a36Sopenharmony_ci * returns %o0: -status if status non-zero, else 15062306a36Sopenharmony_ci * %o0: cpu state as HV_CPU_STATE_* 15162306a36Sopenharmony_ci */ 15262306a36Sopenharmony_ciENTRY(sun4v_cpu_state) 15362306a36Sopenharmony_ci mov HV_FAST_CPU_STATE, %o5 15462306a36Sopenharmony_ci ta HV_FAST_TRAP 15562306a36Sopenharmony_ci brnz,pn %o0, 1f 15662306a36Sopenharmony_ci sub %g0, %o0, %o0 15762306a36Sopenharmony_ci mov %o1, %o0 15862306a36Sopenharmony_ci1: retl 15962306a36Sopenharmony_ci nop 16062306a36Sopenharmony_ciENDPROC(sun4v_cpu_state) 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci /* %o0: virtual address 16362306a36Sopenharmony_ci * %o1: must be zero 16462306a36Sopenharmony_ci * %o2: TTE 16562306a36Sopenharmony_ci * %o3: HV_MMU_* flags 16662306a36Sopenharmony_ci * 16762306a36Sopenharmony_ci * returns %o0: status 16862306a36Sopenharmony_ci */ 16962306a36Sopenharmony_ciENTRY(sun4v_mmu_map_perm_addr) 17062306a36Sopenharmony_ci mov HV_FAST_MMU_MAP_PERM_ADDR, %o5 17162306a36Sopenharmony_ci ta HV_FAST_TRAP 17262306a36Sopenharmony_ci retl 17362306a36Sopenharmony_ci nop 17462306a36Sopenharmony_ciENDPROC(sun4v_mmu_map_perm_addr) 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci /* %o0: number of TSB descriptions 17762306a36Sopenharmony_ci * %o1: TSB descriptions real address 17862306a36Sopenharmony_ci * 17962306a36Sopenharmony_ci * returns %o0: status 18062306a36Sopenharmony_ci */ 18162306a36Sopenharmony_ciENTRY(sun4v_mmu_tsb_ctx0) 18262306a36Sopenharmony_ci mov HV_FAST_MMU_TSB_CTX0, %o5 18362306a36Sopenharmony_ci ta HV_FAST_TRAP 18462306a36Sopenharmony_ci retl 18562306a36Sopenharmony_ci nop 18662306a36Sopenharmony_ciENDPROC(sun4v_mmu_tsb_ctx0) 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci /* %o0: API group number 18962306a36Sopenharmony_ci * %o1: pointer to unsigned long major number storage 19062306a36Sopenharmony_ci * %o2: pointer to unsigned long minor number storage 19162306a36Sopenharmony_ci * 19262306a36Sopenharmony_ci * returns %o0: status 19362306a36Sopenharmony_ci */ 19462306a36Sopenharmony_ciENTRY(sun4v_get_version) 19562306a36Sopenharmony_ci mov HV_CORE_GET_VER, %o5 19662306a36Sopenharmony_ci mov %o1, %o3 19762306a36Sopenharmony_ci mov %o2, %o4 19862306a36Sopenharmony_ci ta HV_CORE_TRAP 19962306a36Sopenharmony_ci stx %o1, [%o3] 20062306a36Sopenharmony_ci retl 20162306a36Sopenharmony_ci stx %o2, [%o4] 20262306a36Sopenharmony_ciENDPROC(sun4v_get_version) 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci /* %o0: API group number 20562306a36Sopenharmony_ci * %o1: desired major number 20662306a36Sopenharmony_ci * %o2: desired minor number 20762306a36Sopenharmony_ci * %o3: pointer to unsigned long actual minor number storage 20862306a36Sopenharmony_ci * 20962306a36Sopenharmony_ci * returns %o0: status 21062306a36Sopenharmony_ci */ 21162306a36Sopenharmony_ciENTRY(sun4v_set_version) 21262306a36Sopenharmony_ci mov HV_CORE_SET_VER, %o5 21362306a36Sopenharmony_ci mov %o3, %o4 21462306a36Sopenharmony_ci ta HV_CORE_TRAP 21562306a36Sopenharmony_ci retl 21662306a36Sopenharmony_ci stx %o1, [%o4] 21762306a36Sopenharmony_ciENDPROC(sun4v_set_version) 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci /* %o0: pointer to unsigned long time 22062306a36Sopenharmony_ci * 22162306a36Sopenharmony_ci * returns %o0: status 22262306a36Sopenharmony_ci */ 22362306a36Sopenharmony_ciENTRY(sun4v_tod_get) 22462306a36Sopenharmony_ci mov %o0, %o4 22562306a36Sopenharmony_ci mov HV_FAST_TOD_GET, %o5 22662306a36Sopenharmony_ci ta HV_FAST_TRAP 22762306a36Sopenharmony_ci stx %o1, [%o4] 22862306a36Sopenharmony_ci retl 22962306a36Sopenharmony_ci nop 23062306a36Sopenharmony_ciENDPROC(sun4v_tod_get) 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci /* %o0: time 23362306a36Sopenharmony_ci * 23462306a36Sopenharmony_ci * returns %o0: status 23562306a36Sopenharmony_ci */ 23662306a36Sopenharmony_ciENTRY(sun4v_tod_set) 23762306a36Sopenharmony_ci mov HV_FAST_TOD_SET, %o5 23862306a36Sopenharmony_ci ta HV_FAST_TRAP 23962306a36Sopenharmony_ci retl 24062306a36Sopenharmony_ci nop 24162306a36Sopenharmony_ciENDPROC(sun4v_tod_set) 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ci /* %o0: pointer to unsigned long status 24462306a36Sopenharmony_ci * 24562306a36Sopenharmony_ci * returns %o0: signed character 24662306a36Sopenharmony_ci */ 24762306a36Sopenharmony_ciENTRY(sun4v_con_getchar) 24862306a36Sopenharmony_ci mov %o0, %o4 24962306a36Sopenharmony_ci mov HV_FAST_CONS_GETCHAR, %o5 25062306a36Sopenharmony_ci clr %o0 25162306a36Sopenharmony_ci clr %o1 25262306a36Sopenharmony_ci ta HV_FAST_TRAP 25362306a36Sopenharmony_ci stx %o0, [%o4] 25462306a36Sopenharmony_ci retl 25562306a36Sopenharmony_ci sra %o1, 0, %o0 25662306a36Sopenharmony_ciENDPROC(sun4v_con_getchar) 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci /* %o0: signed long character 25962306a36Sopenharmony_ci * 26062306a36Sopenharmony_ci * returns %o0: status 26162306a36Sopenharmony_ci */ 26262306a36Sopenharmony_ciENTRY(sun4v_con_putchar) 26362306a36Sopenharmony_ci mov HV_FAST_CONS_PUTCHAR, %o5 26462306a36Sopenharmony_ci ta HV_FAST_TRAP 26562306a36Sopenharmony_ci retl 26662306a36Sopenharmony_ci sra %o0, 0, %o0 26762306a36Sopenharmony_ciENDPROC(sun4v_con_putchar) 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ci /* %o0: buffer real address 27062306a36Sopenharmony_ci * %o1: buffer size 27162306a36Sopenharmony_ci * %o2: pointer to unsigned long bytes_read 27262306a36Sopenharmony_ci * 27362306a36Sopenharmony_ci * returns %o0: status 27462306a36Sopenharmony_ci */ 27562306a36Sopenharmony_ciENTRY(sun4v_con_read) 27662306a36Sopenharmony_ci mov %o2, %o4 27762306a36Sopenharmony_ci mov HV_FAST_CONS_READ, %o5 27862306a36Sopenharmony_ci ta HV_FAST_TRAP 27962306a36Sopenharmony_ci brnz %o0, 1f 28062306a36Sopenharmony_ci cmp %o1, -1 /* break */ 28162306a36Sopenharmony_ci be,a,pn %icc, 1f 28262306a36Sopenharmony_ci mov %o1, %o0 28362306a36Sopenharmony_ci cmp %o1, -2 /* hup */ 28462306a36Sopenharmony_ci be,a,pn %icc, 1f 28562306a36Sopenharmony_ci mov %o1, %o0 28662306a36Sopenharmony_ci stx %o1, [%o4] 28762306a36Sopenharmony_ci1: retl 28862306a36Sopenharmony_ci nop 28962306a36Sopenharmony_ciENDPROC(sun4v_con_read) 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci /* %o0: buffer real address 29262306a36Sopenharmony_ci * %o1: buffer size 29362306a36Sopenharmony_ci * %o2: pointer to unsigned long bytes_written 29462306a36Sopenharmony_ci * 29562306a36Sopenharmony_ci * returns %o0: status 29662306a36Sopenharmony_ci */ 29762306a36Sopenharmony_ciENTRY(sun4v_con_write) 29862306a36Sopenharmony_ci mov %o2, %o4 29962306a36Sopenharmony_ci mov HV_FAST_CONS_WRITE, %o5 30062306a36Sopenharmony_ci ta HV_FAST_TRAP 30162306a36Sopenharmony_ci stx %o1, [%o4] 30262306a36Sopenharmony_ci retl 30362306a36Sopenharmony_ci nop 30462306a36Sopenharmony_ciENDPROC(sun4v_con_write) 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci /* %o0: soft state 30762306a36Sopenharmony_ci * %o1: address of description string 30862306a36Sopenharmony_ci * 30962306a36Sopenharmony_ci * returns %o0: status 31062306a36Sopenharmony_ci */ 31162306a36Sopenharmony_ciENTRY(sun4v_mach_set_soft_state) 31262306a36Sopenharmony_ci mov HV_FAST_MACH_SET_SOFT_STATE, %o5 31362306a36Sopenharmony_ci ta HV_FAST_TRAP 31462306a36Sopenharmony_ci retl 31562306a36Sopenharmony_ci nop 31662306a36Sopenharmony_ciENDPROC(sun4v_mach_set_soft_state) 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ci /* %o0: exit code 31962306a36Sopenharmony_ci * 32062306a36Sopenharmony_ci * Does not return. 32162306a36Sopenharmony_ci */ 32262306a36Sopenharmony_ciENTRY(sun4v_mach_exit) 32362306a36Sopenharmony_ci mov HV_FAST_MACH_EXIT, %o5 32462306a36Sopenharmony_ci ta HV_FAST_TRAP 32562306a36Sopenharmony_ci retl 32662306a36Sopenharmony_ci nop 32762306a36Sopenharmony_ciENDPROC(sun4v_mach_exit) 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci /* %o0: buffer real address 33062306a36Sopenharmony_ci * %o1: buffer length 33162306a36Sopenharmony_ci * %o2: pointer to unsigned long real_buf_len 33262306a36Sopenharmony_ci * 33362306a36Sopenharmony_ci * returns %o0: status 33462306a36Sopenharmony_ci */ 33562306a36Sopenharmony_ciENTRY(sun4v_mach_desc) 33662306a36Sopenharmony_ci mov %o2, %o4 33762306a36Sopenharmony_ci mov HV_FAST_MACH_DESC, %o5 33862306a36Sopenharmony_ci ta HV_FAST_TRAP 33962306a36Sopenharmony_ci stx %o1, [%o4] 34062306a36Sopenharmony_ci retl 34162306a36Sopenharmony_ci nop 34262306a36Sopenharmony_ciENDPROC(sun4v_mach_desc) 34362306a36Sopenharmony_ci 34462306a36Sopenharmony_ci /* %o0: new timeout in milliseconds 34562306a36Sopenharmony_ci * %o1: pointer to unsigned long orig_timeout 34662306a36Sopenharmony_ci * 34762306a36Sopenharmony_ci * returns %o0: status 34862306a36Sopenharmony_ci */ 34962306a36Sopenharmony_ciENTRY(sun4v_mach_set_watchdog) 35062306a36Sopenharmony_ci mov %o1, %o4 35162306a36Sopenharmony_ci mov HV_FAST_MACH_SET_WATCHDOG, %o5 35262306a36Sopenharmony_ci ta HV_FAST_TRAP 35362306a36Sopenharmony_ci brnz,a,pn %o4, 0f 35462306a36Sopenharmony_ci stx %o1, [%o4] 35562306a36Sopenharmony_ci0: retl 35662306a36Sopenharmony_ci nop 35762306a36Sopenharmony_ciENDPROC(sun4v_mach_set_watchdog) 35862306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_mach_set_watchdog) 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ci /* No inputs and does not return. */ 36162306a36Sopenharmony_ciENTRY(sun4v_mach_sir) 36262306a36Sopenharmony_ci mov %o1, %o4 36362306a36Sopenharmony_ci mov HV_FAST_MACH_SIR, %o5 36462306a36Sopenharmony_ci ta HV_FAST_TRAP 36562306a36Sopenharmony_ci stx %o1, [%o4] 36662306a36Sopenharmony_ci retl 36762306a36Sopenharmony_ci nop 36862306a36Sopenharmony_ciENDPROC(sun4v_mach_sir) 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ci /* %o0: channel 37162306a36Sopenharmony_ci * %o1: ra 37262306a36Sopenharmony_ci * %o2: num_entries 37362306a36Sopenharmony_ci * 37462306a36Sopenharmony_ci * returns %o0: status 37562306a36Sopenharmony_ci */ 37662306a36Sopenharmony_ciENTRY(sun4v_ldc_tx_qconf) 37762306a36Sopenharmony_ci mov HV_FAST_LDC_TX_QCONF, %o5 37862306a36Sopenharmony_ci ta HV_FAST_TRAP 37962306a36Sopenharmony_ci retl 38062306a36Sopenharmony_ci nop 38162306a36Sopenharmony_ciENDPROC(sun4v_ldc_tx_qconf) 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ci /* %o0: channel 38462306a36Sopenharmony_ci * %o1: pointer to unsigned long ra 38562306a36Sopenharmony_ci * %o2: pointer to unsigned long num_entries 38662306a36Sopenharmony_ci * 38762306a36Sopenharmony_ci * returns %o0: status 38862306a36Sopenharmony_ci */ 38962306a36Sopenharmony_ciENTRY(sun4v_ldc_tx_qinfo) 39062306a36Sopenharmony_ci mov %o1, %g1 39162306a36Sopenharmony_ci mov %o2, %g2 39262306a36Sopenharmony_ci mov HV_FAST_LDC_TX_QINFO, %o5 39362306a36Sopenharmony_ci ta HV_FAST_TRAP 39462306a36Sopenharmony_ci stx %o1, [%g1] 39562306a36Sopenharmony_ci stx %o2, [%g2] 39662306a36Sopenharmony_ci retl 39762306a36Sopenharmony_ci nop 39862306a36Sopenharmony_ciENDPROC(sun4v_ldc_tx_qinfo) 39962306a36Sopenharmony_ci 40062306a36Sopenharmony_ci /* %o0: channel 40162306a36Sopenharmony_ci * %o1: pointer to unsigned long head_off 40262306a36Sopenharmony_ci * %o2: pointer to unsigned long tail_off 40362306a36Sopenharmony_ci * %o2: pointer to unsigned long chan_state 40462306a36Sopenharmony_ci * 40562306a36Sopenharmony_ci * returns %o0: status 40662306a36Sopenharmony_ci */ 40762306a36Sopenharmony_ciENTRY(sun4v_ldc_tx_get_state) 40862306a36Sopenharmony_ci mov %o1, %g1 40962306a36Sopenharmony_ci mov %o2, %g2 41062306a36Sopenharmony_ci mov %o3, %g3 41162306a36Sopenharmony_ci mov HV_FAST_LDC_TX_GET_STATE, %o5 41262306a36Sopenharmony_ci ta HV_FAST_TRAP 41362306a36Sopenharmony_ci stx %o1, [%g1] 41462306a36Sopenharmony_ci stx %o2, [%g2] 41562306a36Sopenharmony_ci stx %o3, [%g3] 41662306a36Sopenharmony_ci retl 41762306a36Sopenharmony_ci nop 41862306a36Sopenharmony_ciENDPROC(sun4v_ldc_tx_get_state) 41962306a36Sopenharmony_ci 42062306a36Sopenharmony_ci /* %o0: channel 42162306a36Sopenharmony_ci * %o1: tail_off 42262306a36Sopenharmony_ci * 42362306a36Sopenharmony_ci * returns %o0: status 42462306a36Sopenharmony_ci */ 42562306a36Sopenharmony_ciENTRY(sun4v_ldc_tx_set_qtail) 42662306a36Sopenharmony_ci mov HV_FAST_LDC_TX_SET_QTAIL, %o5 42762306a36Sopenharmony_ci ta HV_FAST_TRAP 42862306a36Sopenharmony_ci retl 42962306a36Sopenharmony_ci nop 43062306a36Sopenharmony_ciENDPROC(sun4v_ldc_tx_set_qtail) 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_ci /* %o0: channel 43362306a36Sopenharmony_ci * %o1: ra 43462306a36Sopenharmony_ci * %o2: num_entries 43562306a36Sopenharmony_ci * 43662306a36Sopenharmony_ci * returns %o0: status 43762306a36Sopenharmony_ci */ 43862306a36Sopenharmony_ciENTRY(sun4v_ldc_rx_qconf) 43962306a36Sopenharmony_ci mov HV_FAST_LDC_RX_QCONF, %o5 44062306a36Sopenharmony_ci ta HV_FAST_TRAP 44162306a36Sopenharmony_ci retl 44262306a36Sopenharmony_ci nop 44362306a36Sopenharmony_ciENDPROC(sun4v_ldc_rx_qconf) 44462306a36Sopenharmony_ci 44562306a36Sopenharmony_ci /* %o0: channel 44662306a36Sopenharmony_ci * %o1: pointer to unsigned long ra 44762306a36Sopenharmony_ci * %o2: pointer to unsigned long num_entries 44862306a36Sopenharmony_ci * 44962306a36Sopenharmony_ci * returns %o0: status 45062306a36Sopenharmony_ci */ 45162306a36Sopenharmony_ciENTRY(sun4v_ldc_rx_qinfo) 45262306a36Sopenharmony_ci mov %o1, %g1 45362306a36Sopenharmony_ci mov %o2, %g2 45462306a36Sopenharmony_ci mov HV_FAST_LDC_RX_QINFO, %o5 45562306a36Sopenharmony_ci ta HV_FAST_TRAP 45662306a36Sopenharmony_ci stx %o1, [%g1] 45762306a36Sopenharmony_ci stx %o2, [%g2] 45862306a36Sopenharmony_ci retl 45962306a36Sopenharmony_ci nop 46062306a36Sopenharmony_ciENDPROC(sun4v_ldc_rx_qinfo) 46162306a36Sopenharmony_ci 46262306a36Sopenharmony_ci /* %o0: channel 46362306a36Sopenharmony_ci * %o1: pointer to unsigned long head_off 46462306a36Sopenharmony_ci * %o2: pointer to unsigned long tail_off 46562306a36Sopenharmony_ci * %o2: pointer to unsigned long chan_state 46662306a36Sopenharmony_ci * 46762306a36Sopenharmony_ci * returns %o0: status 46862306a36Sopenharmony_ci */ 46962306a36Sopenharmony_ciENTRY(sun4v_ldc_rx_get_state) 47062306a36Sopenharmony_ci mov %o1, %g1 47162306a36Sopenharmony_ci mov %o2, %g2 47262306a36Sopenharmony_ci mov %o3, %g3 47362306a36Sopenharmony_ci mov HV_FAST_LDC_RX_GET_STATE, %o5 47462306a36Sopenharmony_ci ta HV_FAST_TRAP 47562306a36Sopenharmony_ci stx %o1, [%g1] 47662306a36Sopenharmony_ci stx %o2, [%g2] 47762306a36Sopenharmony_ci stx %o3, [%g3] 47862306a36Sopenharmony_ci retl 47962306a36Sopenharmony_ci nop 48062306a36Sopenharmony_ciENDPROC(sun4v_ldc_rx_get_state) 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci /* %o0: channel 48362306a36Sopenharmony_ci * %o1: head_off 48462306a36Sopenharmony_ci * 48562306a36Sopenharmony_ci * returns %o0: status 48662306a36Sopenharmony_ci */ 48762306a36Sopenharmony_ciENTRY(sun4v_ldc_rx_set_qhead) 48862306a36Sopenharmony_ci mov HV_FAST_LDC_RX_SET_QHEAD, %o5 48962306a36Sopenharmony_ci ta HV_FAST_TRAP 49062306a36Sopenharmony_ci retl 49162306a36Sopenharmony_ci nop 49262306a36Sopenharmony_ciENDPROC(sun4v_ldc_rx_set_qhead) 49362306a36Sopenharmony_ci 49462306a36Sopenharmony_ci /* %o0: channel 49562306a36Sopenharmony_ci * %o1: ra 49662306a36Sopenharmony_ci * %o2: num_entries 49762306a36Sopenharmony_ci * 49862306a36Sopenharmony_ci * returns %o0: status 49962306a36Sopenharmony_ci */ 50062306a36Sopenharmony_ciENTRY(sun4v_ldc_set_map_table) 50162306a36Sopenharmony_ci mov HV_FAST_LDC_SET_MAP_TABLE, %o5 50262306a36Sopenharmony_ci ta HV_FAST_TRAP 50362306a36Sopenharmony_ci retl 50462306a36Sopenharmony_ci nop 50562306a36Sopenharmony_ciENDPROC(sun4v_ldc_set_map_table) 50662306a36Sopenharmony_ci 50762306a36Sopenharmony_ci /* %o0: channel 50862306a36Sopenharmony_ci * %o1: pointer to unsigned long ra 50962306a36Sopenharmony_ci * %o2: pointer to unsigned long num_entries 51062306a36Sopenharmony_ci * 51162306a36Sopenharmony_ci * returns %o0: status 51262306a36Sopenharmony_ci */ 51362306a36Sopenharmony_ciENTRY(sun4v_ldc_get_map_table) 51462306a36Sopenharmony_ci mov %o1, %g1 51562306a36Sopenharmony_ci mov %o2, %g2 51662306a36Sopenharmony_ci mov HV_FAST_LDC_GET_MAP_TABLE, %o5 51762306a36Sopenharmony_ci ta HV_FAST_TRAP 51862306a36Sopenharmony_ci stx %o1, [%g1] 51962306a36Sopenharmony_ci stx %o2, [%g2] 52062306a36Sopenharmony_ci retl 52162306a36Sopenharmony_ci nop 52262306a36Sopenharmony_ciENDPROC(sun4v_ldc_get_map_table) 52362306a36Sopenharmony_ci 52462306a36Sopenharmony_ci /* %o0: channel 52562306a36Sopenharmony_ci * %o1: dir_code 52662306a36Sopenharmony_ci * %o2: tgt_raddr 52762306a36Sopenharmony_ci * %o3: lcl_raddr 52862306a36Sopenharmony_ci * %o4: len 52962306a36Sopenharmony_ci * %o5: pointer to unsigned long actual_len 53062306a36Sopenharmony_ci * 53162306a36Sopenharmony_ci * returns %o0: status 53262306a36Sopenharmony_ci */ 53362306a36Sopenharmony_ciENTRY(sun4v_ldc_copy) 53462306a36Sopenharmony_ci mov %o5, %g1 53562306a36Sopenharmony_ci mov HV_FAST_LDC_COPY, %o5 53662306a36Sopenharmony_ci ta HV_FAST_TRAP 53762306a36Sopenharmony_ci stx %o1, [%g1] 53862306a36Sopenharmony_ci retl 53962306a36Sopenharmony_ci nop 54062306a36Sopenharmony_ciENDPROC(sun4v_ldc_copy) 54162306a36Sopenharmony_ci 54262306a36Sopenharmony_ci /* %o0: channel 54362306a36Sopenharmony_ci * %o1: cookie 54462306a36Sopenharmony_ci * %o2: pointer to unsigned long ra 54562306a36Sopenharmony_ci * %o3: pointer to unsigned long perm 54662306a36Sopenharmony_ci * 54762306a36Sopenharmony_ci * returns %o0: status 54862306a36Sopenharmony_ci */ 54962306a36Sopenharmony_ciENTRY(sun4v_ldc_mapin) 55062306a36Sopenharmony_ci mov %o2, %g1 55162306a36Sopenharmony_ci mov %o3, %g2 55262306a36Sopenharmony_ci mov HV_FAST_LDC_MAPIN, %o5 55362306a36Sopenharmony_ci ta HV_FAST_TRAP 55462306a36Sopenharmony_ci stx %o1, [%g1] 55562306a36Sopenharmony_ci stx %o2, [%g2] 55662306a36Sopenharmony_ci retl 55762306a36Sopenharmony_ci nop 55862306a36Sopenharmony_ciENDPROC(sun4v_ldc_mapin) 55962306a36Sopenharmony_ci 56062306a36Sopenharmony_ci /* %o0: ra 56162306a36Sopenharmony_ci * 56262306a36Sopenharmony_ci * returns %o0: status 56362306a36Sopenharmony_ci */ 56462306a36Sopenharmony_ciENTRY(sun4v_ldc_unmap) 56562306a36Sopenharmony_ci mov HV_FAST_LDC_UNMAP, %o5 56662306a36Sopenharmony_ci ta HV_FAST_TRAP 56762306a36Sopenharmony_ci retl 56862306a36Sopenharmony_ci nop 56962306a36Sopenharmony_ciENDPROC(sun4v_ldc_unmap) 57062306a36Sopenharmony_ci 57162306a36Sopenharmony_ci /* %o0: channel 57262306a36Sopenharmony_ci * %o1: cookie 57362306a36Sopenharmony_ci * %o2: mte_cookie 57462306a36Sopenharmony_ci * 57562306a36Sopenharmony_ci * returns %o0: status 57662306a36Sopenharmony_ci */ 57762306a36Sopenharmony_ciENTRY(sun4v_ldc_revoke) 57862306a36Sopenharmony_ci mov HV_FAST_LDC_REVOKE, %o5 57962306a36Sopenharmony_ci ta HV_FAST_TRAP 58062306a36Sopenharmony_ci retl 58162306a36Sopenharmony_ci nop 58262306a36Sopenharmony_ciENDPROC(sun4v_ldc_revoke) 58362306a36Sopenharmony_ci 58462306a36Sopenharmony_ci /* %o0: device handle 58562306a36Sopenharmony_ci * %o1: device INO 58662306a36Sopenharmony_ci * %o2: pointer to unsigned long cookie 58762306a36Sopenharmony_ci * 58862306a36Sopenharmony_ci * returns %o0: status 58962306a36Sopenharmony_ci */ 59062306a36Sopenharmony_ciENTRY(sun4v_vintr_get_cookie) 59162306a36Sopenharmony_ci mov %o2, %g1 59262306a36Sopenharmony_ci mov HV_FAST_VINTR_GET_COOKIE, %o5 59362306a36Sopenharmony_ci ta HV_FAST_TRAP 59462306a36Sopenharmony_ci stx %o1, [%g1] 59562306a36Sopenharmony_ci retl 59662306a36Sopenharmony_ci nop 59762306a36Sopenharmony_ciENDPROC(sun4v_vintr_get_cookie) 59862306a36Sopenharmony_ci 59962306a36Sopenharmony_ci /* %o0: device handle 60062306a36Sopenharmony_ci * %o1: device INO 60162306a36Sopenharmony_ci * %o2: cookie 60262306a36Sopenharmony_ci * 60362306a36Sopenharmony_ci * returns %o0: status 60462306a36Sopenharmony_ci */ 60562306a36Sopenharmony_ciENTRY(sun4v_vintr_set_cookie) 60662306a36Sopenharmony_ci mov HV_FAST_VINTR_SET_COOKIE, %o5 60762306a36Sopenharmony_ci ta HV_FAST_TRAP 60862306a36Sopenharmony_ci retl 60962306a36Sopenharmony_ci nop 61062306a36Sopenharmony_ciENDPROC(sun4v_vintr_set_cookie) 61162306a36Sopenharmony_ci 61262306a36Sopenharmony_ci /* %o0: device handle 61362306a36Sopenharmony_ci * %o1: device INO 61462306a36Sopenharmony_ci * %o2: pointer to unsigned long valid_state 61562306a36Sopenharmony_ci * 61662306a36Sopenharmony_ci * returns %o0: status 61762306a36Sopenharmony_ci */ 61862306a36Sopenharmony_ciENTRY(sun4v_vintr_get_valid) 61962306a36Sopenharmony_ci mov %o2, %g1 62062306a36Sopenharmony_ci mov HV_FAST_VINTR_GET_VALID, %o5 62162306a36Sopenharmony_ci ta HV_FAST_TRAP 62262306a36Sopenharmony_ci stx %o1, [%g1] 62362306a36Sopenharmony_ci retl 62462306a36Sopenharmony_ci nop 62562306a36Sopenharmony_ciENDPROC(sun4v_vintr_get_valid) 62662306a36Sopenharmony_ci 62762306a36Sopenharmony_ci /* %o0: device handle 62862306a36Sopenharmony_ci * %o1: device INO 62962306a36Sopenharmony_ci * %o2: valid_state 63062306a36Sopenharmony_ci * 63162306a36Sopenharmony_ci * returns %o0: status 63262306a36Sopenharmony_ci */ 63362306a36Sopenharmony_ciENTRY(sun4v_vintr_set_valid) 63462306a36Sopenharmony_ci mov HV_FAST_VINTR_SET_VALID, %o5 63562306a36Sopenharmony_ci ta HV_FAST_TRAP 63662306a36Sopenharmony_ci retl 63762306a36Sopenharmony_ci nop 63862306a36Sopenharmony_ciENDPROC(sun4v_vintr_set_valid) 63962306a36Sopenharmony_ci 64062306a36Sopenharmony_ci /* %o0: device handle 64162306a36Sopenharmony_ci * %o1: device INO 64262306a36Sopenharmony_ci * %o2: pointer to unsigned long state 64362306a36Sopenharmony_ci * 64462306a36Sopenharmony_ci * returns %o0: status 64562306a36Sopenharmony_ci */ 64662306a36Sopenharmony_ciENTRY(sun4v_vintr_get_state) 64762306a36Sopenharmony_ci mov %o2, %g1 64862306a36Sopenharmony_ci mov HV_FAST_VINTR_GET_STATE, %o5 64962306a36Sopenharmony_ci ta HV_FAST_TRAP 65062306a36Sopenharmony_ci stx %o1, [%g1] 65162306a36Sopenharmony_ci retl 65262306a36Sopenharmony_ci nop 65362306a36Sopenharmony_ciENDPROC(sun4v_vintr_get_state) 65462306a36Sopenharmony_ci 65562306a36Sopenharmony_ci /* %o0: device handle 65662306a36Sopenharmony_ci * %o1: device INO 65762306a36Sopenharmony_ci * %o2: state 65862306a36Sopenharmony_ci * 65962306a36Sopenharmony_ci * returns %o0: status 66062306a36Sopenharmony_ci */ 66162306a36Sopenharmony_ciENTRY(sun4v_vintr_set_state) 66262306a36Sopenharmony_ci mov HV_FAST_VINTR_SET_STATE, %o5 66362306a36Sopenharmony_ci ta HV_FAST_TRAP 66462306a36Sopenharmony_ci retl 66562306a36Sopenharmony_ci nop 66662306a36Sopenharmony_ciENDPROC(sun4v_vintr_set_state) 66762306a36Sopenharmony_ci 66862306a36Sopenharmony_ci /* %o0: device handle 66962306a36Sopenharmony_ci * %o1: device INO 67062306a36Sopenharmony_ci * %o2: pointer to unsigned long cpuid 67162306a36Sopenharmony_ci * 67262306a36Sopenharmony_ci * returns %o0: status 67362306a36Sopenharmony_ci */ 67462306a36Sopenharmony_ciENTRY(sun4v_vintr_get_target) 67562306a36Sopenharmony_ci mov %o2, %g1 67662306a36Sopenharmony_ci mov HV_FAST_VINTR_GET_TARGET, %o5 67762306a36Sopenharmony_ci ta HV_FAST_TRAP 67862306a36Sopenharmony_ci stx %o1, [%g1] 67962306a36Sopenharmony_ci retl 68062306a36Sopenharmony_ci nop 68162306a36Sopenharmony_ciENDPROC(sun4v_vintr_get_target) 68262306a36Sopenharmony_ci 68362306a36Sopenharmony_ci /* %o0: device handle 68462306a36Sopenharmony_ci * %o1: device INO 68562306a36Sopenharmony_ci * %o2: cpuid 68662306a36Sopenharmony_ci * 68762306a36Sopenharmony_ci * returns %o0: status 68862306a36Sopenharmony_ci */ 68962306a36Sopenharmony_ciENTRY(sun4v_vintr_set_target) 69062306a36Sopenharmony_ci mov HV_FAST_VINTR_SET_TARGET, %o5 69162306a36Sopenharmony_ci ta HV_FAST_TRAP 69262306a36Sopenharmony_ci retl 69362306a36Sopenharmony_ci nop 69462306a36Sopenharmony_ciENDPROC(sun4v_vintr_set_target) 69562306a36Sopenharmony_ci 69662306a36Sopenharmony_ci /* %o0: NCS sub-function 69762306a36Sopenharmony_ci * %o1: sub-function arg real-address 69862306a36Sopenharmony_ci * %o2: sub-function arg size 69962306a36Sopenharmony_ci * 70062306a36Sopenharmony_ci * returns %o0: status 70162306a36Sopenharmony_ci */ 70262306a36Sopenharmony_ciENTRY(sun4v_ncs_request) 70362306a36Sopenharmony_ci mov HV_FAST_NCS_REQUEST, %o5 70462306a36Sopenharmony_ci ta HV_FAST_TRAP 70562306a36Sopenharmony_ci retl 70662306a36Sopenharmony_ci nop 70762306a36Sopenharmony_ciENDPROC(sun4v_ncs_request) 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ciENTRY(sun4v_svc_send) 71062306a36Sopenharmony_ci save %sp, -192, %sp 71162306a36Sopenharmony_ci mov %i0, %o0 71262306a36Sopenharmony_ci mov %i1, %o1 71362306a36Sopenharmony_ci mov %i2, %o2 71462306a36Sopenharmony_ci mov HV_FAST_SVC_SEND, %o5 71562306a36Sopenharmony_ci ta HV_FAST_TRAP 71662306a36Sopenharmony_ci stx %o1, [%i3] 71762306a36Sopenharmony_ci ret 71862306a36Sopenharmony_ci restore 71962306a36Sopenharmony_ciENDPROC(sun4v_svc_send) 72062306a36Sopenharmony_ci 72162306a36Sopenharmony_ciENTRY(sun4v_svc_recv) 72262306a36Sopenharmony_ci save %sp, -192, %sp 72362306a36Sopenharmony_ci mov %i0, %o0 72462306a36Sopenharmony_ci mov %i1, %o1 72562306a36Sopenharmony_ci mov %i2, %o2 72662306a36Sopenharmony_ci mov HV_FAST_SVC_RECV, %o5 72762306a36Sopenharmony_ci ta HV_FAST_TRAP 72862306a36Sopenharmony_ci stx %o1, [%i3] 72962306a36Sopenharmony_ci ret 73062306a36Sopenharmony_ci restore 73162306a36Sopenharmony_ciENDPROC(sun4v_svc_recv) 73262306a36Sopenharmony_ci 73362306a36Sopenharmony_ciENTRY(sun4v_svc_getstatus) 73462306a36Sopenharmony_ci mov HV_FAST_SVC_GETSTATUS, %o5 73562306a36Sopenharmony_ci mov %o1, %o4 73662306a36Sopenharmony_ci ta HV_FAST_TRAP 73762306a36Sopenharmony_ci stx %o1, [%o4] 73862306a36Sopenharmony_ci retl 73962306a36Sopenharmony_ci nop 74062306a36Sopenharmony_ciENDPROC(sun4v_svc_getstatus) 74162306a36Sopenharmony_ci 74262306a36Sopenharmony_ciENTRY(sun4v_svc_setstatus) 74362306a36Sopenharmony_ci mov HV_FAST_SVC_SETSTATUS, %o5 74462306a36Sopenharmony_ci ta HV_FAST_TRAP 74562306a36Sopenharmony_ci retl 74662306a36Sopenharmony_ci nop 74762306a36Sopenharmony_ciENDPROC(sun4v_svc_setstatus) 74862306a36Sopenharmony_ci 74962306a36Sopenharmony_ciENTRY(sun4v_svc_clrstatus) 75062306a36Sopenharmony_ci mov HV_FAST_SVC_CLRSTATUS, %o5 75162306a36Sopenharmony_ci ta HV_FAST_TRAP 75262306a36Sopenharmony_ci retl 75362306a36Sopenharmony_ci nop 75462306a36Sopenharmony_ciENDPROC(sun4v_svc_clrstatus) 75562306a36Sopenharmony_ci 75662306a36Sopenharmony_ciENTRY(sun4v_mmustat_conf) 75762306a36Sopenharmony_ci mov %o1, %o4 75862306a36Sopenharmony_ci mov HV_FAST_MMUSTAT_CONF, %o5 75962306a36Sopenharmony_ci ta HV_FAST_TRAP 76062306a36Sopenharmony_ci stx %o1, [%o4] 76162306a36Sopenharmony_ci retl 76262306a36Sopenharmony_ci nop 76362306a36Sopenharmony_ciENDPROC(sun4v_mmustat_conf) 76462306a36Sopenharmony_ci 76562306a36Sopenharmony_ciENTRY(sun4v_mmustat_info) 76662306a36Sopenharmony_ci mov %o0, %o4 76762306a36Sopenharmony_ci mov HV_FAST_MMUSTAT_INFO, %o5 76862306a36Sopenharmony_ci ta HV_FAST_TRAP 76962306a36Sopenharmony_ci stx %o1, [%o4] 77062306a36Sopenharmony_ci retl 77162306a36Sopenharmony_ci nop 77262306a36Sopenharmony_ciENDPROC(sun4v_mmustat_info) 77362306a36Sopenharmony_ci 77462306a36Sopenharmony_ciENTRY(sun4v_mmu_demap_all) 77562306a36Sopenharmony_ci clr %o0 77662306a36Sopenharmony_ci clr %o1 77762306a36Sopenharmony_ci mov HV_MMU_ALL, %o2 77862306a36Sopenharmony_ci mov HV_FAST_MMU_DEMAP_ALL, %o5 77962306a36Sopenharmony_ci ta HV_FAST_TRAP 78062306a36Sopenharmony_ci retl 78162306a36Sopenharmony_ci nop 78262306a36Sopenharmony_ciENDPROC(sun4v_mmu_demap_all) 78362306a36Sopenharmony_ci 78462306a36Sopenharmony_ciENTRY(sun4v_niagara_getperf) 78562306a36Sopenharmony_ci mov %o0, %o4 78662306a36Sopenharmony_ci mov HV_FAST_GET_PERFREG, %o5 78762306a36Sopenharmony_ci ta HV_FAST_TRAP 78862306a36Sopenharmony_ci stx %o1, [%o4] 78962306a36Sopenharmony_ci retl 79062306a36Sopenharmony_ci nop 79162306a36Sopenharmony_ciENDPROC(sun4v_niagara_getperf) 79262306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_niagara_getperf) 79362306a36Sopenharmony_ci 79462306a36Sopenharmony_ciENTRY(sun4v_niagara_setperf) 79562306a36Sopenharmony_ci mov HV_FAST_SET_PERFREG, %o5 79662306a36Sopenharmony_ci ta HV_FAST_TRAP 79762306a36Sopenharmony_ci retl 79862306a36Sopenharmony_ci nop 79962306a36Sopenharmony_ciENDPROC(sun4v_niagara_setperf) 80062306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_niagara_setperf) 80162306a36Sopenharmony_ci 80262306a36Sopenharmony_ciENTRY(sun4v_niagara2_getperf) 80362306a36Sopenharmony_ci mov %o0, %o4 80462306a36Sopenharmony_ci mov HV_FAST_N2_GET_PERFREG, %o5 80562306a36Sopenharmony_ci ta HV_FAST_TRAP 80662306a36Sopenharmony_ci stx %o1, [%o4] 80762306a36Sopenharmony_ci retl 80862306a36Sopenharmony_ci nop 80962306a36Sopenharmony_ciENDPROC(sun4v_niagara2_getperf) 81062306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_niagara2_getperf) 81162306a36Sopenharmony_ci 81262306a36Sopenharmony_ciENTRY(sun4v_niagara2_setperf) 81362306a36Sopenharmony_ci mov HV_FAST_N2_SET_PERFREG, %o5 81462306a36Sopenharmony_ci ta HV_FAST_TRAP 81562306a36Sopenharmony_ci retl 81662306a36Sopenharmony_ci nop 81762306a36Sopenharmony_ciENDPROC(sun4v_niagara2_setperf) 81862306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_niagara2_setperf) 81962306a36Sopenharmony_ci 82062306a36Sopenharmony_ciENTRY(sun4v_reboot_data_set) 82162306a36Sopenharmony_ci mov HV_FAST_REBOOT_DATA_SET, %o5 82262306a36Sopenharmony_ci ta HV_FAST_TRAP 82362306a36Sopenharmony_ci retl 82462306a36Sopenharmony_ci nop 82562306a36Sopenharmony_ciENDPROC(sun4v_reboot_data_set) 82662306a36Sopenharmony_ci 82762306a36Sopenharmony_ciENTRY(sun4v_vt_get_perfreg) 82862306a36Sopenharmony_ci mov %o1, %o4 82962306a36Sopenharmony_ci mov HV_FAST_VT_GET_PERFREG, %o5 83062306a36Sopenharmony_ci ta HV_FAST_TRAP 83162306a36Sopenharmony_ci stx %o1, [%o4] 83262306a36Sopenharmony_ci retl 83362306a36Sopenharmony_ci nop 83462306a36Sopenharmony_ciENDPROC(sun4v_vt_get_perfreg) 83562306a36Sopenharmony_ci 83662306a36Sopenharmony_ciENTRY(sun4v_vt_set_perfreg) 83762306a36Sopenharmony_ci mov HV_FAST_VT_SET_PERFREG, %o5 83862306a36Sopenharmony_ci ta HV_FAST_TRAP 83962306a36Sopenharmony_ci retl 84062306a36Sopenharmony_ci nop 84162306a36Sopenharmony_ciENDPROC(sun4v_vt_set_perfreg) 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_ciENTRY(sun4v_t5_get_perfreg) 84462306a36Sopenharmony_ci mov %o1, %o4 84562306a36Sopenharmony_ci mov HV_FAST_T5_GET_PERFREG, %o5 84662306a36Sopenharmony_ci ta HV_FAST_TRAP 84762306a36Sopenharmony_ci stx %o1, [%o4] 84862306a36Sopenharmony_ci retl 84962306a36Sopenharmony_ci nop 85062306a36Sopenharmony_ciENDPROC(sun4v_t5_get_perfreg) 85162306a36Sopenharmony_ci 85262306a36Sopenharmony_ciENTRY(sun4v_t5_set_perfreg) 85362306a36Sopenharmony_ci mov HV_FAST_T5_SET_PERFREG, %o5 85462306a36Sopenharmony_ci ta HV_FAST_TRAP 85562306a36Sopenharmony_ci retl 85662306a36Sopenharmony_ci nop 85762306a36Sopenharmony_ciENDPROC(sun4v_t5_set_perfreg) 85862306a36Sopenharmony_ci 85962306a36Sopenharmony_ciENTRY(sun4v_m7_get_perfreg) 86062306a36Sopenharmony_ci mov %o1, %o4 86162306a36Sopenharmony_ci mov HV_FAST_M7_GET_PERFREG, %o5 86262306a36Sopenharmony_ci ta HV_FAST_TRAP 86362306a36Sopenharmony_ci stx %o1, [%o4] 86462306a36Sopenharmony_ci retl 86562306a36Sopenharmony_ci nop 86662306a36Sopenharmony_ciENDPROC(sun4v_m7_get_perfreg) 86762306a36Sopenharmony_ci 86862306a36Sopenharmony_ciENTRY(sun4v_m7_set_perfreg) 86962306a36Sopenharmony_ci mov HV_FAST_M7_SET_PERFREG, %o5 87062306a36Sopenharmony_ci ta HV_FAST_TRAP 87162306a36Sopenharmony_ci retl 87262306a36Sopenharmony_ci nop 87362306a36Sopenharmony_ciENDPROC(sun4v_m7_set_perfreg) 87462306a36Sopenharmony_ci 87562306a36Sopenharmony_ci /* %o0: address of CCB array 87662306a36Sopenharmony_ci * %o1: size (in bytes) of CCB array 87762306a36Sopenharmony_ci * %o2: flags 87862306a36Sopenharmony_ci * %o3: reserved 87962306a36Sopenharmony_ci * 88062306a36Sopenharmony_ci * returns: 88162306a36Sopenharmony_ci * %o0: status 88262306a36Sopenharmony_ci * %o1: size (in bytes) of the CCB array that was accepted 88362306a36Sopenharmony_ci * %o2: status data 88462306a36Sopenharmony_ci * %o3: reserved 88562306a36Sopenharmony_ci */ 88662306a36Sopenharmony_ciENTRY(sun4v_ccb_submit) 88762306a36Sopenharmony_ci mov %o5, %g1 88862306a36Sopenharmony_ci mov HV_CCB_SUBMIT, %o5 88962306a36Sopenharmony_ci ta HV_FAST_TRAP 89062306a36Sopenharmony_ci stx %o1, [%o4] 89162306a36Sopenharmony_ci retl 89262306a36Sopenharmony_ci stx %o2, [%g1] 89362306a36Sopenharmony_ciENDPROC(sun4v_ccb_submit) 89462306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_ccb_submit) 89562306a36Sopenharmony_ci 89662306a36Sopenharmony_ci /* %o0: completion area ra for the ccb to get info 89762306a36Sopenharmony_ci * 89862306a36Sopenharmony_ci * returns: 89962306a36Sopenharmony_ci * %o0: status 90062306a36Sopenharmony_ci * %o1: CCB state 90162306a36Sopenharmony_ci * %o2: position 90262306a36Sopenharmony_ci * %o3: dax unit 90362306a36Sopenharmony_ci * %o4: queue 90462306a36Sopenharmony_ci */ 90562306a36Sopenharmony_ciENTRY(sun4v_ccb_info) 90662306a36Sopenharmony_ci mov %o1, %g1 90762306a36Sopenharmony_ci mov HV_CCB_INFO, %o5 90862306a36Sopenharmony_ci ta HV_FAST_TRAP 90962306a36Sopenharmony_ci sth %o1, [%g1 + CCB_INFO_OFFSET_CCB_STATE] 91062306a36Sopenharmony_ci sth %o2, [%g1 + CCB_INFO_OFFSET_QUEUE_POS] 91162306a36Sopenharmony_ci sth %o3, [%g1 + CCB_INFO_OFFSET_DAX_UNIT] 91262306a36Sopenharmony_ci retl 91362306a36Sopenharmony_ci sth %o4, [%g1 + CCB_INFO_OFFSET_QUEUE_NUM] 91462306a36Sopenharmony_ciENDPROC(sun4v_ccb_info) 91562306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_ccb_info) 91662306a36Sopenharmony_ci 91762306a36Sopenharmony_ci /* %o0: completion area ra for the ccb to kill 91862306a36Sopenharmony_ci * 91962306a36Sopenharmony_ci * returns: 92062306a36Sopenharmony_ci * %o0: status 92162306a36Sopenharmony_ci * %o1: result of the kill 92262306a36Sopenharmony_ci */ 92362306a36Sopenharmony_ciENTRY(sun4v_ccb_kill) 92462306a36Sopenharmony_ci mov %o1, %g1 92562306a36Sopenharmony_ci mov HV_CCB_KILL, %o5 92662306a36Sopenharmony_ci ta HV_FAST_TRAP 92762306a36Sopenharmony_ci retl 92862306a36Sopenharmony_ci sth %o1, [%g1] 92962306a36Sopenharmony_ciENDPROC(sun4v_ccb_kill) 93062306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_ccb_kill) 931