2 * First stage boot loader for virtio devices. The compiled output goes
3 * into the pc-bios directory of qemu.
5 * Copyright (c) 2013 Alexander Graf <agraf@suse.de>
6 * Copyright IBM Corp. 2013, 2017
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
13 #define STACK_SIZE 0x8000
14 #define STACK_FRAME_SIZE 160
19 larl %r15,stack + STACK_SIZE - STACK_FRAME_SIZE /* Set up stack */
22 larl %r2,bss_start_literal /* __bss_start might be unaligned ... */
23 lg %r2,0(%r2) /* ... so load it indirectly */
25 slgr %r3,%r2 /* get sizeof bss */
26 ltgr %r3,%r3 /* bss empty? */
29 srlg %r4,%r3,8 /* how many 256 byte chunks? */
41 /* set up a pgm exception disabled wait psw */
42 larl %r2,disabled_wait_psw
44 j main /* And call C */
50 * void disabled_wait(void)
52 * stops the current guest cpu.
56 larl %r1,disabled_wait_psw
62 * void consume_sclp_int(void)
64 * eats one sclp interrupt
66 .globl consume_sclp_int
68 /* enable service interrupts in cr0 */
72 /* prepare external call handler */
73 larl %r1,external_new_code
75 larl %r1,external_new_mask
77 /* load enabled wait PSW */
78 larl %r1,enabled_wait_psw
82 * void consume_io_int(void)
84 * eats one I/O interrupt
88 /* enable I/O interrupts in cr6 */
92 /* prepare i/o call handler */
97 /* load enabled wait PSW */
98 larl %r1,enabled_wait_psw
102 /* disable service interrupts in cr0 */
103 stctg %c0,%c0,0(%r15)
105 lctlg %c0,%c0,0(%r15)
109 /* disable I/O interrupts in cr6 */
110 stctg %c6,%c6,0(%r15)
112 lctlg %c6,%c6,0(%r15)
119 .quad 0x0002000180000000,0x0000000000000000
121 .quad 0x0302000180000000,0x0000000000000000
123 .quad 0x0000000180000000
125 .quad 0x0000000180000000
131 .size stack,STACK_SIZE