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