Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / lib / libhvcall / hvcall.S
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
12 ENTRY(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
19 ENTRY(hv_generic)
20         HVCALL
21         blr
22
23 /* r3 = char, r4 = hvtermno */
24 ENTRY(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 */
32 ENTRY(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 */
47 ENTRY(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
70 ENTRY(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
78 ENTRY(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
91 ENTRY(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
102 ENTRY(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
110 ENTRY(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
121 ENTRY(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         .section ".bss"
131 inbuf:  .space  16
132 inlen:  .space  4
133 inpos:  .space  4
134         .text