1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22/* 23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27#pragma ident "%Z%%M% %I% %E% SMI" 28 29/* 30 * Hypervisor calls 31 */ 32 33#include <sys/asm_linkage.h> 34#include <sys/machasi.h> 35#include <sys/machparam.h> 36#include <sys/hypervisor_api.h> 37 38#if defined(lint) || defined(__lint) 39 40/*ARGSUSED*/ 41uint64_t 42hv_mach_exit(uint64_t exit_code) 43{ return (0); } 44 45uint64_t 46hv_mach_sir(void) 47{ return (0); } 48 49/*ARGSUSED*/ 50uint64_t 51hv_cpu_start(uint64_t cpuid, uint64_t pc, uint64_t rtba, uint64_t arg) 52{ return (0); } 53 54/*ARGSUSED*/ 55uint64_t 56hv_cpu_stop(uint64_t cpuid) 57{ return (0); } 58 59/*ARGSUSED*/ 60uint64_t 61hv_cpu_set_rtba(uint64_t *rtba) 62{ return (0); } 63 64/*ARGSUSED*/ 65int64_t 66hv_cnputchar(uint8_t ch) 67{ return (0); } 68 69/*ARGSUSED*/ 70int64_t 71hv_cngetchar(uint8_t *ch) 72{ return (0); } 73 74/*ARGSUSED*/ 75uint64_t 76hv_tod_get(uint64_t *seconds) 77{ return (0); } 78 79/*ARGSUSED*/ 80uint64_t 81hv_tod_set(uint64_t seconds) 82{ return (0);} 83 84/*ARGSUSED*/ 85uint64_t 86hv_mmu_map_perm_addr(void *vaddr, int ctx, uint64_t tte, int flags) 87{ return (0); } 88 89/*ARGSUSED */ 90uint64_t 91hv_mmu_fault_area_conf(void *raddr) 92{ return (0); } 93 94/*ARGSUSED*/ 95uint64_t 96hv_mmu_unmap_perm_addr(void *vaddr, int ctx, int flags) 97{ return (0); } 98 99/*ARGSUSED*/ 100uint64_t 101hv_set_ctx0(uint64_t ntsb_descriptor, uint64_t desc_ra) 102{ return (0); } 103 104/*ARGSUSED*/ 105uint64_t 106hv_set_ctxnon0(uint64_t ntsb_descriptor, uint64_t desc_ra) 107{ return (0); } 108 109#ifdef SET_MMU_STATS 110/*ARGSUSED*/ 111uint64_t 112hv_mmu_set_stat_area(uint64_t rstatarea, uint64_t size) 113{ return (0); } 114#endif /* SET_MMU_STATS */ 115 116/*ARGSUSED*/ 117uint64_t 118hv_cpu_qconf(int queue, uint64_t paddr, int size) 119{ return (0); } 120 121/*ARGSUSED*/ 122uint64_t 123hvio_intr_devino_to_sysino(uint64_t dev_hdl, uint32_t devino, uint64_t *sysino) 124{ return (0); } 125 126/*ARGSUSED*/ 127uint64_t 128hvio_intr_getvalid(uint64_t sysino, int *intr_valid_state) 129{ return (0); } 130 131/*ARGSUSED*/ 132uint64_t 133hvio_intr_setvalid(uint64_t sysino, int intr_valid_state) 134{ return (0); } 135 136/*ARGSUSED*/ 137uint64_t 138hvio_intr_getstate(uint64_t sysino, int *intr_state) 139{ return (0); } 140 141/*ARGSUSED*/ 142uint64_t 143hvio_intr_setstate(uint64_t sysino, int intr_state) 144{ return (0); } 145 146/*ARGSUSED*/ 147uint64_t 148hvio_intr_gettarget(uint64_t sysino, uint32_t *cpuid) 149{ return (0); } 150 151/*ARGSUSED*/ 152uint64_t 153hvio_intr_settarget(uint64_t sysino, uint32_t cpuid) 154{ return (0); } 155 156uint64_t 157hv_cpu_yield(void) 158{ return (0); } 159 160/*ARGSUSED*/ 161uint64_t 162hv_cpu_state(uint64_t cpuid, uint64_t *cpu_state) 163{ return (0); } 164 165/*ARGSUSED*/ 166uint64_t 167hv_dump_buf_update(uint64_t paddr, uint64_t size, uint64_t *minsize) 168{ return (0); } 169 170/*ARGSUSED*/ 171uint64_t 172hv_mem_scrub(uint64_t real_addr, uint64_t length, uint64_t *scrubbed_len) 173{ return (0); } 174 175/*ARGSUSED*/ 176uint64_t 177hv_mem_sync(uint64_t real_addr, uint64_t length, uint64_t *flushed_len) 178{ return (0); } 179 180/*ARGSUSED*/ 181uint64_t 182hv_ttrace_buf_conf(uint64_t paddr, uint64_t size, uint64_t *size1) 183{ return (0); } 184 185/*ARGSUSED*/ 186uint64_t 187hv_ttrace_buf_info(uint64_t *paddr, uint64_t *size) 188{ return (0); } 189 190/*ARGSUSED*/ 191uint64_t 192hv_ttrace_enable(uint64_t enable, uint64_t *prev_enable) 193{ return (0); } 194 195/*ARGSUSED*/ 196uint64_t 197hv_ttrace_freeze(uint64_t freeze, uint64_t *prev_freeze) 198{ return (0); } 199 200/*ARGSUSED*/ 201uint64_t 202hv_mach_desc(uint64_t buffer_ra, uint64_t *buffer_sizep) 203{ return (0); } 204 205/*ARGSUSED*/ 206uint64_t 207hv_ra2pa(uint64_t ra) 208{ return (0); } 209 210/*ARGSUSED*/ 211uint64_t 212hv_hpriv(void *func, uint64_t arg1, uint64_t arg2, uint64_t arg3) 213{ return (0); } 214 215/*ARGSUSED*/ 216uint64_t 217hv_ldc_tx_qconf(uint64_t channel, uint64_t ra_base, uint64_t nentries) 218{ return (0); } 219 220/*ARGSUSED*/ 221uint64_t 222hv_ldc_tx_qinfo(uint64_t channel, uint64_t *ra_base, uint64_t *nentries) 223{ return (0); } 224 225/*ARGSUSED*/ 226uint64_t 227hv_ldc_tx_get_state(uint64_t channel, 228 uint64_t *headp, uint64_t *tailp, uint64_t *state) 229{ return (0); } 230 231/*ARGSUSED*/ 232uint64_t 233hv_ldc_tx_set_qtail(uint64_t channel, uint64_t tail) 234{ return (0); } 235 236/*ARGSUSED*/ 237uint64_t 238hv_ldc_rx_qconf(uint64_t channel, uint64_t ra_base, uint64_t nentries) 239{ return (0); } 240 241/*ARGSUSED*/ 242uint64_t 243hv_ldc_rx_qinfo(uint64_t channel, uint64_t *ra_base, uint64_t *nentries) 244{ return (0); } 245 246/*ARGSUSED*/ 247uint64_t 248hv_ldc_rx_get_state(uint64_t channel, 249 uint64_t *headp, uint64_t *tailp, uint64_t *state) 250{ return (0); } 251 252/*ARGSUSED*/ 253uint64_t 254hv_ldc_rx_set_qhead(uint64_t channel, uint64_t head) 255{ return (0); } 256 257/*ARGSUSED*/ 258uint64_t 259hv_ldc_send_msg(uint64_t channel, uint64_t msg_ra) 260{ return (0); } 261 262/*ARGSUSED*/ 263uint64_t 264hv_ldc_set_map_table(uint64_t channel, uint64_t tbl_ra, uint64_t tbl_entries) 265{ return (0); } 266 267/*ARGSUSED*/ 268uint64_t 269hv_ldc_copy(uint64_t channel, uint64_t request, uint64_t cookie, 270 uint64_t raddr, uint64_t length, uint64_t *lengthp) 271{ return (0); } 272 273/*ARGSUSED*/ 274uint64_t 275hvldc_intr_getcookie(uint64_t dev_hdl, uint32_t devino, uint64_t *cookie) 276{ return (0); } 277 278/*ARGSUSED*/ 279uint64_t 280hvldc_intr_setcookie(uint64_t dev_hdl, uint32_t devino, uint64_t cookie) 281{ return (0); } 282 283/*ARGSUSED*/ 284uint64_t 285hvldc_intr_getvalid(uint64_t dev_hdl, uint32_t devino, int *intr_valid_state) 286{ return (0); } 287 288/*ARGSUSED*/ 289uint64_t 290hvldc_intr_setvalid(uint64_t dev_hdl, uint32_t devino, int intr_valid_state) 291{ return (0); } 292 293/*ARGSUSED*/ 294uint64_t 295hvldc_intr_getstate(uint64_t dev_hdl, uint32_t devino, int *intr_state) 296{ return (0); } 297 298/*ARGSUSED*/ 299uint64_t 300hvldc_intr_setstate(uint64_t dev_hdl, uint32_t devino, int intr_state) 301{ return (0); } 302 303/*ARGSUSED*/ 304uint64_t 305hvldc_intr_gettarget(uint64_t dev_hdl, uint32_t devino, uint32_t *cpuid) 306{ return (0); } 307 308/*ARGSUSED*/ 309uint64_t 310hvldc_intr_settarget(uint64_t dev_hdl, uint32_t devino, uint32_t cpuid) 311{ return (0); } 312 313/*ARGSUSED*/ 314uint64_t 315hv_api_get_version(uint64_t api_group, uint64_t *majorp, uint64_t *minorp) 316{ return (0); } 317 318/*ARGSUSED*/ 319uint64_t 320hv_api_set_version(uint64_t api_group, uint64_t major, uint64_t minor, 321 uint64_t *supported_minor) 322{ return (0); } 323 324#else /* lint || __lint */ 325 326 /* 327 * int hv_mach_exit(uint64_t exit_code) 328 */ 329 ENTRY(hv_mach_exit) 330 mov HV_MACH_EXIT, %o5 331 ta FAST_TRAP 332 retl 333 nop 334 SET_SIZE(hv_mach_exit) 335 336 /* 337 * uint64_t hv_mach_sir(void) 338 */ 339 ENTRY(hv_mach_sir) 340 mov HV_MACH_SIR, %o5 341 ta FAST_TRAP 342 retl 343 nop 344 SET_SIZE(hv_mach_sir) 345 346 /* 347 * hv_cpu_start(uint64_t cpuid, uint64_t pc, ui64_t rtba, 348 * uint64_t arg) 349 */ 350 ENTRY(hv_cpu_start) 351 mov HV_CPU_START, %o5 352 ta FAST_TRAP 353 retl 354 nop 355 SET_SIZE(hv_cpu_start) 356 357 /* 358 * hv_cpu_stop(uint64_t cpuid) 359 */ 360 ENTRY(hv_cpu_stop) 361 mov HV_CPU_STOP, %o5 362 ta FAST_TRAP 363 retl 364 nop 365 SET_SIZE(hv_cpu_stop) 366 367 /* 368 * hv_cpu_set_rtba(uint64_t *rtba) 369 */ 370 ENTRY(hv_cpu_set_rtba) 371 mov %o0, %o2 372 ldx [%o2], %o0 373 mov HV_CPU_SET_RTBA, %o5 374 ta FAST_TRAP 375 stx %o1, [%o2] 376 retl 377 nop 378 SET_SIZE(hv_cpu_set_rtba) 379 380 /* 381 * int64_t hv_cnputchar(uint8_t ch) 382 */ 383 ENTRY(hv_cnputchar) 384 mov CONS_PUTCHAR, %o5 385 ta FAST_TRAP 386 retl 387 nop 388 SET_SIZE(hv_cnputchar) 389 390 /* 391 * int64_t hv_cngetchar(uint8_t *ch) 392 */ 393 ENTRY(hv_cngetchar) 394 mov %o0, %o2 395 mov CONS_GETCHAR, %o5 396 ta FAST_TRAP 397 brnz,a %o0, 1f ! failure, just return error 398 nop 399 400 cmp %o1, H_BREAK 401 be 1f 402 mov %o1, %o0 403 404 cmp %o1, H_HUP 405 be 1f 406 mov %o1, %o0 407 408 stb %o1, [%o2] ! success, save character and return 0 409 mov 0, %o0 4101: 411 retl 412 nop 413 SET_SIZE(hv_cngetchar) 414 415 ENTRY(hv_tod_get) 416 mov %o0, %o4 417 mov TOD_GET, %o5 418 ta FAST_TRAP 419 retl 420 stx %o1, [%o4] 421 SET_SIZE(hv_tod_get) 422 423 ENTRY(hv_tod_set) 424 mov TOD_SET, %o5 425 ta FAST_TRAP 426 retl 427 nop 428 SET_SIZE(hv_tod_set) 429 430 /* 431 * Map permanent address 432 * arg0 vaddr (%o0) 433 * arg1 context (%o1) 434 * arg2 tte (%o2) 435 * arg3 flags (%o3) 0x1=d 0x2=i 436 */ 437 ENTRY(hv_mmu_map_perm_addr) 438 mov MAP_PERM_ADDR, %o5 439 ta FAST_TRAP 440 retl 441 nop 442 SET_SIZE(hv_mmu_map_perm_addr) 443 444 /* 445 * hv_mmu_fault_area_conf(void *raddr) 446 */ 447 ENTRY(hv_mmu_fault_area_conf) 448 mov %o0, %o2 449 ldx [%o2], %o0 450 mov MMU_SET_INFOPTR, %o5 451 ta FAST_TRAP 452 stx %o1, [%o2] 453 retl 454 nop 455 SET_SIZE(hv_mmu_fault_area_conf) 456 457 /* 458 * Unmap permanent address 459 * arg0 vaddr (%o0) 460 * arg1 context (%o1) 461 * arg2 flags (%o2) 0x1=d 0x2=i 462 */ 463 ENTRY(hv_mmu_unmap_perm_addr) 464 mov UNMAP_PERM_ADDR, %o5 465 ta FAST_TRAP 466 retl 467 nop 468 SET_SIZE(hv_mmu_unmap_perm_addr) 469 470 /* 471 * Set TSB for context 0 472 * arg0 ntsb_descriptor (%o0) 473 * arg1 desc_ra (%o1) 474 */ 475 ENTRY(hv_set_ctx0) 476 mov MMU_TSB_CTX0, %o5 477 ta FAST_TRAP 478 retl 479 nop 480 SET_SIZE(hv_set_ctx0) 481 482 /* 483 * Set TSB for context non0 484 * arg0 ntsb_descriptor (%o0) 485 * arg1 desc_ra (%o1) 486 */ 487 ENTRY(hv_set_ctxnon0) 488 mov MMU_TSB_CTXNON0, %o5 489 ta FAST_TRAP 490 retl 491 nop 492 SET_SIZE(hv_set_ctxnon0) 493 494#ifdef SET_MMU_STATS 495 /* 496 * Returns old stat area on success 497 */ 498 ENTRY(hv_mmu_set_stat_area) 499 mov MMU_STAT_AREA, %o5 500 ta FAST_TRAP 501 retl 502 nop 503 SET_SIZE(hv_mmu_set_stat_area) 504#endif /* SET_MMU_STATS */ 505 506 /* 507 * CPU Q Configure 508 * arg0 queue (%o0) 509 * arg1 Base address RA (%o1) 510 * arg2 Size (%o2) 511 */ 512 ENTRY(hv_cpu_qconf) 513 mov HV_CPU_QCONF, %o5 514 ta FAST_TRAP 515 retl 516 nop 517 SET_SIZE(hv_cpu_qconf) 518 519 /* 520 * arg0 - devhandle 521 * arg1 - devino 522 * 523 * ret0 - status 524 * ret1 - sysino 525 */ 526 ENTRY(hvio_intr_devino_to_sysino) 527 mov HVIO_INTR_DEVINO2SYSINO, %o5 528 ta FAST_TRAP 529 brz,a %o0, 1f 530 stx %o1, [%o2] 5311: retl 532 nop 533 SET_SIZE(hvio_intr_devino_to_sysino) 534 535 /* 536 * arg0 - sysino 537 * 538 * ret0 - status 539 * ret1 - intr_valid_state 540 */ 541 ENTRY(hvio_intr_getvalid) 542 mov %o1, %o2 543 mov HVIO_INTR_GETVALID, %o5 544 ta FAST_TRAP 545 brz,a %o0, 1f 546 stuw %o1, [%o2] 5471: retl 548 nop 549 SET_SIZE(hvio_intr_getvalid) 550 551 /* 552 * arg0 - sysino 553 * arg1 - intr_valid_state 554 * 555 * ret0 - status 556 */ 557 ENTRY(hvio_intr_setvalid) 558 mov HVIO_INTR_SETVALID, %o5 559 ta FAST_TRAP 560 retl 561 nop 562 SET_SIZE(hvio_intr_setvalid) 563 564 /* 565 * arg0 - sysino 566 * 567 * ret0 - status 568 * ret1 - intr_state 569 */ 570 ENTRY(hvio_intr_getstate) 571 mov %o1, %o2 572 mov HVIO_INTR_GETSTATE, %o5 573 ta FAST_TRAP 574 brz,a %o0, 1f 575 stuw %o1, [%o2] 5761: retl 577 nop 578 SET_SIZE(hvio_intr_getstate) 579 580 /* 581 * arg0 - sysino 582 * arg1 - intr_state 583 * 584 * ret0 - status 585 */ 586 ENTRY(hvio_intr_setstate) 587 mov HVIO_INTR_SETSTATE, %o5 588 ta FAST_TRAP 589 retl 590 nop 591 SET_SIZE(hvio_intr_setstate) 592 593 /* 594 * arg0 - sysino 595 * 596 * ret0 - status 597 * ret1 - cpu_id 598 */ 599 ENTRY(hvio_intr_gettarget) 600 mov %o1, %o2 601 mov HVIO_INTR_GETTARGET, %o5 602 ta FAST_TRAP 603 brz,a %o0, 1f 604 stuw %o1, [%o2] 6051: retl 606 nop 607 SET_SIZE(hvio_intr_gettarget) 608 609 /* 610 * arg0 - sysino 611 * arg1 - cpu_id 612 * 613 * ret0 - status 614 */ 615 ENTRY(hvio_intr_settarget) 616 mov HVIO_INTR_SETTARGET, %o5 617 ta FAST_TRAP 618 retl 619 nop 620 SET_SIZE(hvio_intr_settarget) 621 622 /* 623 * hv_cpu_yield(void) 624 */ 625 ENTRY(hv_cpu_yield) 626 mov HV_CPU_YIELD, %o5 627 ta FAST_TRAP 628 retl 629 nop 630 SET_SIZE(hv_cpu_yield) 631 632 /* 633 * int hv_cpu_state(uint64_t cpuid, uint64_t *cpu_state); 634 */ 635 ENTRY(hv_cpu_state) 636 mov %o1, %o4 ! save datap 637 mov HV_CPU_STATE, %o5 638 ta FAST_TRAP 639 brz,a %o0, 1f 640 stx %o1, [%o4] 6411: 642 retl 643 nop 644 SET_SIZE(hv_cpu_state) 645 646 /* 647 * HV state dump zone Configure 648 * arg0 real adrs of dump buffer (%o0) 649 * arg1 size of dump buffer (%o1) 650 * ret0 status (%o0) 651 * ret1 size of buffer on success and min size on EINVAL (%o1) 652 * hv_dump_buf_update(uint64_t paddr, uint64_t size, uint64_t *ret_size) 653 */ 654 ENTRY(hv_dump_buf_update) 655 mov DUMP_BUF_UPDATE, %o5 656 ta FAST_TRAP 657 retl 658 stx %o1, [%o2] 659 SET_SIZE(hv_dump_buf_update) 660 661 662 /* 663 * For memory scrub 664 * int hv_mem_scrub(uint64_t real_addr, uint64_t length, 665 * uint64_t *scrubbed_len); 666 * Retun %o0 -- status 667 * %o1 -- bytes scrubbed 668 */ 669 ENTRY(hv_mem_scrub) 670 mov %o2, %o4 671 mov HV_MEM_SCRUB, %o5 672 ta FAST_TRAP 673 retl 674 stx %o1, [%o4] 675 SET_SIZE(hv_mem_scrub) 676 677 /* 678 * Flush ecache 679 * int hv_mem_sync(uint64_t real_addr, uint64_t length, 680 * uint64_t *flushed_len); 681 * Retun %o0 -- status 682 * %o1 -- bytes flushed 683 */ 684 ENTRY(hv_mem_sync) 685 mov %o2, %o4 686 mov HV_MEM_SYNC, %o5 687 ta FAST_TRAP 688 retl 689 stx %o1, [%o4] 690 SET_SIZE(hv_mem_sync) 691 692 /* 693 * TTRACE_BUF_CONF Configure 694 * arg0 RA base of buffer (%o0) 695 * arg1 buf size in no. of entries (%o1) 696 * ret0 status (%o0) 697 * ret1 minimum size in no. of entries on failure, 698 * actual size in no. of entries on success (%o1) 699 */ 700 ENTRY(hv_ttrace_buf_conf) 701 mov TTRACE_BUF_CONF, %o5 702 ta FAST_TRAP 703 retl 704 stx %o1, [%o2] 705 SET_SIZE(hv_ttrace_buf_conf) 706 707 /* 708 * TTRACE_BUF_INFO 709 * ret0 status (%o0) 710 * ret1 RA base of buffer (%o1) 711 * ret2 size in no. of entries (%o2) 712 */ 713 ENTRY(hv_ttrace_buf_info) 714 mov %o0, %o3 715 mov %o1, %o4 716 mov TTRACE_BUF_INFO, %o5 717 ta FAST_TRAP 718 stx %o1, [%o3] 719 retl 720 stx %o2, [%o4] 721 SET_SIZE(hv_ttrace_buf_info) 722 723 /* 724 * TTRACE_ENABLE 725 * arg0 enable/ disable (%o0) 726 * ret0 status (%o0) 727 * ret1 previous enable state (%o1) 728 */ 729 ENTRY(hv_ttrace_enable) 730 mov %o1, %o2 731 mov TTRACE_ENABLE, %o5 732 ta FAST_TRAP 733 retl 734 stx %o1, [%o2] 735 SET_SIZE(hv_ttrace_enable) 736 737 /* 738 * TTRACE_FREEZE 739 * arg0 enable/ freeze (%o0) 740 * ret0 status (%o0) 741 * ret1 previous freeze state (%o1) 742 */ 743 ENTRY(hv_ttrace_freeze) 744 mov %o1, %o2 745 mov TTRACE_FREEZE, %o5 746 ta FAST_TRAP 747 retl 748 stx %o1, [%o2] 749 SET_SIZE(hv_ttrace_freeze) 750 751 /* 752 * MACH_DESC 753 * arg0 buffer real address 754 * arg1 pointer to uint64_t for size of buffer 755 * ret0 status 756 * ret1 return required size of buffer / returned data size 757 */ 758 ENTRY(hv_mach_desc) 759 mov %o1, %o4 ! save datap 760 ldx [%o1], %o1 761 mov HV_MACH_DESC, %o5 762 ta FAST_TRAP 763 retl 764 stx %o1, [%o4] 765 SET_SIZE(hv_mach_desc) 766 767 /* 768 * hv_ra2pa(uint64_t ra) 769 * 770 * MACH_DESC 771 * arg0 Real address to convert 772 * ret0 Returned physical address or -1 on error 773 */ 774 ENTRY(hv_ra2pa) 775 mov HV_RA2PA, %o5 776 ta FAST_TRAP 777 cmp %o0, 0 778 move %xcc, %o1, %o0 779 movne %xcc, -1, %o0 780 retl 781 nop 782 SET_SIZE(hv_ra2pa) 783 784 /* 785 * hv_hpriv(void *func, uint64_t arg1, uint64_t arg2, uint64_t arg3) 786 * 787 * MACH_DESC 788 * arg0 OS function to call 789 * arg1 First arg to OS function 790 * arg2 Second arg to OS function 791 * arg3 Third arg to OS function 792 * ret0 Returned value from function 793 */ 794 795 ENTRY(hv_hpriv) 796 mov HV_HPRIV, %o5 797 ta FAST_TRAP 798 retl 799 nop 800 SET_SIZE(hv_hpriv) 801 802 /* 803 * hv_ldc_tx_qconf(uint64_t channel, uint64_t ra_base, 804 * uint64_t nentries); 805 */ 806 ENTRY(hv_ldc_tx_qconf) 807 mov LDC_TX_QCONF, %o5 808 ta FAST_TRAP 809 retl 810 nop 811 SET_SIZE(hv_ldc_tx_qconf) 812 813 814 /* 815 * hv_ldc_tx_qinfo(uint64_t channel, uint64_t *ra_base, 816 * uint64_t *nentries); 817 */ 818 ENTRY(hv_ldc_tx_qinfo) 819 mov %o1, %g1 820 mov %o2, %g2 821 mov LDC_TX_QINFO, %o5 822 ta FAST_TRAP 823 stx %o1, [%g1] 824 retl 825 stx %o2, [%g2] 826 SET_SIZE(hv_ldc_tx_qinfo) 827 828 829 /* 830 * hv_ldc_tx_get_state(uint64_t channel, 831 * uint64_t *headp, uint64_t *tailp, uint64_t *state); 832 */ 833 ENTRY(hv_ldc_tx_get_state) 834 mov LDC_TX_GET_STATE, %o5 835 mov %o1, %g1 836 mov %o2, %g2 837 mov %o3, %g3 838 ta FAST_TRAP 839 stx %o1, [%g1] 840 stx %o2, [%g2] 841 retl 842 stx %o3, [%g3] 843 SET_SIZE(hv_ldc_tx_get_state) 844 845 846 /* 847 * hv_ldc_tx_set_qtail(uint64_t channel, uint64_t tail) 848 */ 849 ENTRY(hv_ldc_tx_set_qtail) 850 mov LDC_TX_SET_QTAIL, %o5 851 ta FAST_TRAP 852 retl 853 SET_SIZE(hv_ldc_tx_set_qtail) 854 855 856 /* 857 * hv_ldc_rx_qconf(uint64_t channel, uint64_t ra_base, 858 * uint64_t nentries); 859 */ 860 ENTRY(hv_ldc_rx_qconf) 861 mov LDC_RX_QCONF, %o5 862 ta FAST_TRAP 863 retl 864 nop 865 SET_SIZE(hv_ldc_rx_qconf) 866 867 868 /* 869 * hv_ldc_rx_qinfo(uint64_t channel, uint64_t *ra_base, 870 * uint64_t *nentries); 871 */ 872 ENTRY(hv_ldc_rx_qinfo) 873 mov %o1, %g1 874 mov %o2, %g2 875 mov LDC_RX_QINFO, %o5 876 ta FAST_TRAP 877 stx %o1, [%g1] 878 retl 879 stx %o2, [%g2] 880 SET_SIZE(hv_ldc_rx_qinfo) 881 882 883 /* 884 * hv_ldc_rx_get_state(uint64_t channel, 885 * uint64_t *headp, uint64_t *tailp, uint64_t *state); 886 */ 887 ENTRY(hv_ldc_rx_get_state) 888 mov LDC_RX_GET_STATE, %o5 889 mov %o1, %g1 890 mov %o2, %g2 891 mov %o3, %g3 892 ta FAST_TRAP 893 stx %o1, [%g1] 894 stx %o2, [%g2] 895 retl 896 stx %o3, [%g3] 897 SET_SIZE(hv_ldc_rx_get_state) 898 899 900 /* 901 * hv_ldc_rx_set_qhead(uint64_t channel, uint64_t head) 902 */ 903 ENTRY(hv_ldc_rx_set_qhead) 904 mov LDC_RX_SET_QHEAD, %o5 905 ta FAST_TRAP 906 retl 907 SET_SIZE(hv_ldc_rx_set_qhead) 908 909 /* 910 * hv_ldc_set_map_table(uint64_t channel, uint64_t tbl_ra, 911 * uint64_t tbl_entries) 912 */ 913 ENTRY(hv_ldc_set_map_table) 914 mov LDC_SET_MAP_TABLE, %o5 915 ta FAST_TRAP 916 retl 917 nop 918 SET_SIZE(hv_ldc_set_map_table) 919 920 921 /* 922 * hv_ldc_get_map_table(uint64_t channel, uint64_t *tbl_ra, 923 * uint64_t *tbl_entries) 924 */ 925 ENTRY(hv_ldc_get_map_table) 926 mov %o1, %g1 927 mov %o2, %g2 928 mov LDC_GET_MAP_TABLE, %o5 929 ta FAST_TRAP 930 stx %o1, [%g1] 931 retl 932 stx %o2, [%g2] 933 SET_SIZE(hv_ldc_get_map_table) 934 935 936 /* 937 * hv_ldc_copy(uint64_t channel, uint64_t request, uint64_t cookie, 938 * uint64_t raddr, uint64_t length, uint64_t *lengthp); 939 */ 940 ENTRY(hv_ldc_copy) 941 mov %o5, %g1 942 mov LDC_COPY, %o5 943 ta FAST_TRAP 944 retl 945 stx %o1, [%g1] 946 SET_SIZE(hv_ldc_copy) 947 948 949 /* 950 * hv_ldc_mapin(uint64_t channel, uint64_t cookie, uint64_t *raddr, 951 * uint64_t *perm) 952 */ 953 ENTRY(hv_ldc_mapin) 954 mov %o2, %g1 955 mov %o3, %g2 956 mov LDC_MAPIN, %o5 957 ta FAST_TRAP 958 stx %o1, [%g1] 959 retl 960 stx %o2, [%g2] 961 SET_SIZE(hv_ldc_mapin) 962 963 964 /* 965 * hv_ldc_unmap(uint64_t raddr) 966 */ 967 ENTRY(hv_ldc_unmap) 968 mov LDC_UNMAP, %o5 969 ta FAST_TRAP 970 retl 971 nop 972 SET_SIZE(hv_ldc_unmap) 973 974 975 /* 976 * hv_ldc_revoke(uint64_t raddr) 977 */ 978 ENTRY(hv_ldc_revoke) 979 mov LDC_REVOKE, %o5 980 ta FAST_TRAP 981 retl 982 nop 983 SET_SIZE(hv_ldc_revoke) 984 985 986 /* 987 * hvldc_intr_getcookie(uint64_t dev_hdl, uint32_t devino, 988 * uint64_t *cookie); 989 */ 990 ENTRY(hvldc_intr_getcookie) 991 mov %o2, %g1 992 mov VINTR_GET_COOKIE, %o5 993 ta FAST_TRAP 994 retl 995 stx %o1, [%g1] 996 SET_SIZE(hvldc_intr_getcookie) 997 998 /* 999 * hvldc_intr_setcookie(uint64_t dev_hdl, uint32_t devino, 1000 * uint64_t cookie); 1001 */ 1002 ENTRY(hvldc_intr_setcookie) 1003 mov VINTR_SET_COOKIE, %o5 1004 ta FAST_TRAP 1005 retl 1006 nop 1007 SET_SIZE(hvldc_intr_setcookie) 1008 1009 1010 /* 1011 * hvldc_intr_getvalid(uint64_t dev_hdl, uint32_t devino, 1012 * int *intr_valid_state); 1013 */ 1014 ENTRY(hvldc_intr_getvalid) 1015 mov %o2, %g1 1016 mov VINTR_GET_VALID, %o5 1017 ta FAST_TRAP 1018 retl 1019 stuw %o1, [%g1] 1020 SET_SIZE(hvldc_intr_getvalid) 1021 1022 /* 1023 * hvldc_intr_setvalid(uint64_t dev_hdl, uint32_t devino, 1024 * int intr_valid_state); 1025 */ 1026 ENTRY(hvldc_intr_setvalid) 1027 mov VINTR_SET_VALID, %o5 1028 ta FAST_TRAP 1029 retl 1030 nop 1031 SET_SIZE(hvldc_intr_setvalid) 1032 1033 /* 1034 * hvldc_intr_getstate(uint64_t dev_hdl, uint32_t devino, 1035 * int *intr_state); 1036 */ 1037 ENTRY(hvldc_intr_getstate) 1038 mov %o2, %g1 1039 mov VINTR_GET_STATE, %o5 1040 ta FAST_TRAP 1041 retl 1042 stuw %o1, [%g1] 1043 SET_SIZE(hvldc_intr_getstate) 1044 1045 /* 1046 * hvldc_intr_setstate(uint64_t dev_hdl, uint32_t devino, 1047 * int intr_state); 1048 */ 1049 ENTRY(hvldc_intr_setstate) 1050 mov VINTR_SET_STATE, %o5 1051 ta FAST_TRAP 1052 retl 1053 nop 1054 SET_SIZE(hvldc_intr_setstate) 1055 1056 /* 1057 * hvldc_intr_gettarget(uint64_t dev_hdl, uint32_t devino, 1058 * uint32_t *cpuid); 1059 */ 1060 ENTRY(hvldc_intr_gettarget) 1061 mov %o2, %g1 1062 mov VINTR_GET_TARGET, %o5 1063 ta FAST_TRAP 1064 retl 1065 stuw %o1, [%g1] 1066 SET_SIZE(hvldc_intr_gettarget) 1067 1068 /* 1069 * hvldc_intr_settarget(uint64_t dev_hdl, uint32_t devino, 1070 * uint32_t cpuid); 1071 */ 1072 ENTRY(hvldc_intr_settarget) 1073 mov VINTR_SET_TARGET, %o5 1074 ta FAST_TRAP 1075 retl 1076 nop 1077 SET_SIZE(hvldc_intr_settarget) 1078 1079 /* 1080 * hv_api_get_version(uint64_t api_group, uint64_t *majorp, 1081 * uint64_t *minorp) 1082 * 1083 * API_GET_VERSION 1084 * arg0 API group 1085 * ret0 status 1086 * ret1 major number 1087 * ret2 minor number 1088 */ 1089 ENTRY(hv_api_get_version) 1090 mov %o1, %o3 1091 mov %o2, %o4 1092 mov API_GET_VERSION, %o5 1093 ta CORE_TRAP 1094 stx %o1, [%o3] 1095 retl 1096 stx %o2, [%o4] 1097 SET_SIZE(hv_api_get_version) 1098 1099 /* 1100 * hv_api_set_version(uint64_t api_group, uint64_t major, 1101 * uint64_t minor, uint64_t *supported_minor) 1102 * 1103 * API_SET_VERSION 1104 * arg0 API group 1105 * arg1 major number 1106 * arg2 requested minor number 1107 * ret0 status 1108 * ret1 actual minor number 1109 */ 1110 ENTRY(hv_api_set_version) 1111 mov %o3, %o4 1112 mov API_SET_VERSION, %o5 1113 ta CORE_TRAP 1114 retl 1115 stx %o1, [%o4] 1116 SET_SIZE(hv_api_set_version) 1117 1118#endif /* lint || __lint */ 1119