* Fix a compilation issue in the s390-ccw bios with Clang + binutils 2.40

* Create an initial stack frame for the main() function of the s390-ccw bios
 * Clean up type definitions in the s390-ccw bios
 -----BEGIN PGP SIGNATURE-----
 
 iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmSd1MwRHHRodXRoQHJl
 ZGhhdC5jb20ACgkQLtnXdP5wLbUNAg//aO7pkzKPIUXG/g8PSzzgjYu9bDTketrQ
 P08wk1jj9CQMLN6dcnVnmzPhC4EqyrZqMYvRH4qFPLJmi0m+Jq3fEEkVzKbI3baO
 0qQX6DNJVLn6qcgvZ8+ZjkLmuWn/lN4+MH92vdUgpkCcj5y7FB4FjoaG+Z0yZxsS
 YI6gG8D/i6fnq0zsKGMzmzHCswmN4s9qnY9a4nLV0YeMnrZJjUmUUKomWv0FP5jM
 qtLf6pRtgR4u/WD9ktwjISlOn7AKQeCYgZcMu1kBnrSWDjhLytUrv8h2JqRxGOap
 nRtdFzTvgeWKJbCX9v+XLb1bqzFj/LLgoCRzUOqV1CdBKf3JycIXyLMpTJ1+kV4J
 NnzCjnfq/LSDwwCjeg3cRBUFjGkuHBZwQzBh5m4xXBqae07UhMGpWBmhIh7qgPy2
 RXox0xK8Ot/vhYxtNojOiEW0Wp4KJElB9Wxn1Vz0kX4OXRcxHu9CDazZXTKBuBGA
 YWZ9HbsquvwNMV5pgCuXzVWW3FCzrhGgtVYREwYyBIInJaEGCWKCyMAuDXb4fkWL
 eS0Mryp3AMaJ6CidK2ELWygMkKA8xDF8pKm5jgQWRhs5jirydi1B4hPeGFsm1vUI
 TYs08XuC9p66O2Ffn2Sc/uAXbe/FQ7Ce6EbGUUetpafo9FxPhbP28hPUhkcHt68Y
 tmGzqAuwgxc=
 =oWSq
 -----END PGP SIGNATURE-----

Merge tag 'pull-request-2023-06-29' of https://gitlab.com/thuth/qemu into staging

* Fix a compilation issue in the s390-ccw bios with Clang + binutils 2.40
* Create an initial stack frame for the main() function of the s390-ccw bios
* Clean up type definitions in the s390-ccw bios

# -----BEGIN PGP SIGNATURE-----
#
# iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmSd1MwRHHRodXRoQHJl
# ZGhhdC5jb20ACgkQLtnXdP5wLbUNAg//aO7pkzKPIUXG/g8PSzzgjYu9bDTketrQ
# P08wk1jj9CQMLN6dcnVnmzPhC4EqyrZqMYvRH4qFPLJmi0m+Jq3fEEkVzKbI3baO
# 0qQX6DNJVLn6qcgvZ8+ZjkLmuWn/lN4+MH92vdUgpkCcj5y7FB4FjoaG+Z0yZxsS
# YI6gG8D/i6fnq0zsKGMzmzHCswmN4s9qnY9a4nLV0YeMnrZJjUmUUKomWv0FP5jM
# qtLf6pRtgR4u/WD9ktwjISlOn7AKQeCYgZcMu1kBnrSWDjhLytUrv8h2JqRxGOap
# nRtdFzTvgeWKJbCX9v+XLb1bqzFj/LLgoCRzUOqV1CdBKf3JycIXyLMpTJ1+kV4J
# NnzCjnfq/LSDwwCjeg3cRBUFjGkuHBZwQzBh5m4xXBqae07UhMGpWBmhIh7qgPy2
# RXox0xK8Ot/vhYxtNojOiEW0Wp4KJElB9Wxn1Vz0kX4OXRcxHu9CDazZXTKBuBGA
# YWZ9HbsquvwNMV5pgCuXzVWW3FCzrhGgtVYREwYyBIInJaEGCWKCyMAuDXb4fkWL
# eS0Mryp3AMaJ6CidK2ELWygMkKA8xDF8pKm5jgQWRhs5jirydi1B4hPeGFsm1vUI
# TYs08XuC9p66O2Ffn2Sc/uAXbe/FQ7Ce6EbGUUetpafo9FxPhbP28hPUhkcHt68Y
# tmGzqAuwgxc=
# =oWSq
# -----END PGP SIGNATURE-----
# gpg: Signature made Thu 29 Jun 2023 09:00:28 PM CEST
# gpg:                using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5
# gpg:                issuer "thuth@redhat.com"
# gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [undefined]
# gpg:                 aka "Thomas Huth <thuth@redhat.com>" [undefined]
# gpg:                 aka "Thomas Huth <th.huth@posteo.de>" [unknown]
# gpg:                 aka "Thomas Huth <huth@tuxfamily.org>" [undefined]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 27B8 8847 EEE0 2501 18F3  EAB9 2ED9 D774 FE70 2DB5

* tag 'pull-request-2023-06-29' of https://gitlab.com/thuth/qemu:
  pc-bios: Update the s390 bios images with the recent changes
  pc-bios/s390-ccw: Don't use __bss_start with the "larl" instruction
  pc-bios/s390-ccw: Move the stack array into start.S
  pc-bios/s390-ccw: Provide space for initial stack frame in start.S
  pc-bios/s390-ccw: Fix indentation in start.S
  pc-bios/s390-ccw/Makefile: Use -z noexecstack to silence linker warning
  pc-bios/s390-ccw: Get rid of the the __u* types
  s390-ccw: Getting rid of ulong

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2023-06-30 08:10:43 +02:00
commit f7884164cb
15 changed files with 220 additions and 220 deletions

Binary file not shown.

View File

@ -55,7 +55,7 @@ config-cc.mak: Makefile
$(call cc-option,-march=z900,-march=z10)) 3> config-cc.mak $(call cc-option,-march=z900,-march=z10)) 3> config-cc.mak
-include config-cc.mak -include config-cc.mak
LDFLAGS += -Wl,-pie -nostdlib LDFLAGS += -Wl,-pie -nostdlib -z noexecstack
build-all: s390-ccw.img s390-netboot.img build-all: s390-ccw.img s390-netboot.img

View File

@ -17,32 +17,32 @@
* path management control word * path management control word
*/ */
struct pmcw { struct pmcw {
__u32 intparm; /* interruption parameter */ u32 intparm; /* interruption parameter */
__u32 qf:1; /* qdio facility */ u32 qf:1; /* qdio facility */
__u32 w:1; u32 w:1;
__u32 isc:3; /* interruption subclass */ u32 isc:3; /* interruption subclass */
__u32 res5:3; /* reserved zeros */ u32 res5:3; /* reserved zeros */
__u32 ena:1; /* enabled */ u32 ena:1; /* enabled */
__u32 lm:2; /* limit mode */ u32 lm:2; /* limit mode */
__u32 mme:2; /* measurement-mode enable */ u32 mme:2; /* measurement-mode enable */
__u32 mp:1; /* multipath mode */ u32 mp:1; /* multipath mode */
__u32 tf:1; /* timing facility */ u32 tf:1; /* timing facility */
__u32 dnv:1; /* device number valid */ u32 dnv:1; /* device number valid */
__u32 dev:16; /* device number */ u32 dev:16; /* device number */
__u8 lpm; /* logical path mask */ u8 lpm; /* logical path mask */
__u8 pnom; /* path not operational mask */ u8 pnom; /* path not operational mask */
__u8 lpum; /* last path used mask */ u8 lpum; /* last path used mask */
__u8 pim; /* path installed mask */ u8 pim; /* path installed mask */
__u16 mbi; /* measurement-block index */ u16 mbi; /* measurement-block index */
__u8 pom; /* path operational mask */ u8 pom; /* path operational mask */
__u8 pam; /* path available mask */ u8 pam; /* path available mask */
__u8 chpid[8]; /* CHPID 0-7 (if available) */ u8 chpid[8]; /* CHPID 0-7 (if available) */
__u32 unused1:8; /* reserved zeros */ u32 unused1:8; /* reserved zeros */
__u32 st:3; /* subchannel type */ u32 st:3; /* subchannel type */
__u32 unused2:18; /* reserved zeros */ u32 unused2:18; /* reserved zeros */
__u32 mbfc:1; /* measurement block format control */ u32 mbfc:1; /* measurement block format control */
__u32 xmwme:1; /* extended measurement word mode enable */ u32 xmwme:1; /* extended measurement word mode enable */
__u32 csense:1; /* concurrent sense; can be enabled ...*/ u32 csense:1; /* concurrent sense; can be enabled ...*/
/* ... per MSCH, however, if facility */ /* ... per MSCH, however, if facility */
/* ... is not installed, this results */ /* ... is not installed, this results */
/* ... in an operand exception. */ /* ... in an operand exception. */
@ -50,24 +50,24 @@ struct pmcw {
/* Target SCHIB configuration. */ /* Target SCHIB configuration. */
struct schib_config { struct schib_config {
__u64 mba; u64 mba;
__u32 intparm; u32 intparm;
__u16 mbi; u16 mbi;
__u32 isc:3; u32 isc:3;
__u32 ena:1; u32 ena:1;
__u32 mme:2; u32 mme:2;
__u32 mp:1; u32 mp:1;
__u32 csense:1; u32 csense:1;
__u32 mbfc:1; u32 mbfc:1;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct scsw { struct scsw {
__u16 flags; u16 flags;
__u16 ctrl; u16 ctrl;
__u32 cpa; u32 cpa;
__u8 dstat; u8 dstat;
__u8 cstat; u8 cstat;
__u16 count; u16 count;
} __attribute__ ((packed)); } __attribute__ ((packed));
/* Function Control */ /* Function Control */
@ -117,42 +117,42 @@ struct scsw {
typedef struct schib { typedef struct schib {
struct pmcw pmcw; /* path management control word */ struct pmcw pmcw; /* path management control word */
struct scsw scsw; /* subchannel status word */ struct scsw scsw; /* subchannel status word */
__u64 mba; /* measurement block address */ u64 mba; /* measurement block address */
__u8 mda[4]; /* model dependent area */ u8 mda[4]; /* model dependent area */
} __attribute__ ((packed, aligned(4))) Schib; } __attribute__ ((packed, aligned(4))) Schib;
typedef struct subchannel_id { typedef struct subchannel_id {
union { union {
struct { struct {
__u16 cssid:8; u16 cssid:8;
__u16 reserved:4; u16 reserved:4;
__u16 m:1; u16 m:1;
__u16 ssid:2; u16 ssid:2;
__u16 one:1; u16 one:1;
}; };
__u16 sch_id; u16 sch_id;
}; };
__u16 sch_no; u16 sch_no;
} __attribute__ ((packed, aligned(4))) SubChannelId; } __attribute__ ((packed, aligned(4))) SubChannelId;
struct chsc_header { struct chsc_header {
__u16 length; u16 length;
__u16 code; u16 code;
} __attribute__((packed)); } __attribute__((packed));
typedef struct chsc_area_sda { typedef struct chsc_area_sda {
struct chsc_header request; struct chsc_header request;
__u8 reserved1:4; u8 reserved1:4;
__u8 format:4; u8 format:4;
__u8 reserved2; u8 reserved2;
__u16 operation_code; u16 operation_code;
__u32 reserved3; u32 reserved3;
__u32 reserved4; u32 reserved4;
__u32 operation_data_area[252]; u32 operation_data_area[252];
struct chsc_header response; struct chsc_header response;
__u32 reserved5:4; u32 reserved5:4;
__u32 format2:4; u32 format2:4;
__u32 reserved6:24; u32 reserved6:24;
} __attribute__((packed)) ChscAreaSda; } __attribute__((packed)) ChscAreaSda;
/* /*
@ -160,37 +160,37 @@ typedef struct chsc_area_sda {
*/ */
struct tpi_info { struct tpi_info {
struct subchannel_id schid; struct subchannel_id schid;
__u32 intparm; /* interruption parameter */ u32 intparm; /* interruption parameter */
__u32 adapter_IO:1; u32 adapter_IO:1;
__u32 reserved2:1; u32 reserved2:1;
__u32 isc:3; u32 isc:3;
__u32 reserved3:12; u32 reserved3:12;
__u32 int_type:3; u32 int_type:3;
__u32 reserved4:12; u32 reserved4:12;
} __attribute__ ((packed, aligned(4))); } __attribute__ ((packed, aligned(4)));
/* channel command word (format 0) */ /* channel command word (format 0) */
typedef struct ccw0 { typedef struct ccw0 {
__u8 cmd_code; u8 cmd_code;
__u32 cda:24; u32 cda:24;
__u32 chainData:1; u32 chainData:1;
__u32 chain:1; u32 chain:1;
__u32 sli:1; u32 sli:1;
__u32 skip:1; u32 skip:1;
__u32 pci:1; u32 pci:1;
__u32 ida:1; u32 ida:1;
__u32 suspend:1; u32 suspend:1;
__u32 mida:1; u32 mida:1;
__u8 reserved; u8 reserved;
__u16 count; u16 count;
} __attribute__ ((packed, aligned(8))) Ccw0; } __attribute__ ((packed, aligned(8))) Ccw0;
/* channel command word (format 1) */ /* channel command word (format 1) */
typedef struct ccw1 { typedef struct ccw1 {
__u8 cmd_code; u8 cmd_code;
__u8 flags; u8 flags;
__u16 count; u16 count;
__u32 cda; u32 cda;
} __attribute__ ((packed, aligned(8))) Ccw1; } __attribute__ ((packed, aligned(8))) Ccw1;
/* do_cio() CCW formats */ /* do_cio() CCW formats */
@ -234,31 +234,31 @@ typedef struct ccw1 {
* Command-mode operation request block * Command-mode operation request block
*/ */
typedef struct cmd_orb { typedef struct cmd_orb {
__u32 intparm; /* interruption parameter */ u32 intparm; /* interruption parameter */
__u32 key:4; /* flags, like key, suspend control, etc. */ u32 key:4; /* flags, like key, suspend control, etc. */
__u32 spnd:1; /* suspend control */ u32 spnd:1; /* suspend control */
__u32 res1:1; /* reserved */ u32 res1:1; /* reserved */
__u32 mod:1; /* modification control */ u32 mod:1; /* modification control */
__u32 sync:1; /* synchronize control */ u32 sync:1; /* synchronize control */
__u32 fmt:1; /* format control */ u32 fmt:1; /* format control */
__u32 pfch:1; /* prefetch control */ u32 pfch:1; /* prefetch control */
__u32 isic:1; /* initial-status-interruption control */ u32 isic:1; /* initial-status-interruption control */
__u32 alcc:1; /* address-limit-checking control */ u32 alcc:1; /* address-limit-checking control */
__u32 ssic:1; /* suppress-suspended-interr. control */ u32 ssic:1; /* suppress-suspended-interr. control */
__u32 res2:1; /* reserved */ u32 res2:1; /* reserved */
__u32 c64:1; /* IDAW/QDIO 64 bit control */ u32 c64:1; /* IDAW/QDIO 64 bit control */
__u32 i2k:1; /* IDAW 2/4kB block size control */ u32 i2k:1; /* IDAW 2/4kB block size control */
__u32 lpm:8; /* logical path mask */ u32 lpm:8; /* logical path mask */
__u32 ils:1; /* incorrect length */ u32 ils:1; /* incorrect length */
__u32 zero:6; /* reserved zeros */ u32 zero:6; /* reserved zeros */
__u32 orbx:1; /* ORB extension control */ u32 orbx:1; /* ORB extension control */
__u32 cpa; /* channel program address */ u32 cpa; /* channel program address */
} __attribute__ ((packed, aligned(4))) CmdOrb; } __attribute__ ((packed, aligned(4))) CmdOrb;
struct ciw { struct ciw {
__u8 type; u8 type;
__u8 command; u8 command;
__u16 count; u16 count;
}; };
#define CU_TYPE_UNKNOWN 0x0000 #define CU_TYPE_UNKNOWN 0x0000
@ -271,12 +271,12 @@ struct ciw {
*/ */
typedef struct senseid { typedef struct senseid {
/* common part */ /* common part */
__u8 reserved; /* always 0x'FF' */ u8 reserved; /* always 0x'FF' */
__u16 cu_type; /* control unit type */ u16 cu_type; /* control unit type */
__u8 cu_model; /* control unit model */ u8 cu_model; /* control unit model */
__u16 dev_type; /* device type */ u16 dev_type; /* device type */
__u8 dev_model; /* device model */ u8 dev_model; /* device model */
__u8 unused; /* padding byte */ u8 unused; /* padding byte */
/* extended part */ /* extended part */
struct ciw ciw[62]; struct ciw ciw[62];
} __attribute__ ((packed, aligned(4))) SenseId; } __attribute__ ((packed, aligned(4))) SenseId;
@ -342,9 +342,9 @@ typedef struct SenseDataEckdDasd {
/* interruption response block */ /* interruption response block */
typedef struct irb { typedef struct irb {
struct scsw scsw; struct scsw scsw;
__u32 esw[5]; u32 esw[5];
__u32 ecw[8]; u32 ecw[8];
__u32 emw[8]; u32 emw[8];
} __attribute__ ((packed, aligned(4))) Irb; } __attribute__ ((packed, aligned(4))) Irb;
/* Used for SEEK ccw commands */ /* Used for SEEK ccw commands */

View File

@ -38,7 +38,7 @@ static inline void yield(void)
static inline void sleep(unsigned int seconds) static inline void sleep(unsigned int seconds)
{ {
ulong target = get_time_seconds() + seconds; unsigned long target = get_time_seconds() + seconds;
while (get_time_seconds() < target) { while (get_time_seconds() < target) {
yield(); yield();

View File

@ -17,7 +17,6 @@
#include "virtio-scsi.h" #include "virtio-scsi.h"
#include "dasd-ipl.h" #include "dasd-ipl.h"
char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
static SubChannelId blk_schid = { .one = 1 }; static SubChannelId blk_schid = { .one = 1 };
static char loadparm_str[LOADPARM_LEN + 1]; static char loadparm_str[LOADPARM_LEN + 1];
QemuIplParameters qipl; QemuIplParameters qipl;

View File

@ -50,7 +50,6 @@ void write_iplb_location(void) {}
/* STSI 3.2.2 offset of first vmdb + offset of uuid inside vmdb */ /* STSI 3.2.2 offset of first vmdb + offset of uuid inside vmdb */
#define STSI322_VMDB_UUID_OFFSET ((8 + 12) * 4) #define STSI322_VMDB_UUID_OFFSET ((8 + 12) * 4)
char stack[PAGE_SIZE * 8] __attribute__((aligned(PAGE_SIZE)));
IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE))); IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE)));
static char cfgbuf[2048]; static char cfgbuf[2048];

View File

@ -17,11 +17,6 @@ typedef unsigned char u8;
typedef unsigned short u16; typedef unsigned short u16;
typedef unsigned int u32; typedef unsigned int u32;
typedef unsigned long long u64; typedef unsigned long long u64;
typedef unsigned long ulong;
typedef unsigned char __u8;
typedef unsigned short __u16;
typedef unsigned int __u32;
typedef unsigned long long __u64;
#define true 1 #define true 1
#define false 0 #define false 0
@ -55,7 +50,6 @@ void consume_io_int(void);
/* main.c */ /* main.c */
void write_subsystem_identification(void); void write_subsystem_identification(void);
void write_iplb_location(void); void write_iplb_location(void);
extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
unsigned int get_loadparm_index(void); unsigned int get_loadparm_index(void);
void main(void); void main(void);
@ -67,11 +61,11 @@ void sclp_get_loadparm_ascii(char *loadparm);
int sclp_read(char *str, size_t count); int sclp_read(char *str, size_t count);
/* virtio.c */ /* virtio.c */
unsigned long virtio_load_direct(ulong rec_list1, ulong rec_list2, unsigned long virtio_load_direct(unsigned long rec_list1, unsigned long rec_list2,
ulong subchan_id, void *load_addr); unsigned long subchan_id, void *load_addr);
bool virtio_is_supported(SubChannelId schid); bool virtio_is_supported(SubChannelId schid);
int virtio_blk_setup_device(SubChannelId schid); int virtio_blk_setup_device(SubChannelId schid);
int virtio_read(ulong sector, void *load_addr); int virtio_read(unsigned long sector, void *load_addr);
/* bootmap.c */ /* bootmap.c */
void zipl_load(void); void zipl_load(void);

View File

@ -10,13 +10,17 @@
* directory. * directory.
*/ */
#define STACK_SIZE 0x8000
#define STACK_FRAME_SIZE 160
.globl _start .globl _start
_start: _start:
larl %r15, stack + 0x8000 /* Set up stack */ larl %r15,stack + STACK_SIZE - STACK_FRAME_SIZE /* Set up stack */
/* clear bss */ /* clear bss */
larl %r2, __bss_start larl %r2,bss_start_literal /* __bss_start might be unaligned ... */
lg %r2,0(%r2) /* ... so load it indirectly */
larl %r3,_end larl %r3,_end
slgr %r3,%r2 /* get sizeof bss */ slgr %r3,%r2 /* get sizeof bss */
ltgr %r3,%r3 /* bss empty? */ ltgr %r3,%r3 /* bss empty? */
@ -42,7 +46,6 @@ done:
memsetxc: memsetxc:
xc 0(1,%r1),0(%r1) xc 0(1,%r1),0(%r1)
/* /*
* void disabled_wait(void) * void disabled_wait(void)
* *
@ -110,6 +113,8 @@ io_new_code:
br %r14 br %r14
.align 8 .align 8
bss_start_literal:
.quad __bss_start
disabled_wait_psw: disabled_wait_psw:
.quad 0x0002000180000000,0x0000000000000000 .quad 0x0002000180000000,0x0000000000000000
enabled_wait_psw: enabled_wait_psw:
@ -118,3 +123,9 @@ external_new_mask:
.quad 0x0000000180000000 .quad 0x0000000180000000
io_new_mask: io_new_mask:
.quad 0x0000000180000000 .quad 0x0000000180000000
.bss
.align 8
stack:
.space STACK_SIZE
.size stack,STACK_SIZE

View File

@ -16,7 +16,7 @@
#define VIRTIO_BLK_F_GEOMETRY (1 << 4) #define VIRTIO_BLK_F_GEOMETRY (1 << 4)
#define VIRTIO_BLK_F_BLK_SIZE (1 << 6) #define VIRTIO_BLK_F_BLK_SIZE (1 << 6)
static int virtio_blk_read_many(VDev *vdev, ulong sector, void *load_addr, static int virtio_blk_read_many(VDev *vdev, unsigned long sector, void *load_addr,
int sec_num) int sec_num)
{ {
VirtioBlkOuthdr out_hdr; VirtioBlkOuthdr out_hdr;
@ -49,7 +49,7 @@ static int virtio_blk_read_many(VDev *vdev, ulong sector, void *load_addr,
return status; return status;
} }
int virtio_read_many(ulong sector, void *load_addr, int sec_num) int virtio_read_many(unsigned long sector, void *load_addr, int sec_num)
{ {
VDev *vdev = virtio_get_device(); VDev *vdev = virtio_get_device();
@ -63,14 +63,14 @@ int virtio_read_many(ulong sector, void *load_addr, int sec_num)
return -1; return -1;
} }
unsigned long virtio_load_direct(ulong rec_list1, ulong rec_list2, unsigned long virtio_load_direct(unsigned long rec_list1, unsigned long rec_list2,
ulong subchan_id, void *load_addr) unsigned long subchan_id, void *load_addr)
{ {
u8 status; u8 status;
int sec = rec_list1; int sec = rec_list1;
int sec_num = ((rec_list2 >> 32) & 0xffff) + 1; int sec_num = ((rec_list2 >> 32) & 0xffff) + 1;
int sec_len = rec_list2 >> 48; int sec_len = rec_list2 >> 48;
ulong addr = (ulong)load_addr; unsigned long addr = (unsigned long)load_addr;
if (sec_len != virtio_get_block_size()) { if (sec_len != virtio_get_block_size()) {
return -1; return -1;
@ -86,7 +86,7 @@ unsigned long virtio_load_direct(ulong rec_list1, ulong rec_list2,
return addr; return addr;
} }
int virtio_read(ulong sector, void *load_addr) int virtio_read(unsigned long sector, void *load_addr)
{ {
return virtio_read_many(sector, load_addr, 1); return virtio_read_many(sector, load_addr, 1);
} }

View File

@ -150,7 +150,7 @@ static bool scsi_report_luns(VDev *vdev, void *data, uint32_t data_size)
} }
static bool scsi_read_10(VDev *vdev, static bool scsi_read_10(VDev *vdev,
ulong sector, int sectors, void *data, unsigned long sector, int sectors, void *data,
unsigned int data_size) unsigned int data_size)
{ {
ScsiCdbRead10 cdb = { ScsiCdbRead10 cdb = {
@ -269,7 +269,7 @@ static int virtio_scsi_locate_device(VDev *vdev)
} }
int virtio_scsi_read_many(VDev *vdev, int virtio_scsi_read_many(VDev *vdev,
ulong sector, void *load_addr, int sec_num) unsigned long sector, void *load_addr, int sec_num)
{ {
int sector_count; int sector_count;
int f = vdev->blk_factor; int f = vdev->blk_factor;

View File

@ -68,7 +68,7 @@ static inline bool virtio_scsi_response_ok(const VirtioScsiCmdResp *r)
} }
int virtio_scsi_read_many(VDev *vdev, int virtio_scsi_read_many(VDev *vdev,
ulong sector, void *load_addr, int sec_num); unsigned long sector, void *load_addr, int sec_num);
int virtio_scsi_setup_device(SubChannelId schid); int virtio_scsi_setup_device(SubChannelId schid);
#endif /* VIRTIO_SCSI_H */ #endif /* VIRTIO_SCSI_H */

View File

@ -48,10 +48,10 @@ VirtioDevType virtio_get_device_type(void)
static long kvm_hypercall(unsigned long nr, unsigned long param1, static long kvm_hypercall(unsigned long nr, unsigned long param1,
unsigned long param2, unsigned long param3) unsigned long param2, unsigned long param3)
{ {
register ulong r_nr asm("1") = nr; register unsigned long r_nr asm("1") = nr;
register ulong r_param1 asm("2") = param1; register unsigned long r_param1 asm("2") = param1;
register ulong r_param2 asm("3") = param2; register unsigned long r_param2 asm("3") = param2;
register ulong r_param3 asm("4") = param3; register unsigned long r_param3 asm("4") = param3;
register long retval asm("2"); register long retval asm("2");
asm volatile ("diag %%r2,%%r4,0x500" asm volatile ("diag %%r2,%%r4,0x500"
@ -145,7 +145,7 @@ void vring_send_buf(VRing *vr, void *p, int len, int flags)
vr->avail->ring[vr->avail->idx % vr->num] = vr->next_idx; vr->avail->ring[vr->avail->idx % vr->num] = vr->next_idx;
} }
vr->desc[vr->next_idx].addr = (ulong)p; vr->desc[vr->next_idx].addr = (unsigned long)p;
vr->desc[vr->next_idx].len = len; vr->desc[vr->next_idx].len = len;
vr->desc[vr->next_idx].flags = flags & ~VRING_HIDDEN_IS_CHAIN; vr->desc[vr->next_idx].flags = flags & ~VRING_HIDDEN_IS_CHAIN;
vr->desc[vr->next_idx].next = vr->next_idx; vr->desc[vr->next_idx].next = vr->next_idx;
@ -182,7 +182,7 @@ int vr_poll(VRing *vr)
*/ */
int vring_wait_reply(void) int vring_wait_reply(void)
{ {
ulong target_second = get_time_seconds() + vdev.wait_reply_timeout; unsigned long target_second = get_time_seconds() + vdev.wait_reply_timeout;
/* Wait for any queue to be updated by the host */ /* Wait for any queue to be updated by the host */
do { do {

View File

@ -190,14 +190,14 @@ int virtio_get_block_size(void);
uint8_t virtio_get_heads(void); uint8_t virtio_get_heads(void);
uint8_t virtio_get_sectors(void); uint8_t virtio_get_sectors(void);
uint64_t virtio_get_blocks(void); uint64_t virtio_get_blocks(void);
int virtio_read_many(ulong sector, void *load_addr, int sec_num); int virtio_read_many(unsigned long sector, void *load_addr, int sec_num);
#define VIRTIO_SECTOR_SIZE 512 #define VIRTIO_SECTOR_SIZE 512
#define VIRTIO_ISO_BLOCK_SIZE 2048 #define VIRTIO_ISO_BLOCK_SIZE 2048
#define VIRTIO_SCSI_BLOCK_SIZE 512 #define VIRTIO_SCSI_BLOCK_SIZE 512
#define VIRTIO_DASD_DEFAULT_BLOCK_SIZE 4096 #define VIRTIO_DASD_DEFAULT_BLOCK_SIZE 4096
static inline ulong virtio_sector_adjust(ulong sector) static inline unsigned long virtio_sector_adjust(unsigned long sector)
{ {
return sector * (virtio_get_block_size() / VIRTIO_SECTOR_SIZE); return sector * (virtio_get_block_size() / VIRTIO_SECTOR_SIZE);
} }

Binary file not shown.

View File

@ -8,6 +8,8 @@
#include "../../../pc-bios/s390-ccw/start.S" #include "../../../pc-bios/s390-ccw/start.S"
#undef main #undef main
.text
main_pre: main_pre:
aghi %r15,-160 /* reserve stack for C code */ aghi %r15,-160 /* reserve stack for C code */
brasl %r14,sclp_setup brasl %r14,sclp_setup
@ -24,8 +26,3 @@ success_psw:
.quad 0x2000180000000,0xfff /* see is_special_wait_psw() */ .quad 0x2000180000000,0xfff /* see is_special_wait_psw() */
failure_psw: failure_psw:
.quad 0x2000180000000,0 /* disabled wait */ .quad 0x2000180000000,0 /* disabled wait */
.section .bss
.align 0x1000
stack:
.skip 0x8000