Add qemu 2.4.0
[kvmfornfv.git] / qemu / pc-bios / s390-ccw / start.S
1 /*
2  * First stage boot loader for virtio devices. The compiled output goes
3  * into the pc-bios directory of qemu.
4  *
5  * Copyright (c) 2013 Alexander Graf <agraf@suse.de>
6  * Copyright 2013 IBM Corp.
7  *
8  * This work is licensed under the terms of the GNU GPL, version 2 or (at
9  * your option) any later version. See the COPYING file in the top-level
10  * directory.
11  */
12
13         .globl _start
14 _start:
15
16 larl    %r15, stack + 0x8000    /* Set up stack */
17 larl    %r6, boot_value
18 stg     %r7, 0(%r6)     /* save the boot_value before any function calls */
19 j       main                    /* And call C */
20
21 /*
22  * void disabled_wait(void)
23  *
24  * stops the current guest cpu.
25  */
26         .globl disabled_wait
27 disabled_wait:
28         larl %r1,disabled_wait_psw
29         lpswe   0(%r1)
30
31
32 /*
33  * void consume_sclp_int(void)
34  *
35  * eats one sclp interrupt
36  */
37         .globl consume_sclp_int
38 consume_sclp_int:
39         /* enable service interrupts in cr0 */
40         stctg 0,0,0(15)
41         oi 6(15), 0x2
42         lctlg 0,0,0(15)
43         /* prepare external call handler */
44         larl %r1, external_new_code
45         stg %r1, 0x1b8
46         larl %r1, external_new_mask
47         mvc 0x1b0(8),0(%r1)
48         /* load enabled wait PSW */
49         larl %r1, enabled_wait_psw
50         lpswe 0(%r1)
51
52 external_new_code:
53         /* disable service interrupts in cr0 */
54         stctg 0,0,0(15)
55         ni 6(15), 0xfd
56         lctlg 0,0,0(15)
57         br 14
58
59         .align  8
60 disabled_wait_psw:
61         .quad   0x0002000180000000,0x0000000000000000
62 enabled_wait_psw:
63         .quad   0x0302000180000000,0x0000000000000000
64 external_new_mask:
65         .quad   0x0000000180000000