mirror of
https://github.com/qemu/qemu.git
synced 2024-11-26 12:23:36 +08:00
s390x/ipl: clean up qom definitions and turn into TYPE_DEVICE
Let's move the qom definitions of the ipl device into ipl.h, replace "s390-ipl" by a proper type define, turn it into a TYPE_DEVICE and remove the unneeded class definition. Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
parent
ff8de0757f
commit
04fccf106e
@ -15,7 +15,6 @@
|
||||
#include "cpu.h"
|
||||
#include "elf.h"
|
||||
#include "hw/loader.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/s390x/virtio-ccw.h"
|
||||
#include "hw/s390x/css.h"
|
||||
#include "ipl.h"
|
||||
@ -29,44 +28,6 @@
|
||||
#define ZIPL_IMAGE_START 0x009000UL
|
||||
#define IPL_PSW_MASK (PSW_MASK_32 | PSW_MASK_64)
|
||||
|
||||
#define TYPE_S390_IPL "s390-ipl"
|
||||
#define S390_IPL(obj) \
|
||||
OBJECT_CHECK(S390IPLState, (obj), TYPE_S390_IPL)
|
||||
#if 0
|
||||
#define S390_IPL_CLASS(klass) \
|
||||
OBJECT_CLASS_CHECK(S390IPLState, (klass), TYPE_S390_IPL)
|
||||
#define S390_IPL_GET_CLASS(obj) \
|
||||
OBJECT_GET_CLASS(S390IPLState, (obj), TYPE_S390_IPL)
|
||||
#endif
|
||||
|
||||
typedef struct S390IPLClass {
|
||||
/*< private >*/
|
||||
SysBusDeviceClass parent_class;
|
||||
/*< public >*/
|
||||
|
||||
void (*parent_reset) (SysBusDevice *dev);
|
||||
} S390IPLClass;
|
||||
|
||||
typedef struct S390IPLState {
|
||||
/*< private >*/
|
||||
SysBusDevice parent_obj;
|
||||
uint64_t start_addr;
|
||||
uint64_t bios_start_addr;
|
||||
bool enforce_bios;
|
||||
IplParameterBlock iplb;
|
||||
bool iplb_valid;
|
||||
bool reipl_requested;
|
||||
|
||||
/*< public >*/
|
||||
char *kernel;
|
||||
char *initrd;
|
||||
char *cmdline;
|
||||
char *firmware;
|
||||
uint8_t cssid;
|
||||
uint8_t ssid;
|
||||
uint16_t devno;
|
||||
} S390IPLState;
|
||||
|
||||
static const VMStateDescription vmstate_iplb = {
|
||||
.name = "ipl/iplb",
|
||||
.version_id = 0,
|
||||
@ -110,7 +71,7 @@ static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
|
||||
return srcaddr + dstaddr;
|
||||
}
|
||||
|
||||
static int s390_ipl_init(SysBusDevice *dev)
|
||||
static void s390_ipl_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
S390IPLState *ipl = S390_IPL(dev);
|
||||
uint64_t pentry = KERN_IMAGE_START;
|
||||
@ -165,7 +126,7 @@ static int s390_ipl_init(SysBusDevice *dev)
|
||||
}
|
||||
if (kernel_size < 0) {
|
||||
fprintf(stderr, "could not load kernel '%s'\n", ipl->kernel);
|
||||
return -1;
|
||||
exit(1);
|
||||
}
|
||||
/*
|
||||
* Is it a Linux kernel (starting at 0x10000)? If yes, we fill in the
|
||||
@ -205,7 +166,7 @@ static int s390_ipl_init(SysBusDevice *dev)
|
||||
stq_p(rom_ptr(INITRD_PARM_SIZE), initrd_size);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
qemu_register_reset(qdev_reset_all_fn, dev);
|
||||
}
|
||||
|
||||
static Property s390_ipl_properties[] = {
|
||||
@ -308,9 +269,8 @@ static void s390_ipl_reset(DeviceState *dev)
|
||||
static void s390_ipl_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = s390_ipl_init;
|
||||
dc->realize = s390_ipl_realize;
|
||||
dc->props = s390_ipl_properties;
|
||||
dc->reset = s390_ipl_reset;
|
||||
dc->vmsd = &vmstate_ipl;
|
||||
@ -319,8 +279,8 @@ static void s390_ipl_class_init(ObjectClass *klass, void *data)
|
||||
|
||||
static const TypeInfo s390_ipl_info = {
|
||||
.class_init = s390_ipl_class_init,
|
||||
.parent = TYPE_SYS_BUS_DEVICE,
|
||||
.name = "s390-ipl",
|
||||
.parent = TYPE_DEVICE,
|
||||
.name = TYPE_S390_IPL,
|
||||
.instance_size = sizeof(S390IPLState),
|
||||
};
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
#ifndef HW_S390_IPL_H
|
||||
#define HW_S390_IPL_H
|
||||
|
||||
#include "hw/qdev.h"
|
||||
#include "cpu.h"
|
||||
|
||||
typedef struct IplParameterBlock {
|
||||
@ -25,4 +26,28 @@ void s390_ipl_prepare_cpu(S390CPU *cpu);
|
||||
IplParameterBlock *s390_ipl_get_iplb(void);
|
||||
void s390_reipl_request(void);
|
||||
|
||||
#define TYPE_S390_IPL "s390-ipl"
|
||||
#define S390_IPL(obj) OBJECT_CHECK(S390IPLState, (obj), TYPE_S390_IPL)
|
||||
|
||||
struct S390IPLState {
|
||||
/*< private >*/
|
||||
DeviceState parent_obj;
|
||||
uint64_t start_addr;
|
||||
uint64_t bios_start_addr;
|
||||
bool enforce_bios;
|
||||
IplParameterBlock iplb;
|
||||
bool iplb_valid;
|
||||
bool reipl_requested;
|
||||
|
||||
/*< public >*/
|
||||
char *kernel;
|
||||
char *initrd;
|
||||
char *cmdline;
|
||||
char *firmware;
|
||||
uint8_t cssid;
|
||||
uint8_t ssid;
|
||||
uint16_t devno;
|
||||
};
|
||||
typedef struct S390IPLState S390IPLState;
|
||||
|
||||
#endif
|
||||
|
@ -31,7 +31,6 @@
|
||||
#include "hw/boards.h"
|
||||
#include "hw/loader.h"
|
||||
#include "hw/virtio/virtio.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "exec/address-spaces.h"
|
||||
|
||||
@ -151,9 +150,9 @@ void s390_init_ipl_dev(const char *kernel_filename,
|
||||
const char *firmware,
|
||||
bool enforce_bios)
|
||||
{
|
||||
DeviceState *dev;
|
||||
Object *new = object_new(TYPE_S390_IPL);
|
||||
DeviceState *dev = DEVICE(new);
|
||||
|
||||
dev = qdev_create(NULL, "s390-ipl");
|
||||
if (kernel_filename) {
|
||||
qdev_prop_set_string(dev, "kernel", kernel_filename);
|
||||
}
|
||||
@ -163,8 +162,9 @@ void s390_init_ipl_dev(const char *kernel_filename,
|
||||
qdev_prop_set_string(dev, "cmdline", kernel_cmdline);
|
||||
qdev_prop_set_string(dev, "firmware", firmware);
|
||||
qdev_prop_set_bit(dev, "enforce_bios", enforce_bios);
|
||||
object_property_add_child(qdev_get_machine(), "s390-ipl",
|
||||
OBJECT(dev), NULL);
|
||||
object_property_add_child(qdev_get_machine(), TYPE_S390_IPL,
|
||||
new, NULL);
|
||||
object_unref(new);
|
||||
qdev_init_nofail(dev);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user