From 417f78f1af8bc5dabef1e10b0d2e59231aa28d1e Mon Sep 17 00:00:00 2001 From: "syeon.hwang" Date: Thu, 10 Jan 2013 17:47:41 +0900 Subject: [PATCH] emulator: fix virtio-keyboard crash on 64 bit and some code clean-up remove some dangerous code on 64bit in mloop-event.c fix some compilation warnings - mloop_event.c, sdb.h, virtio.h Signed-off-by: SeokYeon Hwang --- hw/virtio.h | 9 ++--- tizen/src/hw/maru_codec.c | 6 +--- tizen/src/hw/maru_virtio_esm.h | 5 ++- tizen/src/hw/maru_virtio_keyboard.c | 25 -------------- tizen/src/hw/maru_virtio_keyboard.h | 28 +++++++++++++-- tizen/src/hw/maru_virtio_touchscreen.h | 3 +- tizen/src/mloop_event.c | 62 ++++++++++++++++++---------------- tizen/src/sdb.h | 1 - tizen/src/skin/maruskin_server.h | 2 +- 9 files changed, 67 insertions(+), 74 deletions(-) diff --git a/hw/virtio.h b/hw/virtio.h index 6cd7b9e..1a33b4c 100644 --- a/hw/virtio.h +++ b/hw/virtio.h @@ -218,12 +218,9 @@ void virtio_scsi_exit(VirtIODevice *vdev); /* Maru devices */ #ifdef CONFIG_MARU -VirtIODevice *maru_virtio_touchscreen_init(DeviceState *dev); -void maru_virtio_touchscreen_exit(VirtIODevice *vdev); -VirtIODevice *virtio_esm_init(DeviceState *dev); -void virtio_esm_exit(VirtIODevice *vdev); -VirtIODevice *virtio_keyboard_init(DeviceState *dev); -void virtio_keyboard_exit(VirtIODevice *vdev); +#include "tizen/src/hw/maru_virtio_touchscreen.h" +#include "tizen/src/hw/maru_virtio_keyboard.h" +#include "tizen/src/hw/maru_virtio_esm.h" #endif diff --git a/tizen/src/hw/maru_codec.c b/tizen/src/hw/maru_codec.c index 3860314..569571a 100644 --- a/tizen/src/hw/maru_codec.c +++ b/tizen/src/hw/maru_codec.c @@ -663,13 +663,10 @@ int qemu_avcodec_close(SVCodecState *s, int ctx_index) /* AVCodecContext* avcodec_alloc_context (void) */ int qemu_avcodec_alloc_context(SVCodecState *s) { - off_t offset; int index; TRACE("[%s] Enter\n", __func__); - offset = s->codec_param.mmap_offset; - for (index = 0; index < CODEC_CONTEXT_MAX; index++) { if (s->codec_ctx[index].avctx_use == false) { TRACE("Succeeded to get %d of context.\n", index); @@ -1376,12 +1373,11 @@ uint64_t codec_read(void *opaque, target_phys_addr_t addr, unsigned size) void codec_write(void *opaque, target_phys_addr_t addr, uint64_t value, unsigned size) { - int ret = -1; SVCodecState *s = (SVCodecState *)opaque; switch (addr) { case CODEC_CMD_API_INDEX: - ret = codec_operate(value, s->codec_param.ctx_index, s); + codec_operate(value, s->codec_param.ctx_index, s); break; case CODEC_CMD_CONTEXT_INDEX: s->codec_param.ctx_index = value; diff --git a/tizen/src/hw/maru_virtio_esm.h b/tizen/src/hw/maru_virtio_esm.h index 987ea9a..75e3db7 100644 --- a/tizen/src/hw/maru_virtio_esm.h +++ b/tizen/src/hw/maru_virtio_esm.h @@ -27,14 +27,13 @@ */ #ifndef MARU_VIRTIO_ESM_H_ -#define MARU_VIRTIO_ESM_H__ +#define MARU_VIRTIO_ESM_H_ #ifdef __cplusplus extern "C" { #endif -#include "hw.h" -#include "virtio.h" +#include "hw/virtio.h" VirtIODevice *virtio_esm_init(DeviceState *dev); diff --git a/tizen/src/hw/maru_virtio_keyboard.c b/tizen/src/hw/maru_virtio_keyboard.c index d767e8b..8711b6b 100644 --- a/tizen/src/hw/maru_virtio_keyboard.c +++ b/tizen/src/hw/maru_virtio_keyboard.c @@ -27,7 +27,6 @@ * */ -#include "console.h" #include "mloop_event.h" #include "maru_device_ids.h" #include "maru_virtio_keyboard.h" @@ -35,30 +34,6 @@ MULTI_DEBUG_CHANNEL(qemu, virtio-kbd); -#define VIRTIO_KBD_DEVICE_NAME "virtio-keyboard" -#define VIRTIO_KBD_QUEUE_SIZE 10 - -typedef struct EmulKbdEvent { - uint16_t code; - uint16_t type; -} EmulKbdEvent; - -typedef struct VirtIOKbdQueue { - EmulKbdEvent kbdevent[VIRTIO_KBD_QUEUE_SIZE]; - int index; - int rptr, wptr; -} VirtIOKbdQueue; - -typedef struct VirtIOKeyboard { - VirtIODevice vdev; - VirtQueue *vq; - DeviceState *qdev; - uint16_t extension_key; - - VirtIOKbdQueue kbdqueue; - QemuMutex event_mutex; -} VirtIOKeyboard; - VirtQueueElement elem; static void virtio_keyboard_handle(VirtIODevice *vdev, VirtQueue *vq) diff --git a/tizen/src/hw/maru_virtio_keyboard.h b/tizen/src/hw/maru_virtio_keyboard.h index 6d3c441..26f6146 100644 --- a/tizen/src/hw/maru_virtio_keyboard.h +++ b/tizen/src/hw/maru_virtio_keyboard.h @@ -34,8 +34,32 @@ extern "C" { #endif -#include "hw.h" -#include "virtio.h" +#include "qemu-thread.h" +#include "hw/virtio.h" + +#define VIRTIO_KBD_DEVICE_NAME "virtio-keyboard" +#define VIRTIO_KBD_QUEUE_SIZE 10 + +typedef struct EmulKbdEvent { + uint16_t code; + uint16_t type; +} EmulKbdEvent; + +typedef struct VirtIOKbdQueue { + EmulKbdEvent kbdevent[VIRTIO_KBD_QUEUE_SIZE]; + int index; + int rptr, wptr; +} VirtIOKbdQueue; + +typedef struct VirtIOKeyboard { + VirtIODevice vdev; + VirtQueue *vq; + DeviceState *qdev; + uint16_t extension_key; + + VirtIOKbdQueue kbdqueue; + QemuMutex event_mutex; +} VirtIOKeyboard; VirtIODevice *virtio_keyboard_init(DeviceState *dev); diff --git a/tizen/src/hw/maru_virtio_touchscreen.h b/tizen/src/hw/maru_virtio_touchscreen.h index f54d733..2e1101b 100644 --- a/tizen/src/hw/maru_virtio_touchscreen.h +++ b/tizen/src/hw/maru_virtio_touchscreen.h @@ -30,7 +30,8 @@ #ifndef MARU_TOUCHSCREEN_H_ #define MARU_TOUCHSCREEN_H_ -#include "virtio.h" +#include "console.h" +#include "hw/virtio.h" typedef struct TouchscreenState { diff --git a/tizen/src/mloop_event.c b/tizen/src/mloop_event.c index 685deef..9561408 100644 --- a/tizen/src/mloop_event.c +++ b/tizen/src/mloop_event.c @@ -48,6 +48,11 @@ #include "pci.h" #include "sysemu.h" +#include "guest_debug.h" +#include "skin/maruskin_server.h" +#include "hw/maru_virtio_touchscreen.h" +#include "hw/maru_virtio_keyboard.h" + MULTI_DEBUG_CHANNEL(qemu, mloop_event); struct mloop_evsock { @@ -186,7 +191,7 @@ static int mloop_evsock_send(struct mloop_evsock *ev, struct mloop_evpack *p) } do { - ret = send(ev->sockno, p, ntohs(p->size), 0); + ret = send(ev->sockno, p, p->size, 0); #ifdef _WIN32 } while (ret == -1 && (WSAGetLastError() == WSAEWOULDBLOCK)); #else @@ -431,9 +436,6 @@ static void mloop_evcb_recv(struct mloop_evsock *ev) return; } - pack.type = ntohs(pack.type); - pack.size = ntohs(pack.size); - switch (pack.type) { case MLOOP_EVTYPE_USB_ADD: mloop_evhandle_usb_add(pack.data); @@ -442,10 +444,10 @@ static void mloop_evcb_recv(struct mloop_evsock *ev) mloop_evhandle_usb_del(pack.data); break; case MLOOP_EVTYPE_INTR_UP: - mloop_evhandle_intr_up(ntohl(*(long*)&pack.data[0])); + mloop_evhandle_intr_up(*(long*)&pack.data[0]); break; case MLOOP_EVTYPE_INTR_DOWN: - mloop_evhandle_intr_down(ntohl(*(long*)&pack.data[0])); + mloop_evhandle_intr_down(*(long*)&pack.data[0]); break; case MLOOP_EVTYPE_HWKEY: mloop_evhandle_hwkey(&pack); @@ -454,7 +456,7 @@ static void mloop_evcb_recv(struct mloop_evsock *ev) mloop_evhandle_touch(&pack); break; case MLOOP_EVTYPE_KEYBOARD: - mloop_evhandle_keyboard(ntohl(*(long*)&pack.data[0])); + mloop_evhandle_keyboard(*(uint64_t*)&pack.data[0]); break; #ifdef TARGET_I386 case MLOOP_EVTYPE_KBD_ADD: @@ -490,9 +492,9 @@ void mloop_evcmd_raise_intr(void *irq) { struct mloop_evpack pack; memset((void*)&pack, 0, sizeof(struct mloop_evpack)); - pack.type = htons(MLOOP_EVTYPE_INTR_UP); - pack.size = htons(8); - *(long*)&pack.data[0] = htonl((long)irq); + pack.type = MLOOP_EVTYPE_INTR_UP; + pack.size = 8; + *(long*)&pack.data[0] = (long)irq; mloop_evsock_send(&mloop, &pack); } @@ -500,17 +502,17 @@ void mloop_evcmd_lower_intr(void *irq) { struct mloop_evpack pack; memset((void*)&pack, 0, sizeof(struct mloop_evpack)); - pack.type = htons(MLOOP_EVTYPE_INTR_DOWN); - pack.size = htons(8); - *(long*)&pack.data[0] = htonl((long)irq); + pack.type = MLOOP_EVTYPE_INTR_DOWN; + pack.size = 8; + *(long*)&pack.data[0] = (long)irq; mloop_evsock_send(&mloop, &pack); } void mloop_evcmd_usbkbd(int on) { - struct mloop_evpack pack = { htons(MLOOP_EVTYPE_USB_ADD), htons(13), "keyboard" }; + struct mloop_evpack pack = { MLOOP_EVTYPE_USB_ADD, 13, "keyboard" }; if (on == 0) { - pack.type = htons(MLOOP_EVTYPE_USB_DEL); + pack.type = MLOOP_EVTYPE_USB_DEL; } mloop_evsock_send(&mloop, &pack); } @@ -518,9 +520,9 @@ void mloop_evcmd_usbkbd(int on) void mloop_evcmd_hostkbd(int on) { struct mloop_evpack pack - = {htons(MLOOP_EVTYPE_KBD_ADD), htons(13), "keyboard"}; + = {MLOOP_EVTYPE_KBD_ADD, 13, "keyboard"}; if (on == 0) { - pack.type = htons(MLOOP_EVTYPE_KBD_DEL); + pack.type = MLOOP_EVTYPE_KBD_DEL; } mloop_evsock_send(&mloop, &pack); } @@ -537,11 +539,11 @@ void mloop_evcmd_usbdisk(char *img) return; } - pack.type = htons(MLOOP_EVTYPE_USB_ADD); - pack.size = htons(5 + sprintf(pack.data, "disk:%s", img)); + pack.type = MLOOP_EVTYPE_USB_ADD; + pack.size = 5 + sprintf(pack.data, "disk:%s", img); } else { - pack.type = htons(MLOOP_EVTYPE_USB_DEL); - pack.size = htons(5 + sprintf(pack.data, "disk:")); + pack.type = MLOOP_EVTYPE_USB_DEL; + pack.size = 5 + sprintf(pack.data, "disk:"); } mloop_evsock_send(&mloop, &pack); @@ -576,8 +578,8 @@ void mloop_evcmd_hwkey(int event_type, int keycode) { struct mloop_evpack pack; - pack.type = htons(MLOOP_EVTYPE_HWKEY); - pack.size = htons(5 + 8); //TODO: ? + pack.type = MLOOP_EVTYPE_HWKEY; + pack.size = 5 + 8; //TODO: ? memcpy(pack.data, &event_type, sizeof(int)); memcpy(pack.data + sizeof(int), &keycode, sizeof(int)); @@ -590,8 +592,8 @@ void mloop_evcmd_touch(void) struct mloop_evpack pack; memset(&pack, 0, sizeof(struct mloop_evpack)); - pack.type = htons(MLOOP_EVTYPE_TOUCH); - pack.size = htons(5); + pack.type = MLOOP_EVTYPE_TOUCH; + pack.size = 5; mloop_evsock_send(&mloop, &pack); } @@ -600,9 +602,9 @@ void mloop_evcmd_keyboard(void *data) struct mloop_evpack pack; memset(&pack, 0, sizeof(struct mloop_evpack)); - pack.type = htons(MLOOP_EVTYPE_KEYBOARD); - pack.size = htons(8); - *(long*)&pack.data[0] = htonl((long)data); + pack.type = MLOOP_EVTYPE_KEYBOARD; + pack.size = 4 + 8; + *((VirtIOKeyboard **)pack.data) = (VirtIOKeyboard *)data; mloop_evsock_send(&mloop, &pack); } @@ -611,8 +613,8 @@ void mloop_evcmd_ramdump(void) struct mloop_evpack pack; memset(&pack, 0, sizeof(struct mloop_evpack)); - pack.type = htons(MLOOP_EVTYPE_RAMDUMP); - pack.size = htons(5); + pack.type = MLOOP_EVTYPE_RAMDUMP; + pack.size = 5; mloop_evsock_send(&mloop, &pack); } diff --git a/tizen/src/sdb.h b/tizen/src/sdb.h index 218d36d..3a413a3 100644 --- a/tizen/src/sdb.h +++ b/tizen/src/sdb.h @@ -112,5 +112,4 @@ void socket_close(int fd); void notify_sdb_daemon_start(void); int check_port_bind_listen(uint32_t port); int sdb_loopback_client(int port, int type); -int check_port_bind_listen(uint32_t port); diff --git a/tizen/src/skin/maruskin_server.h b/tizen/src/skin/maruskin_server.h index 0b2488a..ee5e13a 100644 --- a/tizen/src/skin/maruskin_server.h +++ b/tizen/src/skin/maruskin_server.h @@ -34,7 +34,7 @@ int start_skin_server(int argc, char** argv, int qemu_argc, char** qemu_argv); void shutdown_skin_server(void); void notify_sensor_daemon_start(void); -void notify_ramdump_complete(void); +void notify_ramdump_completed(void); void notify_booting_progress(int progress_value); int is_ready_skin_server(void); int get_skin_server_port(void); -- 2.7.4