Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/sparc/kernel/hvcalls.S
10817 views
1
/* %o0: devhandle
2
* %o1: devino
3
*
4
* returns %o0: sysino
5
*/
6
ENTRY(sun4v_devino_to_sysino)
7
mov HV_FAST_INTR_DEVINO2SYSINO, %o5
8
ta HV_FAST_TRAP
9
retl
10
mov %o1, %o0
11
ENDPROC(sun4v_devino_to_sysino)
12
13
/* %o0: sysino
14
*
15
* returns %o0: intr_enabled (HV_INTR_{DISABLED,ENABLED})
16
*/
17
ENTRY(sun4v_intr_getenabled)
18
mov HV_FAST_INTR_GETENABLED, %o5
19
ta HV_FAST_TRAP
20
retl
21
mov %o1, %o0
22
ENDPROC(sun4v_intr_getenabled)
23
24
/* %o0: sysino
25
* %o1: intr_enabled (HV_INTR_{DISABLED,ENABLED})
26
*/
27
ENTRY(sun4v_intr_setenabled)
28
mov HV_FAST_INTR_SETENABLED, %o5
29
ta HV_FAST_TRAP
30
retl
31
nop
32
ENDPROC(sun4v_intr_setenabled)
33
34
/* %o0: sysino
35
*
36
* returns %o0: intr_state (HV_INTR_STATE_*)
37
*/
38
ENTRY(sun4v_intr_getstate)
39
mov HV_FAST_INTR_GETSTATE, %o5
40
ta HV_FAST_TRAP
41
retl
42
mov %o1, %o0
43
ENDPROC(sun4v_intr_getstate)
44
45
/* %o0: sysino
46
* %o1: intr_state (HV_INTR_STATE_*)
47
*/
48
ENTRY(sun4v_intr_setstate)
49
mov HV_FAST_INTR_SETSTATE, %o5
50
ta HV_FAST_TRAP
51
retl
52
nop
53
ENDPROC(sun4v_intr_setstate)
54
55
/* %o0: sysino
56
*
57
* returns %o0: cpuid
58
*/
59
ENTRY(sun4v_intr_gettarget)
60
mov HV_FAST_INTR_GETTARGET, %o5
61
ta HV_FAST_TRAP
62
retl
63
mov %o1, %o0
64
ENDPROC(sun4v_intr_gettarget)
65
66
/* %o0: sysino
67
* %o1: cpuid
68
*/
69
ENTRY(sun4v_intr_settarget)
70
mov HV_FAST_INTR_SETTARGET, %o5
71
ta HV_FAST_TRAP
72
retl
73
nop
74
ENDPROC(sun4v_intr_settarget)
75
76
/* %o0: cpuid
77
* %o1: pc
78
* %o2: rtba
79
* %o3: arg0
80
*
81
* returns %o0: status
82
*/
83
ENTRY(sun4v_cpu_start)
84
mov HV_FAST_CPU_START, %o5
85
ta HV_FAST_TRAP
86
retl
87
nop
88
ENDPROC(sun4v_cpu_start)
89
90
/* %o0: cpuid
91
*
92
* returns %o0: status
93
*/
94
ENTRY(sun4v_cpu_stop)
95
mov HV_FAST_CPU_STOP, %o5
96
ta HV_FAST_TRAP
97
retl
98
nop
99
ENDPROC(sun4v_cpu_stop)
100
101
/* returns %o0: status */
102
ENTRY(sun4v_cpu_yield)
103
mov HV_FAST_CPU_YIELD, %o5
104
ta HV_FAST_TRAP
105
retl
106
nop
107
ENDPROC(sun4v_cpu_yield)
108
109
/* %o0: type
110
* %o1: queue paddr
111
* %o2: num queue entries
112
*
113
* returns %o0: status
114
*/
115
ENTRY(sun4v_cpu_qconf)
116
mov HV_FAST_CPU_QCONF, %o5
117
ta HV_FAST_TRAP
118
retl
119
nop
120
ENDPROC(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
*/
128
ENTRY(sun4v_cpu_mondo_send)
129
mov HV_FAST_CPU_MONDO_SEND, %o5
130
ta HV_FAST_TRAP
131
retl
132
nop
133
ENDPROC(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
*/
140
ENTRY(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
146
1: retl
147
nop
148
ENDPROC(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
*/
157
ENTRY(sun4v_mmu_map_perm_addr)
158
mov HV_FAST_MMU_MAP_PERM_ADDR, %o5
159
ta HV_FAST_TRAP
160
retl
161
nop
162
ENDPROC(sun4v_mmu_map_perm_addr)
163
164
/* %o0: number of TSB descriptions
165
* %o1: TSB descriptions real address
166
*
167
* returns %o0: status
168
*/
169
ENTRY(sun4v_mmu_tsb_ctx0)
170
mov HV_FAST_MMU_TSB_CTX0, %o5
171
ta HV_FAST_TRAP
172
retl
173
nop
174
ENDPROC(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
*/
182
ENTRY(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]
190
ENDPROC(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
*/
199
ENTRY(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]
205
ENDPROC(sun4v_set_version)
206
207
/* %o0: pointer to unsigned long time
208
*
209
* returns %o0: status
210
*/
211
ENTRY(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
218
ENDPROC(sun4v_tod_get)
219
220
/* %o0: time
221
*
222
* returns %o0: status
223
*/
224
ENTRY(sun4v_tod_set)
225
mov HV_FAST_TOD_SET, %o5
226
ta HV_FAST_TRAP
227
retl
228
nop
229
ENDPROC(sun4v_tod_set)
230
231
/* %o0: pointer to unsigned long status
232
*
233
* returns %o0: signed character
234
*/
235
ENTRY(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
244
ENDPROC(sun4v_con_getchar)
245
246
/* %o0: signed long character
247
*
248
* returns %o0: status
249
*/
250
ENTRY(sun4v_con_putchar)
251
mov HV_FAST_CONS_PUTCHAR, %o5
252
ta HV_FAST_TRAP
253
retl
254
sra %o0, 0, %o0
255
ENDPROC(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
*/
263
ENTRY(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]
275
1: retl
276
nop
277
ENDPROC(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
*/
285
ENTRY(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
292
ENDPROC(sun4v_con_write)
293
294
/* %o0: soft state
295
* %o1: address of description string
296
*
297
* returns %o0: status
298
*/
299
ENTRY(sun4v_mach_set_soft_state)
300
mov HV_FAST_MACH_SET_SOFT_STATE, %o5
301
ta HV_FAST_TRAP
302
retl
303
nop
304
ENDPROC(sun4v_mach_set_soft_state)
305
306
/* %o0: exit code
307
*
308
* Does not return.
309
*/
310
ENTRY(sun4v_mach_exit)
311
mov HV_FAST_MACH_EXIT, %o5
312
ta HV_FAST_TRAP
313
retl
314
nop
315
ENDPROC(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
*/
323
ENTRY(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
330
ENDPROC(sun4v_mach_desc)
331
332
/* %o0: new timeout in milliseconds
333
* %o1: pointer to unsigned long orig_timeout
334
*
335
* returns %o0: status
336
*/
337
ENTRY(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
344
ENDPROC(sun4v_mach_set_watchdog)
345
346
/* No inputs and does not return. */
347
ENTRY(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
354
ENDPROC(sun4v_mach_sir)
355
356
/* %o0: channel
357
* %o1: ra
358
* %o2: num_entries
359
*
360
* returns %o0: status
361
*/
362
ENTRY(sun4v_ldc_tx_qconf)
363
mov HV_FAST_LDC_TX_QCONF, %o5
364
ta HV_FAST_TRAP
365
retl
366
nop
367
ENDPROC(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
*/
375
ENTRY(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
384
ENDPROC(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
*/
393
ENTRY(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
404
ENDPROC(sun4v_ldc_tx_get_state)
405
406
/* %o0: channel
407
* %o1: tail_off
408
*
409
* returns %o0: status
410
*/
411
ENTRY(sun4v_ldc_tx_set_qtail)
412
mov HV_FAST_LDC_TX_SET_QTAIL, %o5
413
ta HV_FAST_TRAP
414
retl
415
nop
416
ENDPROC(sun4v_ldc_tx_set_qtail)
417
418
/* %o0: channel
419
* %o1: ra
420
* %o2: num_entries
421
*
422
* returns %o0: status
423
*/
424
ENTRY(sun4v_ldc_rx_qconf)
425
mov HV_FAST_LDC_RX_QCONF, %o5
426
ta HV_FAST_TRAP
427
retl
428
nop
429
ENDPROC(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
*/
437
ENTRY(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
446
ENDPROC(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
*/
455
ENTRY(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
466
ENDPROC(sun4v_ldc_rx_get_state)
467
468
/* %o0: channel
469
* %o1: head_off
470
*
471
* returns %o0: status
472
*/
473
ENTRY(sun4v_ldc_rx_set_qhead)
474
mov HV_FAST_LDC_RX_SET_QHEAD, %o5
475
ta HV_FAST_TRAP
476
retl
477
nop
478
ENDPROC(sun4v_ldc_rx_set_qhead)
479
480
/* %o0: channel
481
* %o1: ra
482
* %o2: num_entries
483
*
484
* returns %o0: status
485
*/
486
ENTRY(sun4v_ldc_set_map_table)
487
mov HV_FAST_LDC_SET_MAP_TABLE, %o5
488
ta HV_FAST_TRAP
489
retl
490
nop
491
ENDPROC(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
*/
499
ENTRY(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
508
ENDPROC(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
*/
519
ENTRY(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
526
ENDPROC(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
*/
535
ENTRY(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
544
ENDPROC(sun4v_ldc_mapin)
545
546
/* %o0: ra
547
*
548
* returns %o0: status
549
*/
550
ENTRY(sun4v_ldc_unmap)
551
mov HV_FAST_LDC_UNMAP, %o5
552
ta HV_FAST_TRAP
553
retl
554
nop
555
ENDPROC(sun4v_ldc_unmap)
556
557
/* %o0: channel
558
* %o1: cookie
559
* %o2: mte_cookie
560
*
561
* returns %o0: status
562
*/
563
ENTRY(sun4v_ldc_revoke)
564
mov HV_FAST_LDC_REVOKE, %o5
565
ta HV_FAST_TRAP
566
retl
567
nop
568
ENDPROC(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
*/
576
ENTRY(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
583
ENDPROC(sun4v_vintr_get_cookie)
584
585
/* %o0: device handle
586
* %o1: device INO
587
* %o2: cookie
588
*
589
* returns %o0: status
590
*/
591
ENTRY(sun4v_vintr_set_cookie)
592
mov HV_FAST_VINTR_SET_COOKIE, %o5
593
ta HV_FAST_TRAP
594
retl
595
nop
596
ENDPROC(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
*/
604
ENTRY(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
611
ENDPROC(sun4v_vintr_get_valid)
612
613
/* %o0: device handle
614
* %o1: device INO
615
* %o2: valid_state
616
*
617
* returns %o0: status
618
*/
619
ENTRY(sun4v_vintr_set_valid)
620
mov HV_FAST_VINTR_SET_VALID, %o5
621
ta HV_FAST_TRAP
622
retl
623
nop
624
ENDPROC(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
*/
632
ENTRY(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
639
ENDPROC(sun4v_vintr_get_state)
640
641
/* %o0: device handle
642
* %o1: device INO
643
* %o2: state
644
*
645
* returns %o0: status
646
*/
647
ENTRY(sun4v_vintr_set_state)
648
mov HV_FAST_VINTR_SET_STATE, %o5
649
ta HV_FAST_TRAP
650
retl
651
nop
652
ENDPROC(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
*/
660
ENTRY(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
667
ENDPROC(sun4v_vintr_get_target)
668
669
/* %o0: device handle
670
* %o1: device INO
671
* %o2: cpuid
672
*
673
* returns %o0: status
674
*/
675
ENTRY(sun4v_vintr_set_target)
676
mov HV_FAST_VINTR_SET_TARGET, %o5
677
ta HV_FAST_TRAP
678
retl
679
nop
680
ENDPROC(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
*/
688
ENTRY(sun4v_ncs_request)
689
mov HV_FAST_NCS_REQUEST, %o5
690
ta HV_FAST_TRAP
691
retl
692
nop
693
ENDPROC(sun4v_ncs_request)
694
695
ENTRY(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
705
ENDPROC(sun4v_svc_send)
706
707
ENTRY(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
717
ENDPROC(sun4v_svc_recv)
718
719
ENTRY(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
726
ENDPROC(sun4v_svc_getstatus)
727
728
ENTRY(sun4v_svc_setstatus)
729
mov HV_FAST_SVC_SETSTATUS, %o5
730
ta HV_FAST_TRAP
731
retl
732
nop
733
ENDPROC(sun4v_svc_setstatus)
734
735
ENTRY(sun4v_svc_clrstatus)
736
mov HV_FAST_SVC_CLRSTATUS, %o5
737
ta HV_FAST_TRAP
738
retl
739
nop
740
ENDPROC(sun4v_svc_clrstatus)
741
742
ENTRY(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
749
ENDPROC(sun4v_mmustat_conf)
750
751
ENTRY(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
758
ENDPROC(sun4v_mmustat_info)
759
760
ENTRY(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
768
ENDPROC(sun4v_mmu_demap_all)
769
770
ENTRY(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
777
ENDPROC(sun4v_niagara_getperf)
778
779
ENTRY(sun4v_niagara_setperf)
780
mov HV_FAST_SET_PERFREG, %o5
781
ta HV_FAST_TRAP
782
retl
783
nop
784
ENDPROC(sun4v_niagara_setperf)
785
786
ENTRY(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
793
ENDPROC(sun4v_niagara2_getperf)
794
795
ENTRY(sun4v_niagara2_setperf)
796
mov HV_FAST_N2_SET_PERFREG, %o5
797
ta HV_FAST_TRAP
798
retl
799
nop
800
ENDPROC(sun4v_niagara2_setperf)
801
802