virtio-gl: additional merge.
authorSangjin Kim <sangjin3.kim@samsung.com>
Wed, 10 Jul 2013 04:59:04 +0000 (13:59 +0900)
committerSangjin Kim <sangjin3.kim@samsung.com>
Wed, 10 Jul 2013 04:59:04 +0000 (13:59 +0900)
Change-Id: Ib303557d623957f75a1c986b2f5546bddfc72f95
Signed-off-by: Sangjin Kim <sangjin3.kim@samsung.com>
tizen/src/hw/virtio-gl.c
tizen/src/hw/virtio-gl.h

index c2c6c76..4b51d28 100644 (file)
@@ -216,23 +216,57 @@ static int virtio_gl_load(QEMUFile *f, void *opaque, int version_id)
        return 0;
 }
 
-VirtIODevice *virtio_gl_init(DeviceState *dev)
+static int virtio_gl_device_init(VirtIODevice *vdev)
 {
-       VirtIOGL *s;
+       VirtIOGL *s = VIRTIO_GL(vdev);
+       DeviceState *qdev = DEVICE(vdev);
 
-       s = g_malloc0(sizeof(VirtIOGL));
-       virtio_init(&s->vdev, TYPE_VIRTIO_GL, VIRTIO_ID_GL, 0);
-       if (&s->vdev == NULL) {
+       virtio_init(vdev, TYPE_VIRTIO_GL, VIRTIO_ID_GL, 0);
+       if (vdev == NULL) {
                ERR("Failed to initialize virtio gl device.\n");
-               return NULL;
+               return -1;
        }
 
        VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(&s->vdev);
        vdc->get_features = virtio_gl_get_features;
 
        s->vq = virtio_add_queue(&s->vdev, 128, virtio_gl_handle);
-       register_savevm(dev, TYPE_VIRTIO_GL, -1, 1, virtio_gl_save, virtio_gl_load, s);
+       register_savevm(qdev, TYPE_VIRTIO_GL, -1, 1, virtio_gl_save, virtio_gl_load, s);
 
-       return &s->vdev;
+       return 0;
+}
+
+static int virtio_gl_device_exit(DeviceState *qdev)
+{
+    VirtIODevice *vdev = VIRTIO_DEVICE(qdev);
+
+    INFO("destroy virtio-gl device\n");
+
+    virtio_cleanup(vdev);
+
+    return 0;
+}
+
+static void virtio_gl_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
+    dc->exit = virtio_gl_device_exit;
+    vdc->init = virtio_gl_device_init;
+    vdc->get_features = virtio_gl_get_features;
+}
+
+static const TypeInfo virtio_gl_info = {
+    .name = TYPE_VIRTIO_GL,
+    .parent = TYPE_VIRTIO_DEVICE,
+    .instance_size = sizeof(VirtIOGL),
+    .class_init = virtio_gl_class_init,
+};
+
+static void virtio_register_types(void)
+{
+    type_register_static(&virtio_gl_info);
 }
 
+type_init(virtio_register_types)
+
index 5f96656..a9e5ff5 100644 (file)
@@ -18,6 +18,8 @@ extern "C" {
 MULTI_DEBUG_CHANNEL(qemu, virtio-gl);
 
 #define TYPE_VIRTIO_GL "virtio-gl"
+#define VIRTIO_GL(obj) \
+        OBJECT_CHECK(VirtIOGL, (obj), TYPE_VIRTIO_GL)
 
 typedef hwaddr arg_t;
 int decode_call_int(ProcessStruct *p, char *in_args, int args_len, char *r_buffer);