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