# HG changeset patch
# User Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
# Node ID 55ff34dceb0bfba8bcc648dd30a2b97d85f24b3c
# Parent 2c29a2e42937e7e57c1fa465298c32c1d5d39bd4
[qemu patches] Update patches upto changeset 11870:29b02d929b7e.
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
---
tools/ioemu/patches/domain-timeoffset | 8 -
tools/ioemu/patches/hypervisor-rtc | 26 ++++
tools/ioemu/patches/ide-cd-dma | 18 ++
tools/ioemu/patches/qemu-bootorder | 22 +--
tools/ioemu/patches/qemu-cleanup | 33 ++++-
tools/ioemu/patches/qemu-daemonize | 4
tools/ioemu/patches/qemu-logging | 3
tools/ioemu/patches/qemu-target-i386-dm | 18 --
tools/ioemu/patches/serial-port-rate-limit | 47 +++++++
tools/ioemu/patches/series | 6
tools/ioemu/patches/vnc-access-monitor-vt | 8 -
tools/ioemu/patches/vnc-backoff-screen-scan | 42 ++----
tools/ioemu/patches/vnc-display-find-unused | 15 +-
tools/ioemu/patches/vnc-fixes | 17 +-
tools/ioemu/patches/vnc-listen-specific-interface | 142 ++++++++++++++++++++++
tools/ioemu/patches/vnc-password | 119 ++++++++++++++++++
tools/ioemu/patches/vnc-protocol-fixes | 46 +++++++
tools/ioemu/patches/vnc-start-vncviewer | 8 -
tools/ioemu/patches/vnc-title-domain-name | 8 -
tools/ioemu/patches/xen-build | 13 --
tools/ioemu/patches/xen-platform-device | 12 -
tools/ioemu/patches/xen-support-buffered-ioreqs | 8 -
tools/ioemu/patches/xenstore-block-device-config | 47 +++----
tools/ioemu/patches/xenstore-write-vnc-port | 12 -
24 files changed, 550 insertions(+), 132 deletions(-)
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/domain-timeoffset
--- a/tools/ioemu/patches/domain-timeoffset Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/domain-timeoffset Tue Oct 24 14:48:06 2006 +0100
@@ -1,7 +1,7 @@ Index: ioemu/hw/mc146818rtc.c
Index: ioemu/hw/mc146818rtc.c
===================================================================
---- ioemu.orig/hw/mc146818rtc.c 2006-09-21 19:33:25.000000000 +0100
-+++ ioemu/hw/mc146818rtc.c 2006-09-21 19:33:30.000000000 +0100
+--- ioemu.orig/hw/mc146818rtc.c 2006-10-24 14:45:21.000000000 +0100
++++ ioemu/hw/mc146818rtc.c 2006-10-24 14:45:39.000000000 +0100
@@ -178,10 +178,27 @@
}
}
@@ -46,8 +46,8 @@ Index: ioemu/hw/mc146818rtc.c
static void rtc_copy_date(RTCState *s)
Index: ioemu/hw/pc.c
===================================================================
---- ioemu.orig/hw/pc.c 2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/hw/pc.c 2006-09-21 19:33:30.000000000 +0100
+--- ioemu.orig/hw/pc.c 2006-10-24 14:45:38.000000000 +0100
++++ ioemu/hw/pc.c 2006-10-24 14:45:39.000000000 +0100
@@ -159,7 +159,7 @@
}
@@ -117,8 +117,8 @@ Index: ioemu/hw/pc.c
QEMUMachine pc_machine = {
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:30.000000000 +0100
+--- ioemu.orig/vl.c 2006-10-24 14:45:38.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:45:39.000000000 +0100
@@ -163,6 +163,8 @@
int xc_handle;
@@ -174,8 +174,8 @@ Index: ioemu/vl.c
if (usb_enabled) {
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:30.000000000 +0100
+--- ioemu.orig/vl.h 2006-10-24 14:45:38.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:45:39.000000000 +0100
@@ -576,7 +576,7 @@
int boot_device,
DisplayState *ds, const char **fd_filename, int snapshot,
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/qemu-bootorder
--- a/tools/ioemu/patches/qemu-bootorder Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/qemu-bootorder Tue Oct 24 14:48:06 2006 +0100
@@ -1,9 +1,9 @@ Index: ioemu/vl.c
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
-@@ -124,7 +124,7 @@
- int vncunused;
+--- ioemu.orig/vl.c 2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
+@@ -125,7 +125,7 @@
+ struct sockaddr_in vnclisten_addr;
const char* keyboard_layout = NULL;
int64_t ticks_per_sec;
-int boot_device = 'c';
@@ -11,7 +11,7 @@ Index: ioemu/vl.c
uint64_t ram_size;
int pit_min_timer_count = 0;
int nb_nics;
-@@ -6063,14 +6063,14 @@
+@@ -6075,14 +6075,14 @@
break;
#endif /* !CONFIG_DM */
case QEMU_OPTION_boot:
@@ -32,7 +32,7 @@ Index: ioemu/vl.c
exit(1);
}
break;
-@@ -6334,6 +6334,7 @@
+@@ -6349,6 +6349,7 @@
fd_filename[0] == '\0')
help();
@@ -40,7 +40,7 @@ Index: ioemu/vl.c
/* boot to cd by default if no hard disk */
if (hd_filename[0] == '\0' && boot_device == 'c') {
if (fd_filename[0] != '\0')
-@@ -6341,6 +6342,7 @@
+@@ -6356,6 +6357,7 @@
else
boot_device = 'd';
}
@@ -48,7 +48,7 @@ Index: ioemu/vl.c
#endif /* !CONFIG_DM */
setvbuf(stdout, NULL, _IOLBF, 0);
-@@ -6599,6 +6601,7 @@
+@@ -6614,6 +6616,7 @@
ds, fd_filename, snapshot,
kernel_filename, kernel_cmdline, initrd_filename,
timeoffset);
@@ -58,9 +58,9 @@ Index: ioemu/vl.c
if (usb_enabled) {
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:32.000000000 +0100
-@@ -576,7 +576,7 @@
+--- ioemu.orig/vl.h 2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:47.000000000 +0100
+@@ -578,7 +578,7 @@
#ifndef QEMU_TOOL
typedef void QEMUMachineInitFunc(uint64_t ram_size, int vga_ram_size,
@@ -69,7 +69,7 @@ Index: ioemu/vl.h
DisplayState *ds, const char **fd_filename, int snapshot,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename, time_t timeoffset);
-@@ -1021,7 +1021,7 @@
+@@ -1023,7 +1023,7 @@
uint32_t start, uint32_t count);
int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
const unsigned char *arch,
@@ -80,8 +80,8 @@ Index: ioemu/vl.h
uint32_t initrd_image, uint32_t initrd_size,
Index: ioemu/hw/pc.c
===================================================================
---- ioemu.orig/hw/pc.c 2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/hw/pc.c 2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/hw/pc.c 2006-10-24 14:33:47.000000000 +0100
++++ ioemu/hw/pc.c 2006-10-24 14:33:47.000000000 +0100
@@ -158,8 +158,23 @@
rtc_set_memory(s, info_ofs + 8, sectors);
}
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/qemu-cleanup
--- a/tools/ioemu/patches/qemu-cleanup Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/qemu-cleanup Tue Oct 24 14:48:06 2006 +0100
@@ -1,7 +1,7 @@ Index: ioemu/hw/vga.c
Index: ioemu/hw/vga.c
===================================================================
---- ioemu.orig/hw/vga.c 2006-08-06 02:03:51.906765409 +0100
-+++ ioemu/hw/vga.c 2006-08-06 02:15:10.364150665 +0100
+--- ioemu.orig/hw/vga.c 2006-10-24 14:44:03.000000000 +0100
++++ ioemu/hw/vga.c 2006-10-24 14:45:22.000000000 +0100
@@ -1622,7 +1622,9 @@
static void vga_save(QEMUFile *f, void *opaque)
{
@@ -26,8 +26,8 @@ Index: ioemu/hw/vga.c
return -EINVAL;
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-08-06 02:15:01.774108287 +0100
-+++ ioemu/vl.c 2006-08-06 02:15:31.040845624 +0100
+--- ioemu.orig/vl.c 2006-10-24 14:44:08.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:45:29.000000000 +0100
@@ -39,6 +39,7 @@
#include <sys/ioctl.h>
#include <sys/socket.h>
@@ -36,6 +36,24 @@ Index: ioemu/vl.c
#include <dirent.h>
#include <netdb.h>
#ifdef _BSD
+@@ -2932,7 +2933,7 @@
+ }
+
+ /* XXX: better tmp dir construction */
+- snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());
++ snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%ld", (long)getpid());
+ if (mkdir(smb_dir, 0700) < 0) {
+ fprintf(stderr, "qemu: could not create samba server dir '%s'\n",
smb_dir);
+ exit(1);
+@@ -3893,7 +3894,7 @@
+ perror("Opening pidfile");
+ exit(1);
+ }
+- fprintf(f, "%d\n", getpid());
++ fprintf(f, "%ld\n", (long)getpid());
+ fclose(f);
+ pid_filename = qemu_strdup(filename);
+ if (!pid_filename) {
@@ -5308,7 +5309,9 @@
QEMU_OPTION_d,
QEMU_OPTION_hdachs,
@@ -70,8 +88,8 @@ Index: ioemu/vl.c
fprintf(stderr, "qemu: too many network clients\n");
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-08-06 02:15:01.775108175 +0100
-+++ ioemu/vl.h 2006-08-06 02:15:10.368150219 +0100
+--- ioemu.orig/vl.h 2006-10-24 14:44:08.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:45:22.000000000 +0100
@@ -957,7 +957,7 @@
unsigned long vram_offset, int vram_size, int width, int height);
@@ -81,3 +99,18 @@ Index: ioemu/vl.h
void slavio_intctl_set_cpu(void *opaque, unsigned int cpu, CPUState *env);
void slavio_pic_info(void *opaque);
void slavio_irq_info(void *opaque);
+Index: ioemu/usb-linux.c
+===================================================================
+--- ioemu.orig/usb-linux.c 2006-10-24 14:44:03.000000000 +0100
++++ ioemu/usb-linux.c 2006-10-24 14:44:08.000000000 +0100
+@@ -26,7 +26,9 @@
+ #if defined(__linux__)
+ #include <dirent.h>
+ #include <sys/ioctl.h>
+-#include <linux/compiler.h>
++/* Some versions of usbdevice_fs.h need __user to be defined for them. */
++/* This may (harmlessly) conflict with a definition in linux/compiler.h. */
++#define __user
+ #include <linux/usbdevice_fs.h>
+ #include <linux/version.h>
+
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/qemu-daemonize
--- a/tools/ioemu/patches/qemu-daemonize Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/qemu-daemonize Tue Oct 24 14:48:06 2006 +0100
@@ -2,9 +2,9 @@ Changes required because qemu-dm runs da
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
-@@ -6042,10 +6042,11 @@
+--- ioemu.orig/vl.c 2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
+@@ -6054,10 +6054,11 @@
}
break;
case QEMU_OPTION_nographic:
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/qemu-logging
--- a/tools/ioemu/patches/qemu-logging Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/qemu-logging Tue Oct 24 14:48:06 2006 +0100
@@ -1,7 +1,7 @@ Index: ioemu/vl.c
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-08-06 02:15:48.550893605 +0100
-+++ ioemu/vl.c 2006-08-06 02:16:31.246133963 +0100
+--- ioemu.orig/vl.c 2006-10-24 14:36:58.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:37:03.000000000 +0100
@@ -5234,7 +5234,7 @@
"-S freeze CPU at startup (use 'c' to start
execution)\n"
"-s wait gdb connection to port %d\n"
@@ -43,7 +43,7 @@ Index: ioemu/vl.c
/* default mac address of the first network interface */
+ /* init debug */
-+ sprintf(qemu_dm_logfilename, "/var/log/xen/qemu-dm.%d.log", getpid());
++ sprintf(qemu_dm_logfilename, "/var/log/xen/qemu-dm.%ld.log",
(long)getpid());
+ cpu_set_log_filename(qemu_dm_logfilename);
+ cpu_set_log(0);
+
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/qemu-target-i386-dm
--- a/tools/ioemu/patches/qemu-target-i386-dm Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/qemu-target-i386-dm Tue Oct 24 14:48:06 2006 +0100
@@ -1,7 +1,7 @@ Index: ioemu/Makefile.target
Index: ioemu/Makefile.target
===================================================================
---- ioemu.orig/Makefile.target 2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/Makefile.target 2006-09-21 18:54:22.000000000 +0100
+--- ioemu.orig/Makefile.target 2006-10-24 13:47:23.000000000 +0100
++++ ioemu/Makefile.target 2006-10-24 14:30:56.000000000 +0100
@@ -62,6 +62,8 @@
QEMU_SYSTEM=qemu-fast
endif
@@ -32,8 +32,8 @@ Index: ioemu/Makefile.target
DEFINES += -DHAS_AUDIO
Index: ioemu/configure
===================================================================
---- ioemu.orig/configure 2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/configure 2006-09-21 18:54:21.000000000 +0100
+--- ioemu.orig/configure 2006-10-24 13:47:23.000000000 +0100
++++ ioemu/configure 2006-10-24 14:29:34.000000000 +0100
@@ -373,6 +373,8 @@
if [ "$user" = "yes" ] ; then
target_list="i386-user arm-user armeb-user sparc-user ppc-user
mips-user mipsel-user $target_list"
@@ -45,8 +45,8 @@ Index: ioemu/configure
fi
Index: ioemu/monitor.c
===================================================================
---- ioemu.orig/monitor.c 2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/monitor.c 2006-09-21 18:54:23.000000000 +0100
+--- ioemu.orig/monitor.c 2006-10-24 13:47:23.000000000 +0100
++++ ioemu/monitor.c 2006-10-24 14:30:56.000000000 +0100
@@ -1262,6 +1262,10 @@
"", "show profiling information", },
{ "capture", "", do_info_capture,
@@ -60,8 +60,8 @@ Index: ioemu/monitor.c
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 18:54:23.000000000 +0100
+--- ioemu.orig/vl.c 2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:30:56.000000000 +0100
@@ -87,7 +87,7 @@
#include "exec-all.h"
@@ -98,8 +98,8 @@ Index: ioemu/vl.c
{
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 18:54:23.000000000 +0100
+--- ioemu.orig/vl.h 2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:30:56.000000000 +0100
@@ -37,6 +37,8 @@
#include <unistd.h>
#include <fcntl.h>
@@ -132,7 +132,7 @@ Index: ioemu/target-i386-dm/cpu.h
Index: ioemu/target-i386-dm/cpu.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/cpu.h 2006-09-21 18:54:22.000000000 +0100
++++ ioemu/target-i386-dm/cpu.h 2006-10-24 14:30:56.000000000 +0100
@@ -0,0 +1,86 @@
+/*
+ * i386 virtual CPU header
@@ -223,7 +223,7 @@ Index: ioemu/target-i386-dm/exec-dm.c
Index: ioemu/target-i386-dm/exec-dm.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/exec-dm.c 2006-09-21 18:54:22.000000000 +0100
++++ ioemu/target-i386-dm/exec-dm.c 2006-10-24 14:30:56.000000000 +0100
@@ -0,0 +1,516 @@
+/*
+ * virtual page mapping and translated block handling
@@ -744,7 +744,7 @@ Index: ioemu/target-i386-dm/helper2.c
Index: ioemu/target-i386-dm/helper2.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/helper2.c 2006-09-21 18:55:31.000000000 +0100
++++ ioemu/target-i386-dm/helper2.c 2006-10-24 14:31:01.000000000 +0100
@@ -0,0 +1,469 @@
+/*
+ * i386 helpers (without register variable usage)
@@ -1205,8 +1205,8 @@ Index: ioemu/target-i386-dm/helper2.c
+ break;
+ }
+
-+ /* Wait up to 100 msec. */
-+ main_loop_wait(100);
++ /* Wait up to 10 msec. */
++ main_loop_wait(10);
+
+ if (env->send_event) {
+ env->send_event = 0;
@@ -1218,7 +1218,7 @@ Index: ioemu/target-i386-dm/i8259-dm.c
Index: ioemu/target-i386-dm/i8259-dm.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/i8259-dm.c 2006-09-21 11:30:11.000000000 +0100
++++ ioemu/target-i386-dm/i8259-dm.c 2006-10-24 13:47:23.000000000 +0100
@@ -0,0 +1,107 @@
+/* Xen 8259 stub for interrupt controller emulation
+ *
@@ -1330,7 +1330,7 @@ Index: ioemu/target-i386-dm/qemu-dm.debu
Index: ioemu/target-i386-dm/qemu-dm.debug
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/qemu-dm.debug 2006-09-21 11:30:11.000000000 +0100
++++ ioemu/target-i386-dm/qemu-dm.debug 2006-10-24 13:47:23.000000000 +0100
@@ -0,0 +1,5 @@
+#!/bin/sh
+
@@ -1340,7 +1340,7 @@ Index: ioemu/target-i386-dm/qemu-ifup
Index: ioemu/target-i386-dm/qemu-ifup
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/qemu-ifup 2006-09-21 11:30:11.000000000 +0100
++++ ioemu/target-i386-dm/qemu-ifup 2006-10-24 13:47:23.000000000 +0100
@@ -0,0 +1,10 @@
+#!/bin/sh
+
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/series
--- a/tools/ioemu/patches/series Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/series Tue Oct 24 14:48:06 2006 +0100
@@ -32,10 +32,12 @@ fix-vga-scanning-code-overflow
fix-vga-scanning-code-overflow
vnc-cleanup
vnc-fixes
+vnc-protocol-fixes
vnc-start-vncviewer
vnc-title-domain-name
vnc-access-monitor-vt
vnc-display-find-unused
+vnc-listen-specific-interface
vnc-backoff-screen-scan
xenstore-block-device-config
xenstore-write-vnc-port
@@ -47,3 +49,7 @@ qemu-bootorder
qemu-bootorder
qemu-tunable-ide-write-cache
qemu-pci
+serial-port-rate-limit
+hypervisor-rtc
+ide-cd-dma
+vnc-password
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/vnc-access-monitor-vt
--- a/tools/ioemu/patches/vnc-access-monitor-vt Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/vnc-access-monitor-vt Tue Oct 24 14:48:06 2006 +0100
@@ -1,8 +1,8 @@ Index: ioemu/vnc.c
Index: ioemu/vnc.c
===================================================================
---- ioemu.orig/vnc.c 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vnc.c 2006-09-21 19:33:31.000000000 +0100
-@@ -32,6 +32,10 @@
+--- ioemu.orig/vnc.c 2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vnc.c 2006-10-24 14:33:46.000000000 +0100
+@@ -33,6 +33,10 @@
#include "vnc_keysym.h"
#include "keymaps.c"
@@ -13,7 +13,7 @@ Index: ioemu/vnc.c
typedef struct Buffer
{
size_t capacity;
-@@ -95,6 +99,8 @@
+@@ -96,6 +100,8 @@
int visible_h;
int slow_client;
@@ -22,7 +22,7 @@ Index: ioemu/vnc.c
};
#define DIRTY_PIXEL_BITS 64
-@@ -791,16 +797,80 @@
+@@ -794,16 +800,80 @@
static void do_key_event(VncState *vs, int down, uint32_t sym)
{
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/vnc-backoff-screen-scan
--- a/tools/ioemu/patches/vnc-backoff-screen-scan Tue Oct 24 14:47:41
2006 +0100
+++ b/tools/ioemu/patches/vnc-backoff-screen-scan Tue Oct 24 14:48:06
2006 +0100
@@ -1,10 +1,10 @@ Index: ioemu/vnc.c
Index: ioemu/vnc.c
===================================================================
---- ioemu.orig/vnc.c 2006-09-21 19:31:03.000000000 +0100
-+++ ioemu/vnc.c 2006-09-21 19:32:23.000000000 +0100
-@@ -27,7 +27,19 @@
- #include "vl.h"
+--- ioemu.orig/vnc.c 2006-10-24 14:33:17.000000000 +0100
++++ ioemu/vnc.c 2006-10-24 14:33:24.000000000 +0100
+@@ -28,7 +28,19 @@
#include "qemu_socket.h"
+ #include <assert.h>
-#define VNC_REFRESH_INTERVAL (1000 / 30)
+/* The refresh interval starts at BASE. If we scan the buffer and
@@ -23,7 +23,7 @@ Index: ioemu/vnc.c
#include "vnc_keysym.h"
#include "keymaps.c"
-@@ -64,10 +76,11 @@
+@@ -65,10 +77,11 @@
struct VncState
{
QEMUTimer *timer;
@@ -36,7 +36,7 @@ Index: ioemu/vnc.c
int width;
int height;
uint64_t *dirty_row; /* screen regions which are possibly dirty */
-@@ -98,8 +111,6 @@
+@@ -99,8 +112,6 @@
int visible_w;
int visible_h;
@@ -45,7 +45,7 @@ Index: ioemu/vnc.c
int ctl_keys; /* Ctrl+Alt starts calibration */
};
-@@ -380,7 +391,7 @@
+@@ -381,7 +392,7 @@
int y = 0;
int pitch = ds->linesize;
VncState *vs = ds->opaque;
@@ -54,19 +54,19 @@ Index: ioemu/vnc.c
if (src_x < vs->visible_x || src_y < vs->visible_y ||
dst_x < vs->visible_x || dst_y < vs->visible_y ||
-@@ -390,11 +401,6 @@
+@@ -391,10 +402,8 @@
(dst_y + h) > (vs->visible_y + vs->visible_h))
updating_client = 0;
- if (updating_client) {
- vs->need_update = 1;
-- _vnc_update_client(vs);
++ if (updating_client)
+ _vnc_update_client(vs);
- }
--
+
if (dst_y > src_y) {
y = h - 1;
- pitch = -pitch;
-@@ -445,110 +451,145 @@
+@@ -446,110 +455,149 @@
static void _vnc_update_client(void *opaque)
{
VncState *vs = opaque;
@@ -279,12 +279,16 @@ Index: ioemu/vnc.c
+ interested (e.g. minimised) it'll ignore this, and we
+ can stop scanning the buffer until it sends another
+ update request. */
-+ /* Note that there are bugs in xvncviewer which prevent
-+ this from actually working. Leave the code in place
-+ for correct clients. */
++ /* It turns out that there's a bug in realvncviewer 4.1.2
++ which means that if you send a proper null update (with
++ no update rectangles), it gets a bit out of sync and
++ never sends any further requests, regardless of whether
++ it needs one or not. Fix this by sending a single 1x1
++ update rectangle instead. */
+ vnc_write_u8(vs, 0);
+ vnc_write_u8(vs, 0);
-+ vnc_write_u16(vs, 0);
++ vnc_write_u16(vs, 1);
++ send_framebuffer_update(vs, 0, 0, 1, 1);
+ vnc_flush(vs);
+ vs->last_update_time = now;
+ return;
@@ -295,7 +299,7 @@ Index: ioemu/vnc.c
}
static void vnc_update_client(void *opaque)
-@@ -561,8 +602,10 @@
+@@ -562,8 +610,10 @@
static void vnc_timer_init(VncState *vs)
{
@@ -307,7 +311,7 @@ Index: ioemu/vnc.c
}
static void vnc_dpy_refresh(DisplayState *ds)
-@@ -622,7 +665,6 @@
+@@ -623,7 +673,6 @@
vs->csock = -1;
buffer_reset(&vs->input);
buffer_reset(&vs->output);
@@ -315,7 +319,7 @@ Index: ioemu/vnc.c
return 0;
}
return ret;
-@@ -892,7 +934,6 @@
+@@ -895,7 +944,6 @@
int x_position, int y_position,
int w, int h)
{
@@ -323,7 +327,7 @@ Index: ioemu/vnc.c
if (!incremental)
framebuffer_set_updated(vs, x_position, y_position, w, h);
vs->visible_x = x_position;
-@@ -1015,6 +1056,7 @@
+@@ -1018,6 +1066,7 @@
{
int i;
uint16_t limit;
@@ -331,7 +335,7 @@ Index: ioemu/vnc.c
switch (data[0]) {
case 0:
-@@ -1054,12 +1096,18 @@
+@@ -1061,12 +1110,18 @@
if (len == 1)
return 8;
@@ -352,15 +356,15 @@ Index: ioemu/vnc.c
case 6:
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:31:03.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:32:23.000000000 +0100
-@@ -725,6 +725,12 @@
+--- ioemu.orig/vl.c 2006-10-24 14:33:17.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:24.000000000 +0100
+@@ -726,6 +726,12 @@
}
}
+void qemu_advance_timer(QEMUTimer *ts, int64_t expire_time)
+{
-+ if (ts->expire_time > expire_time)
++ if (ts->expire_time > expire_time || !qemu_timer_pending(ts))
+ qemu_mod_timer(ts, expire_time);
+}
+
@@ -369,9 +373,9 @@ Index: ioemu/vl.c
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 19:31:03.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:32:23.000000000 +0100
-@@ -405,6 +405,7 @@
+--- ioemu.orig/vl.h 2006-10-24 14:33:17.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:24.000000000 +0100
+@@ -407,6 +407,7 @@
void qemu_free_timer(QEMUTimer *ts);
void qemu_del_timer(QEMUTimer *ts);
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/vnc-display-find-unused
--- a/tools/ioemu/patches/vnc-display-find-unused Tue Oct 24 14:47:41
2006 +0100
+++ b/tools/ioemu/patches/vnc-display-find-unused Tue Oct 24 14:48:06
2006 +0100
@@ -1,8 +1,8 @@ Index: ioemu/vnc.c
Index: ioemu/vnc.c
===================================================================
---- ioemu.orig/vnc.c 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vnc.c 2006-09-21 19:33:31.000000000 +0100
-@@ -1182,7 +1182,7 @@
+--- ioemu.orig/vnc.c 2006-10-24 14:31:09.000000000 +0100
++++ ioemu/vnc.c 2006-10-24 14:31:36.000000000 +0100
+@@ -1195,7 +1195,7 @@
}
}
@@ -11,7 +11,7 @@ Index: ioemu/vnc.c
{
struct sockaddr_in addr;
int reuse_addr, ret;
-@@ -1213,10 +1213,6 @@
+@@ -1226,10 +1226,6 @@
exit(1);
}
@@ -22,7 +22,7 @@ Index: ioemu/vnc.c
reuse_addr = 1;
ret = setsockopt(vs->lsock, SOL_SOCKET, SO_REUSEADDR,
(const char *)&reuse_addr, sizeof(reuse_addr));
-@@ -1225,7 +1221,16 @@
+@@ -1238,7 +1234,16 @@
exit(1);
}
@@ -39,7 +39,7 @@ Index: ioemu/vnc.c
fprintf(stderr, "bind() failed\n");
exit(1);
}
-@@ -1246,6 +1251,8 @@
+@@ -1259,6 +1264,8 @@
vs->ds->dpy_refresh = vnc_dpy_refresh;
vnc_dpy_resize(vs->ds, 640, 400);
@@ -50,8 +50,8 @@ Index: ioemu/vnc.c
int vnc_start_viewer(int port)
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/vl.c 2006-10-24 14:31:09.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:31:41.000000000 +0100
@@ -121,6 +121,7 @@
static DisplayState display_state;
int nographic;
@@ -99,7 +99,7 @@ Index: ioemu/vl.c
+ case QEMU_OPTION_vncunused:
+ vncunused++;
+ if (vnc_display == -1)
-+ vnc_display = -2;
++ vnc_display = 0;
+ break;
}
}
@@ -115,8 +115,8 @@ Index: ioemu/vl.c
} else {
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/vl.h 2006-10-24 14:31:09.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:31:36.000000000 +0100
@@ -785,7 +785,7 @@
void cocoa_display_init(DisplayState *ds, int full_screen);
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/vnc-fixes
--- a/tools/ioemu/patches/vnc-fixes Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/vnc-fixes Tue Oct 24 14:48:06 2006 +0100
@@ -1,7 +1,7 @@ Index: ioemu/vl.c
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:08:18.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:26:24.000000000 +0100
+--- ioemu.orig/vl.c 2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:19:36.000000000 +0100
@@ -6534,8 +6534,10 @@
}
}
@@ -17,8 +17,8 @@ Index: ioemu/vl.c
if (use_gdbstub) {
Index: ioemu/vnc.c
===================================================================
---- ioemu.orig/vnc.c 2006-09-21 19:08:18.000000000 +0100
-+++ ioemu/vnc.c 2006-09-21 19:26:38.000000000 +0100
+--- ioemu.orig/vnc.c 2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vnc.c 2006-10-24 14:20:00.000000000 +0100
@@ -3,6 +3,7 @@
*
* Copyright (C) 2006 Anthony Liguori <anthony@xxxxxxxxxxxxx>
@@ -483,7 +483,16 @@ Index: ioemu/vnc.c
vga_hw_invalidate();
vga_hw_update();
-@@ -1010,11 +1101,11 @@
+@@ -924,6 +1015,8 @@
+ {
+ char pad[3] = { 0, 0, 0 };
+
++ vga_hw_update();
++
+ vs->width = vs->ds->width;
+ vs->height = vs->ds->height;
+ vnc_write_u16(vs, vs->ds->width);
+@@ -1010,11 +1103,11 @@
vnc_write(vs, "RFB 003.003\n", 12);
vnc_flush(vs);
vnc_read_when(vs, protocol_version, 12);
@@ -497,7 +506,7 @@ Index: ioemu/vnc.c
}
}
-@@ -1071,17 +1162,15 @@
+@@ -1071,17 +1164,15 @@
exit(1);
}
@@ -520,8 +529,8 @@ Index: ioemu/vnc.c
}
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 19:00:48.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:26:24.000000000 +0100
+--- ioemu.orig/vl.h 2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:19:36.000000000 +0100
@@ -319,6 +319,7 @@
int is_graphic_console(void);
CharDriverState *text_console_init(DisplayState *ds);
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/vnc-start-vncviewer
--- a/tools/ioemu/patches/vnc-start-vncviewer Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/vnc-start-vncviewer Tue Oct 24 14:48:06 2006 +0100
@@ -1,8 +1,8 @@ Index: ioemu/vnc.c
Index: ioemu/vnc.c
===================================================================
---- ioemu.orig/vnc.c 2006-09-21 19:26:38.000000000 +0100
-+++ ioemu/vnc.c 2006-09-21 19:29:58.000000000 +0100
-@@ -1174,3 +1174,25 @@
+--- ioemu.orig/vnc.c 2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vnc.c 2006-10-24 14:33:46.000000000 +0100
+@@ -1187,3 +1187,25 @@
vnc_dpy_resize(vs->ds, 640, 400);
}
@@ -30,8 +30,8 @@ Index: ioemu/vnc.c
+}
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:26:24.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:29:50.000000000 +0100
+--- ioemu.orig/vl.c 2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:46.000000000 +0100
@@ -120,6 +120,7 @@
int bios_size;
static DisplayState display_state;
@@ -93,8 +93,8 @@ Index: ioemu/vl.c
sdl_display_init(ds, full_screen);
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 19:26:24.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:29:50.000000000 +0100
+--- ioemu.orig/vl.h 2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:46.000000000 +0100
@@ -786,6 +786,7 @@
/* vnc.c */
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/vnc-title-domain-name
--- a/tools/ioemu/patches/vnc-title-domain-name Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/vnc-title-domain-name Tue Oct 24 14:48:06 2006 +0100
@@ -1,16 +1,16 @@ Index: ioemu/vnc.c
Index: ioemu/vnc.c
===================================================================
---- ioemu.orig/vnc.c 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vnc.c 2006-09-21 19:33:31.000000000 +0100
-@@ -1013,6 +1013,7 @@
+--- ioemu.orig/vnc.c 2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vnc.c 2006-10-24 14:33:46.000000000 +0100
+@@ -1024,6 +1024,7 @@
static int protocol_client_init(VncState *vs, char *data, size_t len)
{
+ size_t l;
char pad[3] = { 0, 0, 0 };
- vs->width = vs->ds->width;
-@@ -1058,8 +1059,10 @@
+ vga_hw_update();
+@@ -1071,8 +1072,10 @@
vnc_write(vs, pad, 3); /* padding */
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/xen-build
--- a/tools/ioemu/patches/xen-build Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/xen-build Tue Oct 24 14:48:06 2006 +0100
@@ -1,7 +1,7 @@ Index: ioemu/Makefile
Index: ioemu/Makefile
===================================================================
---- ioemu.orig/Makefile 2006-08-28 20:19:23.000000000 +0100
-+++ ioemu/Makefile 2006-08-28 20:20:08.000000000 +0100
+--- ioemu.orig/Makefile 2006-10-24 14:37:25.000000000 +0100
++++ ioemu/Makefile 2006-10-24 14:37:28.000000000 +0100
@@ -1,11 +1,14 @@
# Makefile for QEMU.
@@ -85,8 +85,8 @@ Index: ioemu/Makefile
info: qemu-doc.info qemu-tech.info
Index: ioemu/Makefile.target
===================================================================
---- ioemu.orig/Makefile.target 2006-08-28 20:19:23.000000000 +0100
-+++ ioemu/Makefile.target 2006-08-28 20:19:47.000000000 +0100
+--- ioemu.orig/Makefile.target 2006-10-24 14:37:25.000000000 +0100
++++ ioemu/Makefile.target 2006-10-24 14:40:25.000000000 +0100
@@ -1,5 +1,8 @@
include config.mak
@@ -112,7 +112,7 @@ Index: ioemu/Makefile.target
endif
-CFLAGS=-Wall -O2 -g -fno-strict-aliasing
+CFLAGS+=-Wall -O2 -g -fno-strict-aliasing
-+SSE2 := $(call test-gcc-flag,$(CC),-msse2)
++SSE2 := $(call cc-option,$(CC),-msse2,)
+ifeq ($(SSE2),-msse2)
+CFLAGS += -DUSE_SSE2=1 -msse2
+endif
@@ -149,17 +149,18 @@ Index: ioemu/Makefile.target
install: all
+ mkdir -p "$(DESTDIR)$(bindir)" "$(DESTDIR)$(configdir)"
ifneq ($(PROGS),)
- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
- endif
-+ install -m 755 $(TARGET_PATH)/qemu-dm.debug "$(DESTDIR)$(bindir)"
-+ install -m 755 $(TARGET_PATH)/qemu-ifup "$(DESTDIR)$(configdir)"
+- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
++ $(INSTALL_PROG) $(PROGS) "$(DESTDIR)$(bindir)"
+ endif
++ $(INSTALL_PROG) $(TARGET_PATH)/qemu-dm.debug "$(DESTDIR)$(bindir)"
++ $(INSTALL_PROG) $(TARGET_PATH)/qemu-ifup "$(DESTDIR)$(configdir)"
ifneq ($(wildcard .depend),)
include .depend
Index: ioemu/configure
===================================================================
---- ioemu.orig/configure 2006-08-28 20:19:23.000000000 +0100
-+++ ioemu/configure 2006-08-28 20:19:47.000000000 +0100
+--- ioemu.orig/configure 2006-10-24 14:37:25.000000000 +0100
++++ ioemu/configure 2006-10-24 14:40:20.000000000 +0100
@@ -18,8 +18,8 @@
# default parameters
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/xen-platform-device
--- a/tools/ioemu/patches/xen-platform-device Tue Oct 24 14:47:41 2006 +0100
+++ b/tools/ioemu/patches/xen-platform-device Tue Oct 24 14:48:06 2006 +0100
@@ -3,8 +3,8 @@ will come later.
Index: ioemu/Makefile.target
===================================================================
---- ioemu.orig/Makefile.target 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/Makefile.target 2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/Makefile.target 2006-10-24 14:41:01.000000000 +0100
++++ ioemu/Makefile.target 2006-10-24 14:41:01.000000000 +0100
@@ -359,6 +359,7 @@
VL_OBJS+= usb-uhci.o
VL_OBJS+= piix4acpi.o
@@ -15,8 +15,8 @@ Index: ioemu/Makefile.target
ifeq ($(TARGET_BASE_ARCH), ppc)
Index: ioemu/hw/pc.c
===================================================================
---- ioemu.orig/hw/pc.c 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/hw/pc.c 2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/hw/pc.c 2006-10-24 14:41:00.000000000 +0100
++++ ioemu/hw/pc.c 2006-10-24 14:41:01.000000000 +0100
@@ -823,6 +823,9 @@
}
#endif /* !CONFIG_DM */
@@ -30,8 +30,8 @@ Index: ioemu/hw/xen_platform.c
Index: ioemu/hw/xen_platform.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/hw/xen_platform.c 2006-09-21 19:33:32.000000000 +0100
-@@ -0,0 +1,138 @@
++++ ioemu/hw/xen_platform.c 2006-10-24 14:41:04.000000000 +0100
+@@ -0,0 +1,144 @@
+/*
+ * XEN platform fake pci device, formerly known as the event channel device
+ *
@@ -131,7 +131,8 @@ Index: ioemu/hw/xen_platform.c
+ uint8_t bist; /* Built in self test */
+ uint32_t base_address_regs[6];
+ uint32_t reserved1;
-+ uint32_t reserved2;
++ uint16_t subsystem_vendor_id;
++ uint16_t subsystem_id;
+ uint32_t rom_addr;
+ uint32_t reserved3;
+ uint32_t reserved4;
@@ -160,6 +161,11 @@ Index: ioemu/hw/xen_platform.c
+ pch->header_type = 0;
+ pch->interrupt_pin = 1;
+
++ /* Microsoft WHQL requires non-zero subsystem IDs. */
++ /* http://www.pcisig.com/reflector/msg02205.html. */
++ pch->subsystem_vendor_id = pch->vendor_id; /* Duplicate vendor id. */
++ pch->subsystem_id = 0x0001; /* Hardcode sub-id as 1. */
++
+ pci_register_io_region(d, 0, 0x100, PCI_ADDRESS_SPACE_IO,
+ platform_ioport_map);
+
@@ -172,9 +178,9 @@ Index: ioemu/hw/xen_platform.c
+}
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:32.000000000 +0100
-@@ -1210,6 +1210,9 @@
+--- ioemu.orig/vl.h 2006-10-24 14:41:01.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:41:01.000000000 +0100
+@@ -1212,6 +1212,9 @@
void xenstore_check_new_media_present(int timeout);
void xenstore_write_vncport(int vnc_display);
diff -r 2c29a2e42937 -r 55ff34dceb0b
tools/ioemu/patches/xen-support-buffered-ioreqs
--- a/tools/ioemu/patches/xen-support-buffered-ioreqs Tue Oct 24 14:47:41
2006 +0100
+++ b/tools/ioemu/patches/xen-support-buffered-ioreqs Tue Oct 24 14:48:06
2006 +0100
@@ -1,8 +1,8 @@ Index: ioemu/vl.c
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
-@@ -5844,6 +5844,7 @@
+--- ioemu.orig/vl.c 2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
+@@ -5854,6 +5854,7 @@
unsigned long nr_pages, tmp_nr_pages, shared_page_nr;
xen_pfn_t *page_array;
extern void *shared_page;
@@ -10,7 +10,7 @@ Index: ioemu/vl.c
char qemu_dm_logfilename[64];
-@@ -6425,6 +6426,18 @@
+@@ -6440,6 +6441,18 @@
fprintf(logfile, "shared page at pfn:%lx, mfn: %"PRIx64"\n",
shared_page_nr, (uint64_t)(page_array[shared_page_nr]));
@@ -31,8 +31,8 @@ Index: ioemu/vl.c
#elif defined(__ia64__)
Index: ioemu/target-i386-dm/helper2.c
===================================================================
---- ioemu.orig/target-i386-dm/helper2.c 2006-09-21 19:33:30.000000000
+0100
-+++ ioemu/target-i386-dm/helper2.c 2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/target-i386-dm/helper2.c 2006-10-24 14:33:45.000000000
+0100
++++ ioemu/target-i386-dm/helper2.c 2006-10-24 14:33:47.000000000 +0100
@@ -76,6 +76,10 @@
shared_iopage_t *shared_page = NULL;
diff -r 2c29a2e42937 -r 55ff34dceb0b
tools/ioemu/patches/xenstore-block-device-config
--- a/tools/ioemu/patches/xenstore-block-device-config Tue Oct 24 14:47:41
2006 +0100
+++ b/tools/ioemu/patches/xenstore-block-device-config Tue Oct 24 14:48:06
2006 +0100
@@ -1,7 +1,7 @@ Index: ioemu/Makefile.target
Index: ioemu/Makefile.target
===================================================================
---- ioemu.orig/Makefile.target 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/Makefile.target 2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/Makefile.target 2006-10-24 14:31:36.000000000 +0100
++++ ioemu/Makefile.target 2006-10-24 14:33:28.000000000 +0100
@@ -358,6 +358,7 @@
VL_OBJS+= cirrus_vga.o mixeng.o parallel.o acpi.o piix_pci.o
VL_OBJS+= usb-uhci.o
@@ -13,7 +13,7 @@ Index: ioemu/xenstore.c
Index: ioemu/xenstore.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/xenstore.c 2006-09-21 19:33:31.000000000 +0100
++++ ioemu/xenstore.c 2006-10-24 14:33:28.000000000 +0100
@@ -0,0 +1,187 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General
@@ -204,9 +204,9 @@ Index: ioemu/xenstore.c
+}
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:31.000000000 +0100
-@@ -5249,9 +5249,11 @@
+--- ioemu.orig/vl.c 2006-10-24 14:33:24.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:28.000000000 +0100
+@@ -5256,9 +5256,11 @@
"Standard options:\n"
"-M machine select emulated machine (-M ? for list)\n"
"-fda/-fdb file use 'file' as floppy disk 0/1 image\n"
@@ -218,7 +218,7 @@ Index: ioemu/vl.c
"-boot [a|c|d] boot on floppy (a), hard disk (c) or CD-ROM (d)\n"
"-snapshot write to temporary files instead of disk image
files\n"
#ifdef TARGET_I386
-@@ -5378,11 +5380,13 @@
+@@ -5386,11 +5388,13 @@
QEMU_OPTION_M,
QEMU_OPTION_fda,
QEMU_OPTION_fdb,
@@ -232,7 +232,7 @@ Index: ioemu/vl.c
QEMU_OPTION_boot,
QEMU_OPTION_snapshot,
#ifdef TARGET_I386
-@@ -5454,11 +5458,13 @@
+@@ -5463,11 +5467,13 @@
{ "M", HAS_ARG, QEMU_OPTION_M },
{ "fda", HAS_ARG, QEMU_OPTION_fda },
{ "fdb", HAS_ARG, QEMU_OPTION_fdb },
@@ -246,7 +246,7 @@ Index: ioemu/vl.c
{ "boot", HAS_ARG, QEMU_OPTION_boot },
{ "snapshot", 0, QEMU_OPTION_snapshot },
#ifdef TARGET_I386
-@@ -5807,10 +5813,16 @@
+@@ -5817,10 +5823,16 @@
#ifdef CONFIG_GDBSTUB
int use_gdbstub, gdbstub_port;
#endif
@@ -265,7 +265,7 @@ Index: ioemu/vl.c
const char *kernel_filename, *kernel_cmdline;
DisplayState *ds = &display_state;
int cyls, heads, secs, translation;
-@@ -5871,8 +5883,10 @@
+@@ -5881,8 +5893,10 @@
initrd_filename = NULL;
for(i = 0; i < MAX_FD; i++)
fd_filename[i] = NULL;
@@ -276,7 +276,7 @@ Index: ioemu/vl.c
ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
vga_ram_size = VGA_RAM_SIZE;
bios_size = BIOS_SIZE;
-@@ -5886,11 +5900,13 @@
+@@ -5896,11 +5910,13 @@
vncunused = 0;
kernel_filename = NULL;
kernel_cmdline = "";
@@ -290,7 +290,7 @@ Index: ioemu/vl.c
cyls = heads = secs = 0;
translation = BIOS_ATA_TRANSLATION_AUTO;
pstrcpy(monitor_device, sizeof(monitor_device), "vc");
-@@ -5923,7 +5939,11 @@
+@@ -5935,7 +5951,11 @@
break;
r = argv[optind];
if (r[0] != '-') {
@@ -302,7 +302,7 @@ Index: ioemu/vl.c
} else {
const QEMUOption *popt;
-@@ -5967,6 +5987,7 @@
+@@ -5979,6 +5999,7 @@
case QEMU_OPTION_initrd:
initrd_filename = optarg;
break;
@@ -310,7 +310,7 @@ Index: ioemu/vl.c
case QEMU_OPTION_hda:
case QEMU_OPTION_hdb:
case QEMU_OPTION_hdc:
-@@ -5979,6 +6000,7 @@
+@@ -5991,6 +6012,7 @@
cdrom_index = -1;
}
break;
@@ -318,7 +318,7 @@ Index: ioemu/vl.c
case QEMU_OPTION_snapshot:
snapshot = 1;
break;
-@@ -6031,11 +6053,13 @@
+@@ -6043,11 +6065,13 @@
case QEMU_OPTION_append:
kernel_cmdline = optarg;
break;
@@ -332,7 +332,7 @@ Index: ioemu/vl.c
case QEMU_OPTION_boot:
boot_device = optarg[0];
if (boot_device != 'a' &&
-@@ -6290,12 +6314,18 @@
+@@ -6305,12 +6329,18 @@
}
}
@@ -351,7 +351,7 @@ Index: ioemu/vl.c
if (!linux_boot &&
hd_filename[0] == '\0' &&
(cdrom_index >= 0 && hd_filename[cdrom_index] == '\0') &&
-@@ -6309,6 +6339,7 @@
+@@ -6324,6 +6354,7 @@
else
boot_device = 'd';
}
@@ -359,7 +359,7 @@ Index: ioemu/vl.c
setvbuf(stdout, NULL, _IOLBF, 0);
-@@ -6441,6 +6472,7 @@
+@@ -6456,6 +6487,7 @@
#endif /* !CONFIG_DM */
@@ -367,7 +367,7 @@ Index: ioemu/vl.c
/* we always create the cdrom drive, even if no disk is there */
bdrv_init();
if (cdrom_index >= 0) {
-@@ -6467,6 +6499,7 @@
+@@ -6482,6 +6514,7 @@
}
}
}
@@ -375,7 +375,7 @@ Index: ioemu/vl.c
/* we always create at least one floppy disk */
fd_table[0] = bdrv_new("fda");
-@@ -6545,6 +6578,8 @@
+@@ -6560,6 +6593,8 @@
}
}
@@ -386,8 +386,8 @@ Index: ioemu/vl.c
kernel_filename, kernel_cmdline, initrd_filename,
Index: ioemu/monitor.c
===================================================================
---- ioemu.orig/monitor.c 2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/monitor.c 2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/monitor.c 2006-10-24 14:31:36.000000000 +0100
++++ ioemu/monitor.c 2006-10-24 14:33:28.000000000 +0100
@@ -24,6 +24,7 @@
#include "vl.h"
#include "disas.h"
@@ -416,8 +416,8 @@ Index: ioemu/monitor.c
int i;
Index: ioemu/block.c
===================================================================
---- ioemu.orig/block.c 2006-09-21 19:33:25.000000000 +0100
-+++ ioemu/block.c 2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/block.c 2006-10-24 14:31:36.000000000 +0100
++++ ioemu/block.c 2006-10-24 14:33:28.000000000 +0100
@@ -758,6 +758,7 @@
static void raw_close(BlockDriverState *bs)
{
@@ -428,9 +428,9 @@ Index: ioemu/block.c
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:31.000000000 +0100
-@@ -1189,6 +1189,8 @@
+--- ioemu.orig/vl.h 2006-10-24 14:33:24.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:28.000000000 +0100
+@@ -1191,6 +1191,8 @@
void term_print_help(void);
void monitor_readline(const char *prompt, int is_password,
char *buf, int buf_size);
@@ -439,7 +439,7 @@ Index: ioemu/vl.h
/* readline.c */
typedef void ReadLineFunc(void *opaque, const char *str);
-@@ -1201,6 +1203,13 @@
+@@ -1203,6 +1205,13 @@
void readline_start(const char *prompt, int is_password,
ReadLineFunc *readline_func, void *opaque);
@@ -455,8 +455,8 @@ Index: ioemu/vl.h
extern char domain_name[];
Index: ioemu/hw/ide.c
===================================================================
---- ioemu.orig/hw/ide.c 2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/hw/ide.c 2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/hw/ide.c 2006-10-24 14:31:36.000000000 +0100
++++ ioemu/hw/ide.c 2006-10-24 14:33:28.000000000 +0100
@@ -1158,6 +1158,7 @@
} else {
ide_atapi_cmd_error(s, SENSE_NOT_READY,
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/xenstore-write-vnc-port
--- a/tools/ioemu/patches/xenstore-write-vnc-port Tue Oct 24 14:47:41
2006 +0100
+++ b/tools/ioemu/patches/xenstore-write-vnc-port Tue Oct 24 14:48:06
2006 +0100
@@ -1,7 +1,7 @@ Index: ioemu/xenstore.c
Index: ioemu/xenstore.c
===================================================================
---- ioemu.orig/xenstore.c 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/xenstore.c 2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/xenstore.c 2006-10-24 14:33:47.000000000 +0100
++++ ioemu/xenstore.c 2006-10-24 14:33:47.000000000 +0100
@@ -185,3 +185,31 @@
free(image);
free(vec);
@@ -36,10 +36,10 @@ Index: ioemu/xenstore.c
+}
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
-@@ -6535,6 +6535,7 @@
- vnc_display = vnc_display_init(ds, vnc_display, vncunused);
+--- ioemu.orig/vl.c 2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
+@@ -6550,6 +6550,7 @@
+ vnc_display = vnc_display_init(ds, vnc_display, vncunused,
&vnclisten_addr);
if (vncviewer)
vnc_start_viewer(vnc_display);
+ xenstore_write_vncport(vnc_display);
@@ -48,9 +48,9 @@ Index: ioemu/vl.c
sdl_display_init(ds, full_screen);
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:32.000000000 +0100
-@@ -1208,6 +1208,7 @@
+--- ioemu.orig/vl.h 2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:47.000000000 +0100
+@@ -1210,6 +1210,7 @@
int xenstore_fd(void);
void xenstore_process_event(void *opaque);
void xenstore_check_new_media_present(int timeout);
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/hypervisor-rtc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/hypervisor-rtc Tue Oct 24 14:48:06 2006 +0100
@@ -0,0 +1,143 @@
+# HG changeset patch
+# User kfraser@xxxxxxxxxxxxxxxxxxxxx
+# Node ID 71e2a165aa7f81602c569430b18ba1ea705f0b70
+# Parent da66691687dfd90c55420cfdf27f55d18cca7810
+[HVM] Move RTC emulation into the hypervisor.
+Signed-off-by: Xiaowei Yang <xiaowei.yang@xxxxxxxxx>
+
+--- ioemu/Makefile.target Wed Oct 18 18:13:57 2006 +0100
++++ ioemu/Makefile.target Wed Oct 18 18:35:21 2006 +0100
+@@ -294,7 +294,11 @@ endif
+ endif
+
+ # qemu-dm objects
++ifeq ($(ARCH),ia64)
+ LIBOBJS=helper2.o exec-dm.o i8259-dm.o
++else
++LIBOBJS=helper2.o exec-dm.o i8259-dm.o rtc-dm.o
++endif
+
+ all: $(PROGS)
+
+@@ -354,7 +358,11 @@ ifeq ($(TARGET_BASE_ARCH), i386)
+ ifeq ($(TARGET_BASE_ARCH), i386)
+ # Hardware support
+ VL_OBJS+= ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
++ifeq ($(ARCH),ia64)
+ VL_OBJS+= fdc.o mc146818rtc.o serial.o pc.o
++else
++VL_OBJS+= fdc.o serial.o pc.o
++endif
+ VL_OBJS+= cirrus_vga.o mixeng.o parallel.o acpi.o piix_pci.o
+ VL_OBJS+= usb-uhci.o
+ VL_OBJS+= piix4acpi.o
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ ioemu/target-i386-dm/rtc-dm.c Wed Oct 18 18:35:21 2006 +0100
+@@ -0,0 +1,107 @@
++/*
++ * QEMU MC146818 RTC emulation
++ *
++ * Copyright (c) 2003-2004 Fabrice Bellard
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
copy
++ * of this software and associated documentation files (the "Software"), to
deal
++ * in the Software without restriction, including without limitation the
rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++
++#include "vl.h"
++
++//#define DEBUG_CMOS
++
++struct RTCState {
++ uint8_t cmos_data[128];
++ uint8_t cmos_index;
++};
++
++void rtc_set_memory(RTCState *s, int addr, int val)
++{
++ if (addr >= 0 && addr <= 127)
++ s->cmos_data[addr] = val;
++}
++
++static void cmos_ioport_write(void *opaque, uint32_t addr, uint32_t data)
++{
++ RTCState *s = opaque;
++
++ if ((addr & 1) == 0) {
++ s->cmos_index = data & 0x7f;
++ } else {
++#ifdef DEBUG_CMOS
++ printf("cmos: write index=0x%02x val=0x%02x\n",
++ s->cmos_index, data);
++#endif
++ s->cmos_data[s->cmos_index] = data;
++ }
++}
++
++static uint32_t cmos_ioport_read(void *opaque, uint32_t addr)
++{
++ RTCState *s = opaque;
++ int ret;
++ if ((addr & 1) == 0) {
++ return 0xff;
++ } else {
++ ret = s->cmos_data[s->cmos_index];
++#ifdef DEBUG_CMOS
++ printf("cmos: read index=0x%02x val=0x%02x\n",
++ s->cmos_index, ret);
++#endif
++ return ret;
++ }
++}
++
++static void rtc_save(QEMUFile *f, void *opaque)
++{
++ RTCState *s = opaque;
++
++ qemu_put_buffer(f, s->cmos_data, 128);
++ qemu_put_8s(f, &s->cmos_index);
++}
++
++static int rtc_load(QEMUFile *f, void *opaque, int version_id)
++{
++ RTCState *s = opaque;
++
++ if (version_id != 1)
++ return -EINVAL;
++
++ qemu_get_buffer(f, s->cmos_data, 128);
++ qemu_get_8s(f, &s->cmos_index);
++
++ return 0;
++}
++
++RTCState *rtc_init(int base, int irq)
++{
++ RTCState *s;
++
++ s = qemu_mallocz(sizeof(RTCState));
++ if (!s)
++ return NULL;
++
++ register_ioport_write(base, 2, 1, cmos_ioport_write, s);
++ register_ioport_read(base, 2, 1, cmos_ioport_read, s);
++
++ register_savevm("mc146818rtc", base, 1, rtc_save, rtc_load, s);
++ return s;
++}
++
++void rtc_set_date(RTCState *s, const struct tm *tm) {}
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/ide-cd-dma
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/ide-cd-dma Tue Oct 24 14:48:06 2006 +0100
@@ -0,0 +1,21 @@
+# HG changeset patch
+# User kfraser@xxxxxxxxxxxxxxxxxxxxx
+# Node ID 1e8ba8d2117548d4f13b7b438d1e992b1815f580
+# Parent f247e0b52dda257c0000c9da5a0cdff507b3ced8
+[HVM] Enable DMA mode for CD-ROM IDE ATAPI interface.
+Signed-off-by: Winston Wang <winston.l.wang@xxxxxxxxx
+
+--- ioemu/hw/ide.c Wed Oct 18 18:37:18 2006 +0100
++++ ioemu/hw/ide.c Wed Oct 18 18:41:47 2006 +0100
+@@ -557,9 +557,9 @@ static void ide_atapi_identify(IDEState
+ padstr((uint8_t *)(p + 23), QEMU_VERSION, 8); /* firmware version */
+ padstr((uint8_t *)(p + 27), "QEMU CD-ROM", 40); /* model */
+ put_le16(p + 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
+- put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */
++ put_le16(p + 49, (1 << 11) | (1 << 9) | (1 << 8)); /* DMA and LBA
supported */
+ put_le16(p + 53, 3); /* words 64-70, 54-58 valid */
+- put_le16(p + 63, 0x103); /* DMA modes XXX: may be incorrect */
++ put_le16(p + 63, 0x07); /* mdma0-2 supported */
+ put_le16(p + 64, 1); /* PIO modes */
+ put_le16(p + 65, 0xb4); /* minimum DMA multiword tx cycle time */
+ put_le16(p + 66, 0xb4); /* recommended DMA multiword tx cycle time */
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/serial-port-rate-limit
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/serial-port-rate-limit Tue Oct 24 14:48:06
2006 +0100
@@ -0,0 +1,116 @@
+# HG changeset patch
+# User Steven Smith <ssmith@xxxxxxxxxxxxx>
+# Node ID 1d3f52eb256e3522edc12daca91039b319dbbbe5
+# Parent b7b653e36d20811831f26bb951ea66dca5854b17
+[HVM] Rate limit guest accesses to the qemu virtual serial port. This stops
+grub's boot menu from hammering dom0.
+
+Signed-off-by: Steven Smith <sos22@xxxxxxxxx>
+
+--- ioemu/hw/serial.c Mon Sep 25 16:31:02 2006 +0100
++++ ioemu/hw/serial.c Mon Sep 25 17:27:18 2006 +0100
+@@ -22,6 +22,9 @@
+ * THE SOFTWARE.
+ */
+ #include "vl.h"
++#include <sys/time.h>
++#include <time.h>
++#include <assert.h>
+
+ //#define DEBUG_SERIAL
+
+@@ -138,6 +141,67 @@ static void serial_update_parameters(Ser
+ printf("speed=%d parity=%c data=%d stop=%d\n",
+ speed, parity, data_bits, stop_bits);
+ #endif
++}
++
++/* Rate limit serial requests so that e.g. grub on a serial console
++ doesn't kill dom0. Simple token bucket. If we get some actual
++ data from the user, instantly refil the bucket. */
++
++/* How long it takes to generate a token, in microseconds. */
++#define TOKEN_PERIOD 1000
++/* Maximum and initial size of token bucket */
++#define TOKENS_MAX 100000
++
++static int tokens_avail;
++
++static void serial_get_token(void)
++{
++ static struct timeval last_refil_time;
++ static int started;
++
++ assert(tokens_avail >= 0);
++ if (!tokens_avail) {
++ struct timeval delta, now;
++ int generated;
++
++ if (!started) {
++ gettimeofday(&last_refil_time, NULL);
++ tokens_avail = TOKENS_MAX;
++ started = 1;
++ return;
++ }
++ retry:
++ gettimeofday(&now, NULL);
++ delta.tv_sec = now.tv_sec - last_refil_time.tv_sec;
++ delta.tv_usec = now.tv_usec - last_refil_time.tv_usec;
++ if (delta.tv_usec < 0) {
++ delta.tv_usec += 1000000;
++ delta.tv_sec--;
++ }
++ assert(delta.tv_usec >= 0 && delta.tv_sec >= 0);
++ if (delta.tv_usec < TOKEN_PERIOD) {
++ struct timespec ts;
++ /* Wait until at least one token is available. */
++ ts.tv_sec = TOKEN_PERIOD / 1000000;
++ ts.tv_nsec = (TOKEN_PERIOD % 1000000) * 1000;
++ while (nanosleep(&ts, &ts) < 0 && errno == EINTR)
++ ;
++ goto retry;
++ }
++ generated = (delta.tv_sec * 1000000) / TOKEN_PERIOD;
++ generated +=
++ ((delta.tv_sec * 1000000) % TOKEN_PERIOD + delta.tv_usec) /
TOKEN_PERIOD;
++ assert(generated > 0);
++
++ last_refil_time.tv_usec += (generated * TOKEN_PERIOD) % 1000000;
++ last_refil_time.tv_sec += last_refil_time.tv_usec / 1000000;
++ last_refil_time.tv_usec %= 1000000;
++ last_refil_time.tv_sec += (generated * TOKEN_PERIOD) / 1000000;
++ if (generated > TOKENS_MAX)
++ generated = TOKENS_MAX;
++ tokens_avail = generated;
++ }
++ tokens_avail--;
+ }
+
+ static void serial_ioport_write(void *opaque, uint32_t addr, uint32_t val)
+@@ -245,9 +309,11 @@ static uint32_t serial_ioport_read(void
+ ret = s->mcr;
+ break;
+ case 5:
++ serial_get_token();
+ ret = s->lsr;
+ break;
+ case 6:
++ serial_get_token();
+ if (s->mcr & UART_MCR_LOOP) {
+ /* in loopback, the modem output pins are connected to the
+ inputs */
+@@ -296,12 +362,14 @@ static void serial_receive1(void *opaque
+ static void serial_receive1(void *opaque, const uint8_t *buf, int size)
+ {
+ SerialState *s = opaque;
++ tokens_avail = TOKENS_MAX;
+ serial_receive_byte(s, buf[0]);
+ }
+
+ static void serial_event(void *opaque, int event)
+ {
+ SerialState *s = opaque;
++ tokens_avail = TOKENS_MAX;
+ if (event == CHR_EVENT_BREAK)
+ serial_receive_break(s);
+ }
diff -r 2c29a2e42937 -r 55ff34dceb0b
tools/ioemu/patches/vnc-listen-specific-interface
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/vnc-listen-specific-interface Tue Oct 24 14:48:06
2006 +0100
@@ -0,0 +1,177 @@
+# HG changeset patch
+# User Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
+# Node ID a95dfbc8dca8ecddcb9be51d78f446b0fa461892
+# Parent 8959876abbe319963974fab21dda7185e0ad84e6
+[HVM/vncserver] Implement a 'vnclisten' option to limit the interface
+that the VNC server from qemu listens on.
+
+Defaults to only listen on 127.0.0.1
+
+The old behaviour (listen on all interfaces) can be restored, by
+- changing the system-wide default in /etc/xen/xend-config.sxp by adding:
+(vnc-listen '0.0.0.0')
+- changing individual domain config files by adding:
+vnclisten="0.0.0.0"
+
+Also allows specifying the hostname associated with an interface to limit
+to that interface.
+
+Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx>
+
+Index: ioemu/vl.c
+===================================================================
+--- ioemu.orig/vl.c 2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:34:28.000000000 +0100
+@@ -122,6 +122,7 @@
+ int nographic;
+ int vncviewer;
+ int vncunused;
++struct sockaddr_in vnclisten_addr;
+ const char* keyboard_layout = NULL;
+ int64_t ticks_per_sec;
+ int boot_device = 'c';
+@@ -2777,10 +2778,22 @@
+ return -1;
+ }
+
++int parse_host(struct sockaddr_in *saddr, const char *buf)
++{
++ struct hostent *he;
++
++ if ((he = gethostbyname(buf)) != NULL) {
++ saddr->sin_addr = *(struct in_addr *)he->h_addr;
++ } else {
++ if (!inet_aton(buf, &saddr->sin_addr))
++ return -1;
++ }
++ return 0;
++}
++
+ int parse_host_port(struct sockaddr_in *saddr, const char *str)
+ {
+ char buf[512];
+- struct hostent *he;
+ const char *p, *r;
+ int port;
+
+@@ -2791,14 +2804,8 @@
+ if (buf[0] == '\0') {
+ saddr->sin_addr.s_addr = 0;
+ } else {
+- if (isdigit(buf[0])) {
+- if (!inet_aton(buf, &saddr->sin_addr))
+- return -1;
+- } else {
+- if ((he = gethostbyname(buf)) == NULL)
+- return - 1;
+- saddr->sin_addr = *(struct in_addr *)he->h_addr;
+- }
++ if (parse_host(saddr, buf) == -1)
++ return -1;
+ }
+ port = strtol(p, (char **)&r, 0);
+ if (r == p)
+@@ -5344,6 +5351,7 @@
+ "-vnc display start a VNC server on display\n"
+ "-vncviewer start a vncviewer process for this domain\n"
+ "-vncunused bind the VNC server to an unused port\n"
++ "-vnclisten bind the VNC server to this address\n"
+ "-timeoffset time offset (in seconds) from local time\n"
+ "-acpi disable or enable ACPI of HVM domain \n"
+ "\n"
+@@ -5434,6 +5442,7 @@
+ QEMU_OPTION_acpi,
+ QEMU_OPTION_vncviewer,
+ QEMU_OPTION_vncunused,
++ QEMU_OPTION_vnclisten,
+ };
+
+ typedef struct QEMUOption {
+@@ -5510,6 +5519,7 @@
+ { "vnc", HAS_ARG, QEMU_OPTION_vnc },
+ { "vncviewer", 0, QEMU_OPTION_vncviewer },
+ { "vncunused", 0, QEMU_OPTION_vncunused },
++ { "vnclisten", HAS_ARG, QEMU_OPTION_vnclisten },
+
+ /* temporary options */
+ { "usb", 0, QEMU_OPTION_usb },
+@@ -5905,6 +5915,8 @@
+
+ nb_nics = 0;
+ /* default mac address of the first network interface */
++
++ memset(&vnclisten_addr.sin_addr, 0, sizeof(vnclisten_addr.sin_addr));
+
+ /* init debug */
+ sprintf(qemu_dm_logfilename, "/var/log/xen/qemu-dm.%d.log", getpid());
+@@ -6280,6 +6292,9 @@
+ if (vnc_display == -1)
+ vnc_display = 0;
+ break;
++ case QEMU_OPTION_vnclisten:
++ parse_host(&vnclisten_addr, optarg);
++ break;
+ }
+ }
+ }
+@@ -6493,7 +6508,7 @@
+ if (nographic) {
+ dumb_display_init(ds);
+ } else if (vnc_display != -1) {
+- vnc_display = vnc_display_init(ds, vnc_display, vncunused);
++ vnc_display = vnc_display_init(ds, vnc_display, vncunused,
&vnclisten_addr);
+ if (vncviewer)
+ vnc_start_viewer(vnc_display);
+ } else {
+Index: ioemu/vl.h
+===================================================================
+--- ioemu.orig/vl.h 2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:34:22.000000000 +0100
+@@ -37,6 +37,8 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sys/stat.h>
++#include <sys/socket.h>
++#include <sys/types.h>
+ #include "xenctrl.h"
+ #include "xs.h"
+ #include <xen/hvm/e820.h>
+@@ -785,7 +787,7 @@
+ void cocoa_display_init(DisplayState *ds, int full_screen);
+
+ /* vnc.c */
+-int vnc_display_init(DisplayState *ds, int display, int find_unused);
++int vnc_display_init(DisplayState *ds, int display, int find_unused, struct
sockaddr_in *addr);
+ int vnc_start_viewer(int port);
+
+ /* ide.c */
+Index: ioemu/vnc.c
+===================================================================
+--- ioemu.orig/vnc.c 2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vnc.c 2006-10-24 14:34:22.000000000 +0100
+@@ -1195,9 +1195,8 @@
+ }
+ }
+
+-int vnc_display_init(DisplayState *ds, int display, int find_unused)
++int vnc_display_init(DisplayState *ds, int display, int find_unused, struct
sockaddr_in *addr)
+ {
+- struct sockaddr_in addr;
+ int reuse_addr, ret;
+ VncState *vs;
+
+@@ -1235,11 +1234,10 @@
+ }
+
+ retry:
+- addr.sin_family = AF_INET;
+- addr.sin_port = htons(5900 + display);
+- memset(&addr.sin_addr, 0, sizeof(addr.sin_addr));
++ addr->sin_family = AF_INET;
++ addr->sin_port = htons(5900 + display);
+
+- if (bind(vs->lsock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
++ if (bind(vs->lsock, (struct sockaddr *)addr, sizeof(struct sockaddr_in))
== -1) {
+ if (find_unused && errno == EADDRINUSE) {
+ display++;
+ goto retry;
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/vnc-password
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/vnc-password Tue Oct 24 14:48:06 2006 +0100
@@ -0,0 +1,785 @@
+# HG changeset patch
+# User kfraser@xxxxxxxxxxxxxxxxxxxxx
+# Node ID 02506a7443155611d6bbf03e49fbf193e96d24db
+# Parent 328606e0705f0341bebda14cdd17962e463868e8
+[HVM] Implement password authentication of VNC connections.
+
+The specification is as mentioned at
+http://lists.xensource.com/archives/html/xen-devel/2006-09/msg00666.html
+(However, password came to describe plain text)
+
+The difference is follows.
+- protocol_authtype() without the necessity was deleted.
+- The check on the protocol version was added.
+- And, some small modification.
+
+Signed-off-by: Masami Watanabe <masami.watanabe@xxxxxxxxxxxxxx>
+
+--- ioemu/Makefile.target Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/Makefile.target Fri Oct 20 09:50:09 2006 +0100
+@@ -406,6 +406,7 @@ VL_OBJS+=sdl.o
+ VL_OBJS+=sdl.o
+ endif
+ VL_OBJS+=vnc.o
++VL_OBJS+=d3des.o
+ ifdef CONFIG_COCOA
+ VL_OBJS+=cocoa.o
+ COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework IOKit
+@@ -464,6 +465,9 @@ sdl.o: sdl.c keymaps.c sdl_keysym.h
+ $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
+
+ vnc.o: vnc.c keymaps.c sdl_keysym.h vnchextile.h
++ $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
++
++d3des.o: d3des.c d3des.h
+ $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
+
+ sdlaudio.o: sdlaudio.c
+--- ioemu/vl.c Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/vl.c Fri Oct 20 09:50:09 2006 +0100
+@@ -170,6 +170,9 @@ time_t timeoffset = 0;
+
+ char domain_name[1024] = { 'H','V', 'M', 'X', 'E', 'N', '-'};
+ extern int domid;
++
++char vncpasswd[64];
++unsigned char challenge[AUTHCHALLENGESIZE];
+
+ /***********************************************************/
+ /* x86 ISA bus support */
+@@ -5911,6 +5914,7 @@ int main(int argc, char **argv)
+ vncunused = 0;
+ kernel_filename = NULL;
+ kernel_cmdline = "";
++ *vncpasswd = '\0';
+ #ifndef CONFIG_DM
+ #ifdef TARGET_PPC
+ cdrom_index = 1;
+@@ -6559,6 +6563,10 @@ int main(int argc, char **argv)
+
+ init_ioports();
+
++ /* read vncpasswd from xenstore */
++ if (0 > xenstore_read_vncpasswd(domid))
++ exit(1);
++
+ /* terminal init */
+ if (nographic) {
+ dumb_display_init(ds);
+--- ioemu/vl.h Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/vl.h Fri Oct 20 09:50:09 2006 +0100
+@@ -1211,6 +1211,7 @@ void xenstore_process_event(void *opaque
+ void xenstore_process_event(void *opaque);
+ void xenstore_check_new_media_present(int timeout);
+ void xenstore_write_vncport(int vnc_display);
++int xenstore_read_vncpasswd(int domid);
+
+ /* xen_platform.c */
+ void pci_xen_platform_init(PCIBus *bus);
+@@ -1222,4 +1223,7 @@ extern char domain_name[];
+
+ void destroy_hvm_domain(void);
+
++/* VNC Authentication */
++#define AUTHCHALLENGESIZE 16
++
+ #endif /* VL_H */
+--- ioemu/vnc.c Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/vnc.c Fri Oct 20 09:50:09 2006 +0100
+@@ -44,6 +44,7 @@
+
+ #include "vnc_keysym.h"
+ #include "keymaps.c"
++#include "d3des.h"
+
+ #define XK_MISCELLANY
+ #define XK_LATIN1
+@@ -137,6 +138,9 @@ static void vnc_update_client(void *opaq
+ static void vnc_update_client(void *opaque);
+ static void vnc_client_read(void *opaque);
+ static void framebuffer_set_updated(VncState *vs, int x, int y, int w, int h);
++static int make_challenge(char *random, int size);
++static void set_seed(unsigned int *seedp);
++static void get_random(int len, unsigned char *buf);
+
+ #if 0
+ static inline void vnc_set_bit(uint32_t *d, int k)
+@@ -1208,23 +1212,92 @@ static int protocol_client_init(VncState
+ return 0;
+ }
+
++static int protocol_response(VncState *vs, char *client_response, size_t len)
++{
++ extern char vncpasswd[64];
++ extern unsigned char challenge[AUTHCHALLENGESIZE];
++ unsigned char cryptchallenge[AUTHCHALLENGESIZE];
++ unsigned char key[8];
++ int passwdlen, i, j;
++
++ memcpy(cryptchallenge, challenge, AUTHCHALLENGESIZE);
++
++ /* Calculate the sent challenge */
++ passwdlen = strlen(vncpasswd);
++ for (i=0; i<8; i++)
++ key[i] = i<passwdlen ? vncpasswd[i] : 0;
++ deskey(key, EN0);
++ for (j = 0; j < AUTHCHALLENGESIZE; j += 8)
++ des(cryptchallenge+j, cryptchallenge+j);
++
++ /* Check the actual response */
++ if (memcmp(cryptchallenge, client_response, AUTHCHALLENGESIZE) != 0) {
++ /* password error */
++ vnc_write_u32(vs, 1);
++ vnc_write_u32(vs, 22);
++ vnc_write(vs, "Authentication failure", 22);
++ vnc_flush(vs);
++ fprintf(stderr, "VNC Password error.\n");
++ vnc_client_error(vs);
++ return 0;
++ }
++
++ vnc_write_u32(vs, 0);
++ vnc_flush(vs);
++
++ vnc_read_when(vs, protocol_client_init, 1);
++
++ return 0;
++}
++
+ static int protocol_version(VncState *vs, char *version, size_t len)
+ {
++ extern char vncpasswd[64];
++ extern unsigned char challenge[AUTHCHALLENGESIZE];
+ char local[13];
+- int maj, min;
++ int support, maj, min;
+
+ memcpy(local, version, 12);
+ local[12] = 0;
+
++ /* protocol version check */
+ if (sscanf(local, "RFB %03d.%03d\n", &maj, &min) != 2) {
++ fprintf(stderr, "Protocol version error.\n");
+ vnc_client_error(vs);
+ return 0;
+ }
+
+- vnc_write_u32(vs, 1); /* None */
+- vnc_flush(vs);
+-
+- vnc_read_when(vs, protocol_client_init, 1);
++
++ support = 0;
++ if (maj = 3) {
++ if (min == 3 || min ==4) {
++ support = 1;
++ }
++ }
++
++ if (! support) {
++ fprintf(stderr, "Client uses unsupported protocol version %d.%d.\n",
++ maj, min);
++ vnc_client_error(vs);
++ return 0;
++ }
++
++ if (*vncpasswd == '\0') {
++ /* AuthType is None */
++ vnc_write_u32(vs, 1);
++ vnc_flush(vs);
++ vnc_read_when(vs, protocol_client_init, 1);
++ } else {
++ /* AuthType is VncAuth */
++ vnc_write_u32(vs, 2);
++
++ /* Challenge-Responce authentication */
++ /* Send Challenge */
++ make_challenge(challenge, AUTHCHALLENGESIZE);
++ vnc_write(vs, challenge, AUTHCHALLENGESIZE);
++ vnc_flush(vs);
++ vnc_read_when(vs, protocol_response, AUTHCHALLENGESIZE);
++ }
+
+ return 0;
+ }
+@@ -1342,3 +1415,32 @@ int vnc_start_viewer(int port)
+ return pid;
+ }
+ }
++
++unsigned int seed;
++
++static int make_challenge(char *random, int size)
++{
++
++ set_seed(&seed);
++ get_random(size, random);
++
++ return 0;
++}
++
++static void set_seed(unsigned int *seedp)
++{
++ *seedp += (unsigned int)(time(NULL)+getpid()+getpid()*987654+rand());
++ srand(*seedp);
++
++ return;
++}
++
++static void get_random(int len, unsigned char *buf)
++{
++ int i;
++
++ for (i=0; i<len; i++)
++ buf[i] = (int) (256.0*rand()/(RAND_MAX+1.0));
++
++ return;
++}
+--- ioemu/xenstore.c Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/xenstore.c Fri Oct 20 09:50:09 2006 +0100
+@@ -213,3 +213,54 @@ void xenstore_write_vncport(int display)
+ free(portstr);
+ free(buf);
+ }
++
++int xenstore_read_vncpasswd(int domid)
++{
++ extern char vncpasswd[64];
++ char *buf = NULL, *path, *uuid = NULL, *passwd = NULL;
++ unsigned int i, len, rc = 0;
++
++ if (xsh == NULL) {
++ return -1;
++ }
++
++ path = xs_get_domain_path(xsh, domid);
++ if (path == NULL) {
++ fprintf(logfile, "xs_get_domain_path() error. domid %d.\n", domid);
++ return -1;
++ }
++
++ pasprintf(&buf, "%s/vm", path);
++ uuid = xs_read(xsh, XBT_NULL, buf, &len);
++ if (uuid == NULL) {
++ fprintf(logfile, "xs_read(): uuid get error. %s.\n", buf);
++ free(path);
++ return -1;
++ }
++
++ pasprintf(&buf, "%s/vncpasswd", uuid);
++ passwd = xs_read(xsh, XBT_NULL, buf, &len);
++ if (passwd == NULL) {
++ fprintf(logfile, "xs_read(): vncpasswd get error. %s.\n", buf);
++ free(uuid);
++ free(path);
++ return rc;
++ }
++
++ for (i=0; i<len && i<63; i++) {
++ vncpasswd[i] = passwd[i];
++ passwd[i] = '\0';
++ }
++ vncpasswd[len] = '\0';
++ pasprintf(&buf, "%s/vncpasswd", uuid);
++ if (xs_write(xsh, XBT_NULL, buf, passwd, len) == 0) {
++ fprintf(logfile, "xs_write() vncpasswd failed.\n");
++ rc = -1;
++ }
++
++ free(passwd);
++ free(uuid);
++ free(path);
++
++ return rc;
++}
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ ioemu/d3des.c Fri Oct 20 09:50:09 2006 +0100
+@@ -0,0 +1,434 @@
++/*
++ * This is D3DES (V5.09) by Richard Outerbridge with the double and
++ * triple-length support removed for use in VNC. Also the bytebit[] array
++ * has been reversed so that the most significant bit in each byte of the
++ * key is ignored, not the least significant.
++ *
++ * These changes are:
++ * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
++ *
++ * This software is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++/* D3DES (V5.09) -
++ *
++ * A portable, public domain, version of the Data Encryption Standard.
++ *
++ * Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge.
++ * Thanks to: Dan Hoey for his excellent Initial and Inverse permutation
++ * code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis
++ * Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau,
++ * for humouring me on.
++ *
++ * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge.
++ * (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.
++ */
++
++#include "d3des.h"
++
++static void scrunch(unsigned char *, unsigned long *);
++static void unscrun(unsigned long *, unsigned char *);
++static void desfunc(unsigned long *, unsigned long *);
++static void cookey(unsigned long *);
++
++static unsigned long KnL[32] = { 0L };
++
++static unsigned short bytebit[8] = {
++ 01, 02, 04, 010, 020, 040, 0100, 0200 };
++
++static unsigned long bigbyte[24] = {
++ 0x800000L, 0x400000L, 0x200000L, 0x100000L,
++ 0x80000L, 0x40000L, 0x20000L, 0x10000L,
++ 0x8000L, 0x4000L, 0x2000L, 0x1000L,
++ 0x800L, 0x400L, 0x200L, 0x100L,
++ 0x80L, 0x40L, 0x20L, 0x10L,
++ 0x8L, 0x4L, 0x2L, 0x1L };
++
++/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */
++
++static unsigned char pc1[56] = {
++ 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17,
++ 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35,
++ 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21,
++ 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 };
++
++static unsigned char totrot[16] = {
++ 1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 };
++
++static unsigned char pc2[48] = {
++ 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9,
++ 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1,
++ 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
++ 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 };
++
++void deskey(key, edf) /* Thanks to James Gillogly & Phil Karn! */
++unsigned char *key;
++int edf;
++{
++ register int i, j, l, m, n;
++ unsigned char pc1m[56], pcr[56];
++ unsigned long kn[32];
++
++ for ( j = 0; j < 56; j++ ) {
++ l = pc1[j];
++ m = l & 07;
++ pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0;
++ }
++ for( i = 0; i < 16; i++ ) {
++ if( edf == DE1 ) m = (15 - i) << 1;
++ else m = i << 1;
++ n = m + 1;
++ kn[m] = kn[n] = 0L;
++ for( j = 0; j < 28; j++ ) {
++ l = j + totrot[i];
++ if( l < 28 ) pcr[j] = pc1m[l];
++ else pcr[j] = pc1m[l - 28];
++ }
++ for( j = 28; j < 56; j++ ) {
++ l = j + totrot[i];
++ if( l < 56 ) pcr[j] = pc1m[l];
++ else pcr[j] = pc1m[l - 28];
++ }
++ for( j = 0; j < 24; j++ ) {
++ if( pcr[pc2[j]] ) kn[m] |= bigbyte[j];
++ if( pcr[pc2[j+24]] ) kn[n] |= bigbyte[j];
++ }
++ }
++ cookey(kn);
++ return;
++ }
++
++static void cookey(raw1)
++register unsigned long *raw1;
++{
++ register unsigned long *cook, *raw0;
++ unsigned long dough[32];
++ register int i;
++
++ cook = dough;
++ for( i = 0; i < 16; i++, raw1++ ) {
++ raw0 = raw1++;
++ *cook = (*raw0 & 0x00fc0000L) << 6;
++ *cook |= (*raw0 & 0x00000fc0L) << 10;
++ *cook |= (*raw1 & 0x00fc0000L) >> 10;
++ *cook++ |= (*raw1 & 0x00000fc0L) >> 6;
++ *cook = (*raw0 & 0x0003f000L) << 12;
++ *cook |= (*raw0 & 0x0000003fL) << 16;
++ *cook |= (*raw1 & 0x0003f000L) >> 4;
++ *cook++ |= (*raw1 & 0x0000003fL);
++ }
++ usekey(dough);
++ return;
++ }
++
++void cpkey(into)
++register unsigned long *into;
++{
++ register unsigned long *from, *endp;
++
++ from = KnL, endp = &KnL[32];
++ while( from < endp ) *into++ = *from++;
++ return;
++ }
++
++void usekey(from)
++register unsigned long *from;
++{
++ register unsigned long *to, *endp;
++
++ to = KnL, endp = &KnL[32];
++ while( to < endp ) *to++ = *from++;
++ return;
++ }
++
++void des(inblock, outblock)
++unsigned char *inblock, *outblock;
++{
++ unsigned long work[2];
++
++ scrunch(inblock, work);
++ desfunc(work, KnL);
++ unscrun(work, outblock);
++ return;
++ }
++
++static void scrunch(outof, into)
++register unsigned char *outof;
++register unsigned long *into;
++{
++ *into = (*outof++ & 0xffL) << 24;
++ *into |= (*outof++ & 0xffL) << 16;
++ *into |= (*outof++ & 0xffL) << 8;
++ *into++ |= (*outof++ & 0xffL);
++ *into = (*outof++ & 0xffL) << 24;
++ *into |= (*outof++ & 0xffL) << 16;
++ *into |= (*outof++ & 0xffL) << 8;
++ *into |= (*outof & 0xffL);
++ return;
++ }
++
++static void unscrun(outof, into)
++register unsigned long *outof;
++register unsigned char *into;
++{
++ *into++ = (unsigned char)((*outof >> 24) & 0xffL);
++ *into++ = (unsigned char)((*outof >> 16) & 0xffL);
++ *into++ = (unsigned char)((*outof >> 8) & 0xffL);
++ *into++ = (unsigned char)(*outof++ & 0xffL);
++ *into++ = (unsigned char)((*outof >> 24) & 0xffL);
++ *into++ = (unsigned char)((*outof >> 16) & 0xffL);
++ *into++ = (unsigned char)((*outof >> 8) & 0xffL);
++ *into = (unsigned char)(*outof & 0xffL);
++ return;
++ }
++
++static unsigned long SP1[64] = {
++ 0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L,
++ 0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L,
++ 0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L,
++ 0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L,
++ 0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L,
++ 0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L,
++ 0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L,
++ 0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L,
++ 0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L,
++ 0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L,
++ 0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L,
++ 0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L,
++ 0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L,
++ 0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L,
++ 0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L,
++ 0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L };
++
++static unsigned long SP2[64] = {
++ 0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L,
++ 0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L,
++ 0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L,
++ 0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L,
++ 0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L,
++ 0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L,
++ 0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L,
++ 0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L,
++ 0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L,
++ 0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L,
++ 0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L,
++ 0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L,
++ 0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L,
++ 0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L,
++ 0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L,
++ 0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L };
++
++static unsigned long SP3[64] = {
++ 0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L,
++ 0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L,
++ 0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L,
++ 0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L,
++ 0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L,
++ 0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,
++ 0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L,
++ 0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L,
++ 0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L,
++ 0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L,
++ 0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L,
++ 0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L,
++ 0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L,
++ 0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L,
++ 0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L,
++ 0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L };
++
++static unsigned long SP4[64] = {
++ 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
++ 0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L,
++ 0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L,
++ 0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L,
++ 0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L,
++ 0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L,
++ 0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L,
++ 0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L,
++ 0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L,
++ 0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L,
++ 0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L,
++ 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
++ 0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L,
++ 0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L,
++ 0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L,
++ 0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L };
++
++static unsigned long SP5[64] = {
++ 0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L,
++ 0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L,
++ 0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L,
++ 0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L,
++ 0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L,
++ 0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L,
++ 0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L,
++ 0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L,
++ 0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L,
++ 0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L,
++ 0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L,
++ 0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L,
++ 0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L,
++ 0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L,
++ 0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L,
++ 0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L };
++
++static unsigned long SP6[64] = {
++ 0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L,
++ 0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,
++ 0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L,
++ 0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L,
++ 0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L,
++ 0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L,
++ 0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L,
++ 0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L,
++ 0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L,
++ 0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L,
++ 0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L,
++ 0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L,
++ 0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L,
++ 0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L,
++ 0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L,
++ 0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L };
++
++static unsigned long SP7[64] = {
++ 0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L,
++ 0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L,
++ 0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L,
++ 0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L,
++ 0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L,
++ 0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L,
++ 0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L,
++ 0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
++ 0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
++ 0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L,
++ 0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L,
++ 0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L,
++ 0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L,
++ 0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L,
++ 0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L,
++ 0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L };
++
++static unsigned long SP8[64] = {
++ 0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L,
++ 0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L,
++ 0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L,
++ 0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L,
++ 0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L,
++ 0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L,
++ 0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L,
++ 0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L,
++ 0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L,
++ 0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L,
++ 0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L,
++ 0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L,
++ 0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L,
++ 0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L,
++ 0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L,
++ 0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L };
++
++static void desfunc(block, keys)
++register unsigned long *block, *keys;
++{
++ register unsigned long fval, work, right, leftt;
++ register int round;
++
++ leftt = block[0];
++ right = block[1];
++ work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL;
++ right ^= work;
++ leftt ^= (work << 4);
++ work = ((leftt >> 16) ^ right) & 0x0000ffffL;
++ right ^= work;
++ leftt ^= (work << 16);
++ work = ((right >> 2) ^ leftt) & 0x33333333L;
++ leftt ^= work;
++ right ^= (work << 2);
++ work = ((right >> 8) ^ leftt) & 0x00ff00ffL;
++ leftt ^= work;
++ right ^= (work << 8);
++ right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;
++ work = (leftt ^ right) & 0xaaaaaaaaL;
++ leftt ^= work;
++ right ^= work;
++ leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL;
++
++ for( round = 0; round < 8; round++ ) {
++ work = (right << 28) | (right >> 4);
++ work ^= *keys++;
++ fval = SP7[ work & 0x3fL];
++ fval |= SP5[(work >> 8) & 0x3fL];
++ fval |= SP3[(work >> 16) & 0x3fL];
++ fval |= SP1[(work >> 24) & 0x3fL];
++ work = right ^ *keys++;
++ fval |= SP8[ work & 0x3fL];
++ fval |= SP6[(work >> 8) & 0x3fL];
++ fval |= SP4[(work >> 16) & 0x3fL];
++ fval |= SP2[(work >> 24) & 0x3fL];
++ leftt ^= fval;
++ work = (leftt << 28) | (leftt >> 4);
++ work ^= *keys++;
++ fval = SP7[ work & 0x3fL];
++ fval |= SP5[(work >> 8) & 0x3fL];
++ fval |= SP3[(work >> 16) & 0x3fL];
++ fval |= SP1[(work >> 24) & 0x3fL];
++ work = leftt ^ *keys++;
++ fval |= SP8[ work & 0x3fL];
++ fval |= SP6[(work >> 8) & 0x3fL];
++ fval |= SP4[(work >> 16) & 0x3fL];
++ fval |= SP2[(work >> 24) & 0x3fL];
++ right ^= fval;
++ }
++
++ right = (right << 31) | (right >> 1);
++ work = (leftt ^ right) & 0xaaaaaaaaL;
++ leftt ^= work;
++ right ^= work;
++ leftt = (leftt << 31) | (leftt >> 1);
++ work = ((leftt >> 8) ^ right) & 0x00ff00ffL;
++ right ^= work;
++ leftt ^= (work << 8);
++ work = ((leftt >> 2) ^ right) & 0x33333333L;
++ right ^= work;
++ leftt ^= (work << 2);
++ work = ((right >> 16) ^ leftt) & 0x0000ffffL;
++ leftt ^= work;
++ right ^= (work << 16);
++ work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL;
++ leftt ^= work;
++ right ^= (work << 4);
++ *block++ = right;
++ *block = leftt;
++ return;
++ }
++
++/* Validation sets:
++ *
++ * Single-length key, single-length plaintext -
++ * Key : 0123 4567 89ab cdef
++ * Plain : 0123 4567 89ab cde7
++ * Cipher : c957 4425 6a5e d31d
++ *
++ * Double-length key, single-length plaintext -
++ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210
++ * Plain : 0123 4567 89ab cde7
++ * Cipher : 7f1d 0a77 826b 8aff
++ *
++ * Double-length key, double-length plaintext -
++ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210
++ * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
++ * Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7
++ *
++ * Triple-length key, single-length plaintext -
++ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
++ * Plain : 0123 4567 89ab cde7
++ * Cipher : de0b 7c06 ae5e 0ed5
++ *
++ * Triple-length key, double-length plaintext -
++ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
++ * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
++ * Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5
++ *
++ * d3des V5.0a rwo 9208.07 18:44 Graven Imagery
++ **********************************************************************/
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ ioemu/d3des.h Fri Oct 20 09:50:09 2006 +0100
+@@ -0,0 +1,51 @@
++/*
++ * This is D3DES (V5.09) by Richard Outerbridge with the double and
++ * triple-length support removed for use in VNC.
++ *
++ * These changes are:
++ * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
++ *
++ * This software is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++/* d3des.h -
++ *
++ * Headers and defines for d3des.c
++ * Graven Imagery, 1992.
++ *
++ * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge
++ * (GEnie : OUTER; CIS : [71755,204])
++ */
++
++#define EN0 0 /* MODE == encrypt */
++#define DE1 1 /* MODE == decrypt */
++
++extern void deskey(unsigned char *, int);
++/* hexkey[8] MODE
++ * Sets the internal key register according to the hexadecimal
++ * key contained in the 8 bytes of hexkey, according to the DES,
++ * for encryption or decryption according to MODE.
++ */
++
++extern void usekey(unsigned long *);
++/* cookedkey[32]
++ * Loads the internal key register with the data in cookedkey.
++ */
++
++extern void cpkey(unsigned long *);
++/* cookedkey[32]
++ * Copies the contents of the internal key register into the storage
++ * located at &cookedkey[0].
++ */
++
++extern void des(unsigned char *, unsigned char *);
++/* from[8] to[8]
++ * Encrypts/Decrypts (according to the key currently loaded in the
++ * internal key register) one block of eight bytes at address 'from'
++ * into the block at address 'to'. They can be the same.
++ */
++
++/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery
++ ********************************************************************/
diff -r 2c29a2e42937 -r 55ff34dceb0b tools/ioemu/patches/vnc-protocol-fixes
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/vnc-protocol-fixes Tue Oct 24 14:48:06 2006 +0100
@@ -0,0 +1,63 @@
+# HG changeset patch
+# User Steven Smith <ssmith@xxxxxxxxxxxxx>
+# Node ID ca3abb3804f4400b24037a4366cb2ca5e51ed742
+# Parent 7fca81d456b2cb40d4effe2492f7ed1aafd32f52
+[HVM][VNC] Make sure that qemu doesn't go into an infinite loop when
+it receives certain invalid requests from the viewer.
+
+Signed-off-by: Steven Smith <sos22@xxxxxxxxx>
+
+Index: ioemu/vnc.c
+===================================================================
+--- ioemu.orig/vnc.c 2006-10-24 14:28:05.000000000 +0100
++++ ioemu/vnc.c 2006-10-24 14:30:11.000000000 +0100
+@@ -26,6 +26,7 @@
+
+ #include "vl.h"
+ #include "qemu_socket.h"
++#include <assert.h>
+
+ #define VNC_REFRESH_INTERVAL (1000 / 30)
+
+@@ -677,8 +678,10 @@
+ memmove(vs->input.buffer, vs->input.buffer + len,
+ vs->input.offset - len);
+ vs->input.offset -= len;
+- } else
++ } else {
++ assert(ret > vs->read_handler_expect);
+ vs->read_handler_expect = ret;
++ }
+ }
+ }
+
+@@ -961,8 +964,12 @@
+ if (len == 1)
+ return 4;
+
+- if (len == 4)
+- return 4 + (read_u16(data, 2) * 4);
++ if (len == 4) {
++ uint16_t v;
++ v = read_u16(data, 2);
++ if (v)
++ return 4 + v * 4;
++ }
+
+ limit = read_u16(data, 2);
+ for (i = 0; i < limit; i++) {
+@@ -996,8 +1003,12 @@
+ if (len == 1)
+ return 8;
+
+- if (len == 8)
+- return 8 + read_u32(data, 4);
++ if (len == 8) {
++ uint32_t v;
++ v = read_u32(data, 4);
++ if (v)
++ return 8 + v;
++ }
+
+ client_cut_text(vs, read_u32(data, 4), data + 8);
+ break;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|