Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sparc/kernel/hvcalls.S
26424 views
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)
931
932