root/arch/sparc/kernel/hvcalls.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2         /* %o0: devhandle
   3          * %o1: devino
   4          *
   5          * returns %o0: sysino
   6          */
   7 ENTRY(sun4v_devino_to_sysino)
   8         mov     HV_FAST_INTR_DEVINO2SYSINO, %o5
   9         ta      HV_FAST_TRAP
  10         retl
  11          mov    %o1, %o0
  12 ENDPROC(sun4v_devino_to_sysino)
  13 
  14         /* %o0: sysino
  15          *
  16          * returns %o0: intr_enabled (HV_INTR_{DISABLED,ENABLED})
  17          */
  18 ENTRY(sun4v_intr_getenabled)
  19         mov     HV_FAST_INTR_GETENABLED, %o5
  20         ta      HV_FAST_TRAP
  21         retl
  22          mov    %o1, %o0
  23 ENDPROC(sun4v_intr_getenabled)
  24 
  25         /* %o0: sysino
  26          * %o1: intr_enabled (HV_INTR_{DISABLED,ENABLED})
  27          */
  28 ENTRY(sun4v_intr_setenabled)
  29         mov     HV_FAST_INTR_SETENABLED, %o5
  30         ta      HV_FAST_TRAP
  31         retl
  32          nop
  33 ENDPROC(sun4v_intr_setenabled)
  34 
  35         /* %o0: sysino
  36          *
  37          * returns %o0: intr_state (HV_INTR_STATE_*)
  38          */
  39 ENTRY(sun4v_intr_getstate)
  40         mov     HV_FAST_INTR_GETSTATE, %o5
  41         ta      HV_FAST_TRAP
  42         retl
  43          mov    %o1, %o0
  44 ENDPROC(sun4v_intr_getstate)
  45 
  46         /* %o0: sysino
  47          * %o1: intr_state (HV_INTR_STATE_*)
  48          */
  49 ENTRY(sun4v_intr_setstate)
  50         mov     HV_FAST_INTR_SETSTATE, %o5
  51         ta      HV_FAST_TRAP
  52         retl
  53          nop
  54 ENDPROC(sun4v_intr_setstate)
  55 
  56         /* %o0: sysino
  57          *
  58          * returns %o0: cpuid
  59          */
  60 ENTRY(sun4v_intr_gettarget)
  61         mov     HV_FAST_INTR_GETTARGET, %o5
  62         ta      HV_FAST_TRAP
  63         retl
  64          mov    %o1, %o0
  65 ENDPROC(sun4v_intr_gettarget)
  66 
  67         /* %o0: sysino
  68          * %o1: cpuid
  69          */
  70 ENTRY(sun4v_intr_settarget)
  71         mov     HV_FAST_INTR_SETTARGET, %o5
  72         ta      HV_FAST_TRAP
  73         retl
  74          nop
  75 ENDPROC(sun4v_intr_settarget)
  76 
  77         /* %o0: cpuid
  78          * %o1: pc
  79          * %o2: rtba
  80          * %o3: arg0
  81          *
  82          * returns %o0: status
  83          */
  84 ENTRY(sun4v_cpu_start)
  85         mov     HV_FAST_CPU_START, %o5
  86         ta      HV_FAST_TRAP
  87         retl
  88          nop
  89 ENDPROC(sun4v_cpu_start)
  90 
  91         /* %o0: cpuid
  92          *
  93          * returns %o0: status
  94          */
  95 ENTRY(sun4v_cpu_stop)
  96         mov     HV_FAST_CPU_STOP, %o5
  97         ta      HV_FAST_TRAP
  98         retl
  99          nop
 100 ENDPROC(sun4v_cpu_stop)
 101 
 102         /* returns %o0: status  */
 103 ENTRY(sun4v_cpu_yield)
 104         mov     HV_FAST_CPU_YIELD, %o5
 105         ta      HV_FAST_TRAP
 106         retl
 107          nop
 108 ENDPROC(sun4v_cpu_yield)
 109 
 110         /* %o0: cpuid
 111          *
 112          * returns %o0: status
 113          */
 114 ENTRY(sun4v_cpu_poke)
 115         mov     HV_FAST_CPU_POKE, %o5
 116         ta      HV_FAST_TRAP
 117         retl
 118          nop
 119 ENDPROC(sun4v_cpu_poke)
 120 
 121         /* %o0: type
 122          * %o1: queue paddr
 123          * %o2: num queue entries
 124          *
 125          * returns %o0: status
 126          */
 127 ENTRY(sun4v_cpu_qconf)
 128         mov     HV_FAST_CPU_QCONF, %o5
 129         ta      HV_FAST_TRAP
 130         retl
 131          nop
 132 ENDPROC(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          */
 140 ENTRY(sun4v_cpu_mondo_send)
 141         mov     HV_FAST_CPU_MONDO_SEND, %o5
 142         ta      HV_FAST_TRAP
 143         retl
 144          nop
 145 ENDPROC(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          */
 152 ENTRY(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
 158 1:      retl
 159          nop
 160 ENDPROC(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          */
 169 ENTRY(sun4v_mmu_map_perm_addr)
 170         mov     HV_FAST_MMU_MAP_PERM_ADDR, %o5
 171         ta      HV_FAST_TRAP
 172         retl
 173          nop
 174 ENDPROC(sun4v_mmu_map_perm_addr)
 175 
 176         /* %o0: number of TSB descriptions
 177          * %o1: TSB descriptions real address
 178          *
 179          * returns %o0: status
 180          */
 181 ENTRY(sun4v_mmu_tsb_ctx0)
 182         mov     HV_FAST_MMU_TSB_CTX0, %o5
 183         ta      HV_FAST_TRAP
 184         retl
 185          nop
 186 ENDPROC(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          */
 194 ENTRY(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]
 202 ENDPROC(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          */
 211 ENTRY(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]
 217 ENDPROC(sun4v_set_version)
 218 
 219         /* %o0: pointer to unsigned long time
 220          *
 221          * returns %o0: status
 222          */
 223 ENTRY(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
 230 ENDPROC(sun4v_tod_get)
 231 
 232         /* %o0: time
 233          *
 234          * returns %o0: status
 235          */
 236 ENTRY(sun4v_tod_set)
 237         mov     HV_FAST_TOD_SET, %o5
 238         ta      HV_FAST_TRAP
 239         retl
 240          nop
 241 ENDPROC(sun4v_tod_set)
 242 
 243         /* %o0: pointer to unsigned long status
 244          *
 245          * returns %o0: signed character
 246          */
 247 ENTRY(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
 256 ENDPROC(sun4v_con_getchar)
 257 
 258         /* %o0: signed long character
 259          *
 260          * returns %o0: status
 261          */
 262 ENTRY(sun4v_con_putchar)
 263         mov     HV_FAST_CONS_PUTCHAR, %o5
 264         ta      HV_FAST_TRAP
 265         retl
 266          sra    %o0, 0, %o0
 267 ENDPROC(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          */
 275 ENTRY(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]
 287 1:      retl
 288          nop
 289 ENDPROC(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          */
 297 ENTRY(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
 304 ENDPROC(sun4v_con_write)
 305 
 306         /* %o0: soft state
 307          * %o1: address of description string
 308          *
 309          * returns %o0: status
 310          */
 311 ENTRY(sun4v_mach_set_soft_state)
 312         mov     HV_FAST_MACH_SET_SOFT_STATE, %o5
 313         ta      HV_FAST_TRAP
 314         retl
 315          nop
 316 ENDPROC(sun4v_mach_set_soft_state)
 317 
 318         /* %o0: exit code
 319          *
 320          * Does not return.
 321          */
 322 ENTRY(sun4v_mach_exit)
 323         mov     HV_FAST_MACH_EXIT, %o5
 324         ta      HV_FAST_TRAP
 325         retl
 326          nop
 327 ENDPROC(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          */
 335 ENTRY(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
 342 ENDPROC(sun4v_mach_desc)
 343 
 344         /* %o0: new timeout in milliseconds
 345          * %o1: pointer to unsigned long orig_timeout
 346          *
 347          * returns %o0: status
 348          */
 349 ENTRY(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]
 355 0:      retl
 356          nop
 357 ENDPROC(sun4v_mach_set_watchdog)
 358 EXPORT_SYMBOL(sun4v_mach_set_watchdog)
 359 
 360         /* No inputs and does not return.  */
 361 ENTRY(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
 368 ENDPROC(sun4v_mach_sir)
 369 
 370         /* %o0: channel
 371          * %o1: ra
 372          * %o2: num_entries
 373          *
 374          * returns %o0: status
 375          */
 376 ENTRY(sun4v_ldc_tx_qconf)
 377         mov     HV_FAST_LDC_TX_QCONF, %o5
 378         ta      HV_FAST_TRAP
 379         retl
 380          nop
 381 ENDPROC(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          */
 389 ENTRY(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
 398 ENDPROC(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          */
 407 ENTRY(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
 418 ENDPROC(sun4v_ldc_tx_get_state)
 419 
 420         /* %o0: channel
 421          * %o1: tail_off
 422          *
 423          * returns %o0: status
 424          */
 425 ENTRY(sun4v_ldc_tx_set_qtail)
 426         mov     HV_FAST_LDC_TX_SET_QTAIL, %o5
 427         ta      HV_FAST_TRAP
 428         retl
 429          nop
 430 ENDPROC(sun4v_ldc_tx_set_qtail)
 431 
 432         /* %o0: channel
 433          * %o1: ra
 434          * %o2: num_entries
 435          *
 436          * returns %o0: status
 437          */
 438 ENTRY(sun4v_ldc_rx_qconf)
 439         mov     HV_FAST_LDC_RX_QCONF, %o5
 440         ta      HV_FAST_TRAP
 441         retl
 442          nop
 443 ENDPROC(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          */
 451 ENTRY(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
 460 ENDPROC(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          */
 469 ENTRY(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
 480 ENDPROC(sun4v_ldc_rx_get_state)
 481 
 482         /* %o0: channel
 483          * %o1: head_off
 484          *
 485          * returns %o0: status
 486          */
 487 ENTRY(sun4v_ldc_rx_set_qhead)
 488         mov     HV_FAST_LDC_RX_SET_QHEAD, %o5
 489         ta      HV_FAST_TRAP
 490         retl
 491          nop
 492 ENDPROC(sun4v_ldc_rx_set_qhead)
 493 
 494         /* %o0: channel
 495          * %o1: ra
 496          * %o2: num_entries
 497          *
 498          * returns %o0: status
 499          */
 500 ENTRY(sun4v_ldc_set_map_table)
 501         mov     HV_FAST_LDC_SET_MAP_TABLE, %o5
 502         ta      HV_FAST_TRAP
 503         retl
 504          nop
 505 ENDPROC(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          */
 513 ENTRY(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
 522 ENDPROC(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          */
 533 ENTRY(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
 540 ENDPROC(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          */
 549 ENTRY(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
 558 ENDPROC(sun4v_ldc_mapin)
 559 
 560         /* %o0: ra
 561          *
 562          * returns %o0: status
 563          */
 564 ENTRY(sun4v_ldc_unmap)
 565         mov     HV_FAST_LDC_UNMAP, %o5
 566         ta      HV_FAST_TRAP
 567         retl
 568          nop
 569 ENDPROC(sun4v_ldc_unmap)
 570 
 571         /* %o0: channel
 572          * %o1: cookie
 573          * %o2: mte_cookie
 574          *
 575          * returns %o0: status
 576          */
 577 ENTRY(sun4v_ldc_revoke)
 578         mov     HV_FAST_LDC_REVOKE, %o5
 579         ta      HV_FAST_TRAP
 580         retl
 581          nop
 582 ENDPROC(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          */
 590 ENTRY(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
 597 ENDPROC(sun4v_vintr_get_cookie)
 598 
 599         /* %o0: device handle
 600          * %o1: device INO
 601          * %o2: cookie
 602          *
 603          * returns %o0: status
 604          */
 605 ENTRY(sun4v_vintr_set_cookie)
 606         mov     HV_FAST_VINTR_SET_COOKIE, %o5
 607         ta      HV_FAST_TRAP
 608         retl
 609          nop
 610 ENDPROC(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          */
 618 ENTRY(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
 625 ENDPROC(sun4v_vintr_get_valid)
 626 
 627         /* %o0: device handle
 628          * %o1: device INO
 629          * %o2: valid_state
 630          *
 631          * returns %o0: status
 632          */
 633 ENTRY(sun4v_vintr_set_valid)
 634         mov     HV_FAST_VINTR_SET_VALID, %o5
 635         ta      HV_FAST_TRAP
 636         retl
 637          nop
 638 ENDPROC(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          */
 646 ENTRY(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
 653 ENDPROC(sun4v_vintr_get_state)
 654 
 655         /* %o0: device handle
 656          * %o1: device INO
 657          * %o2: state
 658          *
 659          * returns %o0: status
 660          */
 661 ENTRY(sun4v_vintr_set_state)
 662         mov     HV_FAST_VINTR_SET_STATE, %o5
 663         ta      HV_FAST_TRAP
 664         retl
 665          nop
 666 ENDPROC(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          */
 674 ENTRY(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
 681 ENDPROC(sun4v_vintr_get_target)
 682 
 683         /* %o0: device handle
 684          * %o1: device INO
 685          * %o2: cpuid
 686          *
 687          * returns %o0: status
 688          */
 689 ENTRY(sun4v_vintr_set_target)
 690         mov     HV_FAST_VINTR_SET_TARGET, %o5
 691         ta      HV_FAST_TRAP
 692         retl
 693          nop
 694 ENDPROC(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          */
 702 ENTRY(sun4v_ncs_request)
 703         mov     HV_FAST_NCS_REQUEST, %o5
 704         ta      HV_FAST_TRAP
 705         retl
 706          nop
 707 ENDPROC(sun4v_ncs_request)
 708 
 709 ENTRY(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
 719 ENDPROC(sun4v_svc_send)
 720 
 721 ENTRY(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
 731 ENDPROC(sun4v_svc_recv)
 732 
 733 ENTRY(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
 740 ENDPROC(sun4v_svc_getstatus)
 741 
 742 ENTRY(sun4v_svc_setstatus)
 743         mov     HV_FAST_SVC_SETSTATUS, %o5
 744         ta      HV_FAST_TRAP
 745         retl
 746          nop
 747 ENDPROC(sun4v_svc_setstatus)
 748 
 749 ENTRY(sun4v_svc_clrstatus)
 750         mov     HV_FAST_SVC_CLRSTATUS, %o5
 751         ta      HV_FAST_TRAP
 752         retl
 753          nop
 754 ENDPROC(sun4v_svc_clrstatus)
 755 
 756 ENTRY(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
 763 ENDPROC(sun4v_mmustat_conf)
 764 
 765 ENTRY(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
 772 ENDPROC(sun4v_mmustat_info)
 773 
 774 ENTRY(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
 782 ENDPROC(sun4v_mmu_demap_all)
 783 
 784 ENTRY(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
 791 ENDPROC(sun4v_niagara_getperf)
 792 EXPORT_SYMBOL(sun4v_niagara_getperf)
 793 
 794 ENTRY(sun4v_niagara_setperf)
 795         mov     HV_FAST_SET_PERFREG, %o5
 796         ta      HV_FAST_TRAP
 797         retl
 798          nop
 799 ENDPROC(sun4v_niagara_setperf)
 800 EXPORT_SYMBOL(sun4v_niagara_setperf)
 801 
 802 ENTRY(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
 809 ENDPROC(sun4v_niagara2_getperf)
 810 EXPORT_SYMBOL(sun4v_niagara2_getperf)
 811 
 812 ENTRY(sun4v_niagara2_setperf)
 813         mov     HV_FAST_N2_SET_PERFREG, %o5
 814         ta      HV_FAST_TRAP
 815         retl
 816          nop
 817 ENDPROC(sun4v_niagara2_setperf)
 818 EXPORT_SYMBOL(sun4v_niagara2_setperf)
 819 
 820 ENTRY(sun4v_reboot_data_set)
 821         mov     HV_FAST_REBOOT_DATA_SET, %o5
 822         ta      HV_FAST_TRAP
 823         retl
 824          nop
 825 ENDPROC(sun4v_reboot_data_set)
 826 
 827 ENTRY(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
 834 ENDPROC(sun4v_vt_get_perfreg)
 835 
 836 ENTRY(sun4v_vt_set_perfreg)
 837         mov     HV_FAST_VT_SET_PERFREG, %o5
 838         ta      HV_FAST_TRAP
 839         retl
 840          nop
 841 ENDPROC(sun4v_vt_set_perfreg)
 842 
 843 ENTRY(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
 850 ENDPROC(sun4v_t5_get_perfreg)
 851 
 852 ENTRY(sun4v_t5_set_perfreg)
 853         mov     HV_FAST_T5_SET_PERFREG, %o5
 854         ta      HV_FAST_TRAP
 855         retl
 856          nop
 857 ENDPROC(sun4v_t5_set_perfreg)
 858 
 859 ENTRY(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
 866 ENDPROC(sun4v_m7_get_perfreg)
 867 
 868 ENTRY(sun4v_m7_set_perfreg)
 869         mov     HV_FAST_M7_SET_PERFREG, %o5
 870         ta      HV_FAST_TRAP
 871         retl
 872         nop
 873 ENDPROC(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          */
 886 ENTRY(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]
 893 ENDPROC(sun4v_ccb_submit)
 894 EXPORT_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          */
 905 ENTRY(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]
 914 ENDPROC(sun4v_ccb_info)
 915 EXPORT_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          */
 923 ENTRY(sun4v_ccb_kill)
 924         mov     %o1, %g1
 925         mov     HV_CCB_KILL, %o5
 926         ta      HV_FAST_TRAP
 927         retl
 928          sth    %o1, [%g1]
 929 ENDPROC(sun4v_ccb_kill)
 930 EXPORT_SYMBOL(sun4v_ccb_kill)

/* [<][>][^][v][top][bottom][index][help] */