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 16larl %r15, stack + 0x8000 /* Set up stack */ 17j main /* And call C */ 18 19/* 20 * void disabled_wait(void) 21 * 22 * stops the current guest cpu. 23 */ 24 .globl disabled_wait 25disabled_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 36consume_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 50external_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 58disabled_wait_psw: 59 .quad 0x0002000180000000,0x0000000000000000 60enabled_wait_psw: 61 .quad 0x0302000180000000,0x0000000000000000 62external_new_mask: 63 .quad 0x0000000180000000 64