]> git.proxmox.com Git - mirror_qemu.git/blob - pc-bios/s390-ccw/start.S
pc-bios/s390-ccw: enable subchannel for IPL I/O devices
[mirror_qemu.git] / 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 j main /* And call C */
18
19 /*
20 * void disabled_wait(void)
21 *
22 * stops the current guest cpu.
23 */
24 .globl disabled_wait
25 disabled_wait:
26 larl %r1,disabled_wait_psw
27 lpswe 0(%r1)
28
29
30 /*
31 * void consume_sclp_int(void)
32 *
33 * eats one sclp interrupt
34 */
35 .globl consume_sclp_int
36 consume_sclp_int:
37 /* enable service interrupts in cr0 */
38 stctg 0,0,0(15)
39 oi 6(15), 0x2
40 lctlg 0,0,0(15)
41 /* prepare external call handler */
42 larl %r1, external_new_code
43 stg %r1, 0x1b8
44 larl %r1, external_new_mask
45 mvc 0x1b0(8),0(%r1)
46 /* load enabled wait PSW */
47 larl %r1, enabled_wait_psw
48 lpswe 0(%r1)
49
50 external_new_code:
51 /* disable service interrupts in cr0 */
52 stctg 0,0,0(15)
53 ni 6(15), 0xfd
54 lctlg 0,0,0(15)
55 br 14
56
57 .align 8
58 disabled_wait_psw:
59 .quad 0x0002000180000000,0x0000000000000000
60 enabled_wait_psw:
61 .quad 0x0302000180000000,0x0000000000000000
62 external_new_mask:
63 .quad 0x0000000180000000