From 30af5efa8d411e7cd673151c453dc47e406246f8 Mon Sep 17 00:00:00 2001 From: Jinhyung Choi Date: Tue, 23 Jul 2013 17:36:27 +0900 Subject: [PATCH] ecp: sensor virtio initialization and ecs qemu option is enabled Signed-off-by: Jinhyung Choi --- hw/virtio/virtio-pci.c | 43 +++++++++++++++++++++++++++++++ hw/virtio/virtio-pci.h | 14 ++++++++++ tizen/src/ecs.c | 2 +- tizen/src/ecs.h | 32 +++++++++++++++++++++++ tizen/src/emulator.c | 2 ++ tizen/src/hw/maru_virtio_sensor.c | 10 +++---- tizen/src/hw/maru_virtio_sensor.h | 19 ++++---------- 7 files changed, 101 insertions(+), 21 deletions(-) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 65c7a55167..d9fd427ebf 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1752,6 +1752,48 @@ static TypeInfo virtio_evdi_pci_info = { .instance_init = virtio_evdi_pci_instance_init, .class_init = virtio_evdi_pci_class_init, }; + +/* virtio-sensor-pci */ + +static int virtio_sensor_pci_init(VirtIOPCIProxy *vpci_dev) +{ + VirtIOSENSORPCI *dev = VIRTIO_SENSOR_PCI(vpci_dev); + DeviceState *vdev = DEVICE(&dev->vdev); + + qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus)); + if (qdev_init(vdev) < 0) { + return -1; + } + return 0; +} + +static void virtio_sensor_pci_class_init(ObjectClass *klass, void *data) +{ + VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); + PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); + + k->init = virtio_sensor_pci_init; + pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; + pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SENSOR; + pcidev_k->revision = VIRTIO_PCI_ABI_VERSION; + pcidev_k->class_id = PCI_CLASS_OTHERS; +} + +static void virtio_sensor_pci_instance_init(Object *obj) +{ + VirtIOSENSORPCI *dev = VIRTIO_SENSOR_PCI(obj); + object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SENSOR); + object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL); +} + +static TypeInfo virtio_sensor_pci_info = { + .name = TYPE_VIRTIO_SENSOR_PCI, + .parent = TYPE_VIRTIO_PCI, + .instance_size = sizeof(VirtIOSENSORPCI), + .instance_init = virtio_sensor_pci_instance_init, + .class_init = virtio_sensor_pci_class_init, +}; + #endif /* virtio-pci-bus */ @@ -1816,6 +1858,7 @@ static void virtio_pci_register_types(void) type_register_static(&virtio_keyboard_pci_info); type_register_static(&virtio_touchscreen_pci_info); type_register_static(&virtio_gl_pci_info); + type_register_static(&virtio_sensor_pci_info); #endif } diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h index 6ab9e17efc..6c5104abab 100644 --- a/hw/virtio/virtio-pci.h +++ b/hw/virtio/virtio-pci.h @@ -43,6 +43,7 @@ #include "../tizen/src/hw/maru_virtio_keyboard.h" #include "../tizen/src/hw/maru_virtio_touchscreen.h" #include "../tizen/src/hw/virtio-gl.h" +#include "../tizen/src/hw/maru_virtio_sensor.h" #endif typedef struct VirtIOPCIProxy VirtIOPCIProxy; @@ -61,6 +62,7 @@ typedef struct VirtIOEVDIPCI VirtIOEVDIPCI; typedef struct VirtIOESMPCI VirtIOESMPCI; typedef struct VirtIOHWKeyPCI VirtIOHWKeyPCI; typedef struct VirtIOKeyboardPCI VirtIOKeyboardPCI; +typedef struct VirtIOSENSORPCI VirtIOSENSORPCI; #endif /* virtio-pci-bus */ @@ -294,6 +296,18 @@ struct VirtIOHWKeyPCI { VirtIOPCIProxy parent_obj; VirtIOHWKey vdev; }; + +/* + * virtio-sensor-pci: This extends VirtioPCIProxy. + */ +#define TYPE_VIRTIO_SENSOR_PCI "virtio-sensor-pci" +#define VIRTIO_SENSOR_PCI(obj) \ + OBJECT_CHECK(VirtIOSENSORPCI, (obj), TYPE_VIRTIO_SENSOR_PCI) + +struct VirtIOSENSORPCI { + VirtIOPCIProxy parent_obj; + VirtIOSENSOR vdev; +}; #endif /* Virtio ABI version, if we increment this, we break the guest driver. */ diff --git a/tizen/src/ecs.c b/tizen/src/ecs.c index ee6c98049e..3a825c9ba5 100644 --- a/tizen/src/ecs.c +++ b/tizen/src/ecs.c @@ -1440,7 +1440,7 @@ static void* ecs_initialize(void* args) { start_logging(); LOG("ecs starts initializing."); - opts = qemu_opts_create(qemu_find_opts("ecs"), "ECS", 1, &local_err); + opts = qemu_opts_create(qemu_find_opts(ECS_OPTS_NAME), ECS_OPTS_NAME, 1, &local_err); if (error_is_set(&local_err)) { qerror_report_err(local_err); error_free(local_err); diff --git a/tizen/src/ecs.h b/tizen/src/ecs.h index 6cbd68f8bf..a31b66059d 100644 --- a/tizen/src/ecs.h +++ b/tizen/src/ecs.h @@ -28,6 +28,7 @@ #define LOG_PATH "\\tizen-sdk-data\\emulator-vms\\vms\\ecs.log" #endif +#define ECS_OPTS_NAME "ecs" #define HOST_LISTEN_ADDR "127.0.0.1" #define HOST_LISTEN_PORT 27000 #define EMULATOR_SERVER_NUM 3 @@ -153,4 +154,35 @@ void control_host_keyboard_onoff_req(ECS_Client *clii, QDict* data); void set_sensor_data(int length, const char* data); +static QemuOptsList qemu_ecs_opts = { + .name = ECS_OPTS_NAME, + .implied_opt_name = ECS_OPTS_NAME, + .head = QTAILQ_HEAD_INITIALIZER(qemu_ecs_opts.head), + .desc = { + { + .name = "host", + .type = QEMU_OPT_STRING, + },{ + .name = "port", + .type = QEMU_OPT_STRING, + },{ + .name = "localaddr", + .type = QEMU_OPT_STRING, + },{ + .name = "localport", + .type = QEMU_OPT_STRING, + },{ + .name = "to", + .type = QEMU_OPT_NUMBER, + },{ + .name = "ipv4", + .type = QEMU_OPT_BOOL, + },{ + .name = "ipv6", + .type = QEMU_OPT_BOOL, + }, + { /* End of list */ } + }, +}; + #endif /* __ECS_H__ */ diff --git a/tizen/src/emulator.c b/tizen/src/emulator.c index 4caadb8944..a01a6f08ea 100644 --- a/tizen/src/emulator.c +++ b/tizen/src/emulator.c @@ -501,6 +501,8 @@ void prepare_maru(void) int guest_server_port = tizen_base_port + SDB_UDP_SENSOR_INDEX; start_guest_server(guest_server_port); + qemu_add_opts(&qemu_ecs_opts); + start_ecs(); mloop_ev_init(); diff --git a/tizen/src/hw/maru_virtio_sensor.c b/tizen/src/hw/maru_virtio_sensor.c index 14d5426af0..db5df971d3 100644 --- a/tizen/src/hw/maru_virtio_sensor.c +++ b/tizen/src/hw/maru_virtio_sensor.c @@ -28,8 +28,6 @@ */ -#include - #include "hw/pci/pci.h" #include "maru_device_ids.h" @@ -43,7 +41,7 @@ MULTI_DEBUG_CHANNEL(qemu, virtio-sensor); #define _MAX_BUF 1024 -VirtIOSensor* vsensor; +VirtIOSENSOR* vsensor; typedef struct msg_info { char buf[_MAX_BUF]; @@ -214,7 +212,7 @@ static void send_to_ecs(struct msg_info* msg) static void virtio_sensor_send(VirtIODevice *vdev, VirtQueue *vq) { - VirtIOSensor *vsensor = (VirtIOSensor*)vdev; + VirtIOSENSOR *vsensor = (VirtIOSENSOR*)vdev; struct msg_info msg; VirtQueueElement elem; int index = 0; @@ -233,7 +231,7 @@ static void virtio_sensor_send(VirtIODevice *vdev, VirtQueue *vq) send_to_ecs(&msg); } - virtqueue_push(vq, &elem, sizeof(VirtIOSensor)); + virtqueue_push(vq, &elem, sizeof(VirtIOSENSOR)); virtio_notify(&vsensor->vdev, vq); } @@ -301,7 +299,7 @@ static void virtio_sensor_class_init(ObjectClass *klass, void *data) static const TypeInfo virtio_device_info = { .name = TYPE_VIRTIO_SENSOR, .parent = TYPE_VIRTIO_DEVICE, - .instance_size = sizeof(VirtIOSensor), + .instance_size = sizeof(VirtIOSENSOR), .class_init = virtio_sensor_class_init, }; diff --git a/tizen/src/hw/maru_virtio_sensor.h b/tizen/src/hw/maru_virtio_sensor.h index 2b3bd4af8f..9ba1d56e48 100644 --- a/tizen/src/hw/maru_virtio_sensor.h +++ b/tizen/src/hw/maru_virtio_sensor.h @@ -63,27 +63,18 @@ enum sensor_types { #define ACTION_LIGHT 113 #define ACTION_PROXI 114 +#define TYPE_VIRTIO_SENSOR "virtio-sensor-device" +#define VIRTIO_SENSOR(obj) \ + OBJECT_CHECK(VirtIOSENSOR, (obj), TYPE_VIRTIO_SENSOR) -typedef struct VirtIOSensor { +typedef struct VirtIOSENSOR { VirtIODevice vdev; VirtQueue *rvq; VirtQueue *svq; DeviceState *qdev; QEMUBH *bh; -} VirtIOSensor; - - - -#define TYPE_VIRTIO_SENSOR "virtio-sensor-device" -#define VIRTIO_SENSOR(obj) \ - OBJECT_CHECK(VirtIOSensor, (obj), TYPE_VIRTIO_SENSOR) - - - -//VirtIODevice *virtio_sensor_init(DeviceState *dev); - -//void virtio_sensor_exit(VirtIODevice *vdev); +} VirtIOSENSOR; void req_sensor_data(enum sensor_types type, enum request_cmd req, char* data, int len); -- 2.34.1