Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / clients / takeover / entry.S
diff --git a/qemu/roms/SLOF/clients/takeover/entry.S b/qemu/roms/SLOF/clients/takeover/entry.S
new file mode 100644 (file)
index 0000000..a1030eb
--- /dev/null
@@ -0,0 +1,99 @@
+/******************************************************************************
+ * Copyright (c) 2004, 2008 IBM Corporation
+ * All rights reserved.
+ * This program and the accompanying materials
+ * are made available under the terms of the BSD License
+ * which accompanies this distribution, and is available at
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * Contributors:
+ *     IBM Corporation - initial implementation
+ *****************************************************************************/
+
+#include <macros.h>
+#include "takeover.h"
+
+       .globl  _wrapclient
+       .section        ".start"
+       .align 3
+
+_wrapclient:
+       bcl     20,31,over      # branch after pointer table
+base:
+       .align  3
+.LCgot:                .quad   _got-base+0x8000
+over:
+       mflr    r8              # gpr 8 is the base
+       ld      r2, .LCgot-base(r8)     # load got pointer
+       add     r2, r2, r8              # add base
+       li      14, 0
+       oris    14, 14, __bssSize@h
+       ori     14, 14, __bssSize@l
+       addi 14,14,7
+       srwi 14,14,3
+       mtctr   14
+       li      14, 0
+       oris    14, 14, __bssStart@h
+       ori     14, 14, __bssStart@l
+       subi    14, 14, 8
+       li      15, 0
+1:
+       stdu 15,8(14)
+       bdnz    1b
+
+       bl ._entry
+
+
+
+    .globl slaveLoopNoTakeover
+slaveLoopNoTakeover:
+       mr 28,3
+
+       li      14,0
+       oris    14, 14, slaveQuitt@h
+       ori     14, 14, slaveQuitt@l
+
+       li      3,0
+       std     3,0(14)
+1:
+       ld      3,0(14)
+       cmpld   3,28
+       bne     1b
+
+       li      3,0
+       std     3,0(14)
+
+       LOAD64(r3, (TAKEOVERBASEADDRESS+0x150))
+       mtctr   r3
+       bctr
+
+
+    .globl slaveLoop
+slaveLoop:
+       mr 28,3
+       li r3, 0x5124
+       li r0, -1; .long 0x44000022
+       
+       li      14,0
+       oris    14, 14, slaveQuitt@h
+       ori     14, 14, slaveQuitt@l
+       li      3,0
+       std     3,0(14)
+1:
+       ld      3,0(14)
+       cmpld   3,28
+       bne     1b
+
+       li      3,0
+       std     3,0(14)
+
+       LOAD64(r3, (TAKEOVERBASEADDRESS+0x150))
+       mtctr   r3
+       bctr
+
+
+C_ENTRY(m_sync)
+       isync
+       sync
+       nop
+       blr