Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / lib / libhvcall / hvcall.S
diff --git a/qemu/roms/SLOF/lib/libhvcall/hvcall.S b/qemu/roms/SLOF/lib/libhvcall/hvcall.S
new file mode 100644 (file)
index 0000000..92cf22e
--- /dev/null
@@ -0,0 +1,134 @@
+#define _ASM
+#define __ASSEMBLY__
+#include "macros.h"
+#include "libhvcall.h"
+#include <termctrl.h>
+#include <product.h>
+
+#define HVCALL                 .long 0x44000022
+       .text
+       .align  3
+
+ENTRY(get_print_banner)
+       LOAD32(r4, print_version)
+       LOAD32(r5, print_version_end)
+       std     r4,0(r3)
+       std     r5,8(r3)
+       blr
+
+ENTRY(hv_generic)
+       HVCALL
+       blr
+
+/* r3 = char, r4 = hvtermno */
+ENTRY(hv_putchar)
+       sldi    r6,r3,(24+32)
+       li      r3,H_PUT_TERM_CHAR
+       li      r5,1
+       HVCALL
+       blr
+
+/* r3 = hvtermno */
+ENTRY(hv_getchar)
+       mflr    r10
+       bl      .hv_haschar
+       mtlr    r10
+       cmpwi   cr0,r3,0
+       beqlr
+       lis     r9,inbuf@h
+       ori     r9,r9,inbuf@l
+       lwz     r4,20(r9)
+       lbzx    r3,r4,r9
+       addi    r4,r4,1
+       stw     r4,20(r9)
+       blr
+
+/* r3 = hvtermno */
+ENTRY(hv_haschar)
+       mr      r4,r3
+       li      r3,-1
+       lis     r9,inbuf@h
+       ori     r9,r9,inbuf@l
+       lwz     r5,16(r9)
+       lwz     r6,20(r9)
+       cmplw   cr0,r5,r6
+       bnelr
+       li      r3,H_GET_TERM_CHAR
+       HVCALL
+       lis     r9,inbuf@h
+       ori     r9,r9,inbuf@l
+       stw     r4,16(r9)
+       li      r3,0
+       stw     r3,20(r9)
+       cmplwi  cr0,r4,0
+       beqlr
+       li      r3,-1
+       std     r5,0(r9)
+       std     r6,8(r9)
+       blr
+
+ENTRY(hv_send_crq)
+       ld      r5,0(r4)
+       ld      r6,8(r4)
+       mr      r4,r3
+       li      r3,H_SEND_CRQ
+       HVCALL
+       blr
+
+ENTRY(hv_send_logical_lan)
+       li      r11,0   /* no continue token for now */
+       mr      r10,r9
+       mr      r9,r8
+       mr      r8,r7
+       mr      r7,r6
+       mr      r6,r5
+       mr      r5,r4
+       mr      r4,r3
+       li      r3,H_SEND_LOGICAL_LAN
+       HVCALL
+       blr
+
+ENTRY(hv_logical_ci_load)
+       mr      r5,r4
+       mr      r4,r3
+       li      r3,H_LOGICAL_CI_LOAD
+       HVCALL
+       cmpdi   cr0,r3,0
+       mr      r3,r4
+       beqlr
+       li      r3,-1
+       blr
+
+ENTRY(hv_logical_ci_store)
+       mr      r6,r5
+       mr      r5,r4
+       mr      r4,r3
+       li      r3,H_LOGICAL_CI_STORE
+       HVCALL
+       blr
+
+ENTRY(hv_logical_memop)
+       mr      r8,r7
+       mr      r7,r6
+       mr      r6,r5
+       mr      r5,r4
+       mr      r4,r3
+       lis     r3,KVMPPC_H_LOGICAL_MEMOP@h
+       ori     r3,r3,KVMPPC_H_LOGICAL_MEMOP@l
+       HVCALL
+       blr
+
+ENTRY(hv_cas)
+       mr      r6,r5
+       mr      r5,r4
+       mr      r4,r3
+       lis     r3,KVMPPC_H_CAS@h
+       ori     r3,r3,KVMPPC_H_CAS@l
+       HVCALL
+       blr
+
+       .section ".bss"
+inbuf: .space  16
+inlen: .space  4
+inpos: .space  4
+       .text