xref: /netbsd-src/sys/arch/sparc64/sparc64/hvcall.S (revision 661f65cfda21c268238e497ab458a4435bcc1f49)
1/*	$NetBSD: hvcall.S,v 1.5 2021/04/27 19:09:56 palle Exp $ */
2/*	$OpenBSD: hvcall.S,v 1.10 2011/06/25 20:45:00 kettenis Exp $	*/
3
4/*
5 * Copyright (c) 2008 Mark Kettenis
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#include <machine/asm.h>
21#include <machine/trap.h>
22
23
24#define MACH_EXIT		0x00
25#define MACH_DESC		0x01
26#define MACH_SIR		0x02
27#define MACH_SET_WATCHDOG	0x05
28
29#define CPU_START		0x10
30#define CPU_STOP		0x11
31#define CPU_YIELD		0x12
32#define CPU_QCONF		0x14
33#define CPU_QINFO		0x15
34#define CPU_MYID		0x16
35#define CPU_STATE		0x17
36#define CPU_SET_RTBA		0x18
37#define CPU_GET_RTBA		0x19
38
39#define MMU_TSB_CTX0		0x20
40#define MMU_TSB_CTXNON0		0x21
41#define MMU_DEMAP_PAGE		0x22
42#define MMU_DEMAP_CTX		0x23
43#define MMU_DEMAP_ALL		0x24
44#define MMU_MAP_PERM_ADDR	0x25
45#define MMU_FAULT_AREA_CONF	0x26
46#define MMU_ENABLE		0x27
47#define MMU_UNMAP_PERM_ADDR	0x28
48#define MMU_TSB_CTX0_INFO	0x29
49#define MMU_TSB_CTXNON0_INFO	0x2a
50#define MMU_FAULT_AREA_INFO	0x2b
51
52#define MEM_SCRUB		0x30
53#define MEM_SYNC		0x31
54
55#define CPU_MONDO_SEND		0x42
56
57#define TOD_GET			0x50
58#define TOD_SET			0x51
59
60#define CONS_GETCHAR		0x60
61#define CONS_PUTCHAR		0x61
62
63#define SOFT_STATE_SET		0x70
64#define SOFT_STATE_GET		0x71
65
66#define INTR_DEVINO2SYSINO	0xa0
67#define INTR_GETENABLED		0xa1
68#define INTR_SETENABLED		0xa2
69#define INTR_GETSTATE		0xa3
70#define INTR_SETSTATE		0xa4
71#define INTR_GETTARGET		0xa5
72#define INTR_SETTARGET		0xa6
73
74#define VINTR_GETCOOKIE		0xa7
75#define VINTR_SETCOOKIE		0xa8
76#define VINTR_GETENABLED	0xa9
77#define VINTR_SETENABLED	0xaa
78#define VINTR_GETSTATE		0xab
79#define VINTR_SETSTATE		0xac
80#define VINTR_GETTARGET		0xad
81#define VINTR_SETTARGET		0xae
82
83#define PCI_IOMMU_MAP		0xb0
84#define PCI_IOMMU_DEMAP		0xb1
85#define PCI_IOMMU_GETMAP	0xb2
86#define PCI_IOMMU_GETBYPASS	0xb3
87#define PCI_CONFIG_GET		0xb4
88#define PCI_CONFIG_PUT		0xb5
89
90#define PCI_MSIQ_CONF		0xc0
91#define PCI_MSIQ_INFO		0xc1
92#define PCI_MSIQ_GETVALID	0xc2
93#define PCI_MSIQ_SETVALID	0xc3
94#define PCI_MSIQ_GETSTATE	0xc4
95#define PCI_MSIQ_SETSTATE	0xc5
96#define PCI_MSIQ_GETHEAD	0xc6
97#define PCI_MSIQ_SETHEAD	0xc7
98#define PCI_MSIQ_GETTAIL	0xc8
99#define PCI_MSI_GETVALID	0xc9
100#define PCI_MSI_SETVALID	0xca
101#define PCI_MSI_GETMSIQ		0xcb
102#define PCI_MSI_SETMSIQ		0xcc
103#define PCI_MSI_GETSTATE	0xcd
104#define PCI_MSI_SETSTATE	0xce
105#define PCI_MSG_GETMSIQ		0xd0
106#define PCI_MSG_SETMSIQ		0xd1
107#define PCI_MSG_GETSTATE	0xd2
108#define PCI_MSG_SETSTATE	0xd3
109
110#define LDC_TX_QCONF		0xe0
111#define LDC_TX_QINFO		0xe1
112#define LDC_TX_GET_STATE	0xe2
113#define LDC_TX_SET_QTAIL	0xe3
114#define LDC_RX_QCONF		0xe4
115#define LDC_RX_QINFO		0xe5
116#define LDC_RX_GET_STATE	0xe6
117#define LDC_RX_SET_QHEAD	0xe7
118
119#define LDC_SET_MAP_TABLE	0xea
120#define LDC_GET_MAP_TABLE	0xeb
121#define LDC_COPY		0xec
122
123#define LDC_MAPIN		0xed
124#define LDC_UNMAP		0xee
125#define LDC_REVOKE		0xef
126
127#define RNG_GET_DIAG_CONTROL	0x130
128#define RNG_CTL_READ		0x131
129#define RNG_CTL_WRITE		0x132
130#define RNG_DATA_READ_DIAG	0x133
131#define RNG_DATA_READ		0x134
132
133#define API_SET_VERSION		0x00
134#define API_PUTCHAR		0x01
135#define API_EXIT		0x02
136#define API_GET_VERSION		0x03
137
138
139ENTRY(hv_api_putchar)
140	mov	API_PUTCHAR, %o5
141	ta	ST_CORE_TRAP
142	retl
143	 nop
144
145ENTRY(hv_api_get_version)
146	mov	%o2, %o4
147	mov	%o1, %o3
148	mov	API_GET_VERSION, %o5
149	ta	ST_CORE_TRAP
150	stx	%o1, [%o3]
151	retl
152	 stx	%o2, [%o4]
153
154ENTRY(hv_api_set_version)
155	mov	%o3, %o4
156	mov	API_SET_VERSION, %o5
157	ta	ST_CORE_TRAP
158	retl
159	 stx	%o1, [%o4]
160
161ENTRY(hv_mach_desc)
162	mov	%o1, %o2
163	ldx	[%o2], %o1
164	mov	MACH_DESC, %o5
165	ta	ST_FAST_TRAP
166	retl
167	 stx	%o1, [%o2]
168
169ENTRY(hv_cpu_yield)
170	mov	CPU_YIELD, %o5
171	ta	ST_FAST_TRAP
172	retl
173	 nop
174
175ENTRY(hv_cpu_qconf)
176	mov	CPU_QCONF, %o5
177	ta	ST_FAST_TRAP
178	retl
179	 nop
180
181ENTRY(hv_cpu_mondo_send)
182	mov	CPU_MONDO_SEND, %o5
183	ta	ST_FAST_TRAP
184	retl
185	 nop
186
187ENTRY(hv_cpu_myid)
188	mov	%o0, %o2
189	mov	CPU_MYID, %o5
190	ta	ST_FAST_TRAP
191	retl
192	 stx	%o1, [%o2]
193
194ENTRY(hv_mmu_tsb_ctx0)
195	mov	MMU_TSB_CTX0, %o5
196	ta	ST_FAST_TRAP
197	retl
198	 nop
199
200ENTRY(hv_mmu_tsb_ctxnon0)
201	mov	MMU_TSB_CTXNON0, %o5
202	ta	ST_FAST_TRAP
203	retl
204	 nop
205
206ENTRY(hv_mmu_demap_page)
207	mov	%o2, %o4
208	mov	%o1, %o3
209	mov	%o0, %o2
210	clr	%o1
211	clr	%o0
212	mov	MMU_DEMAP_PAGE, %o5
213	ta	ST_FAST_TRAP
214	retl
215	 nop
216
217ENTRY(hv_mmu_demap_ctx)
218	mov	%o1, %o3
219	mov	%o0, %o2
220	clr	%o1
221	clr	%o0
222	mov	MMU_DEMAP_CTX, %o5
223	ta	ST_FAST_TRAP
224	retl
225	 nop
226
227ENTRY(hv_mmu_demap_all)
228	mov	%o1, %o3
229	mov	%o0, %o2
230	clr	%o1
231	clr	%o0
232	mov	MMU_DEMAP_CTX, %o5
233	ta	ST_FAST_TRAP
234	retl
235	 nop
236
237ENTRY(hv_mmu_map_perm_addr)
238	mov	%o2, %o3
239	mov	%o1, %o2
240	clr	%o1
241	mov	MMU_MAP_PERM_ADDR, %o5
242	ta	ST_FAST_TRAP
243	retl
244	 nop
245
246ENTRY(hv_mmu_unmap_perm_addr)
247	mov	%o1, %o2
248	clr	%o1
249	mov	MMU_UNMAP_PERM_ADDR, %o5
250	ta	ST_FAST_TRAP
251	retl
252	 nop
253
254ENTRY(hv_mmu_map_addr)
255	ta	ST_MMU_MAP_ADDR
256	retl
257	 nop
258
259ENTRY(hv_mmu_unmap_addr)
260	ta	ST_MMU_UNMAP_ADDR
261	retl
262	 nop
263
264ENTRY(hv_mem_scrub)
265	mov	MEM_SCRUB, %o5
266	ta	ST_FAST_TRAP
267	retl
268	 nop
269
270ENTRY(hv_mem_sync)
271	mov	MEM_SYNC, %o5
272	ta	ST_FAST_TRAP
273	retl
274	 nop
275
276ENTRY(hv_tod_get)
277	mov	%o0, %o2
278	mov	TOD_GET, %o5
279	ta	ST_FAST_TRAP
280	retl
281	 stx	%o1, [%o2]
282
283ENTRY(hv_tod_set)
284	mov	TOD_SET, %o5
285	ta	ST_FAST_TRAP
286	retl
287	 nop
288
289ENTRY(hv_cons_getchar)
290	mov	%o0, %o2
291	mov	CONS_GETCHAR, %o5
292	ta	ST_FAST_TRAP
293	retl
294	 stx	%o1, [%o2]
295
296ENTRY(hv_cons_putchar)
297	mov	CONS_PUTCHAR, %o5
298	ta	ST_FAST_TRAP
299	retl
300	 nop
301
302ENTRY(hv_soft_state_set)
303	mov	SOFT_STATE_SET, %o5
304	ta	ST_FAST_TRAP
305	retl
306	 nop
307
308ENTRY(hv_intr_devino_to_sysino)
309	mov	INTR_DEVINO2SYSINO, %o5
310	ta	ST_FAST_TRAP
311	retl
312	 stx	%o1, [%o2]
313
314ENTRY(hv_intr_getenabled)
315	mov	%o1, %o2
316	mov	INTR_GETENABLED, %o5
317	ta	ST_FAST_TRAP
318	retl
319	 stx	%o1, [%o2]
320
321ENTRY(hv_intr_setenabled)
322	mov	INTR_SETENABLED, %o5
323	ta	ST_FAST_TRAP
324	retl
325	 nop
326
327ENTRY(hv_intr_getstate)
328	mov	%o1, %o2
329	mov	INTR_GETSTATE, %o5
330	ta	ST_FAST_TRAP
331	retl
332	 stx	%o1, [%o2]
333
334ENTRY(hv_intr_setstate)
335	mov	INTR_SETSTATE, %o5
336	ta	ST_FAST_TRAP
337	retl
338	 nop
339
340ENTRY(hv_intr_gettarget)
341	mov	%o1, %o2
342	mov	INTR_GETTARGET, %o5
343	ta	ST_FAST_TRAP
344	retl
345	 stx	%o1, [%o2]
346
347ENTRY(hv_intr_settarget)
348	mov	INTR_SETTARGET, %o5
349	ta	ST_FAST_TRAP
350	retl
351	 nop
352
353ENTRY(hv_vintr_getcookie)
354	mov	VINTR_GETCOOKIE, %o5
355	ta	ST_FAST_TRAP
356	retl
357	 stx	%o1, [%o2]
358
359ENTRY(hv_vintr_setcookie)
360	mov	VINTR_SETCOOKIE, %o5
361	ta	ST_FAST_TRAP
362	retl
363	 nop
364
365ENTRY(hv_vintr_getenabled)
366	mov	VINTR_GETENABLED, %o5
367	ta	ST_FAST_TRAP
368	retl
369	 stx	%o1, [%o2]
370
371ENTRY(hv_vintr_setenabled)
372	mov	VINTR_SETENABLED, %o5
373	ta	ST_FAST_TRAP
374	retl
375	 nop
376
377ENTRY(hv_vintr_getstate)
378	mov	VINTR_GETSTATE, %o5
379	ta	ST_FAST_TRAP
380	retl
381	 stx	%o1, [%o2]
382
383ENTRY(hv_vintr_setstate)
384	mov	VINTR_SETSTATE, %o5
385	ta	ST_FAST_TRAP
386	retl
387	 nop
388
389ENTRY(hv_vintr_gettarget)
390	mov	VINTR_GETTARGET, %o5
391	ta	ST_FAST_TRAP
392	retl
393	 stx	%o1, [%o2]
394
395ENTRY(hv_vintr_settarget)
396	mov	VINTR_SETTARGET, %o5
397	ta	ST_FAST_TRAP
398	retl
399	 nop
400
401ENTRY(hv_pci_iommu_map)
402	mov	%o5, %g5
403	mov	PCI_IOMMU_MAP, %o5
404	ta	ST_FAST_TRAP
405	retl
406	 stx	%o1, [%g5]
407
408ENTRY(hv_pci_iommu_demap)
409	mov	PCI_IOMMU_DEMAP, %o5
410	ta	ST_FAST_TRAP
411	retl
412	 stx	%o1, [%o3]
413
414ENTRY(hv_pci_iommu_getmap)
415	mov	%o2, %o4
416	mov	PCI_IOMMU_GETMAP, %o5
417	ta	ST_FAST_TRAP
418	stx	%o1, [%o4]
419	retl
420	 stx	%o2, [%o3]
421
422ENTRY(hv_pci_iommu_getbypass)
423	mov	PCI_IOMMU_GETBYPASS, %o5
424	ta	ST_FAST_TRAP
425	retl
426	 stx	%o1, [%o3]
427
428ENTRY(hv_pci_config_get)
429	mov	%o5, %g5
430	mov	PCI_CONFIG_GET, %o5
431	ta	ST_FAST_TRAP
432	stx	%o1, [%o4]
433	retl
434	 stx	%o2, [%g5]
435
436ENTRY(hv_pci_config_put)
437	mov	%o5, %g5
438	mov	PCI_CONFIG_PUT, %o5
439	ta	ST_FAST_TRAP
440	retl
441	 stx	%o1, [%g5]
442
443ENTRY(hv_pci_msiq_conf)
444	mov	PCI_MSIQ_CONF, %o5
445	ta	ST_FAST_TRAP
446	retl
447	 nop
448
449ENTRY(hv_pci_msiq_info)
450	mov	%o2, %o4
451	mov	PCI_MSIQ_INFO, %o5
452	ta	ST_FAST_TRAP
453	stx	%o1, [%o4]
454	retl
455	 stx	%o2, [%o3]
456
457ENTRY(hv_pci_msiq_getvalid)
458	mov	PCI_MSIQ_GETVALID, %o5
459	ta	ST_FAST_TRAP
460	retl
461	 stx	%o1, [%o2]
462
463ENTRY(hv_pci_msiq_setvalid)
464	mov	PCI_MSIQ_SETVALID, %o5
465	ta	ST_FAST_TRAP
466	retl
467	 nop
468
469ENTRY(hv_pci_msiq_getstate)
470	mov	PCI_MSIQ_GETSTATE, %o5
471	ta	ST_FAST_TRAP
472	retl
473	 stx	%o1, [%o2]
474
475ENTRY(hv_pci_msiq_setstate)
476	mov	PCI_MSIQ_SETSTATE, %o5
477	ta	ST_FAST_TRAP
478	retl
479	 nop
480
481ENTRY(hv_pci_msiq_gethead)
482	mov	PCI_MSIQ_GETHEAD, %o5
483	ta	ST_FAST_TRAP
484	retl
485	 stx	%o1, [%o2]
486
487ENTRY(hv_pci_msiq_sethead)
488	mov	PCI_MSIQ_SETHEAD, %o5
489	ta	ST_FAST_TRAP
490	retl
491	 nop
492
493ENTRY(hv_pci_msiq_gettail)
494	mov	PCI_MSIQ_GETTAIL, %o5
495	ta	ST_FAST_TRAP
496	retl
497	 stx	%o1, [%o2]
498
499ENTRY(hv_pci_msi_getvalid)
500	mov	PCI_MSI_GETVALID, %o5
501	ta	ST_FAST_TRAP
502	retl
503	 stx	%o1, [%o2]
504
505ENTRY(hv_pci_msi_setvalid)
506	mov	PCI_MSI_SETVALID, %o5
507	ta	ST_FAST_TRAP
508	retl
509	 nop
510
511ENTRY(hv_pci_msi_getmsiq)
512	mov	PCI_MSI_GETMSIQ, %o5
513	ta	ST_FAST_TRAP
514	retl
515	 stx	%o1, [%o2]
516
517ENTRY(hv_pci_msi_setmsiq)
518	mov	PCI_MSI_SETMSIQ, %o5
519	ta	ST_FAST_TRAP
520	retl
521	 nop
522
523ENTRY(hv_pci_msi_getstate)
524	mov	PCI_MSI_GETSTATE, %o5
525	ta	ST_FAST_TRAP
526	retl
527	 stx	%o1, [%o2]
528
529ENTRY(hv_pci_msi_setstate)
530	mov	PCI_MSI_SETSTATE, %o5
531	ta	ST_FAST_TRAP
532	retl
533	 nop
534
535ENTRY(hv_pci_msg_getmsiq)
536	mov	PCI_MSG_GETMSIQ, %o5
537	ta	ST_FAST_TRAP
538	retl
539	 stx	%o1, [%o2]
540
541ENTRY(hv_pci_msg_setmsiq)
542	mov	PCI_MSG_SETMSIQ, %o5
543	ta	ST_FAST_TRAP
544	retl
545	 nop
546
547ENTRY(hv_pci_msg_getstate)
548	mov	PCI_MSG_GETSTATE, %o5
549	ta	ST_FAST_TRAP
550	retl
551	 stx	%o1, [%o2]
552
553ENTRY(hv_pci_msg_setstate)
554	mov	PCI_MSG_SETSTATE, %o5
555	ta	ST_FAST_TRAP
556	retl
557	 nop
558
559ENTRY(hv_ldc_tx_qconf)
560	mov	LDC_TX_QCONF, %o5
561	ta	ST_FAST_TRAP
562	retl
563	 nop
564
565ENTRY(hv_ldc_tx_qinfo)
566	mov	%o2, %o4
567	mov	%o1, %o3
568	mov	LDC_TX_QINFO, %o5
569	ta	ST_FAST_TRAP
570	stx	%o1, [%o3]
571	retl
572	 stx	%o2, [%o4]
573
574ENTRY(hv_ldc_tx_get_state)
575	mov	%o3, %g5
576	mov	%o2, %g4
577	mov	%o1, %o4
578	mov	LDC_TX_GET_STATE, %o5
579	ta	ST_FAST_TRAP
580	stx	%o1, [%o4]
581	stx	%o2, [%g4]
582	retl
583	 stx	%o3, [%g5]
584
585ENTRY(hv_ldc_tx_set_qtail)
586	mov	LDC_TX_SET_QTAIL, %o5
587	ta	ST_FAST_TRAP
588	retl
589	 nop
590
591ENTRY(hv_ldc_rx_qconf)
592	mov	LDC_RX_QCONF, %o5
593	ta	ST_FAST_TRAP
594	retl
595	 nop
596
597ENTRY(hv_ldc_rx_qinfo)
598	mov	%o2, %o4
599	mov	%o1, %o3
600	mov	LDC_RX_QINFO, %o5
601	ta	ST_FAST_TRAP
602	stx	%o1, [%o3]
603	retl
604	 stx	%o2, [%o4]
605
606ENTRY(hv_ldc_rx_get_state)
607	mov	%o3, %g5
608	mov	%o2, %g4
609	mov	%o1, %o4
610	mov	LDC_RX_GET_STATE, %o5
611	ta	ST_FAST_TRAP
612	stx	%o1, [%o4]
613	stx	%o2, [%g4]
614	retl
615	 stx	%o3, [%g5]
616
617ENTRY(hv_ldc_rx_set_qhead)
618	mov	LDC_RX_SET_QHEAD, %o5
619	ta	ST_FAST_TRAP
620	retl
621	 nop
622
623ENTRY(hv_ldc_set_map_table)
624	mov	LDC_SET_MAP_TABLE, %o5
625	ta	ST_FAST_TRAP
626	retl
627	 nop
628
629ENTRY(hv_ldc_get_map_table)
630	mov	%o2, %o4
631	mov	%o1, %o3
632	mov	LDC_GET_MAP_TABLE, %o5
633	ta	ST_FAST_TRAP
634	stx	%o1, [%o3]
635	retl
636	 stx	%o2, [%o4]
637
638ENTRY(hv_ldc_copy)
639	mov	%o5, %g5
640	mov	LDC_COPY, %o5
641	ta	ST_FAST_TRAP
642	retl
643	 stx	%o1, [%g5]
644
645ENTRY(hv_ldc_mapin)
646	mov	%o2, %o4
647	mov	LDC_MAPIN, %o5
648	ta	ST_FAST_TRAP
649	stx	%o1, [%o4]
650	retl
651	 stx	%o2, [%o3]
652
653ENTRY(hv_ldc_unmap)
654	mov	%o1, %o2
655	mov	LDC_UNMAP, %o5
656	ta	ST_FAST_TRAP
657	retl
658	 stx	%o1, [%o2]
659
660ENTRY(hv_rng_get_diag_control)
661	mov	RNG_GET_DIAG_CONTROL, %o5
662	ta	ST_FAST_TRAP
663	retl
664	 nop
665
666ENTRY(hv_rng_ctl_read)
667	mov	%o2, %o4
668	mov	%o1, %o3
669	mov	RNG_CTL_READ, %o5
670	ta	ST_FAST_TRAP
671	stx	%o1, [%o3]
672	retl
673	 stx	%o2, [%o4]
674
675ENTRY(hv_rng_ctl_write)
676	mov	RNG_CTL_WRITE, %o5
677	ta	ST_FAST_TRAP
678	retl
679	 stx	%o1, [%o3]
680
681ENTRY(hv_rng_data_read_diag)
682	mov	RNG_DATA_READ_DIAG, %o5
683	ta	ST_FAST_TRAP
684	retl
685	 stx	%o1, [%o2]
686
687ENTRY(hv_rng_data_read)
688	mov	%o1, %o2
689	mov	RNG_DATA_READ, %o5
690	ta	ST_FAST_TRAP
691	retl
692	 stx	%o1, [%o2]
693