mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-31 05:51:53 -06: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
3 changed files with 36 additions and 51 deletions
|
@ -15,7 +15,6 @@
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "elf.h"
|
#include "elf.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "hw/sysbus.h"
|
|
||||||
#include "hw/s390x/virtio-ccw.h"
|
#include "hw/s390x/virtio-ccw.h"
|
||||||
#include "hw/s390x/css.h"
|
#include "hw/s390x/css.h"
|
||||||
#include "ipl.h"
|
#include "ipl.h"
|
||||||
|
@ -29,44 +28,6 @@
|
||||||
#define ZIPL_IMAGE_START 0x009000UL
|
#define ZIPL_IMAGE_START 0x009000UL
|
||||||
#define IPL_PSW_MASK (PSW_MASK_32 | PSW_MASK_64)
|
#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 = {
|
static const VMStateDescription vmstate_iplb = {
|
||||||
.name = "ipl/iplb",
|
.name = "ipl/iplb",
|
||||||
.version_id = 0,
|
.version_id = 0,
|
||||||
|
@ -110,7 +71,7 @@ static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
|
||||||
return srcaddr + dstaddr;
|
return srcaddr + dstaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int s390_ipl_init(SysBusDevice *dev)
|
static void s390_ipl_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
S390IPLState *ipl = S390_IPL(dev);
|
S390IPLState *ipl = S390_IPL(dev);
|
||||||
uint64_t pentry = KERN_IMAGE_START;
|
uint64_t pentry = KERN_IMAGE_START;
|
||||||
|
@ -165,7 +126,7 @@ static int s390_ipl_init(SysBusDevice *dev)
|
||||||
}
|
}
|
||||||
if (kernel_size < 0) {
|
if (kernel_size < 0) {
|
||||||
fprintf(stderr, "could not load kernel '%s'\n", ipl->kernel);
|
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
|
* 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);
|
stq_p(rom_ptr(INITRD_PARM_SIZE), initrd_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
qemu_register_reset(qdev_reset_all_fn, dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Property s390_ipl_properties[] = {
|
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)
|
static void s390_ipl_class_init(ObjectClass *klass, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
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->props = s390_ipl_properties;
|
||||||
dc->reset = s390_ipl_reset;
|
dc->reset = s390_ipl_reset;
|
||||||
dc->vmsd = &vmstate_ipl;
|
dc->vmsd = &vmstate_ipl;
|
||||||
|
@ -319,8 +279,8 @@ static void s390_ipl_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
||||||
static const TypeInfo s390_ipl_info = {
|
static const TypeInfo s390_ipl_info = {
|
||||||
.class_init = s390_ipl_class_init,
|
.class_init = s390_ipl_class_init,
|
||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_DEVICE,
|
||||||
.name = "s390-ipl",
|
.name = TYPE_S390_IPL,
|
||||||
.instance_size = sizeof(S390IPLState),
|
.instance_size = sizeof(S390IPLState),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#ifndef HW_S390_IPL_H
|
#ifndef HW_S390_IPL_H
|
||||||
#define HW_S390_IPL_H
|
#define HW_S390_IPL_H
|
||||||
|
|
||||||
|
#include "hw/qdev.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
|
||||||
typedef struct IplParameterBlock {
|
typedef struct IplParameterBlock {
|
||||||
|
@ -25,4 +26,28 @@ void s390_ipl_prepare_cpu(S390CPU *cpu);
|
||||||
IplParameterBlock *s390_ipl_get_iplb(void);
|
IplParameterBlock *s390_ipl_get_iplb(void);
|
||||||
void s390_reipl_request(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
|
#endif
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "hw/virtio/virtio.h"
|
#include "hw/virtio/virtio.h"
|
||||||
#include "hw/sysbus.h"
|
|
||||||
#include "sysemu/kvm.h"
|
#include "sysemu/kvm.h"
|
||||||
#include "exec/address-spaces.h"
|
#include "exec/address-spaces.h"
|
||||||
|
|
||||||
|
@ -151,9 +150,9 @@ void s390_init_ipl_dev(const char *kernel_filename,
|
||||||
const char *firmware,
|
const char *firmware,
|
||||||
bool enforce_bios)
|
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) {
|
if (kernel_filename) {
|
||||||
qdev_prop_set_string(dev, "kernel", 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, "cmdline", kernel_cmdline);
|
||||||
qdev_prop_set_string(dev, "firmware", firmware);
|
qdev_prop_set_string(dev, "firmware", firmware);
|
||||||
qdev_prop_set_bit(dev, "enforce_bios", enforce_bios);
|
qdev_prop_set_bit(dev, "enforce_bios", enforce_bios);
|
||||||
object_property_add_child(qdev_get_machine(), "s390-ipl",
|
object_property_add_child(qdev_get_machine(), TYPE_S390_IPL,
|
||||||
OBJECT(dev), NULL);
|
new, NULL);
|
||||||
|
object_unref(new);
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue