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