Loading pc-bios/s390-ccw/main.c +18 −6 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ struct subchannel_id blk_schid; char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); uint64_t boot_value; void virtio_panic(const char *string) { Loading @@ -20,15 +21,22 @@ void virtio_panic(const char *string) while (1) { } } static void virtio_setup(void) static void virtio_setup(uint64_t dev_info) { struct schib schib; int i; int r; bool found = false; bool check_devno = false; uint16_t dev_no = -1; blk_schid.one = 1; if (dev_info != -1) { check_devno = true; dev_no = dev_info & 0xffff; debug_print_int("device no. ", dev_no); } for (i = 0; i < 0x10000; i++) { blk_schid.sch_no = i; r = stsch_err(blk_schid, &schib); Loading @@ -36,12 +44,14 @@ static void virtio_setup(void) break; } if (schib.pmcw.dnv) { if (!check_devno || (schib.pmcw.dev == dev_no)) { if (virtio_is_blk(blk_schid)) { found = true; break; } } } } if (!found) { virtio_panic("No virtio-blk device found!\n"); Loading @@ -53,7 +63,9 @@ static void virtio_setup(void) int main(void) { sclp_setup(); virtio_setup(); debug_print_int("boot reg[7] ", boot_value); virtio_setup(boot_value); if (zipl_load() < 0) sclp_print("Failed to load OS from hard disk\n"); disabled_wait(); Loading pc-bios/s390-ccw/start.S +2 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ _start: larl %r15, stack + 0x8000 /* Set up stack */ larl %r6, boot_value stg %r7, 0(%r6) /* save the boot_value before any function calls */ j main /* And call C */ /* Loading Loading
pc-bios/s390-ccw/main.c +18 −6 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ struct subchannel_id blk_schid; char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); uint64_t boot_value; void virtio_panic(const char *string) { Loading @@ -20,15 +21,22 @@ void virtio_panic(const char *string) while (1) { } } static void virtio_setup(void) static void virtio_setup(uint64_t dev_info) { struct schib schib; int i; int r; bool found = false; bool check_devno = false; uint16_t dev_no = -1; blk_schid.one = 1; if (dev_info != -1) { check_devno = true; dev_no = dev_info & 0xffff; debug_print_int("device no. ", dev_no); } for (i = 0; i < 0x10000; i++) { blk_schid.sch_no = i; r = stsch_err(blk_schid, &schib); Loading @@ -36,12 +44,14 @@ static void virtio_setup(void) break; } if (schib.pmcw.dnv) { if (!check_devno || (schib.pmcw.dev == dev_no)) { if (virtio_is_blk(blk_schid)) { found = true; break; } } } } if (!found) { virtio_panic("No virtio-blk device found!\n"); Loading @@ -53,7 +63,9 @@ static void virtio_setup(void) int main(void) { sclp_setup(); virtio_setup(); debug_print_int("boot reg[7] ", boot_value); virtio_setup(boot_value); if (zipl_load() < 0) sclp_print("Failed to load OS from hard disk\n"); disabled_wait(); Loading
pc-bios/s390-ccw/start.S +2 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ _start: larl %r15, stack + 0x8000 /* Set up stack */ larl %r6, boot_value stg %r7, 0(%r6) /* save the boot_value before any function calls */ j main /* And call C */ /* Loading