1#define _ASM
2#define __ASSEMBLY__
3#include "macros.h"
4#include "libhvcall.h"
5#include <termctrl.h>
6#include <product.h>
7
8#define HVCALL			.long 0x44000022
9	.text
10	.align	3
11
12ENTRY(get_print_banner)
13	LOAD32(r4, print_version)
14	LOAD32(r5, print_version_end)
15	std	r4,0(r3)
16	std	r5,8(r3)
17	blr
18
19ENTRY(hv_generic)
20	HVCALL
21	blr
22
23/* r3 = char, r4 = hvtermno */
24ENTRY(hv_putchar)
25	sldi	r6,r3,(24+32)
26	li	r3,H_PUT_TERM_CHAR
27	li	r5,1
28	HVCALL
29	blr
30
31/* r3 = hvtermno */
32ENTRY(hv_getchar)
33	mflr	r10
34	bl	.hv_haschar
35	mtlr	r10
36	cmpwi	cr0,r3,0
37	beqlr
38	lis	r9,inbuf@h
39	ori	r9,r9,inbuf@l
40	lwz	r4,20(r9)
41	lbzx	r3,r4,r9
42	addi	r4,r4,1
43	stw	r4,20(r9)
44	blr
45
46/* r3 = hvtermno */
47ENTRY(hv_haschar)
48	mr	r4,r3
49	li	r3,-1
50	lis	r9,inbuf@h
51	ori	r9,r9,inbuf@l
52	lwz	r5,16(r9)
53	lwz	r6,20(r9)
54	cmplw	cr0,r5,r6
55	bnelr
56	li	r3,H_GET_TERM_CHAR
57	HVCALL
58	lis	r9,inbuf@h
59	ori	r9,r9,inbuf@l
60	stw	r4,16(r9)
61	li	r3,0
62	stw	r3,20(r9)
63	cmplwi	cr0,r4,0
64	beqlr
65	li	r3,-1
66	std	r5,0(r9)
67	std	r6,8(r9)
68	blr
69
70ENTRY(hv_send_crq)
71	ld	r5,0(r4)
72	ld	r6,8(r4)
73	mr	r4,r3
74	li	r3,H_SEND_CRQ
75	HVCALL
76	blr
77
78ENTRY(hv_send_logical_lan)
79	li	r11,0	/* no continue token for now */
80	mr	r10,r9
81	mr	r9,r8
82	mr	r8,r7
83	mr	r7,r6
84	mr	r6,r5
85	mr	r5,r4
86	mr	r4,r3
87	li	r3,H_SEND_LOGICAL_LAN
88	HVCALL
89	blr
90
91ENTRY(hv_logical_ci_load)
92	mr	r5,r4
93	mr	r4,r3
94	li	r3,H_LOGICAL_CI_LOAD
95	HVCALL
96	cmpdi	cr0,r3,0
97	mr	r3,r4
98	beqlr
99	li	r3,-1
100	blr
101
102ENTRY(hv_logical_ci_store)
103	mr	r6,r5
104	mr	r5,r4
105	mr	r4,r3
106	li	r3,H_LOGICAL_CI_STORE
107	HVCALL
108	blr
109
110ENTRY(hv_logical_memop)
111	mr	r8,r7
112	mr	r7,r6
113	mr	r6,r5
114	mr	r5,r4
115	mr	r4,r3
116	lis	r3,KVMPPC_H_LOGICAL_MEMOP@h
117	ori	r3,r3,KVMPPC_H_LOGICAL_MEMOP@l
118	HVCALL
119	blr
120
121ENTRY(hv_cas)
122	mr	r6,r5
123	mr	r5,r4
124	mr	r4,r3
125	lis	r3,KVMPPC_H_CAS@h
126	ori	r3,r3,KVMPPC_H_CAS@l
127	HVCALL
128	blr
129
130/* This is the actual RTAS blob copied to the OS at instantiate-rtas */
131ENTRY(hv_rtas)
132	mr	r4,r3
133	lis	r3,KVMPPC_H_RTAS@h
134	ori	r3,r3,KVMPPC_H_RTAS@l
135	HVCALL
136	blr
137	.globl hv_rtas_size
138hv_rtas_size:
139	.long . - hv_rtas;
140
141ENTRY(hv_rtas_broken_sc1)
142	mr	r4,r3
143	lis	r3,KVMPPC_H_RTAS@h
144	ori	r3,r3,KVMPPC_H_RTAS@l
145	.long	0x7c000268
146	blr
147	.globl hv_rtas_broken_sc1_size
148hv_rtas_broken_sc1_size:
149	.long . - hv_rtas_broken_sc1;
150
151	.section ".bss"
152inbuf:	.space	16
153inlen:	.space	4
154inpos:	.space	4
155	.text
156