Commit 9432e53a authored by Juergen Gross's avatar Juergen Gross Committed by Gerd Hoffmann
Browse files

xen: introduce dummy system device



Introduce a new dummy system device serving as parent for virtual
buses. This will enable new pv backends to introduce virtual buses
which are removable again opposed to system buses which are meant
to stay once added.

Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
Acked-by: default avatarAnthony PERARD <anthony.perard@citrix.com>
Reviewed-by: default avatarWei Liu <wei.liu2@citrix.com>
Message-id: 1463062421-613-2-git-send-email-jgross@suse.com
Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
parent e081c24d
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
@@ -25,10 +25,15 @@
#include "qemu/osdep.h"
#include "hw/hw.h"
#include "hw/boards.h"
#include "hw/sysbus.h"
#include "hw/xen/xen_backend.h"
#include "xen_domainbuild.h"
#include "sysemu/block-backend.h"

#define TYPE_XENSYSDEV "xensysdev"

DeviceState *xen_sysdev;

static void xen_init_pv(MachineState *machine)
{
    DriveInfo *dinfo;
@@ -67,6 +72,9 @@ static void xen_init_pv(MachineState *machine)
        break;
    }

    xen_sysdev = qdev_create(NULL, TYPE_XENSYSDEV);
    qdev_init_nofail(xen_sysdev);

    xen_be_register("console", &xen_console_ops);
    xen_be_register("vkbd", &xen_kbdmouse_ops);
    xen_be_register("vfb", &xen_framebuffer_ops);
@@ -101,6 +109,38 @@ static void xen_init_pv(MachineState *machine)
    xen_init_display(xen_domid);
}

static int xen_sysdev_init(SysBusDevice *dev)
{
    return 0;
}

static Property xen_sysdev_properties[] = {
    {/* end of property list */},
};

static void xen_sysdev_class_init(ObjectClass *klass, void *data)
{
    DeviceClass *dc = DEVICE_CLASS(klass);
    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);

    k->init = xen_sysdev_init;
    dc->props = xen_sysdev_properties;
}

static const TypeInfo xensysdev_info = {
    .name          = TYPE_XENSYSDEV,
    .parent        = TYPE_SYS_BUS_DEVICE,
    .instance_size = sizeof(SysBusDevice),
    .class_init    = xen_sysdev_class_init,
};

static void xenpv_register_types(void)
{
    type_register_static(&xensysdev_info);
}

type_init(xenpv_register_types);

static void xenpv_machine_init(MachineClass *mc)
{
    mc->desc = "Xen Para-virtualized PC";
+1 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ extern xc_interface *xen_xc;
extern xenforeignmemory_handle *xen_fmem;
extern struct xs_handle *xenstore;
extern const char *xen_protocol;
extern DeviceState *xen_sysdev;

/* xenstore helper functions */
int xenstore_write_str(const char *base, const char *node, const char *val);