support graceful shutdown
authorSon Hyunjun <hj79.son@samsung.com>
Fri, 9 Mar 2012 06:44:09 +0000 (15:44 +0900)
committerSon Hyunjun <hj79.son@samsung.com>
Fri, 9 Mar 2012 06:44:09 +0000 (15:44 +0900)
console.h
hw/ps2.c
input.c
tizen/src/emulator.c
tizen/src/hw/maru_board.c
tizen/src/hw/maru_pm.c
tizen/src/skin/maruskin_operation.c
tizen/src/skin/maruskin_server.c
vl.c

index 5ab8611..3f490f5 100644 (file)
--- a/console.h
+++ b/console.h
@@ -55,7 +55,11 @@ QEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func, void *opaque)
 void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry);
 
 void kbd_put_keycode(int keycode);
+#ifdef CONFIG_MARU
+void qemu_add_ps2kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
+void qemu_remove_ps2kbd_event_handler(void);
 void ps2kbd_put_keycode(int keycode);
+#endif
 void kbd_put_ledstate(int ledstate);
 void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
 
index e0164b8..ba02a11 100644 (file)
--- a/hw/ps2.c
+++ b/hw/ps2.c
@@ -653,7 +653,9 @@ void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg)
     s->scancode_set = 2;
     vmstate_register(NULL, 0, &vmstate_ps2_keyboard, s);
     qemu_add_kbd_event_handler(ps2_put_keycode, s);
+#ifdef CONFIG_MARU
     qemu_add_ps2kbd_event_handler(ps2_put_keycode, s);
+#endif
     qemu_register_reset(ps2_kbd_reset, s);
     return s;
 }
diff --git a/input.c b/input.c
index cdae818..b5e42af 100644 (file)
--- a/input.c
+++ b/input.c
 
 static QEMUPutKBDEvent *qemu_put_kbd_event;
 static void *qemu_put_kbd_event_opaque;
+#ifdef CONFIG_MARU
 static QEMUPutKBDEvent *qemu_put_ps2kbd_event;
 static void *qemu_put_ps2kbd_event_opaque;
+#endif
 static QTAILQ_HEAD(, QEMUPutLEDEntry) led_handlers = QTAILQ_HEAD_INITIALIZER(led_handlers);
 static QTAILQ_HEAD(, QEMUPutMouseEntry) mouse_handlers =
     QTAILQ_HEAD_INITIALIZER(mouse_handlers);
@@ -51,6 +53,8 @@ void qemu_remove_kbd_event_handler(void)
     qemu_put_kbd_event = NULL;
 }
 
+#ifdef CONFIG_MARU
+
 void qemu_add_ps2kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
 {
     qemu_add_kbd_event_handler(func,opaque); // temporary code for compatibility with Xserver
@@ -64,6 +68,15 @@ void qemu_remove_ps2kbd_event_handler(void)
     qemu_put_ps2kbd_event = NULL;
 }
 
+void ps2kbd_put_keycode(int keycode)
+{
+    if (qemu_put_ps2kbd_event) {
+        qemu_put_ps2kbd_event(qemu_put_ps2kbd_event_opaque, keycode);
+    }
+}
+
+#endif
+
 static void check_mode_change(void)
 {
     static int current_is_absolute, current_has_absolute;
@@ -150,13 +163,6 @@ void kbd_put_keycode(int keycode)
     }
 }
 
-void ps2kbd_put_keycode(int keycode)
-{
-    if (qemu_put_ps2kbd_event) {
-        qemu_put_ps2kbd_event(qemu_put_ps2kbd_event_opaque, keycode);
-    }
-}
-
 void kbd_put_ledstate(int ledstate)
 {
     QEMUPutLEDEntry *cursor;
index 65466e2..61f04ca 100644 (file)
@@ -64,7 +64,7 @@ static void construct_main_window(int skin_argc, char* skin_argv[])
 {
     INFO("construct main window\n");
     start_skin_server(11111, 0, 0);
-#if 0
+#if 1
     if (start_skin_client(skin_argc, skin_argv) == 0) {
         //TODO:
     }
index 85e57b1..fc6e31b 100644 (file)
@@ -241,7 +241,7 @@ static void maru_x86_machine_init(MemoryRegion *system_memory,
         }
         smi_irq = qemu_allocate_irqs(pc_acpi_smi_interrupt, first_cpu, 1);
         /* TODO: Populate SPD eeprom data.  */
-        smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100,
+        smbus = maru_pm_init(pci_bus, piix3_devfn + 3, 0xb100,
                               gsi[9], *cmos_s3, *smi_irq,
                               kvm_enabled());
         smbus_eeprom_init(smbus, 8, NULL, 0);
index 0c20cea..38610e0 100644 (file)
@@ -39,7 +39,6 @@
 #include "range.h"
 #include "ioport.h"
 #include "debug_ch.h"
-#include "../skin/maruskin_server.h"
 
 //#define DEBUG
 
@@ -49,6 +48,9 @@
 # define PIIX4_DPRINTF(format, ...)     do { } while (0)
 #endif
 
+/* define debug channel */
+MULTI_DEBUG_CHANNEL(qemu, maru_pm);
+
 #define ACPI_DBG_IO_ADDR  0xb044
 
 #define GPE_BASE 0xafe0
@@ -59,9 +61,6 @@
 
 #define PIIX4_PCI_HOTPLUG_STATUS 2
 
-/* define debug channel */
-MULTI_DEBUG_CHANNEL(qemu, maru_pm);
-
 struct pci_status {
     uint32_t up;
     uint32_t down;
@@ -133,7 +132,6 @@ static void maru_pm1_cnt_write(ACPIPM1EVT *pm1a, ACPIPM1CNT *pm1_cnt, uint16_t v
         switch(sus_typ) {
         case 0: /* soft power off */
             qemu_system_shutdown_request();
-            shutdown_skin_server();
             break;
         case 1:
 #if 0 // changed suspend operation for emulator
@@ -174,11 +172,11 @@ static void pm_ioport_write(IORange *ioport, uint64_t addr, unsigned width,
         pm_update_sci(s);
         break;
     case 0x04:
-#if 0 // changed acpi_pm1_cnt_write for emulator
+#if 0
         acpi_pm1_cnt_write(&s->pm1a, &s->pm1_cnt, val);
 #else
         maru_pm1_cnt_write(&s->pm1a, &s->pm1_cnt, val);
-#endif// end : changed acpi_pm1_cnt_write for emulator
+#endif
         break;
     default:
         break;
@@ -187,7 +185,6 @@ static void pm_ioport_write(IORange *ioport, uint64_t addr, unsigned width,
                   (unsigned int)val);
 }
 
-
 static void pm_ioport_read(IORange *ioport, uint64_t addr, unsigned width,
                             uint64_t *data)
 {
@@ -437,7 +434,7 @@ i2c_bus *maru_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
     PCIDevice *dev;
     PIIX4PMState *s;
 
-    dev = pci_create(bus, devfn, "PIIX4_PM");
+    dev = pci_create(bus, devfn, "MARU_PM");
     qdev_prop_set_uint32(&dev->qdev, "smb_io_base", smb_io_base);
 
     s = DO_UPCAST(PIIX4PMState, dev, dev);
@@ -452,7 +449,7 @@ i2c_bus *maru_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
 }
 
 static PCIDeviceInfo piix4_pm_info = {
-    .qdev.name          = "PIIX4_PM",
+    .qdev.name          = "MARU_PM",
     .qdev.desc          = "PM",
     .qdev.size          = sizeof(PIIX4PMState),
     .qdev.vmsd          = &vmstate_acpi,
index 79b50c7..1a942ac 100644 (file)
@@ -133,12 +133,12 @@ void open_shell(void) {
 void request_close( void ) {
     INFO( "request_close\n" );
 
-    kbd_put_keycode( 103 & 0x7f );
-//#ifdef _WIN32
-//    Sleep( 1.6 * 1000 ); // 1.6 seconds
-//#else
-//    usleep( 1.6 * 1000 * 1000 ); // 1.6 seconds
-//#endif
-//    kbd_put_keycode( 103 | 0x80 );
+    ps2kbd_put_keycode( 103 & 0x7f );
+#ifdef _WIN32
+    Sleep( 1.6 * 1000 ); // 1.6 seconds
+#else
+    usleep( 1.6 * 1000 * 1000 ); // 1.6 seconds
+#endif
+    kbd_put_keycode( 103 | 0x80 );
 
 }
index 3d4d2fb..dfa688d 100644 (file)
@@ -105,6 +105,7 @@ pthread_t start_skin_server( uint16_t default_svr_port, int argc, char** argv )
 
 void shutdown_skin_server(void) {
     if ( client_sock ) {
+        INFO( "Send shutdown to skin.\n" );
         if ( 0 > send_skin( client_sock, SEND_SHUTDOWN ) ) {
             INFO( "fail to send shutdown to skin.\n" );
             stop = 1;
diff --git a/vl.c b/vl.c
index 9334818..7edd02f 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -177,6 +177,7 @@ int qemu_main(int argc, char **argv, char **envp);
 
 #ifdef CONFIG_MARU
 #include "tizen/src/maru_sdl.h"
+#include "tizen/src/skin/maruskin_server.h"
 #endif
 
 //#define DEBUG_NET
@@ -1419,6 +1420,9 @@ void qemu_system_killed(int signal, pid_t pid)
 
 void qemu_system_shutdown_request(void)
 {
+#ifdef CONFIG_MARU
+    shutdown_skin_server();
+#endif
     shutdown_requested = 1;
     qemu_notify_event();
 }