Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002     /* %o0: devhandle
0003      * %o1: devino
0004      *
0005      * returns %o0: sysino
0006      */
0007 ENTRY(sun4v_devino_to_sysino)
0008     mov HV_FAST_INTR_DEVINO2SYSINO, %o5
0009     ta  HV_FAST_TRAP
0010     retl
0011      mov    %o1, %o0
0012 ENDPROC(sun4v_devino_to_sysino)
0013 
0014     /* %o0: sysino
0015      *
0016      * returns %o0: intr_enabled (HV_INTR_{DISABLED,ENABLED})
0017      */
0018 ENTRY(sun4v_intr_getenabled)
0019     mov HV_FAST_INTR_GETENABLED, %o5
0020     ta  HV_FAST_TRAP
0021     retl
0022      mov    %o1, %o0
0023 ENDPROC(sun4v_intr_getenabled)
0024 
0025     /* %o0: sysino
0026      * %o1: intr_enabled (HV_INTR_{DISABLED,ENABLED})
0027      */
0028 ENTRY(sun4v_intr_setenabled)
0029     mov HV_FAST_INTR_SETENABLED, %o5
0030     ta  HV_FAST_TRAP
0031     retl
0032      nop
0033 ENDPROC(sun4v_intr_setenabled)
0034 
0035     /* %o0: sysino
0036      *
0037      * returns %o0: intr_state (HV_INTR_STATE_*)
0038      */
0039 ENTRY(sun4v_intr_getstate)
0040     mov HV_FAST_INTR_GETSTATE, %o5
0041     ta  HV_FAST_TRAP
0042     retl
0043      mov    %o1, %o0
0044 ENDPROC(sun4v_intr_getstate)
0045 
0046     /* %o0: sysino
0047      * %o1: intr_state (HV_INTR_STATE_*)
0048      */
0049 ENTRY(sun4v_intr_setstate)
0050     mov HV_FAST_INTR_SETSTATE, %o5
0051     ta  HV_FAST_TRAP
0052     retl
0053      nop
0054 ENDPROC(sun4v_intr_setstate)
0055 
0056     /* %o0: sysino
0057      *
0058      * returns %o0: cpuid
0059      */
0060 ENTRY(sun4v_intr_gettarget)
0061     mov HV_FAST_INTR_GETTARGET, %o5
0062     ta  HV_FAST_TRAP
0063     retl
0064      mov    %o1, %o0
0065 ENDPROC(sun4v_intr_gettarget)
0066 
0067     /* %o0: sysino
0068      * %o1: cpuid
0069      */
0070 ENTRY(sun4v_intr_settarget)
0071     mov HV_FAST_INTR_SETTARGET, %o5
0072     ta  HV_FAST_TRAP
0073     retl
0074      nop
0075 ENDPROC(sun4v_intr_settarget)
0076 
0077     /* %o0: cpuid
0078      * %o1: pc
0079      * %o2: rtba
0080      * %o3: arg0
0081      *
0082      * returns %o0: status
0083      */
0084 ENTRY(sun4v_cpu_start)
0085     mov HV_FAST_CPU_START, %o5
0086     ta  HV_FAST_TRAP
0087     retl
0088      nop
0089 ENDPROC(sun4v_cpu_start)
0090 
0091     /* %o0: cpuid
0092      *
0093      * returns %o0: status
0094      */
0095 ENTRY(sun4v_cpu_stop)
0096     mov HV_FAST_CPU_STOP, %o5
0097     ta  HV_FAST_TRAP
0098     retl
0099      nop
0100 ENDPROC(sun4v_cpu_stop)
0101 
0102     /* returns %o0: status  */
0103 ENTRY(sun4v_cpu_yield)
0104     mov HV_FAST_CPU_YIELD, %o5
0105     ta  HV_FAST_TRAP
0106     retl
0107      nop
0108 ENDPROC(sun4v_cpu_yield)
0109 
0110     /* %o0: cpuid
0111      *
0112      * returns %o0: status
0113      */
0114 ENTRY(sun4v_cpu_poke)
0115     mov     HV_FAST_CPU_POKE, %o5
0116     ta      HV_FAST_TRAP
0117     retl
0118      nop
0119 ENDPROC(sun4v_cpu_poke)
0120 
0121     /* %o0: type
0122      * %o1: queue paddr
0123      * %o2: num queue entries
0124      *
0125      * returns %o0: status
0126      */
0127 ENTRY(sun4v_cpu_qconf)
0128     mov HV_FAST_CPU_QCONF, %o5
0129     ta  HV_FAST_TRAP
0130     retl
0131      nop
0132 ENDPROC(sun4v_cpu_qconf)
0133 
0134     /* %o0: num cpus in cpu list
0135      * %o1: cpu list paddr
0136      * %o2: mondo block paddr
0137      *
0138      * returns %o0: status
0139      */
0140 ENTRY(sun4v_cpu_mondo_send)
0141     mov HV_FAST_CPU_MONDO_SEND, %o5
0142     ta  HV_FAST_TRAP
0143     retl
0144      nop
0145 ENDPROC(sun4v_cpu_mondo_send)
0146 
0147     /* %o0: CPU ID
0148      *
0149      * returns %o0: -status if status non-zero, else
0150      *         %o0: cpu state as HV_CPU_STATE_*
0151      */
0152 ENTRY(sun4v_cpu_state)
0153     mov HV_FAST_CPU_STATE, %o5
0154     ta  HV_FAST_TRAP
0155     brnz,pn %o0, 1f
0156      sub    %g0, %o0, %o0
0157     mov %o1, %o0
0158 1:  retl
0159      nop
0160 ENDPROC(sun4v_cpu_state)
0161 
0162     /* %o0: virtual address
0163      * %o1: must be zero
0164      * %o2: TTE
0165      * %o3: HV_MMU_* flags
0166      *
0167      * returns %o0: status
0168      */
0169 ENTRY(sun4v_mmu_map_perm_addr)
0170     mov HV_FAST_MMU_MAP_PERM_ADDR, %o5
0171     ta  HV_FAST_TRAP
0172     retl
0173      nop
0174 ENDPROC(sun4v_mmu_map_perm_addr)
0175 
0176     /* %o0: number of TSB descriptions
0177      * %o1: TSB descriptions real address
0178      *
0179      * returns %o0: status
0180      */
0181 ENTRY(sun4v_mmu_tsb_ctx0)
0182     mov HV_FAST_MMU_TSB_CTX0, %o5
0183     ta  HV_FAST_TRAP
0184     retl
0185      nop
0186 ENDPROC(sun4v_mmu_tsb_ctx0)
0187 
0188     /* %o0: API group number
0189      * %o1: pointer to unsigned long major number storage
0190      * %o2: pointer to unsigned long minor number storage
0191      *
0192      * returns %o0: status
0193      */
0194 ENTRY(sun4v_get_version)
0195     mov HV_CORE_GET_VER, %o5
0196     mov %o1, %o3
0197     mov %o2, %o4
0198     ta  HV_CORE_TRAP
0199     stx %o1, [%o3]
0200     retl
0201      stx    %o2, [%o4]
0202 ENDPROC(sun4v_get_version)
0203 
0204     /* %o0: API group number
0205      * %o1: desired major number
0206      * %o2: desired minor number
0207      * %o3: pointer to unsigned long actual minor number storage
0208      *
0209      * returns %o0: status
0210      */
0211 ENTRY(sun4v_set_version)
0212     mov HV_CORE_SET_VER, %o5
0213     mov %o3, %o4
0214     ta  HV_CORE_TRAP
0215     retl
0216      stx    %o1, [%o4]
0217 ENDPROC(sun4v_set_version)
0218 
0219     /* %o0: pointer to unsigned long time
0220      *
0221      * returns %o0: status
0222      */
0223 ENTRY(sun4v_tod_get)
0224     mov %o0, %o4
0225     mov HV_FAST_TOD_GET, %o5
0226     ta  HV_FAST_TRAP
0227     stx %o1, [%o4]
0228     retl
0229      nop
0230 ENDPROC(sun4v_tod_get)
0231 
0232     /* %o0: time
0233      *
0234      * returns %o0: status
0235      */
0236 ENTRY(sun4v_tod_set)
0237     mov HV_FAST_TOD_SET, %o5
0238     ta  HV_FAST_TRAP
0239     retl
0240      nop
0241 ENDPROC(sun4v_tod_set)
0242 
0243     /* %o0: pointer to unsigned long status
0244      *
0245      * returns %o0: signed character
0246      */
0247 ENTRY(sun4v_con_getchar)
0248     mov %o0, %o4
0249     mov HV_FAST_CONS_GETCHAR, %o5
0250     clr %o0
0251     clr %o1
0252     ta  HV_FAST_TRAP
0253     stx %o0, [%o4]
0254     retl
0255      sra    %o1, 0, %o0
0256 ENDPROC(sun4v_con_getchar)
0257 
0258     /* %o0: signed long character
0259      *
0260      * returns %o0: status
0261      */
0262 ENTRY(sun4v_con_putchar)
0263     mov HV_FAST_CONS_PUTCHAR, %o5
0264     ta  HV_FAST_TRAP
0265     retl
0266      sra    %o0, 0, %o0
0267 ENDPROC(sun4v_con_putchar)
0268 
0269     /* %o0: buffer real address
0270      * %o1: buffer size
0271      * %o2: pointer to unsigned long bytes_read
0272      *
0273      * returns %o0: status
0274      */
0275 ENTRY(sun4v_con_read)
0276     mov %o2, %o4
0277     mov HV_FAST_CONS_READ, %o5
0278     ta  HV_FAST_TRAP
0279     brnz    %o0, 1f
0280      cmp    %o1, -1     /* break */
0281     be,a,pn %icc, 1f
0282      mov    %o1, %o0
0283     cmp %o1, -2     /* hup */
0284     be,a,pn %icc, 1f
0285      mov    %o1, %o0
0286     stx %o1, [%o4]
0287 1:  retl
0288      nop
0289 ENDPROC(sun4v_con_read)
0290 
0291     /* %o0: buffer real address
0292      * %o1: buffer size
0293      * %o2: pointer to unsigned long bytes_written
0294      *
0295      * returns %o0: status
0296      */
0297 ENTRY(sun4v_con_write)
0298     mov %o2, %o4
0299     mov HV_FAST_CONS_WRITE, %o5
0300     ta  HV_FAST_TRAP
0301     stx %o1, [%o4]
0302     retl
0303      nop
0304 ENDPROC(sun4v_con_write)
0305 
0306     /* %o0: soft state
0307      * %o1: address of description string
0308      *
0309      * returns %o0: status
0310      */
0311 ENTRY(sun4v_mach_set_soft_state)
0312     mov HV_FAST_MACH_SET_SOFT_STATE, %o5
0313     ta  HV_FAST_TRAP
0314     retl
0315      nop
0316 ENDPROC(sun4v_mach_set_soft_state)
0317 
0318     /* %o0: exit code
0319      *
0320      * Does not return.
0321      */
0322 ENTRY(sun4v_mach_exit)
0323     mov HV_FAST_MACH_EXIT, %o5
0324     ta  HV_FAST_TRAP
0325     retl
0326      nop
0327 ENDPROC(sun4v_mach_exit)
0328 
0329     /* %o0: buffer real address
0330      * %o1: buffer length
0331      * %o2: pointer to unsigned long real_buf_len
0332      *
0333      * returns %o0: status
0334      */
0335 ENTRY(sun4v_mach_desc)
0336     mov %o2, %o4
0337     mov HV_FAST_MACH_DESC, %o5
0338     ta  HV_FAST_TRAP
0339     stx %o1, [%o4]
0340     retl
0341      nop
0342 ENDPROC(sun4v_mach_desc)
0343 
0344     /* %o0: new timeout in milliseconds
0345      * %o1: pointer to unsigned long orig_timeout
0346      *
0347      * returns %o0: status
0348      */
0349 ENTRY(sun4v_mach_set_watchdog)
0350     mov %o1, %o4
0351     mov HV_FAST_MACH_SET_WATCHDOG, %o5
0352     ta  HV_FAST_TRAP
0353     brnz,a,pn %o4, 0f
0354     stx %o1, [%o4]
0355 0:  retl
0356      nop
0357 ENDPROC(sun4v_mach_set_watchdog)
0358 EXPORT_SYMBOL(sun4v_mach_set_watchdog)
0359 
0360     /* No inputs and does not return.  */
0361 ENTRY(sun4v_mach_sir)
0362     mov %o1, %o4
0363     mov HV_FAST_MACH_SIR, %o5
0364     ta  HV_FAST_TRAP
0365     stx %o1, [%o4]
0366     retl
0367      nop
0368 ENDPROC(sun4v_mach_sir)
0369 
0370     /* %o0: channel
0371      * %o1: ra
0372      * %o2: num_entries
0373      *
0374      * returns %o0: status
0375      */
0376 ENTRY(sun4v_ldc_tx_qconf)
0377     mov HV_FAST_LDC_TX_QCONF, %o5
0378     ta  HV_FAST_TRAP
0379     retl
0380      nop
0381 ENDPROC(sun4v_ldc_tx_qconf)
0382 
0383     /* %o0: channel
0384      * %o1: pointer to unsigned long ra
0385      * %o2: pointer to unsigned long num_entries
0386      *
0387      * returns %o0: status
0388      */
0389 ENTRY(sun4v_ldc_tx_qinfo)
0390     mov %o1, %g1
0391     mov %o2, %g2
0392     mov HV_FAST_LDC_TX_QINFO, %o5
0393     ta  HV_FAST_TRAP
0394     stx %o1, [%g1]
0395     stx %o2, [%g2]
0396     retl
0397      nop
0398 ENDPROC(sun4v_ldc_tx_qinfo)
0399 
0400     /* %o0: channel
0401      * %o1: pointer to unsigned long head_off
0402      * %o2: pointer to unsigned long tail_off
0403      * %o2: pointer to unsigned long chan_state
0404      *
0405      * returns %o0: status
0406      */
0407 ENTRY(sun4v_ldc_tx_get_state)
0408     mov %o1, %g1
0409     mov %o2, %g2
0410     mov %o3, %g3
0411     mov HV_FAST_LDC_TX_GET_STATE, %o5
0412     ta  HV_FAST_TRAP
0413     stx %o1, [%g1]
0414     stx %o2, [%g2]
0415     stx %o3, [%g3]
0416     retl
0417      nop
0418 ENDPROC(sun4v_ldc_tx_get_state)
0419 
0420     /* %o0: channel
0421      * %o1: tail_off
0422      *
0423      * returns %o0: status
0424      */
0425 ENTRY(sun4v_ldc_tx_set_qtail)
0426     mov HV_FAST_LDC_TX_SET_QTAIL, %o5
0427     ta  HV_FAST_TRAP
0428     retl
0429      nop
0430 ENDPROC(sun4v_ldc_tx_set_qtail)
0431 
0432     /* %o0: channel
0433      * %o1: ra
0434      * %o2: num_entries
0435      *
0436      * returns %o0: status
0437      */
0438 ENTRY(sun4v_ldc_rx_qconf)
0439     mov HV_FAST_LDC_RX_QCONF, %o5
0440     ta  HV_FAST_TRAP
0441     retl
0442      nop
0443 ENDPROC(sun4v_ldc_rx_qconf)
0444 
0445     /* %o0: channel
0446      * %o1: pointer to unsigned long ra
0447      * %o2: pointer to unsigned long num_entries
0448      *
0449      * returns %o0: status
0450      */
0451 ENTRY(sun4v_ldc_rx_qinfo)
0452     mov %o1, %g1
0453     mov %o2, %g2
0454     mov HV_FAST_LDC_RX_QINFO, %o5
0455     ta  HV_FAST_TRAP
0456     stx %o1, [%g1]
0457     stx %o2, [%g2]
0458     retl
0459      nop
0460 ENDPROC(sun4v_ldc_rx_qinfo)
0461 
0462     /* %o0: channel
0463      * %o1: pointer to unsigned long head_off
0464      * %o2: pointer to unsigned long tail_off
0465      * %o2: pointer to unsigned long chan_state
0466      *
0467      * returns %o0: status
0468      */
0469 ENTRY(sun4v_ldc_rx_get_state)
0470     mov %o1, %g1
0471     mov %o2, %g2
0472     mov %o3, %g3
0473     mov HV_FAST_LDC_RX_GET_STATE, %o5
0474     ta  HV_FAST_TRAP
0475     stx %o1, [%g1]
0476     stx %o2, [%g2]
0477     stx %o3, [%g3]
0478     retl
0479      nop
0480 ENDPROC(sun4v_ldc_rx_get_state)
0481 
0482     /* %o0: channel
0483      * %o1: head_off
0484      *
0485      * returns %o0: status
0486      */
0487 ENTRY(sun4v_ldc_rx_set_qhead)
0488     mov HV_FAST_LDC_RX_SET_QHEAD, %o5
0489     ta  HV_FAST_TRAP
0490     retl
0491      nop
0492 ENDPROC(sun4v_ldc_rx_set_qhead)
0493 
0494     /* %o0: channel
0495      * %o1: ra
0496      * %o2: num_entries
0497      *
0498      * returns %o0: status
0499      */
0500 ENTRY(sun4v_ldc_set_map_table)
0501     mov HV_FAST_LDC_SET_MAP_TABLE, %o5
0502     ta  HV_FAST_TRAP
0503     retl
0504      nop
0505 ENDPROC(sun4v_ldc_set_map_table)
0506 
0507     /* %o0: channel
0508      * %o1: pointer to unsigned long ra
0509      * %o2: pointer to unsigned long num_entries
0510      *
0511      * returns %o0: status
0512      */
0513 ENTRY(sun4v_ldc_get_map_table)
0514     mov %o1, %g1
0515     mov %o2, %g2
0516     mov HV_FAST_LDC_GET_MAP_TABLE, %o5
0517     ta  HV_FAST_TRAP
0518     stx %o1, [%g1]
0519     stx %o2, [%g2]
0520     retl
0521      nop
0522 ENDPROC(sun4v_ldc_get_map_table)
0523 
0524     /* %o0: channel
0525      * %o1: dir_code
0526      * %o2: tgt_raddr
0527      * %o3: lcl_raddr
0528      * %o4: len
0529      * %o5: pointer to unsigned long actual_len
0530      *
0531      * returns %o0: status
0532      */
0533 ENTRY(sun4v_ldc_copy)
0534     mov %o5, %g1
0535     mov HV_FAST_LDC_COPY, %o5
0536     ta  HV_FAST_TRAP
0537     stx %o1, [%g1]
0538     retl
0539      nop
0540 ENDPROC(sun4v_ldc_copy)
0541 
0542     /* %o0: channel
0543      * %o1: cookie
0544      * %o2: pointer to unsigned long ra
0545      * %o3: pointer to unsigned long perm
0546      *
0547      * returns %o0: status
0548      */
0549 ENTRY(sun4v_ldc_mapin)
0550     mov %o2, %g1
0551     mov %o3, %g2
0552     mov HV_FAST_LDC_MAPIN, %o5
0553     ta  HV_FAST_TRAP
0554     stx %o1, [%g1]
0555     stx %o2, [%g2]
0556     retl
0557      nop
0558 ENDPROC(sun4v_ldc_mapin)
0559 
0560     /* %o0: ra
0561      *
0562      * returns %o0: status
0563      */
0564 ENTRY(sun4v_ldc_unmap)
0565     mov HV_FAST_LDC_UNMAP, %o5
0566     ta  HV_FAST_TRAP
0567     retl
0568      nop
0569 ENDPROC(sun4v_ldc_unmap)
0570 
0571     /* %o0: channel
0572      * %o1: cookie
0573      * %o2: mte_cookie
0574      *
0575      * returns %o0: status
0576      */
0577 ENTRY(sun4v_ldc_revoke)
0578     mov HV_FAST_LDC_REVOKE, %o5
0579     ta  HV_FAST_TRAP
0580     retl
0581      nop
0582 ENDPROC(sun4v_ldc_revoke)
0583 
0584     /* %o0: device handle
0585      * %o1: device INO
0586      * %o2: pointer to unsigned long cookie
0587      *
0588      * returns %o0: status
0589      */
0590 ENTRY(sun4v_vintr_get_cookie)
0591     mov %o2, %g1
0592     mov HV_FAST_VINTR_GET_COOKIE, %o5
0593     ta  HV_FAST_TRAP
0594     stx %o1, [%g1]
0595     retl
0596      nop
0597 ENDPROC(sun4v_vintr_get_cookie)
0598 
0599     /* %o0: device handle
0600      * %o1: device INO
0601      * %o2: cookie
0602      *
0603      * returns %o0: status
0604      */
0605 ENTRY(sun4v_vintr_set_cookie)
0606     mov HV_FAST_VINTR_SET_COOKIE, %o5
0607     ta  HV_FAST_TRAP
0608     retl
0609      nop
0610 ENDPROC(sun4v_vintr_set_cookie)
0611 
0612     /* %o0: device handle
0613      * %o1: device INO
0614      * %o2: pointer to unsigned long valid_state
0615      *
0616      * returns %o0: status
0617      */
0618 ENTRY(sun4v_vintr_get_valid)
0619     mov %o2, %g1
0620     mov HV_FAST_VINTR_GET_VALID, %o5
0621     ta  HV_FAST_TRAP
0622     stx %o1, [%g1]
0623     retl
0624      nop
0625 ENDPROC(sun4v_vintr_get_valid)
0626 
0627     /* %o0: device handle
0628      * %o1: device INO
0629      * %o2: valid_state
0630      *
0631      * returns %o0: status
0632      */
0633 ENTRY(sun4v_vintr_set_valid)
0634     mov HV_FAST_VINTR_SET_VALID, %o5
0635     ta  HV_FAST_TRAP
0636     retl
0637      nop
0638 ENDPROC(sun4v_vintr_set_valid)
0639 
0640     /* %o0: device handle
0641      * %o1: device INO
0642      * %o2: pointer to unsigned long state
0643      *
0644      * returns %o0: status
0645      */
0646 ENTRY(sun4v_vintr_get_state)
0647     mov %o2, %g1
0648     mov HV_FAST_VINTR_GET_STATE, %o5
0649     ta  HV_FAST_TRAP
0650     stx %o1, [%g1]
0651     retl
0652      nop
0653 ENDPROC(sun4v_vintr_get_state)
0654 
0655     /* %o0: device handle
0656      * %o1: device INO
0657      * %o2: state
0658      *
0659      * returns %o0: status
0660      */
0661 ENTRY(sun4v_vintr_set_state)
0662     mov HV_FAST_VINTR_SET_STATE, %o5
0663     ta  HV_FAST_TRAP
0664     retl
0665      nop
0666 ENDPROC(sun4v_vintr_set_state)
0667 
0668     /* %o0: device handle
0669      * %o1: device INO
0670      * %o2: pointer to unsigned long cpuid
0671      *
0672      * returns %o0: status
0673      */
0674 ENTRY(sun4v_vintr_get_target)
0675     mov %o2, %g1
0676     mov HV_FAST_VINTR_GET_TARGET, %o5
0677     ta  HV_FAST_TRAP
0678     stx %o1, [%g1]
0679     retl
0680      nop
0681 ENDPROC(sun4v_vintr_get_target)
0682 
0683     /* %o0: device handle
0684      * %o1: device INO
0685      * %o2: cpuid
0686      *
0687      * returns %o0: status
0688      */
0689 ENTRY(sun4v_vintr_set_target)
0690     mov HV_FAST_VINTR_SET_TARGET, %o5
0691     ta  HV_FAST_TRAP
0692     retl
0693      nop
0694 ENDPROC(sun4v_vintr_set_target)
0695 
0696     /* %o0: NCS sub-function
0697      * %o1: sub-function arg real-address
0698      * %o2: sub-function arg size
0699      *
0700      * returns %o0: status
0701      */
0702 ENTRY(sun4v_ncs_request)
0703     mov HV_FAST_NCS_REQUEST, %o5
0704     ta  HV_FAST_TRAP
0705     retl
0706      nop
0707 ENDPROC(sun4v_ncs_request)
0708 
0709 ENTRY(sun4v_svc_send)
0710     save    %sp, -192, %sp
0711     mov %i0, %o0
0712     mov %i1, %o1
0713     mov %i2, %o2
0714     mov HV_FAST_SVC_SEND, %o5
0715     ta  HV_FAST_TRAP
0716     stx %o1, [%i3]
0717     ret
0718     restore
0719 ENDPROC(sun4v_svc_send)
0720 
0721 ENTRY(sun4v_svc_recv)
0722     save    %sp, -192, %sp
0723     mov %i0, %o0
0724     mov %i1, %o1
0725     mov %i2, %o2
0726     mov HV_FAST_SVC_RECV, %o5
0727     ta  HV_FAST_TRAP
0728     stx %o1, [%i3]
0729     ret
0730     restore
0731 ENDPROC(sun4v_svc_recv)
0732 
0733 ENTRY(sun4v_svc_getstatus)
0734     mov HV_FAST_SVC_GETSTATUS, %o5
0735     mov %o1, %o4
0736     ta  HV_FAST_TRAP
0737     stx %o1, [%o4]
0738     retl
0739      nop
0740 ENDPROC(sun4v_svc_getstatus)
0741 
0742 ENTRY(sun4v_svc_setstatus)
0743     mov HV_FAST_SVC_SETSTATUS, %o5
0744     ta  HV_FAST_TRAP
0745     retl
0746      nop
0747 ENDPROC(sun4v_svc_setstatus)
0748 
0749 ENTRY(sun4v_svc_clrstatus)
0750     mov HV_FAST_SVC_CLRSTATUS, %o5
0751     ta  HV_FAST_TRAP
0752     retl
0753      nop
0754 ENDPROC(sun4v_svc_clrstatus)
0755 
0756 ENTRY(sun4v_mmustat_conf)
0757     mov %o1, %o4
0758     mov HV_FAST_MMUSTAT_CONF, %o5
0759     ta  HV_FAST_TRAP
0760     stx %o1, [%o4]
0761     retl
0762      nop
0763 ENDPROC(sun4v_mmustat_conf)
0764 
0765 ENTRY(sun4v_mmustat_info)
0766     mov %o0, %o4
0767     mov HV_FAST_MMUSTAT_INFO, %o5
0768     ta  HV_FAST_TRAP
0769     stx %o1, [%o4]
0770     retl
0771      nop
0772 ENDPROC(sun4v_mmustat_info)
0773 
0774 ENTRY(sun4v_mmu_demap_all)
0775     clr %o0
0776     clr %o1
0777     mov HV_MMU_ALL, %o2
0778     mov HV_FAST_MMU_DEMAP_ALL, %o5
0779     ta  HV_FAST_TRAP
0780     retl
0781      nop
0782 ENDPROC(sun4v_mmu_demap_all)
0783 
0784 ENTRY(sun4v_niagara_getperf)
0785     mov %o0, %o4
0786     mov HV_FAST_GET_PERFREG, %o5
0787     ta  HV_FAST_TRAP
0788     stx %o1, [%o4]
0789     retl
0790      nop
0791 ENDPROC(sun4v_niagara_getperf)
0792 EXPORT_SYMBOL(sun4v_niagara_getperf)
0793 
0794 ENTRY(sun4v_niagara_setperf)
0795     mov HV_FAST_SET_PERFREG, %o5
0796     ta  HV_FAST_TRAP
0797     retl
0798      nop
0799 ENDPROC(sun4v_niagara_setperf)
0800 EXPORT_SYMBOL(sun4v_niagara_setperf)
0801 
0802 ENTRY(sun4v_niagara2_getperf)
0803     mov %o0, %o4
0804     mov HV_FAST_N2_GET_PERFREG, %o5
0805     ta  HV_FAST_TRAP
0806     stx %o1, [%o4]
0807     retl
0808      nop
0809 ENDPROC(sun4v_niagara2_getperf)
0810 EXPORT_SYMBOL(sun4v_niagara2_getperf)
0811 
0812 ENTRY(sun4v_niagara2_setperf)
0813     mov HV_FAST_N2_SET_PERFREG, %o5
0814     ta  HV_FAST_TRAP
0815     retl
0816      nop
0817 ENDPROC(sun4v_niagara2_setperf)
0818 EXPORT_SYMBOL(sun4v_niagara2_setperf)
0819 
0820 ENTRY(sun4v_reboot_data_set)
0821     mov HV_FAST_REBOOT_DATA_SET, %o5
0822     ta  HV_FAST_TRAP
0823     retl
0824      nop
0825 ENDPROC(sun4v_reboot_data_set)
0826 
0827 ENTRY(sun4v_vt_get_perfreg)
0828     mov %o1, %o4
0829     mov HV_FAST_VT_GET_PERFREG, %o5
0830     ta  HV_FAST_TRAP
0831     stx %o1, [%o4]
0832     retl
0833      nop
0834 ENDPROC(sun4v_vt_get_perfreg)
0835 
0836 ENTRY(sun4v_vt_set_perfreg)
0837     mov HV_FAST_VT_SET_PERFREG, %o5
0838     ta  HV_FAST_TRAP
0839     retl
0840      nop
0841 ENDPROC(sun4v_vt_set_perfreg)
0842 
0843 ENTRY(sun4v_t5_get_perfreg)
0844     mov %o1, %o4
0845     mov HV_FAST_T5_GET_PERFREG, %o5
0846     ta  HV_FAST_TRAP
0847     stx %o1, [%o4]
0848     retl
0849      nop
0850 ENDPROC(sun4v_t5_get_perfreg)
0851 
0852 ENTRY(sun4v_t5_set_perfreg)
0853     mov HV_FAST_T5_SET_PERFREG, %o5
0854     ta  HV_FAST_TRAP
0855     retl
0856      nop
0857 ENDPROC(sun4v_t5_set_perfreg)
0858 
0859 ENTRY(sun4v_m7_get_perfreg)
0860     mov %o1, %o4
0861     mov HV_FAST_M7_GET_PERFREG, %o5
0862     ta  HV_FAST_TRAP
0863     stx %o1, [%o4]
0864     retl
0865     nop
0866 ENDPROC(sun4v_m7_get_perfreg)
0867 
0868 ENTRY(sun4v_m7_set_perfreg)
0869     mov HV_FAST_M7_SET_PERFREG, %o5
0870     ta  HV_FAST_TRAP
0871     retl
0872     nop
0873 ENDPROC(sun4v_m7_set_perfreg)
0874 
0875     /* %o0: address of CCB array
0876      * %o1: size (in bytes) of CCB array
0877      * %o2: flags
0878      * %o3: reserved
0879      *
0880      * returns:
0881      * %o0: status
0882      * %o1: size (in bytes) of the CCB array that was accepted
0883      * %o2: status data
0884      * %o3: reserved
0885      */
0886 ENTRY(sun4v_ccb_submit)
0887     mov %o5, %g1
0888     mov HV_CCB_SUBMIT, %o5
0889     ta  HV_FAST_TRAP
0890     stx %o1, [%o4]
0891     retl
0892      stx    %o2, [%g1]
0893 ENDPROC(sun4v_ccb_submit)
0894 EXPORT_SYMBOL(sun4v_ccb_submit)
0895 
0896     /* %o0: completion area ra for the ccb to get info
0897      *
0898      * returns:
0899      * %o0: status
0900      * %o1: CCB state
0901      * %o2: position
0902      * %o3: dax unit
0903      * %o4: queue
0904      */
0905 ENTRY(sun4v_ccb_info)
0906     mov %o1, %g1
0907     mov HV_CCB_INFO, %o5
0908     ta  HV_FAST_TRAP
0909     sth %o1, [%g1 + CCB_INFO_OFFSET_CCB_STATE]
0910     sth %o2, [%g1 + CCB_INFO_OFFSET_QUEUE_POS]
0911     sth %o3, [%g1 + CCB_INFO_OFFSET_DAX_UNIT]
0912     retl
0913      sth    %o4, [%g1 + CCB_INFO_OFFSET_QUEUE_NUM]
0914 ENDPROC(sun4v_ccb_info)
0915 EXPORT_SYMBOL(sun4v_ccb_info)
0916 
0917     /* %o0: completion area ra for the ccb to kill
0918      *
0919      * returns:
0920      * %o0: status
0921      * %o1: result of the kill
0922      */
0923 ENTRY(sun4v_ccb_kill)
0924     mov %o1, %g1
0925     mov HV_CCB_KILL, %o5
0926     ta  HV_FAST_TRAP
0927     retl
0928      sth    %o1, [%g1]
0929 ENDPROC(sun4v_ccb_kill)
0930 EXPORT_SYMBOL(sun4v_ccb_kill)