Index: ioemu/Makefile.target
===================================================================
--- ioemu.orig/Makefile.target	2007-05-02 15:48:40.000000000 +0100
+++ ioemu/Makefile.target	2007-05-02 16:04:46.000000000 +0100
@@ -303,7 +303,7 @@
 endif
 
 # must use static linking to avoid leaving stuff in virtual address space
-VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o loader.o
+VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o
 VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o block-bochs.o block-vpc.o block-vvfat.o
 ifdef CONFIG_WIN32
 VL_OBJS+=tap-win32.o
Index: ioemu/configure
===================================================================
--- ioemu.orig/configure	2007-05-02 15:48:40.000000000 +0100
+++ ioemu/configure	2007-05-02 16:04:46.000000000 +0100
@@ -75,8 +75,8 @@
 bigendian="no"
 mingw32="no"
 EXESUF=""
-gdbstub="yes"
-slirp="yes"
+gdbstub="no"
+slirp="no"
 adlib="no"
 oss="no"
 dsound="no"
@@ -749,6 +749,8 @@
 if expr $target : '.*-softmmu' > /dev/null ; then
   target_softmmu="yes"
 fi
+#for support 256M guest
+target_softmmu="yes"
 target_user_only="no"
 if expr $target : '.*-user' > /dev/null ; then
   target_user_only="yes"
Index: ioemu/cpu-all.h
===================================================================
--- ioemu.orig/cpu-all.h	2007-05-02 15:48:36.000000000 +0100
+++ ioemu/cpu-all.h	2007-05-02 16:04:46.000000000 +0100
@@ -690,7 +690,9 @@
 void page_set_flags(target_ulong start, target_ulong end, int flags);
 void page_unprotect_range(target_ulong data, target_ulong data_size);
 
+#ifdef CONFIG_DM
 #define SINGLE_CPU_DEFINES
+#endif
 #ifdef SINGLE_CPU_DEFINES
 
 #if defined(TARGET_I386)
@@ -745,6 +747,12 @@
 
 #endif
 
+#else /* SINGLE_CPU_DEFINES */
+
+#define CPUState CPUX86State
+#define cpu_init cpu_x86_init
+int main_loop(void);
+
 #endif /* SINGLE_CPU_DEFINES */
 
 void cpu_dump_state(CPUState *env, FILE *f, 
Index: ioemu/disas.h
===================================================================
--- ioemu.orig/disas.h	2007-05-02 15:48:36.000000000 +0100
+++ ioemu/disas.h	2007-05-02 15:48:40.000000000 +0100
@@ -1,6 +1,7 @@
 #ifndef _QEMU_DISAS_H
 #define _QEMU_DISAS_H
 
+#ifndef CONFIG_DM
 /* Disassemble this for me please... (debugging). */
 void disas(FILE *out, void *code, unsigned long size);
 void target_disas(FILE *out, target_ulong code, target_ulong size, int flags);
@@ -17,5 +18,6 @@
     const char *disas_strtab;
     struct syminfo *next;
 } *syminfos;
+#endif /* !CONFIG_DM */
 
 #endif /* _QEMU_DISAS_H */
Index: ioemu/exec-all.h
===================================================================
--- ioemu.orig/exec-all.h	2007-05-02 15:48:36.000000000 +0100
+++ ioemu/exec-all.h	2007-05-02 16:04:45.000000000 +0100
@@ -509,7 +509,7 @@
 
 extern int tb_invalidated_flag;
 
-#if !defined(CONFIG_USER_ONLY)
+#if !defined(CONFIG_USER_ONLY) && !defined(CONFIG_DM)
 
 void tlb_fill(target_ulong addr, int is_write, int is_user, 
               void *retaddr);
@@ -536,7 +536,7 @@
 
 #endif
 
-#if defined(CONFIG_USER_ONLY)
+#if defined(CONFIG_USER_ONLY) || defined(CONFIG_DM)
 static inline target_ulong get_phys_addr_code(CPUState *env, target_ulong addr)
 {
     return addr;
Index: ioemu/hw/pc.c
===================================================================
--- ioemu.orig/hw/pc.c	2007-05-02 15:48:36.000000000 +0100
+++ ioemu/hw/pc.c	2007-05-02 16:04:46.000000000 +0100
@@ -73,6 +73,7 @@
     }
 }
 
+#ifndef CONFIG_DM
 /* IRQ handling */
 int cpu_get_pic_interrupt(CPUState *env)
 {
@@ -89,6 +90,7 @@
     intno = pic_read_irq(isa_pic);
     return intno;
 }
+#endif /* CONFIG_DM */
 
 static void pic_irq_request(void *opaque, int level)
 {
@@ -400,6 +402,7 @@
 
 /*************************************************/
 
+#ifndef CONFIG_DM
 static void putb(uint8_t **pp, int val)
 {
     uint8_t *q;
@@ -546,6 +549,7 @@
     float_pointer_struct[10] = 
         -mpf_checksum(float_pointer_struct, q - float_pointer_struct);
 }
+#endif /* !CONFIG_DM */
 
 
 static const int ide_iobase[2] = { 0x1f0, 0x170 };
@@ -626,12 +630,14 @@
     /* init CPUs */
     for(i = 0; i < smp_cpus; i++) {
         env = cpu_init();
+#ifndef CONFIG_DM
         if (i != 0)
             env->hflags |= HF_HALTED_MASK;
         if (smp_cpus > 1) {
             /* XXX: enable it in all cases */
             env->cpuid_features |= CPUID_APIC;
         }
+#endif /* !CONFIG_DM */
         register_savevm("cpu", i, 3, cpu_save, cpu_load, env);
         qemu_register_reset(main_cpu_reset, env);
         if (pci_enabled) {
@@ -690,6 +696,7 @@
     
     bochs_bios_init();
 
+#ifndef CONFIG_DM
     if (linux_boot) {
         uint8_t bootsect[512];
         uint8_t old_bootsect[512];
@@ -745,6 +752,7 @@
         /* loader type */
         stw_raw(phys_ram_base + KERNEL_PARAMS_ADDR + 0x210, 0x01);
     }
+#endif /* !CONFIG_DM */
 
     if (pci_enabled) {
         pci_bus = i440fx_init();
@@ -783,9 +791,11 @@
     isa_pic = pic_init(pic_irq_request, first_cpu);
     pit = pit_init(0x40, 0);
     pcspk_init(pit);
+#ifndef CONFIG_DM
     if (pci_enabled) {
         pic_set_alt_irq_func(isa_pic, ioapic_set_irq, ioapic);
     }
+#endif /* !CONFIG_DM */
 
     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
         if (serial_hds[i]) {
Index: ioemu/hw/vga_int.h
===================================================================
--- ioemu.orig/hw/vga_int.h	2007-05-02 15:48:36.000000000 +0100
+++ ioemu/hw/vga_int.h	2007-05-02 16:04:45.000000000 +0100
@@ -28,7 +28,7 @@
 #define ST01_DISP_ENABLE    0x01
 
 /* bochs VBE support */
-#define CONFIG_BOCHS_VBE
+//#define CONFIG_BOCHS_VBE
 
 #define VBE_DISPI_MAX_XRES              1600
 #define VBE_DISPI_MAX_YRES              1200
Index: ioemu/monitor.c
===================================================================
--- ioemu.orig/monitor.c	2007-05-02 15:48:36.000000000 +0100
+++ ioemu/monitor.c	2007-05-02 16:04:46.000000000 +0100
@@ -68,6 +68,12 @@
 
 void term_flush(void)
 {
+#ifdef CONFIG_DM
+    if (term_outbuf_index > 0 && !monitor_hd) {
+        fwrite(term_outbuf, term_outbuf_index, 1, stderr);
+        term_outbuf_index = 0;
+    }
+#endif
     if (term_outbuf_index > 0) {
         qemu_chr_write(monitor_hd, term_outbuf, term_outbuf_index);
         term_outbuf_index = 0;
@@ -106,6 +112,7 @@
     va_end(ap);
 }
 
+#ifndef CONFIG_DM
 static int monitor_fprintf(FILE *stream, const char *fmt, ...)
 {
     va_list ap;
@@ -114,6 +121,7 @@
     va_end(ap);
     return 0;
 }
+#endif /* !CONFIG_DM */
 
 static int compare_cmd(const char *name, const char *list)
 {
@@ -227,6 +235,7 @@
     return mon_cpu;
 }
 
+#ifndef CONFIG_DM
 static void do_info_registers(void)
 {
     CPUState *env;
@@ -280,6 +289,7 @@
 {
     dump_exec_info(NULL, monitor_fprintf);
 }
+#endif /* !CONFIG_DM */
 
 static void do_info_history (void)
 {
@@ -377,6 +387,7 @@
     cpu_set_log(mask);
 }
 
+#ifndef CONFIG_DM
 static void do_savevm(const char *filename)
 {
     if (qemu_savevm(filename) < 0)
@@ -623,6 +634,7 @@
 #endif
     term_printf("\n");
 }
+#endif /* !CONFIG_DM */
 
 static void do_sum(uint32_t start, uint32_t size)
 {
@@ -841,6 +853,7 @@
     kbd_mouse_event(0, 0, 0, mouse_button_state);
 }
 
+#ifndef CONFIG_DM
 static void do_ioport_read(int count, int format, int size, int addr, int has_index, int index)
 {
     uint32_t val;
@@ -1031,6 +1044,7 @@
     term_printf("kqemu support: not compiled\n");
 #endif
 } 
+#endif /* !CONFIG_DM */
 
 #ifdef CONFIG_PROFILER
 
@@ -1152,6 +1166,7 @@
       "filename", "save screen into PPM image 'filename'" },
     { "log", "s", do_log,
       "item1[,...]", "activate logging of the specified items to '/tmp/qemu.log'" }, 
+#ifndef CONFIG_DM
     { "savevm", "F", do_savevm,
       "filename", "save the whole virtual machine state to 'filename'" }, 
     { "loadvm", "F", do_loadvm,
@@ -1172,21 +1187,26 @@
       "/fmt expr", "print expression value (use $reg for CPU register access)", },
     { "i", "/ii.", do_ioport_read, 
       "/fmt addr", "I/O port read" },
+#endif/* !CONFIG_DM */
 
     { "sendkey", "s", do_send_key, 
       "keys", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1')" },
+#ifndef CONFIG_DM
     { "system_reset", "", do_system_reset, 
       "", "reset the system" },
     { "system_powerdown", "", do_system_powerdown, 
       "", "send system power down event" },
+#endif /* !CONFIG_DM */
     { "sum", "ii", do_sum, 
       "addr size", "compute the checksum of a memory region" },
     { "usb_add", "s", do_usb_add,
       "device", "add USB device (e.g. 'host:bus.addr' or 'host:vendor_id:product_id')" },
     { "usb_del", "s", do_usb_del,
       "device", "remove USB device 'bus.addr'" },
+#ifndef CONFIG_DM
     { "cpu", "i", do_cpu_set, 
       "index", "set the default CPU" },
+#endif /* !CONFIG_DM */
     { "mouse_move", "sss?", do_mouse_move, 
       "dx dy [dz]", "send mouse move events" },
     { "mouse_button", "i", do_mouse_button, 
@@ -1208,10 +1228,12 @@
       "", "show the network state" },
     { "block", "", do_info_block,
       "", "show the block devices" },
+#ifndef CONFIG_DM
     { "registers", "", do_info_registers,
       "", "show the cpu registers" },
     { "cpus", "", do_info_cpus,
       "", "show infos for each CPU" },
+#endif /* !CONFIG_DM */
     { "history", "", do_info_history,
       "", "show the command line history", },
     { "irq", "", irq_info,
@@ -1220,6 +1242,7 @@
       "", "show i8259 (PIC) state", },
     { "pci", "", pci_info,
       "", "show PCI info", },
+#ifndef CONFIG_DM
 #if defined(TARGET_I386)
     { "tlb", "", tlb_info,
       "", "show virtual to physical memory mappings", },
@@ -1230,6 +1253,7 @@
       "", "show dynamic compiler info", },
     { "kqemu", "", do_info_kqemu,
       "", "show kqemu information", },
+#endif /* !CONFIG_DM */
     { "usb", "", usb_info,
       "", "show guest USB devices", },
     { "usbhost", "", usb_host_info,
@@ -1243,6 +1267,7 @@
 
 /*******************************************************************/
 
+#ifndef CONFIG_DM
 static const char *pch;
 static jmp_buf expr_env;
 
@@ -1786,6 +1811,7 @@
     *pp = pch;
     return 0;
 }
+#endif /* !CONFIG_DM */
 
 static int get_str(char *buf, int buf_size, const char **pp)
 {
@@ -1852,8 +1878,10 @@
     return 0;
 }
 
+#ifndef CONFIG_DM
 static int default_fmt_format = 'x';
 static int default_fmt_size = 4;
+#endif /* !CONFIG_DM */
 
 #define MAX_ARGS 16
 
@@ -1861,7 +1889,10 @@
 {
     const char *p, *pstart, *typestr;
     char *q;
-    int c, nb_args, len, i, has_arg;
+    int c, nb_args, len, i;
+#ifndef CONFIG_DM
+    int has_arg;
+#endif /* !CONFIG_DM */
     term_cmd_t *cmd;
     char cmdname[256];
     char buf[1024];
@@ -1953,6 +1984,7 @@
                 args[nb_args++] = str;
             }
             break;
+#ifndef CONFIG_DM
         case '/':
             {
                 int count, format, size;
@@ -2085,6 +2117,7 @@
                 }
             }
             break;
+#endif /* !CONFIG_DM */
         case '-':
             {
                 int has_option;
@@ -2111,6 +2144,11 @@
                 args[nb_args++] = (void *)has_option;
             }
             break;
+#ifdef CONFIG_DM
+        /* TODO: add more commands we need here to support hvm device model */
+        case '/':
+        case 'i':
+#endif /* CONFIG_DM */
         default:
         bad_type:
             term_printf("%s: unknown type '%c'\n", cmdname, c);
@@ -2161,6 +2199,7 @@
     return;
 }
 
+#ifndef CONFIG_DM
 static void cmd_completion(const char *name, const char *list)
 {
     const char *p, *pstart;
@@ -2354,6 +2393,11 @@
     for(i = 0; i < nb_args; i++)
         qemu_free(args[i]);
 }
+#else
+void readline_find_completion(const char *cmdline)
+{
+}
+#endif /* !CONFIG_DM */
 
 static int term_can_read(void *opaque)
 {
Index: ioemu/vl.c
===================================================================
--- ioemu.orig/vl.c	2007-05-02 15:48:36.000000000 +0100
+++ ioemu/vl.c	2007-05-02 16:05:40.000000000 +0100
@@ -422,12 +422,15 @@
 void hw_error(const char *fmt, ...)
 {
     va_list ap;
+#ifndef CONFIG_DM
     CPUState *env;
+#endif /* !CONFIG_DM */
 
     va_start(ap, fmt);
     fprintf(stderr, "qemu: hardware error: ");
     vfprintf(stderr, fmt, ap);
     fprintf(stderr, "\n");
+#ifndef CONFIG_DM
     for(env = first_cpu; env != NULL; env = env->next_cpu) {
         fprintf(stderr, "CPU #%d:\n", env->cpu_index);
 #ifdef TARGET_I386
@@ -436,6 +439,7 @@
         cpu_dump_state(env, stderr, fprintf, 0);
 #endif
     }
+#endif /* !CONFIG_DM */
     va_end(ap);
     abort();
 }
@@ -4336,6 +4340,7 @@
     return ret;
 }
 
+#ifndef CONFIG_DM
 /***********************************************************/
 /* cpu save/restore */
 
@@ -4770,6 +4775,25 @@
     }
     return 0;
 }
+#else  /* CONFIG_DM */
+void cpu_save(QEMUFile *f, void *opaque)
+{
+}
+
+int cpu_load(QEMUFile *f, void *opaque, int version_id)
+{
+    return 0;
+}
+
+static void ram_save(QEMUFile *f, void *opaque)
+{
+}
+
+static int ram_load(QEMUFile *f, void *opaque, int version_id)
+{
+    return 0;
+}
+#endif /* CONFIG_DM */
 
 /***********************************************************/
 /* machine registration */
@@ -5664,15 +5688,19 @@
 #endif
     cyls = heads = secs = 0;
     translation = BIOS_ATA_TRANSLATION_AUTO;
-    pstrcpy(monitor_device, sizeof(monitor_device), "vc");
+    pstrcpy(monitor_device, sizeof(monitor_device), "null");
 
-    pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "vc");
-    for(i = 1; i < MAX_SERIAL_PORTS; i++)
+    for(i = 0; i < MAX_SERIAL_PORTS; i++)
         serial_devices[i][0] = '\0';
     serial_device_index = 0;
-    
+
+#ifndef CONFIG_DM
     pstrcpy(parallel_devices[0], sizeof(parallel_devices[0]), "vc");
     for(i = 1; i < MAX_PARALLEL_PORTS; i++)
+#else
+    /* Xen steals IRQ7 for PCI. Disable LPT1 by default. */
+    for(i = 0; i < MAX_PARALLEL_PORTS; i++)
+#endif
         parallel_devices[i][0] = '\0';
     parallel_device_index = 0;
     
@@ -6054,6 +6082,7 @@
     socket_init();
 #endif
 
+#ifndef CONFIG_DM
     /* init network clients */
     if (nb_net_clients == 0) {
         /* if no clients, we use a default config */
@@ -6063,6 +6092,7 @@
                 "user");
         nb_net_clients = 2;
     }
+#endif /* !CONFIG_DM */
 
     for(i = 0;i < nb_net_clients; i++) {
         if (net_client_init(net_clients[i]) < 0)
