maru_virtio_hwkey_notify();
}
-VirtIODevice *maru_virtio_hwkey_init(DeviceState *dev)
+static int virtio_hwkey_device_init(VirtIODevice *vdev)
{
INFO("initialize the hwkey device\n");
+ DeviceState *qdev = DEVICE(vdev);
+ vhk = VIRTIO_HWKEY(vdev);
- vhk = g_malloc0(sizeof(VirtIOHWKey));
- virtio_init(&vhk->vdev, TYPE_VIRTIO_HWKEY, VIRTIO_ID_HWKEY, 0);
+ virtio_init(vdev, TYPE_VIRTIO_HWKEY, VIRTIO_ID_HWKEY, 0);
- if (&vhk->vdev == NULL) {
+ if (vdev == NULL) {
ERR("failed to initialize the hwkey device\n");
- return NULL;
+ return -1;
}
- VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(&vhk->vdev);
- vdc->get_features = virtio_hwkey_get_features;
- vhk->vq = virtio_add_queue(&vhk->vdev, 64, maru_virtio_hwkey_handle);
+ vhk->vq = virtio_add_queue(vdev, 64, maru_virtio_hwkey_handle);
- vhk->qdev = dev;
+ vhk->qdev = qdev;
/* reset the counters */
event_queue_cnt = event_ringbuf_cnt = 0;
/* bottom-half */
vhk->bh = qemu_bh_new(maru_hwkey_bh, vhk);
- return &(vhk->vdev);
+ return 0;
}
-void maru_virtio_hwkey_exit(VirtIODevice *vdev)
+static int virtio_hwkey_device_exit(DeviceState *qdev)
{
- VirtIOHWKey *vhk = (VirtIOHWKey *)vdev;
+ VirtIODevice *vdev = VIRTIO_DEVICE(qdev);
INFO("exit the hwkey device\n");
virtio_cleanup(vdev);
pthread_mutex_destroy(&event_mutex);
+
+ return 0;
+}
+
+static void virtio_hwkey_class_init(ObjectClass *klass, void *data)
+{
+ DeviceClass *dc = DEVICE_CLASS(klass);
+ VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
+ dc->exit = virtio_hwkey_device_exit;
+ vdc->init = virtio_hwkey_device_init;
+ vdc->get_features = virtio_hwkey_get_features;
}
+static const TypeInfo virtio_hwkey_info = {
+ .name = TYPE_VIRTIO_HWKEY,
+ .parent = TYPE_VIRTIO_DEVICE,
+ .instance_size = sizeof(VirtIOHWKey),
+ .class_init = virtio_hwkey_class_init,
+};
+
+static void virtio_register_types(void)
+{
+ type_register_static(&virtio_hwkey_info);
+}
+
+type_init(virtio_register_types)
+
virtio_keyboard_notify(opaque);
}
-VirtIODevice *virtio_keyboard_init(DeviceState *dev)
+static int virtio_keyboard_device_init(VirtIODevice *vdev)
{
VirtIOKeyboard *vkbd;
- INFO("initialize virtio-keyboard device\n");
+ DeviceState *qdev = DEVICE(vdev);
+ vkbd = VIRTIO_KEYBOARD(vdev);
- vkbd = g_malloc0(sizeof(VirtIOKeyboard));
- virtio_init(&vkbd->vdev, TYPE_VIRTIO_KEYBOARD, VIRTIO_ID_KEYBOARD, 0);
+ INFO("initialize virtio-keyboard device\n");
+ virtio_init(vdev, TYPE_VIRTIO_KEYBOARD, VIRTIO_ID_KEYBOARD, 0);
- if (&vkbd->vdev == NULL) {
+ if (vdev == NULL) {
ERR("failed to initialize device\n");
- return NULL;
+ return -1;
}
memset(&vkbd->kbdqueue, 0x00, sizeof(vkbd->kbdqueue));
vkbd->extension_key = 0;
qemu_mutex_init(&vkbd->event_mutex);
- VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(&vkbd->vdev);
- vdc->get_features = virtio_keyboard_get_features;
- vkbd->vq = virtio_add_queue(&vkbd->vdev, 128, virtio_keyboard_handle);
- vkbd->qdev = dev;
+ vkbd->vq = virtio_add_queue(vdev, 128, virtio_keyboard_handle);
+ vkbd->qdev = qdev;
/* bottom half */
vkbd->bh = qemu_bh_new(virtio_keyboard_bh, vkbd);
/* register keyboard handler */
vkbd->eh_entry = qemu_add_kbd_event_handler(virtio_keyboard_event, vkbd);
- return &vkbd->vdev;
+ return 0;
}
-void virtio_keyboard_exit(VirtIODevice *vdev)
+static int virtio_keyboard_device_exit(DeviceState *qdev)
{
+ VirtIODevice *vdev = VIRTIO_DEVICE(qdev);
VirtIOKeyboard *vkbd = (VirtIOKeyboard *)vdev;
+
INFO("destroy device\n");
qemu_remove_kbd_event_handler(vkbd->eh_entry);
qemu_mutex_destroy(&vkbd->event_mutex);
virtio_cleanup(vdev);
+
+ return 0;
}
+
+static void virtio_keyboard_class_init(ObjectClass *klass, void *data)
+{
+ DeviceClass *dc = DEVICE_CLASS(klass);
+ VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
+ dc->exit = virtio_keyboard_device_exit;
+ vdc->init = virtio_keyboard_device_init;
+ vdc->get_features = virtio_keyboard_get_features;
+}
+
+static const TypeInfo virtio_keyboard_info = {
+ .name = TYPE_VIRTIO_KEYBOARD,
+ .parent = TYPE_VIRTIO_DEVICE,
+ .instance_size = sizeof(VirtIOKeyboard),
+ .class_init = virtio_keyboard_class_init,
+};
+
+static void virtio_register_types(void)
+{
+ type_register_static(&virtio_keyboard_info);
+}
+
+type_init(virtio_register_types)
+