ecp: sensor virtio initialization and ecs qemu option is enabled
authorJinhyung Choi <jinhyung2.choi@samsung.com>
Tue, 23 Jul 2013 08:36:27 +0000 (17:36 +0900)
committerJinhyung Choi <jinhyung2.choi@samsung.com>
Tue, 23 Jul 2013 08:36:27 +0000 (17:36 +0900)
Signed-off-by: Jinhyung Choi <jinhyung2.choi@samsung.com>
hw/virtio/virtio-pci.c
hw/virtio/virtio-pci.h
tizen/src/ecs.c
tizen/src/ecs.h
tizen/src/emulator.c
tizen/src/hw/maru_virtio_sensor.c
tizen/src/hw/maru_virtio_sensor.h

index 65c7a55167268f1c943169e1ae7264b0a7fdd512..d9fd427ebfde6b3106a909390e676ceca0598f31 100644 (file)
@@ -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
 }
 
index 6ab9e17efc77aea4a19dcc1630d35713f55819a2..6c5104abab7e566cd9c4dea091e67d164dcf3551 100644 (file)
@@ -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. */
index ee6c98049e92fef42e7468b8d7d616bb3f224a03..3a825c9ba5646577db0950ea40a71ab15ed19c0c 100644 (file)
@@ -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);
index 6cbd68f8bf376b77fffbcd52e929fd669304a06f..a31b66059d997c1f268bcd49bff8b59972c8d9f1 100644 (file)
@@ -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__ */
index 4caadb89445ee78ffc7c1e535ff0675ec05a5bdf..a01a6f08ea9c38745fe41ddd161644fc9e1f9e7b 100644 (file)
@@ -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();
index 14d5426af0a87b0f3f2000f58b10cd8e130a477f..db5df971d37ef469f6c59818c6fe00c4177b4e5c 100644 (file)
@@ -28,8 +28,6 @@
  */
 
 
-#include <pthread.h>
-
 #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,
 };
 
index 2b3bd4af8f8119146a8c119ab734c8cb311ebb29..9ba1d56e48ce5b43a84ccfda4a8179494932b969 100644 (file)
@@ -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);