diff options
| author | Richard Purdie <richard@openedhand.com> | 2007-06-13 11:55:58 +0000 |
|---|---|---|
| committer | Richard Purdie <richard@openedhand.com> | 2007-06-13 11:55:58 +0000 |
| commit | c6a97a06968d062b742d458f86cb8fbf6ab63e99 (patch) | |
| tree | 3b684d87ce2dcf944ddb0acf1a6c609c9b22036a | |
| parent | 4b747705b4adc0085f131e2b6bd8f01fe306e59b (diff) | |
| download | poky-c6a97a06968d062b742d458f86cb8fbf6ab63e99.tar.gz | |
qemu: Update to a recent version
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@1923 311d38ba-8fff-0310-9ca6-ca027cbcb966
36 files changed, 1292 insertions, 1901 deletions
diff --git a/meta/conf/distro/poky.conf b/meta/conf/distro/poky.conf index 8f607cdc03..86a1cfd4d5 100644 --- a/meta/conf/distro/poky.conf +++ b/meta/conf/distro/poky.conf | |||
| @@ -93,8 +93,8 @@ SRCDATE_screenshot ?= "20070529" | |||
| 93 | SRCDATE_xcalibrateext ?= "20051101" | 93 | SRCDATE_xcalibrateext ?= "20051101" |
| 94 | SRCDATE_libfakekey ?= "20051101" | 94 | SRCDATE_libfakekey ?= "20051101" |
| 95 | SRCDATE_xcalibrate ?= "20060312" | 95 | SRCDATE_xcalibrate ?= "20060312" |
| 96 | SRCDATE_qemu ?= "20060723" | 96 | SRCDATE_qemu ?= "20070613" |
| 97 | SRCDATE_qemu-native ?= "20060723" | 97 | SRCDATE_qemu-native ?= "20070613" |
| 98 | SRCDATE_oprofile ?= "20070529" | 98 | SRCDATE_oprofile ?= "20070529" |
| 99 | SRCDATE_oprofileui ?= "20070529" | 99 | SRCDATE_oprofileui ?= "20070529" |
| 100 | SRCDATE_zaurusd ?= "20070529" | 100 | SRCDATE_zaurusd ?= "20070529" |
diff --git a/meta/packages/qemu/files/02_snapshot_use_tmpdir.patch b/meta/packages/qemu/files/02_snapshot_use_tmpdir.patch new file mode 100644 index 0000000000..bd955b6db3 --- /dev/null +++ b/meta/packages/qemu/files/02_snapshot_use_tmpdir.patch | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # block.c | 6 +++++- | ||
| 4 | # 1 file changed, 5 insertions(+), 1 deletion(-) | ||
| 5 | # | ||
| 6 | Index: block.c | ||
| 7 | =================================================================== | ||
| 8 | --- block.c.orig 2007-06-13 11:51:52.000000000 +0100 | ||
| 9 | +++ block.c 2007-06-13 11:51:53.000000000 +0100 | ||
| 10 | @@ -188,8 +188,12 @@ void get_tmp_filename(char *filename, in | ||
| 11 | void get_tmp_filename(char *filename, int size) | ||
| 12 | { | ||
| 13 | int fd; | ||
| 14 | + char *tmpdir; | ||
| 15 | /* XXX: race condition possible */ | ||
| 16 | - pstrcpy(filename, size, "/tmp/vl.XXXXXX"); | ||
| 17 | + tmpdir = getenv("TMPDIR"); | ||
| 18 | + if (!tmpdir) | ||
| 19 | + tmpdir = "/tmp"; | ||
| 20 | + snprintf(filename, size, "%s/vl.XXXXXX", tmpdir); | ||
| 21 | fd = mkstemp(filename); | ||
| 22 | close(fd); | ||
| 23 | } | ||
diff --git a/meta/packages/qemu/files/03_machines_list_no_error.patch b/meta/packages/qemu/files/03_machines_list_no_error.patch new file mode 100644 index 0000000000..73f31550fe --- /dev/null +++ b/meta/packages/qemu/files/03_machines_list_no_error.patch | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # vl.c | 2 +- | ||
| 4 | # 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 5 | # | ||
| 6 | Index: vl.c | ||
| 7 | =================================================================== | ||
| 8 | --- vl.c.orig 2007-06-13 11:51:52.000000000 +0100 | ||
| 9 | +++ vl.c 2007-06-13 11:52:24.000000000 +0100 | ||
| 10 | @@ -7242,7 +7242,7 @@ int main(int argc, char **argv) | ||
| 11 | m->name, m->desc, | ||
| 12 | m == first_machine ? " (default)" : ""); | ||
| 13 | } | ||
| 14 | - exit(1); | ||
| 15 | + exit(strcmp(optarg, "?")); | ||
| 16 | } | ||
| 17 | break; | ||
| 18 | case QEMU_OPTION_cpu: | ||
diff --git a/meta/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch b/meta/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch new file mode 100644 index 0000000000..1575cbce63 --- /dev/null +++ b/meta/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #DPATCHLEVEL=1 | ||
| 2 | --- | ||
| 3 | # vl.c | 6 +++++- | ||
| 4 | # 1 file changed, 5 insertions(+), 1 deletion(-) | ||
| 5 | # | ||
| 6 | Index: qemu/vl.c | ||
| 7 | =================================================================== | ||
| 8 | --- qemu.orig/vl.c 2007-06-13 11:51:53.000000000 +0100 | ||
| 9 | +++ qemu/vl.c 2007-06-13 11:52:19.000000000 +0100 | ||
| 10 | @@ -1026,10 +1026,14 @@ static int rtc_fd; | ||
| 11 | |||
| 12 | static int start_rtc_timer(void) | ||
| 13 | { | ||
| 14 | + unsigned long current_rtc_freq = 0; | ||
| 15 | + | ||
| 16 | rtc_fd = open("/dev/rtc", O_RDONLY); | ||
| 17 | if (rtc_fd < 0) | ||
| 18 | return -1; | ||
| 19 | - if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { | ||
| 20 | + ioctl(rtc_fd, RTC_IRQP_READ, ¤t_rtc_freq); | ||
| 21 | + if (current_rtc_freq != RTC_FREQ && | ||
| 22 | + ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { | ||
| 23 | fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n" | ||
| 24 | "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n" | ||
| 25 | "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n"); | ||
diff --git a/meta/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch b/meta/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch new file mode 100644 index 0000000000..b7c4732f24 --- /dev/null +++ b/meta/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | #DPATCHLEVEL=1 | ||
| 2 | --- | ||
| 3 | # hw/pc.c | 1 - | ||
| 4 | # 1 file changed, 1 deletion(-) | ||
| 5 | # | ||
| 6 | Index: qemu/hw/pc.c | ||
| 7 | =================================================================== | ||
| 8 | --- qemu.orig/hw/pc.c 2007-06-13 11:51:52.000000000 +0100 | ||
| 9 | +++ qemu/hw/pc.c 2007-06-13 11:51:53.000000000 +0100 | ||
| 10 | @@ -355,7 +355,6 @@ static void generate_bootsect(uint32_t g | ||
| 11 | if (bs_table[0] == NULL) { | ||
| 12 | fprintf(stderr, "A disk image must be given for 'hda' when booting " | ||
| 13 | "a Linux kernel\n"); | ||
| 14 | - exit(1); | ||
| 15 | } | ||
| 16 | |||
| 17 | memset(bootsect, 0, sizeof(bootsect)); | ||
diff --git a/meta/packages/qemu/files/06_exit_segfault.patch b/meta/packages/qemu/files/06_exit_segfault.patch new file mode 100644 index 0000000000..447c3550b8 --- /dev/null +++ b/meta/packages/qemu/files/06_exit_segfault.patch | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # linux-user/main.c | 8 ++++---- | ||
| 4 | # 1 file changed, 4 insertions(+), 4 deletions(-) | ||
| 5 | # | ||
| 6 | Index: linux-user/main.c | ||
| 7 | =================================================================== | ||
| 8 | --- linux-user/main.c.orig 2007-06-13 11:51:52.000000000 +0100 | ||
| 9 | +++ linux-user/main.c 2007-06-13 11:52:16.000000000 +0100 | ||
| 10 | @@ -642,7 +642,7 @@ void cpu_loop (CPUSPARCState *env) | ||
| 11 | default: | ||
| 12 | printf ("Unhandled trap: 0x%x\n", trapnr); | ||
| 13 | cpu_dump_state(env, stderr, fprintf, 0); | ||
| 14 | - exit (1); | ||
| 15 | + _exit (1); | ||
| 16 | } | ||
| 17 | process_pending_signals (env); | ||
| 18 | } | ||
| 19 | @@ -1471,7 +1471,7 @@ void cpu_loop (CPUState *env) | ||
| 20 | default: | ||
| 21 | printf ("Unhandled trap: 0x%x\n", trapnr); | ||
| 22 | cpu_dump_state(env, stderr, fprintf, 0); | ||
| 23 | - exit (1); | ||
| 24 | + _exit (1); | ||
| 25 | } | ||
| 26 | process_pending_signals (env); | ||
| 27 | } | ||
| 28 | @@ -1735,7 +1735,7 @@ int main(int argc, char **argv) | ||
| 29 | for(item = cpu_log_items; item->mask != 0; item++) { | ||
| 30 | printf("%-10s %s\n", item->name, item->help); | ||
| 31 | } | ||
| 32 | - exit(1); | ||
| 33 | + _exit(1); | ||
| 34 | } | ||
| 35 | cpu_set_log(mask); | ||
| 36 | } else if (!strcmp(r, "s")) { | ||
| 37 | @@ -1754,7 +1754,7 @@ int main(int argc, char **argv) | ||
| 38 | if (qemu_host_page_size == 0 || | ||
| 39 | (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) { | ||
| 40 | fprintf(stderr, "page size must be a power of two\n"); | ||
| 41 | - exit(1); | ||
| 42 | + _exit(1); | ||
| 43 | } | ||
| 44 | } else if (!strcmp(r, "g")) { | ||
| 45 | gdbstub_port = atoi(argv[optind++]); | ||
diff --git a/meta/packages/qemu/files/10_signal_jobs.patch b/meta/packages/qemu/files/10_signal_jobs.patch new file mode 100644 index 0000000000..794a538676 --- /dev/null +++ b/meta/packages/qemu/files/10_signal_jobs.patch | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # linux-user/signal.c | 7 ++++++- | ||
| 4 | # 1 file changed, 6 insertions(+), 1 deletion(-) | ||
| 5 | # | ||
| 6 | Index: linux-user/signal.c | ||
| 7 | =================================================================== | ||
| 8 | --- linux-user/signal.c.orig 2007-06-13 11:51:52.000000000 +0100 | ||
| 9 | +++ linux-user/signal.c 2007-06-13 11:52:21.000000000 +0100 | ||
| 10 | @@ -341,10 +341,15 @@ int queue_signal(int sig, target_siginfo | ||
| 11 | k = &sigact_table[sig - 1]; | ||
| 12 | handler = k->sa._sa_handler; | ||
| 13 | if (handler == TARGET_SIG_DFL) { | ||
| 14 | + if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) { | ||
| 15 | + kill(getpid(),SIGSTOP); | ||
| 16 | + return 0; | ||
| 17 | + } else | ||
| 18 | /* default handler : ignore some signal. The other are fatal */ | ||
| 19 | if (sig != TARGET_SIGCHLD && | ||
| 20 | sig != TARGET_SIGURG && | ||
| 21 | - sig != TARGET_SIGWINCH) { | ||
| 22 | + sig != TARGET_SIGWINCH && | ||
| 23 | + sig != TARGET_SIGCONT) { | ||
| 24 | force_sig(sig); | ||
| 25 | } else { | ||
| 26 | return 0; /* indicate ignored */ | ||
diff --git a/meta/packages/qemu/files/11_signal_sigaction.patch b/meta/packages/qemu/files/11_signal_sigaction.patch new file mode 100644 index 0000000000..5446efc562 --- /dev/null +++ b/meta/packages/qemu/files/11_signal_sigaction.patch | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # linux-user/signal.c | 5 +++++ | ||
| 4 | # 1 file changed, 5 insertions(+) | ||
| 5 | # | ||
| 6 | Index: linux-user/signal.c | ||
| 7 | =================================================================== | ||
| 8 | --- linux-user/signal.c.orig 2007-06-13 11:51:54.000000000 +0100 | ||
| 9 | +++ linux-user/signal.c 2007-06-13 11:52:20.000000000 +0100 | ||
| 10 | @@ -429,6 +429,11 @@ int do_sigaction(int sig, const struct t | ||
| 11 | |||
| 12 | if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP) | ||
| 13 | return -EINVAL; | ||
| 14 | + | ||
| 15 | + /* no point doing the stuff as those are not allowed for sigaction */ | ||
| 16 | + if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP)) | ||
| 17 | + return -EINVAL; | ||
| 18 | + | ||
| 19 | k = &sigact_table[sig - 1]; | ||
| 20 | #if defined(DEBUG_SIGNAL) | ||
| 21 | fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n", | ||
diff --git a/meta/packages/qemu/files/12_signal_powerpc_support.patch b/meta/packages/qemu/files/12_signal_powerpc_support.patch new file mode 100644 index 0000000000..d8d4198784 --- /dev/null +++ b/meta/packages/qemu/files/12_signal_powerpc_support.patch | |||
| @@ -0,0 +1,401 @@ | |||
| 1 | #DPATCHLEVEL=1 | ||
| 2 | --- | ||
| 3 | # linux-user/signal.c | 371 ++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
| 4 | # 1 file changed, 371 insertions(+) | ||
| 5 | # | ||
| 6 | Index: qemu/linux-user/signal.c | ||
| 7 | =================================================================== | ||
| 8 | --- qemu.orig/linux-user/signal.c 2007-06-13 11:51:54.000000000 +0100 | ||
| 9 | +++ qemu/linux-user/signal.c 2007-06-13 11:51:54.000000000 +0100 | ||
| 10 | @@ -2,6 +2,7 @@ | ||
| 11 | * Emulation of Linux signals | ||
| 12 | * | ||
| 13 | * Copyright (c) 2003 Fabrice Bellard | ||
| 14 | + * Copyright (c) 2005 Josh Triplett <josh@psas.pdx.edu> | ||
| 15 | * | ||
| 16 | * This program is free software; you can redistribute it and/or modify | ||
| 17 | * it under the terms of the GNU General Public License as published by | ||
| 18 | @@ -16,6 +17,12 @@ | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 22 | + * | ||
| 23 | + * Various portions adapted from the Linux kernel: | ||
| 24 | + * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) | ||
| 25 | + * Derived from "arch/i386/kernel/signal.c" | ||
| 26 | + * Copyright (C) 1991, 1992 Linus Torvalds | ||
| 27 | + * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson | ||
| 28 | */ | ||
| 29 | #include <stdlib.h> | ||
| 30 | #include <stdio.h> | ||
| 31 | @@ -1964,6 +1971,370 @@ long do_rt_sigreturn(CPUState *env) | ||
| 32 | return -ENOSYS; | ||
| 33 | } | ||
| 34 | |||
| 35 | +#elif defined(TARGET_PPC) | ||
| 36 | +/* Adapted from the Linux kernel: | ||
| 37 | + * arch/ppc/kernel/signal.c | ||
| 38 | + * include/asm-ppc/elf.h | ||
| 39 | + * include/asm-ppc/ptrace.h | ||
| 40 | + * include/asm-ppc/sigcontext.h | ||
| 41 | + * include/asm-ppc/ucontext.h | ||
| 42 | + */ | ||
| 43 | + | ||
| 44 | +/* | ||
| 45 | + * When we have signals to deliver, we set up on the | ||
| 46 | + * user stack, going down from the original stack pointer: | ||
| 47 | + * a sigregs struct | ||
| 48 | + * a sigcontext struct | ||
| 49 | + * a gap of __SIGNAL_FRAMESIZE bytes | ||
| 50 | + * | ||
| 51 | + * Each of these things must be a multiple of 16 bytes in size. | ||
| 52 | + * | ||
| 53 | + */ | ||
| 54 | + | ||
| 55 | +#define TARGET_ELF_NGREG 48 /* includes nip, msr, lr, etc. */ | ||
| 56 | +#define TARGET_ELF_NFPREG 33 /* includes fpscr */ | ||
| 57 | +#define TARGET_ELF_NVRREG 33 /* includes vscr */ | ||
| 58 | + | ||
| 59 | +/* General registers */ | ||
| 60 | +typedef unsigned long target_elf_greg_t; | ||
| 61 | +typedef target_elf_greg_t target_elf_gregset_t[TARGET_ELF_NGREG]; | ||
| 62 | + | ||
| 63 | +/* Floating point registers */ | ||
| 64 | +typedef double target_elf_fpreg_t; | ||
| 65 | +typedef target_elf_fpreg_t target_elf_fpregset_t[TARGET_ELF_NFPREG]; | ||
| 66 | + | ||
| 67 | +/* Altivec registers */ | ||
| 68 | +/* FIXME: Altivec not supported yet. */ | ||
| 69 | +/* typedef __vector128 elf_vrreg_t; */ | ||
| 70 | +typedef uint64_t target_elf_vrreg_t[2]; | ||
| 71 | +typedef target_elf_vrreg_t target_elf_vrregset_t[TARGET_ELF_NVRREG]; | ||
| 72 | + | ||
| 73 | +struct target_mcontext { | ||
| 74 | + target_elf_gregset_t mc_gregs; | ||
| 75 | + target_elf_fpregset_t mc_fregs; | ||
| 76 | + /* The kernel calls this mc_pad, but does #define tramp mc_pad */ | ||
| 77 | + target_ulong tramp[2]; | ||
| 78 | + target_elf_vrregset_t mc_vregs __attribute__((__aligned__(16))); | ||
| 79 | +}; | ||
| 80 | + | ||
| 81 | +struct target_sigregs { | ||
| 82 | + struct target_mcontext mctx; /* all the register values */ | ||
| 83 | + /* Programs using the rs6000/xcoff abi can save up to 19 gp regs | ||
| 84 | + and 18 fp regs below sp before decrementing it. */ | ||
| 85 | + int abigap[56]; | ||
| 86 | +}; | ||
| 87 | + | ||
| 88 | +struct target_sigcontext { | ||
| 89 | + target_ulong _unused[4]; | ||
| 90 | + uint32_t signal; | ||
| 91 | + target_ulong handler; | ||
| 92 | + target_ulong oldmask; | ||
| 93 | + struct target_pt_regs *regs; | ||
| 94 | +}; | ||
| 95 | + | ||
| 96 | +#define __SIGNAL_FRAMESIZE 64 | ||
| 97 | + | ||
| 98 | +static int | ||
| 99 | +save_user_regs(CPUState *env, struct target_mcontext *frame, int sigret) | ||
| 100 | +{ | ||
| 101 | + /* save general and floating-point registers */ | ||
| 102 | +#if 0 /* FIXME: handle floating-point, Altivec, SPE */ | ||
| 103 | + CHECK_FULL_REGS(regs); | ||
| 104 | + preempt_disable(); | ||
| 105 | + if (regs->msr & MSR_FP) | ||
| 106 | + giveup_fpu(current); | ||
| 107 | +#ifdef CONFIG_ALTIVEC | ||
| 108 | + if (current->thread.used_vr && (regs->msr & MSR_VEC)) | ||
| 109 | + giveup_altivec(current); | ||
| 110 | +#endif /* CONFIG_ALTIVEC */ | ||
| 111 | +#ifdef CONFIG_SPE | ||
| 112 | + if (current->thread.used_spe && (regs->msr & MSR_SPE)) | ||
| 113 | + giveup_spe(current); | ||
| 114 | +#endif /* CONFIG_ALTIVEC */ | ||
| 115 | + preempt_enable(); | ||
| 116 | +#endif /* 0 */ | ||
| 117 | + | ||
| 118 | + /* Note: this needs to be in the same order as target_pt_regs */ | ||
| 119 | + if(!memcpy(&frame->mc_gregs, env->gpr, | ||
| 120 | + 32*sizeof(target_elf_greg_t)) | ||
| 121 | + || __put_user(env->nip, &frame->mc_gregs[32]) | ||
| 122 | + || __put_user(do_load_msr(env), &frame->mc_gregs[33]) | ||
| 123 | + /* FIXME: || __put_user(orig_gpr3, &frame->mc_gregs[34]) */ | ||
| 124 | + || __put_user(env->ctr, &frame->mc_gregs[35]) | ||
| 125 | + || __put_user(env->lr, &frame->mc_gregs[36]) | ||
| 126 | + || __put_user(do_load_xer(env), &frame->mc_gregs[37]) | ||
| 127 | + || __put_user(do_load_cr(env), &frame->mc_gregs[38]) | ||
| 128 | + || __put_user(env->spr[SPR_MQ], &frame->mc_gregs[39]) | ||
| 129 | + /* FIXME: || __put_user(trap, &frame->mc_gregs[40]) */ | ||
| 130 | + || __put_user(env->spr[SPR_DAR], &frame->mc_gregs[41]) | ||
| 131 | + || __put_user(env->spr[SPR_DSISR], &frame->mc_gregs[42]) | ||
| 132 | + /* FIXME: || __put_user(result, &frame->mc_gregs[43]) */) | ||
| 133 | + return 1; | ||
| 134 | + | ||
| 135 | + if(!memcpy(&frame->mc_fregs, env->fpr, | ||
| 136 | + 32*sizeof(target_elf_fpreg_t)) | ||
| 137 | + || __put_user(do_load_fpscr(env), &frame->mc_fregs[32])) | ||
| 138 | + | ||
| 139 | + do_store_fpscr(env, 0, 0xFF); /* turn off all fp exceptions */ | ||
| 140 | + | ||
| 141 | +#if 0 /* FIXME: handle Altivec, SPE */ | ||
| 142 | +#ifdef CONFIG_ALTIVEC | ||
| 143 | + /* save altivec registers */ | ||
| 144 | + if (current->thread.used_vr) { | ||
| 145 | + if (!memcpy(&frame->mc_vregs, current->thread.vr, | ||
| 146 | + ELF_NVRREG * sizeof(vector128))) | ||
| 147 | + return 1; | ||
| 148 | + /* set MSR_VEC in the saved MSR value to indicate that | ||
| 149 | + frame->mc_vregs contains valid data */ | ||
| 150 | + if (__put_user(regs->msr | MSR_VEC, &frame->mc_gregs[PT_MSR])) | ||
| 151 | + return 1; | ||
| 152 | + } | ||
| 153 | + /* else assert((regs->msr & MSR_VEC) == 0) */ | ||
| 154 | + | ||
| 155 | + /* We always copy to/from vrsave, it's 0 if we don't have or don't | ||
| 156 | + * use altivec. Since VSCR only contains 32 bits saved in the least | ||
| 157 | + * significant bits of a vector, we "cheat" and stuff VRSAVE in the | ||
| 158 | + * most significant bits of that same vector. --BenH | ||
| 159 | + */ | ||
| 160 | + if (__put_user(current->thread.vrsave, (u32 __user *)&frame->mc_vregs[32])) | ||
| 161 | + return 1; | ||
| 162 | +#endif /* CONFIG_ALTIVEC */ | ||
| 163 | + | ||
| 164 | +#ifdef CONFIG_SPE | ||
| 165 | + /* save spe registers */ | ||
| 166 | + if (current->thread.used_spe) { | ||
| 167 | + if (!memcpy(&frame->mc_vregs, current->thread.evr, | ||
| 168 | + ELF_NEVRREG * sizeof(u32))) | ||
| 169 | + return 1; | ||
| 170 | + /* set MSR_SPE in the saved MSR value to indicate that | ||
| 171 | + frame->mc_vregs contains valid data */ | ||
| 172 | + if (__put_user(regs->msr | MSR_SPE, &frame->mc_gregs[PT_MSR])) | ||
| 173 | + return 1; | ||
| 174 | + } | ||
| 175 | + /* else assert((regs->msr & MSR_SPE) == 0) */ | ||
| 176 | + | ||
| 177 | + /* We always copy to/from spefscr */ | ||
| 178 | + if (__put_user(current->thread.spefscr, (u32 *)&frame->mc_vregs + ELF_NEVRREG)) | ||
| 179 | + return 1; | ||
| 180 | +#endif /* CONFIG_SPE */ | ||
| 181 | +#endif /* 0 */ | ||
| 182 | + | ||
| 183 | + if (sigret) { | ||
| 184 | + /* Set up the sigreturn trampoline: li r0,sigret; sc */ | ||
| 185 | + if (__put_user(0x38000000UL + sigret, &frame->tramp[0]) | ||
| 186 | + || __put_user(0x44000002UL, &frame->tramp[1])) | ||
| 187 | + return 1; | ||
| 188 | +#if 0 | ||
| 189 | + flush_icache_range((unsigned long) &frame->tramp[0], | ||
| 190 | + (unsigned long) &frame->tramp[2]); | ||
| 191 | +#endif | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | + return 0; | ||
| 195 | +} | ||
| 196 | + | ||
| 197 | +static int | ||
| 198 | +restore_user_regs(CPUState *env, struct target_mcontext *sr, int sig) | ||
| 199 | +{ | ||
| 200 | + target_ulong save_r2 = 0; | ||
| 201 | + target_ulong saved_xer; | ||
| 202 | + target_ulong saved_cr; | ||
| 203 | + double saved_fpscr; | ||
| 204 | + | ||
| 205 | +#if 0 /* FIXME: handle Altivec, SPE */ | ||
| 206 | +#if defined(CONFIG_ALTIVEC) || defined(CONFIG_SPE) | ||
| 207 | + unsigned long msr; | ||
| 208 | +#endif | ||
| 209 | +#endif /* 0 */ | ||
| 210 | + | ||
| 211 | + /* backup/restore the TLS as we don't want it to be modified */ | ||
| 212 | + if (!sig) | ||
| 213 | + save_r2 = env->gpr[2]; | ||
| 214 | + | ||
| 215 | + /* Copy all registers except MSR */ | ||
| 216 | + /* Note: this needs to be in the same order as target_pt_regs */ | ||
| 217 | + if(!memcpy(env->gpr, &sr->mc_gregs, | ||
| 218 | + 32*sizeof(target_elf_greg_t)) | ||
| 219 | + || __get_user(env->nip, &sr->mc_gregs[32]) | ||
| 220 | + /* FIXME: || __get_user(orig_gpr3, &sr->mc_gregs[34]) */ | ||
| 221 | + || __get_user(env->ctr, &sr->mc_gregs[35]) | ||
| 222 | + || __get_user(env->lr, &sr->mc_gregs[36]) | ||
| 223 | + || __get_user(saved_xer, &sr->mc_gregs[37]) | ||
| 224 | + || __get_user(saved_cr, &sr->mc_gregs[38]) | ||
| 225 | + || __get_user(env->spr[SPR_MQ], &sr->mc_gregs[39]) | ||
| 226 | + /* FIXME: || __get_user(trap, &sr->mc_gregs[40]) */ | ||
| 227 | + || __get_user(env->spr[SPR_DAR], &sr->mc_gregs[41]) | ||
| 228 | + || __get_user(env->spr[SPR_DSISR], &sr->mc_gregs[42]) | ||
| 229 | + /* FIXME: || __get_user(result, &sr->mc_gregs[43]) */) | ||
| 230 | + return 1; | ||
| 231 | + do_store_xer(env, saved_xer); | ||
| 232 | + do_store_cr(env, saved_cr, 0xFF); | ||
| 233 | + | ||
| 234 | + if (!sig) | ||
| 235 | + env->gpr[2] = save_r2; | ||
| 236 | + | ||
| 237 | + /* The kernel delays restoring the floating-point registers until the | ||
| 238 | + * thread uses floating-point again. For simplicity, just restore the | ||
| 239 | + * registers now. */ | ||
| 240 | + if(!memcpy(env->fpr, &sr->mc_fregs, | ||
| 241 | + 32*sizeof(target_elf_fpreg_t)) | ||
| 242 | + || __get_user(saved_fpscr, &sr->mc_fregs[32])) | ||
| 243 | + return 1; | ||
| 244 | + do_store_fpscr(env, saved_fpscr, 0xFF); | ||
| 245 | + | ||
| 246 | +#if 0 /* FIXME: handle Altivec, SPE */ | ||
| 247 | +#ifdef CONFIG_ALTIVEC | ||
| 248 | + /* force the process to reload the altivec registers from | ||
| 249 | + current->thread when it next does altivec instructions */ | ||
| 250 | + regs->msr &= ~MSR_VEC; | ||
| 251 | + if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_VEC) != 0) { | ||
| 252 | + /* restore altivec registers from the stack */ | ||
| 253 | + if (!memcpy(current->thread.vr, &sr->mc_vregs, | ||
| 254 | + sizeof(sr->mc_vregs))) | ||
| 255 | + return 1; | ||
| 256 | + } else if (current->thread.used_vr) | ||
| 257 | + memset(¤t->thread.vr, 0, ELF_NVRREG * sizeof(vector128)); | ||
| 258 | + | ||
| 259 | + /* Always get VRSAVE back */ | ||
| 260 | + if (__get_user(current->thread.vrsave, (u32 __user *)&sr->mc_vregs[32])) | ||
| 261 | + return 1; | ||
| 262 | +#endif /* CONFIG_ALTIVEC */ | ||
| 263 | + | ||
| 264 | +#ifdef CONFIG_SPE | ||
| 265 | + /* force the process to reload the spe registers from | ||
| 266 | + current->thread when it next does spe instructions */ | ||
| 267 | + regs->msr &= ~MSR_SPE; | ||
| 268 | + if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_SPE) != 0) { | ||
| 269 | + /* restore spe registers from the stack */ | ||
| 270 | + if (!memcpy(current->thread.evr, &sr->mc_vregs, | ||
| 271 | + ELF_NEVRREG * sizeof(u32))) | ||
| 272 | + return 1; | ||
| 273 | + } else if (current->thread.used_spe) | ||
| 274 | + memset(¤t->thread.evr, 0, ELF_NEVRREG * sizeof(u32)); | ||
| 275 | + | ||
| 276 | + /* Always get SPEFSCR back */ | ||
| 277 | + if (__get_user(current->thread.spefscr, (u32 *)&sr->mc_vregs + ELF_NEVRREG)) | ||
| 278 | + return 1; | ||
| 279 | +#endif /* CONFIG_SPE */ | ||
| 280 | +#endif /* 0 */ | ||
| 281 | + | ||
| 282 | +#if 0 /* FIXME: handle floating-point, Altivec, SPE */ | ||
| 283 | +#ifndef CONFIG_SMP | ||
| 284 | + preempt_disable(); | ||
| 285 | + if (last_task_used_math == current) | ||
| 286 | + last_task_used_math = NULL; | ||
| 287 | + if (last_task_used_altivec == current) | ||
| 288 | + last_task_used_altivec = NULL; | ||
| 289 | + if (last_task_used_spe == current) | ||
| 290 | + last_task_used_spe = NULL; | ||
| 291 | + preempt_enable(); | ||
| 292 | +#endif | ||
| 293 | +#endif /* 0 */ | ||
| 294 | + return 0; | ||
| 295 | +} | ||
| 296 | + | ||
| 297 | +static void setup_frame(int sig, struct emulated_sigaction *ka, | ||
| 298 | + target_sigset_t *oldset, CPUState *env) | ||
| 299 | +{ | ||
| 300 | + struct target_sigcontext *sc; | ||
| 301 | + struct target_sigregs *frame; | ||
| 302 | + target_ulong origsp = env->gpr[1]; | ||
| 303 | + target_ulong newsp = origsp; | ||
| 304 | + | ||
| 305 | + /* Set up Signal Frame */ | ||
| 306 | + newsp -= sizeof(struct target_sigregs); | ||
| 307 | + frame = (struct target_sigregs *) newsp; | ||
| 308 | + | ||
| 309 | + /* Put a sigcontext on the stack */ | ||
| 310 | + newsp -= sizeof(*sc); | ||
| 311 | + sc = (struct target_sigcontext *) newsp; | ||
| 312 | + | ||
| 313 | + /* create a stack frame for the caller of the handler */ | ||
| 314 | + newsp -= __SIGNAL_FRAMESIZE; | ||
| 315 | + | ||
| 316 | + if (!access_ok(VERIFY_WRITE, (void *) newsp, origsp - newsp)) | ||
| 317 | + goto badframe; | ||
| 318 | + | ||
| 319 | +#if TARGET_NSIG != 64 | ||
| 320 | +#error "Please adjust handle_signal()" | ||
| 321 | +#endif | ||
| 322 | + if (__put_user((target_ulong) ka->sa._sa_handler, &sc->handler) | ||
| 323 | + || __put_user(oldset->sig[0], &sc->oldmask) | ||
| 324 | + || __put_user(oldset->sig[1], &sc->_unused[3]) | ||
| 325 | + || __put_user(frame, (target_ulong *)&sc->regs) | ||
| 326 | + || __put_user(sig, &sc->signal)) | ||
| 327 | + goto badframe; | ||
| 328 | + | ||
| 329 | + if (save_user_regs(env, &frame->mctx, TARGET_NR_sigreturn)) | ||
| 330 | + goto badframe; | ||
| 331 | + | ||
| 332 | + if (put_user(env->gpr[1], (unsigned long *)newsp)) | ||
| 333 | + goto badframe; | ||
| 334 | + env->gpr[1] = newsp; | ||
| 335 | + env->gpr[3] = sig; | ||
| 336 | + env->gpr[4] = (unsigned long) sc; | ||
| 337 | + env->nip = (unsigned long) ka->sa._sa_handler; | ||
| 338 | + env->lr = (unsigned long) frame->mctx.tramp; | ||
| 339 | + /* FIXME: env->trap = 0; */ | ||
| 340 | + | ||
| 341 | + return; | ||
| 342 | + | ||
| 343 | +badframe: | ||
| 344 | +#ifdef DEBUG_SIGNAL | ||
| 345 | + fprintf(stderr, | ||
| 346 | + "badframe in handle_signal, frame=%p newsp=%lx\n", | ||
| 347 | + frame, newsp); | ||
| 348 | +#endif | ||
| 349 | + force_sig(TARGET_SIGSEGV); | ||
| 350 | +} | ||
| 351 | + | ||
| 352 | +static void setup_rt_frame(int sig, struct emulated_sigaction *ka, | ||
| 353 | + target_siginfo_t *info, | ||
| 354 | + target_sigset_t *set, CPUState *env) | ||
| 355 | +{ | ||
| 356 | + fprintf(stderr, "setup_rt_frame: not implemented\n"); | ||
| 357 | +} | ||
| 358 | + | ||
| 359 | +long do_sigreturn(CPUState *env) | ||
| 360 | +{ | ||
| 361 | + struct target_sigcontext *sc; | ||
| 362 | + struct target_sigcontext sigctx; | ||
| 363 | + struct target_mcontext *sr; | ||
| 364 | + target_sigset_t set; | ||
| 365 | + sigset_t host_set; | ||
| 366 | + | ||
| 367 | + /* Always make any pending restarted system calls return -EINTR */ | ||
| 368 | +#if 0 /* FIXME */ | ||
| 369 | + current_thread_info()->restart_block.fn = do_no_restart_syscall; | ||
| 370 | +#endif | ||
| 371 | + | ||
| 372 | + sc = (struct target_sigcontext *)(env->gpr[1] + __SIGNAL_FRAMESIZE); | ||
| 373 | + if (!memcpy(&sigctx, sc, sizeof(sigctx))) | ||
| 374 | + goto badframe; | ||
| 375 | + | ||
| 376 | + set.sig[0] = sigctx.oldmask; | ||
| 377 | + set.sig[1] = sigctx._unused[3]; | ||
| 378 | + target_to_host_sigset_internal(&host_set, &set); | ||
| 379 | + sigprocmask(SIG_SETMASK, &host_set, NULL); | ||
| 380 | + | ||
| 381 | + sr = (struct target_mcontext *) tswapl((target_ulong)sigctx.regs); | ||
| 382 | + if (!access_ok(VERIFY_READ, sr, sizeof(*sr)) | ||
| 383 | + || restore_user_regs(env, sr, 1)) | ||
| 384 | + goto badframe; | ||
| 385 | + | ||
| 386 | + return 0; | ||
| 387 | + | ||
| 388 | +badframe: | ||
| 389 | + force_sig(TARGET_SIGSEGV); | ||
| 390 | + return 0; | ||
| 391 | +} | ||
| 392 | + | ||
| 393 | +long do_rt_sigreturn(CPUState *env) | ||
| 394 | +{ | ||
| 395 | + fprintf(stderr, "do_rt_sigreturn: not implemented\n"); | ||
| 396 | + return -ENOSYS; | ||
| 397 | +} | ||
| 398 | + | ||
| 399 | #else | ||
| 400 | |||
| 401 | static void setup_frame(int sig, struct emulated_sigaction *ka, | ||
diff --git a/meta/packages/qemu/files/22_net_tuntap_stall.patch b/meta/packages/qemu/files/22_net_tuntap_stall.patch new file mode 100644 index 0000000000..e9b31dfe40 --- /dev/null +++ b/meta/packages/qemu/files/22_net_tuntap_stall.patch | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # vl.c | 2 +- | ||
| 4 | # 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 5 | # | ||
| 6 | Index: vl.c | ||
| 7 | =================================================================== | ||
| 8 | --- vl.c.orig 2007-06-13 11:51:53.000000000 +0100 | ||
| 9 | +++ vl.c 2007-06-13 11:52:10.000000000 +0100 | ||
| 10 | @@ -3617,7 +3617,7 @@ static int tap_open(char *ifname, int if | ||
| 11 | return -1; | ||
| 12 | } | ||
| 13 | memset(&ifr, 0, sizeof(ifr)); | ||
| 14 | - ifr.ifr_flags = IFF_TAP | IFF_NO_PI; | ||
| 15 | + ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE; | ||
| 16 | if (ifname[0] != '\0') | ||
| 17 | pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname); | ||
| 18 | else | ||
diff --git a/meta/packages/qemu/files/30_syscall_ipc.patch b/meta/packages/qemu/files/30_syscall_ipc.patch new file mode 100644 index 0000000000..3dc58102ad --- /dev/null +++ b/meta/packages/qemu/files/30_syscall_ipc.patch | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # linux-user/syscall.c | 7 +++++-- | ||
| 4 | # 1 file changed, 5 insertions(+), 2 deletions(-) | ||
| 5 | # | ||
| 6 | Index: linux-user/syscall.c | ||
| 7 | =================================================================== | ||
| 8 | --- linux-user/syscall.c.orig 2007-04-18 13:25:40.000000000 +0100 | ||
| 9 | +++ linux-user/syscall.c 2007-04-18 13:37:27.000000000 +0100 | ||
| 10 | @@ -43,7 +43,10 @@ | ||
| 11 | #include <sys/poll.h> | ||
| 12 | #include <sys/times.h> | ||
| 13 | #include <sys/shm.h> | ||
| 14 | +#include <sys/ipc.h> | ||
| 15 | #include <sys/sem.h> | ||
| 16 | +#include <sys/shm.h> | ||
| 17 | +#include <sys/msg.h> | ||
| 18 | #include <sys/statfs.h> | ||
| 19 | #include <utime.h> | ||
| 20 | #include <sys/sysinfo.h> | ||
| 21 | @@ -1240,11 +1243,11 @@ static long do_ipc(long call, long first | ||
| 22 | ret = get_errno(shmctl(first, second, NULL)); | ||
| 23 | break; | ||
| 24 | default: | ||
| 25 | - goto unimplemented; | ||
| 26 | + ret = get_errno(shmctl(first, second, (struct shmid_ds *) ptr)); | ||
| 27 | + break; | ||
| 28 | } | ||
| 29 | break; | ||
| 30 | default: | ||
| 31 | - unimplemented: | ||
| 32 | gemu_log("Unsupported ipc call: %ld (version %d)\n", call, version); | ||
| 33 | ret = -ENOSYS; | ||
| 34 | break; | ||
diff --git a/meta/packages/qemu/files/31_syscalls.patch b/meta/packages/qemu/files/31_syscalls.patch new file mode 100644 index 0000000000..e7a1b338f3 --- /dev/null +++ b/meta/packages/qemu/files/31_syscalls.patch | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # Makefile.target | 2 +- | ||
| 4 | # linux-user/syscall.c | 11 ++++++++--- | ||
| 5 | # 2 files changed, 9 insertions(+), 4 deletions(-) | ||
| 6 | # | ||
| 7 | Index: linux-user/syscall.c | ||
| 8 | =================================================================== | ||
| 9 | --- linux-user/syscall.c.orig 2007-06-13 11:51:52.000000000 +0100 | ||
| 10 | +++ linux-user/syscall.c 2007-06-13 11:52:18.000000000 +0100 | ||
| 11 | @@ -180,6 +180,7 @@ extern int getresuid(uid_t *, uid_t *, u | ||
| 12 | extern int setresgid(gid_t, gid_t, gid_t); | ||
| 13 | extern int getresgid(gid_t *, gid_t *, gid_t *); | ||
| 14 | extern int setgroups(int, gid_t *); | ||
| 15 | +extern int uselib(const char*); | ||
| 16 | |||
| 17 | /* | ||
| 18 | * This list is the union of errno values overidden in asm-<arch>/errno.h | ||
| 19 | @@ -3215,7 +3216,8 @@ long do_syscall(void *cpu_env, int num, | ||
| 20 | break; | ||
| 21 | #ifdef TARGET_NR_uselib | ||
| 22 | case TARGET_NR_uselib: | ||
| 23 | - goto unimplemented; | ||
| 24 | + ret = get_errno(uselib(path((const char*)arg1))); | ||
| 25 | + break; | ||
| 26 | #endif | ||
| 27 | #ifdef TARGET_NR_swapon | ||
| 28 | case TARGET_NR_swapon: | ||
| 29 | @@ -4405,7 +4407,9 @@ long do_syscall(void *cpu_env, int num, | ||
| 30 | goto unimplemented; | ||
| 31 | #ifdef TARGET_NR_mincore | ||
| 32 | case TARGET_NR_mincore: | ||
| 33 | - goto unimplemented; | ||
| 34 | + page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE); | ||
| 35 | + ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); | ||
| 36 | + break; | ||
| 37 | #endif | ||
| 38 | #ifdef TARGET_NR_madvise | ||
| 39 | case TARGET_NR_madvise: | ||
| 40 | @@ -4539,7 +4543,8 @@ long do_syscall(void *cpu_env, int num, | ||
| 41 | break; | ||
| 42 | #ifdef TARGET_NR_readahead | ||
| 43 | case TARGET_NR_readahead: | ||
| 44 | - goto unimplemented; | ||
| 45 | + ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3)); | ||
| 46 | + break; | ||
| 47 | #endif | ||
| 48 | #ifdef TARGET_NR_setxattr | ||
| 49 | case TARGET_NR_setxattr: | ||
| 50 | Index: Makefile.target | ||
| 51 | =================================================================== | ||
| 52 | --- Makefile.target.orig 2007-06-13 11:51:52.000000000 +0100 | ||
| 53 | +++ Makefile.target 2007-06-13 11:51:54.000000000 +0100 | ||
| 54 | @@ -215,7 +215,7 @@ OP_LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS | ||
| 55 | ######################################################### | ||
| 56 | |||
| 57 | CPPFLAGS+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE | ||
| 58 | -LIBS+=-lm | ||
| 59 | +LIBS+=-lm -lrt | ||
| 60 | ifndef CONFIG_USER_ONLY | ||
| 61 | LIBS+=-lz | ||
| 62 | endif | ||
diff --git a/meta/packages/qemu/files/32_syscall_sysctl.patch b/meta/packages/qemu/files/32_syscall_sysctl.patch new file mode 100644 index 0000000000..d175cf96ba --- /dev/null +++ b/meta/packages/qemu/files/32_syscall_sysctl.patch | |||
| @@ -0,0 +1,56 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # linux-user/syscall.c | 33 ++++++++++++++++++++++++++++++--- | ||
| 4 | # 1 file changed, 30 insertions(+), 3 deletions(-) | ||
| 5 | # | ||
| 6 | Index: linux-user/syscall.c | ||
| 7 | =================================================================== | ||
| 8 | --- linux-user/syscall.c.orig 2007-06-13 11:51:54.000000000 +0100 | ||
| 9 | +++ linux-user/syscall.c 2007-06-13 11:52:17.000000000 +0100 | ||
| 10 | @@ -52,6 +52,7 @@ | ||
| 11 | //#include <sys/user.h> | ||
| 12 | #include <netinet/ip.h> | ||
| 13 | #include <netinet/tcp.h> | ||
| 14 | +#include <sys/sysctl.h> | ||
| 15 | |||
| 16 | #define termios host_termios | ||
| 17 | #define winsize host_winsize | ||
| 18 | @@ -3912,9 +3913,35 @@ long do_syscall(void *cpu_env, int num, | ||
| 19 | break; | ||
| 20 | #endif | ||
| 21 | case TARGET_NR__sysctl: | ||
| 22 | - /* We don't implement this, but ENODIR is always a safe | ||
| 23 | - return value. */ | ||
| 24 | - return -ENOTDIR; | ||
| 25 | + { | ||
| 26 | + struct __sysctl_args *args = (struct __sysctl_args *) arg1; | ||
| 27 | + int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i; | ||
| 28 | + void *oldval, *newval; | ||
| 29 | + | ||
| 30 | + name_target = (int *) tswapl((long) args->name); | ||
| 31 | + nlen = tswapl(args->nlen); | ||
| 32 | + oldval = (void *) tswapl((long) args->oldval); | ||
| 33 | + oldlenp = (int *) tswapl((long) args->oldlenp); | ||
| 34 | + oldlen = tswapl(*oldlenp); | ||
| 35 | + newval = (void *) tswapl((long) args->newval); | ||
| 36 | + newlen = tswapl(args->newlen); | ||
| 37 | + | ||
| 38 | + name = alloca(nlen * sizeof (int)); | ||
| 39 | + for (i = 0; i < nlen; i++) | ||
| 40 | + name[i] = tswapl(name_target[i]); | ||
| 41 | + | ||
| 42 | + if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) { | ||
| 43 | + ret = get_errno( | ||
| 44 | + sysctl(name, nlen, oldval, &oldlen, newval, newlen)); | ||
| 45 | + if (!is_error(ret)) { | ||
| 46 | + *oldlenp = tswapl(oldlen); | ||
| 47 | + } | ||
| 48 | + } else { | ||
| 49 | + gemu_log("qemu: Unsupported sysctl name\n"); | ||
| 50 | + ret = -ENOSYS; | ||
| 51 | + } | ||
| 52 | + } | ||
| 53 | + break; | ||
| 54 | case TARGET_NR_sched_setparam: | ||
| 55 | { | ||
| 56 | struct sched_param *target_schp; | ||
diff --git a/meta/packages/qemu/files/33_syscall_ppc_clone.patch b/meta/packages/qemu/files/33_syscall_ppc_clone.patch new file mode 100644 index 0000000000..a71f8b1944 --- /dev/null +++ b/meta/packages/qemu/files/33_syscall_ppc_clone.patch | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # linux-user/syscall.c | 6 +----- | ||
| 4 | # 1 file changed, 1 insertion(+), 5 deletions(-) | ||
| 5 | # | ||
| 6 | Index: linux-user/syscall.c | ||
| 7 | =================================================================== | ||
| 8 | --- linux-user/syscall.c.orig 2007-06-13 11:51:54.000000000 +0100 | ||
| 9 | +++ linux-user/syscall.c 2007-06-13 11:52:17.000000000 +0100 | ||
| 10 | @@ -2177,11 +2177,7 @@ int do_fork(CPUState *env, unsigned int | ||
| 11 | if (!newsp) | ||
| 12 | newsp = env->gpr[1]; | ||
| 13 | new_env->gpr[1] = newsp; | ||
| 14 | - { | ||
| 15 | - int i; | ||
| 16 | - for (i = 7; i < 32; i++) | ||
| 17 | - new_env->gpr[i] = 0; | ||
| 18 | - } | ||
| 19 | + new_env->gpr[3] = 0; | ||
| 20 | #elif defined(TARGET_SH4) | ||
| 21 | if (!newsp) | ||
| 22 | newsp = env->gregs[15]; | ||
diff --git a/meta/packages/qemu/files/39_syscall_fadvise64.patch b/meta/packages/qemu/files/39_syscall_fadvise64.patch new file mode 100644 index 0000000000..0a7f4c48dd --- /dev/null +++ b/meta/packages/qemu/files/39_syscall_fadvise64.patch | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | --- | ||
| 2 | linux-user/syscall.c | 6 ++++++ | ||
| 3 | 1 file changed, 6 insertions(+) | ||
| 4 | |||
| 5 | Index: linux-user/syscall.c | ||
| 6 | =================================================================== | ||
| 7 | --- linux-user/syscall.c.orig 2007-06-13 11:51:55.000000000 +0100 | ||
| 8 | +++ linux-user/syscall.c 2007-06-13 11:52:13.000000000 +0100 | ||
| 9 | @@ -4434,6 +4434,12 @@ long do_syscall(void *cpu_env, int num, | ||
| 10 | ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); | ||
| 11 | break; | ||
| 12 | #endif | ||
| 13 | +#ifdef TARGET_NR_fadvise64_64 | ||
| 14 | + case TARGET_NR_fadvise64_64: | ||
| 15 | + /* Just return success */ | ||
| 16 | + ret = get_errno(0); | ||
| 17 | + break; | ||
| 18 | +#endif | ||
| 19 | #ifdef TARGET_NR_madvise | ||
| 20 | case TARGET_NR_madvise: | ||
| 21 | /* A straight passthrough may not be safe because qemu sometimes | ||
diff --git a/meta/packages/qemu/files/41_arm_fpa_sigfpe.patch b/meta/packages/qemu/files/41_arm_fpa_sigfpe.patch new file mode 100644 index 0000000000..d579dbc66e --- /dev/null +++ b/meta/packages/qemu/files/41_arm_fpa_sigfpe.patch | |||
| @@ -0,0 +1,105 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # linux-user/main.c | 53 +++++++++++++++++++++++++++++++++++++++++++++-- | ||
| 4 | # target-arm/nwfpe/fpa11.c | 7 ++++++ | ||
| 5 | # 2 files changed, 58 insertions(+), 2 deletions(-) | ||
| 6 | # | ||
| 7 | Index: linux-user/main.c | ||
| 8 | =================================================================== | ||
| 9 | --- linux-user/main.c.orig 2007-06-13 11:51:53.000000000 +0100 | ||
| 10 | +++ linux-user/main.c 2007-06-13 11:52:07.000000000 +0100 | ||
| 11 | @@ -339,18 +339,67 @@ void cpu_loop(CPUARMState *env) | ||
| 12 | { | ||
| 13 | TaskState *ts = env->opaque; | ||
| 14 | uint32_t opcode; | ||
| 15 | + int rc; | ||
| 16 | |||
| 17 | /* we handle the FPU emulation here, as Linux */ | ||
| 18 | /* we get the opcode */ | ||
| 19 | opcode = tget32(env->regs[15]); | ||
| 20 | |||
| 21 | - if (EmulateAll(opcode, &ts->fpa, env) == 0) { | ||
| 22 | + rc = EmulateAll(opcode, &ts->fpa, env); | ||
| 23 | + if (rc == 0) { /* illegal instruction */ | ||
| 24 | info.si_signo = SIGILL; | ||
| 25 | info.si_errno = 0; | ||
| 26 | info.si_code = TARGET_ILL_ILLOPN; | ||
| 27 | info._sifields._sigfault._addr = env->regs[15]; | ||
| 28 | queue_signal(info.si_signo, &info); | ||
| 29 | - } else { | ||
| 30 | + } else if (rc < 0) { /* FP exception */ | ||
| 31 | + int arm_fpe=0; | ||
| 32 | + | ||
| 33 | + /* translate softfloat flags to FPSR flags */ | ||
| 34 | + if (-rc & float_flag_invalid) | ||
| 35 | + arm_fpe |= BIT_IOC; | ||
| 36 | + if (-rc & float_flag_divbyzero) | ||
| 37 | + arm_fpe |= BIT_DZC; | ||
| 38 | + if (-rc & float_flag_overflow) | ||
| 39 | + arm_fpe |= BIT_OFC; | ||
| 40 | + if (-rc & float_flag_underflow) | ||
| 41 | + arm_fpe |= BIT_UFC; | ||
| 42 | + if (-rc & float_flag_inexact) | ||
| 43 | + arm_fpe |= BIT_IXC; | ||
| 44 | + | ||
| 45 | + FPSR fpsr = ts->fpa.fpsr; | ||
| 46 | + //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe); | ||
| 47 | + | ||
| 48 | + if (fpsr & (arm_fpe << 16)) { /* exception enabled? */ | ||
| 49 | + info.si_signo = SIGFPE; | ||
| 50 | + info.si_errno = 0; | ||
| 51 | + | ||
| 52 | + /* ordered by priority, least first */ | ||
| 53 | + if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES; | ||
| 54 | + if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND; | ||
| 55 | + if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF; | ||
| 56 | + if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV; | ||
| 57 | + if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV; | ||
| 58 | + | ||
| 59 | + info._sifields._sigfault._addr = env->regs[15]; | ||
| 60 | + queue_signal(info.si_signo, &info); | ||
| 61 | + } else { | ||
| 62 | + env->regs[15] += 4; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + /* accumulate unenabled exceptions */ | ||
| 66 | + if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC)) | ||
| 67 | + fpsr |= BIT_IXC; | ||
| 68 | + if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC)) | ||
| 69 | + fpsr |= BIT_UFC; | ||
| 70 | + if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC)) | ||
| 71 | + fpsr |= BIT_OFC; | ||
| 72 | + if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC)) | ||
| 73 | + fpsr |= BIT_DZC; | ||
| 74 | + if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC)) | ||
| 75 | + fpsr |= BIT_IOC; | ||
| 76 | + ts->fpa.fpsr=fpsr; | ||
| 77 | + } else { /* everything OK */ | ||
| 78 | /* increment PC */ | ||
| 79 | env->regs[15] += 4; | ||
| 80 | } | ||
| 81 | Index: target-arm/nwfpe/fpa11.c | ||
| 82 | =================================================================== | ||
| 83 | --- target-arm/nwfpe/fpa11.c.orig 2007-06-13 11:51:52.000000000 +0100 | ||
| 84 | +++ target-arm/nwfpe/fpa11.c 2007-06-13 11:51:55.000000000 +0100 | ||
| 85 | @@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc | ||
| 86 | fpa11->initflag = 1; | ||
| 87 | } | ||
| 88 | |||
| 89 | + set_float_exception_flags(0, &fpa11->fp_status); | ||
| 90 | + | ||
| 91 | if (TEST_OPCODE(opcode,MASK_CPRT)) | ||
| 92 | { | ||
| 93 | //fprintf(stderr,"emulating CPRT\n"); | ||
| 94 | @@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc | ||
| 95 | } | ||
| 96 | |||
| 97 | // restore_flags(flags); | ||
| 98 | + if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status)) | ||
| 99 | + { | ||
| 100 | + //printf("fef 0x%x\n",float_exception_flags); | ||
| 101 | + nRc=-get_float_exception_flags(&fpa11->fp_status); | ||
| 102 | + } | ||
| 103 | |||
| 104 | //printf("returning %d\n",nRc); | ||
| 105 | return(nRc); | ||
diff --git a/meta/packages/qemu/files/52_ne2000_return.patch b/meta/packages/qemu/files/52_ne2000_return.patch new file mode 100644 index 0000000000..f0316c8042 --- /dev/null +++ b/meta/packages/qemu/files/52_ne2000_return.patch | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | --- | ||
| 2 | hw/ne2000.c | 2 +- | ||
| 3 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 4 | |||
| 5 | Index: qemu/hw/ne2000.c | ||
| 6 | =================================================================== | ||
| 7 | --- qemu.orig/hw/ne2000.c 2007-06-13 11:51:52.000000000 +0100 | ||
| 8 | +++ qemu/hw/ne2000.c 2007-06-13 11:51:55.000000000 +0100 | ||
| 9 | @@ -214,7 +214,7 @@ static int ne2000_can_receive(void *opaq | ||
| 10 | NE2000State *s = opaque; | ||
| 11 | |||
| 12 | if (s->cmd & E8390_STOP) | ||
| 13 | - return 1; | ||
| 14 | + return 0; | ||
| 15 | return !ne2000_buffer_full(s); | ||
| 16 | } | ||
| 17 | |||
diff --git a/meta/packages/qemu/files/61_safe_64bit_int.patch b/meta/packages/qemu/files/61_safe_64bit_int.patch new file mode 100644 index 0000000000..553e57623e --- /dev/null +++ b/meta/packages/qemu/files/61_safe_64bit_int.patch | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # dyngen-exec.h | 4 ++-- | ||
| 4 | # 1 file changed, 2 insertions(+), 2 deletions(-) | ||
| 5 | # | ||
| 6 | Index: dyngen-exec.h | ||
| 7 | =================================================================== | ||
| 8 | --- dyngen-exec.h.orig 2007-06-13 11:48:22.000000000 +0100 | ||
| 9 | +++ dyngen-exec.h 2007-06-13 11:51:55.000000000 +0100 | ||
| 10 | @@ -38,7 +38,7 @@ typedef unsigned int uint32_t; | ||
| 11 | // Linux/Sparc64 defines uint64_t | ||
| 12 | #if !(defined (__sparc_v9__) && defined(__linux__)) | ||
| 13 | /* XXX may be done for all 64 bits targets ? */ | ||
| 14 | -#if defined (__x86_64__) || defined(__ia64) | ||
| 15 | +#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__) | ||
| 16 | typedef unsigned long uint64_t; | ||
| 17 | #else | ||
| 18 | typedef unsigned long long uint64_t; | ||
| 19 | @@ -55,7 +55,7 @@ typedef signed short int16_t; | ||
| 20 | typedef signed int int32_t; | ||
| 21 | // Linux/Sparc64 defines int64_t | ||
| 22 | #if !(defined (__sparc_v9__) && defined(__linux__)) | ||
| 23 | -#if defined (__x86_64__) || defined(__ia64) | ||
| 24 | +#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__) | ||
| 25 | typedef signed long int64_t; | ||
| 26 | #else | ||
| 27 | typedef signed long long int64_t; | ||
diff --git a/meta/packages/qemu/files/63_sparc_build.patch b/meta/packages/qemu/files/63_sparc_build.patch new file mode 100644 index 0000000000..32a6bc0ee0 --- /dev/null +++ b/meta/packages/qemu/files/63_sparc_build.patch | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | #DPATCHLEVEL=0 | ||
| 2 | --- | ||
| 3 | # sparc.ld | 2 +- | ||
| 4 | # 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 5 | # | ||
| 6 | Index: sparc.ld | ||
| 7 | =================================================================== | ||
| 8 | --- sparc.ld.orig 2007-06-13 11:48:22.000000000 +0100 | ||
| 9 | +++ sparc.ld 2007-06-13 11:51:56.000000000 +0100 | ||
| 10 | @@ -6,7 +6,7 @@ ENTRY(_start) | ||
| 11 | SECTIONS | ||
| 12 | { | ||
| 13 | /* Read-only sections, merged into text segment: */ | ||
| 14 | - . = 0x60000000 + SIZEOF_HEADERS; | ||
| 15 | + . = 0x60000000 + 0x400; | ||
| 16 | .interp : { *(.interp) } | ||
| 17 | .hash : { *(.hash) } | ||
| 18 | .dynsym : { *(.dynsym) } | ||
diff --git a/meta/packages/qemu/files/64_ppc_asm_constraints.patch b/meta/packages/qemu/files/64_ppc_asm_constraints.patch new file mode 100644 index 0000000000..e4858b79d7 --- /dev/null +++ b/meta/packages/qemu/files/64_ppc_asm_constraints.patch | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | #DPATCHLEVEL=1 | ||
| 2 | --- | ||
| 3 | # cpu-all.h | 2 +- | ||
| 4 | # 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 5 | # | ||
| 6 | Index: qemu/cpu-all.h | ||
| 7 | =================================================================== | ||
| 8 | --- qemu.orig/cpu-all.h 2007-06-13 11:48:22.000000000 +0100 | ||
| 9 | +++ qemu/cpu-all.h 2007-06-13 11:51:56.000000000 +0100 | ||
| 10 | @@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i | ||
| 11 | static inline void stl_le_p(void *ptr, int v) | ||
| 12 | { | ||
| 13 | #ifdef __powerpc__ | ||
| 14 | - __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr)); | ||
| 15 | + __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory"); | ||
| 16 | #else | ||
| 17 | uint8_t *p = ptr; | ||
| 18 | p[0] = v; | ||
diff --git a/meta/packages/qemu/files/65_kfreebsd.patch b/meta/packages/qemu/files/65_kfreebsd.patch new file mode 100644 index 0000000000..ea060811a1 --- /dev/null +++ b/meta/packages/qemu/files/65_kfreebsd.patch | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | --- | ||
| 2 | configure | 6 ++++++ | ||
| 3 | vl.c | 4 +++- | ||
| 4 | 2 files changed, 9 insertions(+), 1 deletion(-) | ||
| 5 | |||
| 6 | Index: configure | ||
| 7 | =================================================================== | ||
| 8 | --- configure.orig 2007-06-13 11:48:22.000000000 +0100 | ||
| 9 | +++ configure 2007-06-13 11:52:07.000000000 +0100 | ||
| 10 | @@ -112,6 +112,12 @@ OS_CFLAGS="-mno-cygwin" | ||
| 11 | MINGW32*) | ||
| 12 | mingw32="yes" | ||
| 13 | ;; | ||
| 14 | +GNU/kFreeBSD) | ||
| 15 | +oss="yes" | ||
| 16 | +if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then | ||
| 17 | + kqemu="yes" | ||
| 18 | +fi | ||
| 19 | +;; | ||
| 20 | FreeBSD) | ||
| 21 | bsd="yes" | ||
| 22 | oss="yes" | ||
| 23 | Index: vl.c | ||
| 24 | =================================================================== | ||
| 25 | --- vl.c.orig 2007-06-13 11:51:54.000000000 +0100 | ||
| 26 | +++ vl.c 2007-06-13 11:51:56.000000000 +0100 | ||
| 27 | @@ -47,6 +47,8 @@ | ||
| 28 | #ifndef __APPLE__ | ||
| 29 | #include <libutil.h> | ||
| 30 | #endif | ||
| 31 | +#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__) | ||
| 32 | +#include <freebsd/stdlib.h> | ||
| 33 | #else | ||
| 34 | #ifndef __sun__ | ||
| 35 | #include <linux/if.h> | ||
| 36 | @@ -3454,7 +3456,7 @@ static TAPState *net_tap_fd_init(VLANSta | ||
| 37 | return s; | ||
| 38 | } | ||
| 39 | |||
| 40 | -#ifdef _BSD | ||
| 41 | +#if defined (_BSD) || defined (__FreeBSD_kernel__) | ||
| 42 | static int tap_open(char *ifname, int ifname_size) | ||
| 43 | { | ||
| 44 | int fd; | ||
diff --git a/meta/packages/qemu/files/66_tls_ld.patch b/meta/packages/qemu/files/66_tls_ld.patch new file mode 100644 index 0000000000..54e02eff8b --- /dev/null +++ b/meta/packages/qemu/files/66_tls_ld.patch | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | --- | ||
| 2 | arm.ld | 7 +++++++ | ||
| 3 | i386.ld | 7 +++++++ | ||
| 4 | 2 files changed, 14 insertions(+) | ||
| 5 | |||
| 6 | Index: arm.ld | ||
| 7 | =================================================================== | ||
| 8 | --- arm.ld.orig 2007-06-13 11:48:22.000000000 +0100 | ||
| 9 | +++ arm.ld 2007-06-13 11:51:56.000000000 +0100 | ||
| 10 | @@ -26,6 +26,10 @@ SECTIONS | ||
| 11 | { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } | ||
| 12 | .rela.rodata : | ||
| 13 | { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } | ||
| 14 | + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } | ||
| 15 | + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } | ||
| 16 | + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } | ||
| 17 | + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } | ||
| 18 | .rel.got : { *(.rel.got) } | ||
| 19 | .rela.got : { *(.rela.got) } | ||
| 20 | .rel.ctors : { *(.rel.ctors) } | ||
| 21 | @@ -58,6 +62,9 @@ SECTIONS | ||
| 22 | .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } | ||
| 23 | __exidx_end = .; | ||
| 24 | .reginfo : { *(.reginfo) } | ||
| 25 | + /* Thread Local Storage sections */ | ||
| 26 | + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } | ||
| 27 | + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } | ||
| 28 | /* Adjust the address for the data segment. We want to adjust up to | ||
| 29 | the same address within the page on the next page up. */ | ||
| 30 | . = ALIGN(0x100000) + (. & (0x100000 - 1)); | ||
| 31 | Index: i386.ld | ||
| 32 | =================================================================== | ||
| 33 | --- i386.ld.orig 2007-06-13 11:48:22.000000000 +0100 | ||
| 34 | +++ i386.ld 2007-06-13 11:51:56.000000000 +0100 | ||
| 35 | @@ -28,6 +28,10 @@ SECTIONS | ||
| 36 | { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } | ||
| 37 | .rela.rodata : | ||
| 38 | { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } | ||
| 39 | + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } | ||
| 40 | + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } | ||
| 41 | + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } | ||
| 42 | + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } | ||
| 43 | .rel.got : { *(.rel.got) } | ||
| 44 | .rela.got : { *(.rela.got) } | ||
| 45 | .rel.ctors : { *(.rel.ctors) } | ||
| 46 | @@ -53,6 +57,9 @@ SECTIONS | ||
| 47 | _etext = .; | ||
| 48 | PROVIDE (etext = .); | ||
| 49 | .fini : { *(.fini) } =0x47ff041f | ||
| 50 | + /* Thread Local Storage sections */ | ||
| 51 | + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } | ||
| 52 | + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } | ||
| 53 | . = ALIGN(32 / 8); | ||
| 54 | PROVIDE (__preinit_array_start = .); | ||
| 55 | .preinit_array : { *(.preinit_array) } | ||
diff --git a/meta/packages/qemu/files/qemu-sdl-cursor.patch b/meta/packages/qemu/files/91-oh-sdl-cursor.patch index bd6a51a1f5..5280a5bd4a 100644 --- a/meta/packages/qemu/files/qemu-sdl-cursor.patch +++ b/meta/packages/qemu/files/91-oh-sdl-cursor.patch | |||
| @@ -1,9 +1,14 @@ | |||
| 1 | Index: qemu/sdl.c | 1 | === modified file 'sdl.c' |
| 2 | --- | ||
| 3 | sdl.c | 2 +- | ||
| 4 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 5 | |||
| 6 | Index: sdl.c | ||
| 2 | =================================================================== | 7 | =================================================================== |
| 3 | --- qemu.orig/sdl.c 2006-10-02 17:06:12.000000000 +0100 | 8 | --- sdl.c.orig 2007-06-13 11:48:22.000000000 +0100 |
| 4 | +++ qemu/sdl.c 2006-10-02 17:06:59.000000000 +0100 | 9 | +++ sdl.c 2007-06-13 11:51:56.000000000 +0100 |
| 5 | @@ -287,7 +287,7 @@ | 10 | @@ -241,7 +241,7 @@ static void sdl_hide_cursor(void) |
| 6 | { | 11 | |
| 7 | if (kbd_mouse_is_absolute()) { | 12 | if (kbd_mouse_is_absolute()) { |
| 8 | SDL_ShowCursor(1); | 13 | SDL_ShowCursor(1); |
| 9 | - SDL_SetCursor(sdl_cursor_hidden); | 14 | - SDL_SetCursor(sdl_cursor_hidden); |
diff --git a/meta/packages/qemu/files/pl110_rgb-r0.patch b/meta/packages/qemu/files/93-oh-pl110-rgb.patch index 09e5898d3a..4911ac131f 100644 --- a/meta/packages/qemu/files/pl110_rgb-r0.patch +++ b/meta/packages/qemu/files/93-oh-pl110-rgb.patch | |||
| @@ -1,7 +1,13 @@ | |||
| 1 | Index: qemu/hw/pl110.c | 1 | === modified file 'hw/pl110.c' |
| 2 | --- | ||
| 3 | hw/pl110.c | 13 ++++-- | ||
| 4 | hw/pl110_template.h | 107 ++++++++++++++++++++++++++++++++++++---------------- | ||
| 5 | 2 files changed, 86 insertions(+), 34 deletions(-) | ||
| 6 | |||
| 7 | Index: hw/pl110.c | ||
| 2 | =================================================================== | 8 | =================================================================== |
| 3 | --- qemu.orig/hw/pl110.c 2006-04-11 21:49:46.000000000 +0100 | 9 | --- hw/pl110.c.orig 2007-06-13 11:48:22.000000000 +0100 |
| 4 | +++ qemu/hw/pl110.c 2006-05-24 22:53:00.000000000 +0100 | 10 | +++ hw/pl110.c 2007-06-13 11:51:57.000000000 +0100 |
| 5 | @@ -10,6 +10,7 @@ | 11 | @@ -10,6 +10,7 @@ |
| 6 | #include "vl.h" | 12 | #include "vl.h" |
| 7 | 13 | ||
| @@ -10,7 +16,7 @@ Index: qemu/hw/pl110.c | |||
| 10 | #define PL110_CR_BEBO 0x200 | 16 | #define PL110_CR_BEBO 0x200 |
| 11 | #define PL110_CR_BEPO 0x400 | 17 | #define PL110_CR_BEPO 0x400 |
| 12 | #define PL110_CR_PWR 0x800 | 18 | #define PL110_CR_PWR 0x800 |
| 13 | @@ -115,6 +116,7 @@ | 19 | @@ -114,6 +115,7 @@ static void pl110_update_display(void *o |
| 14 | int first, last = 0; | 20 | int first, last = 0; |
| 15 | int dirty, new_dirty; | 21 | int dirty, new_dirty; |
| 16 | int i; | 22 | int i; |
| @@ -18,7 +24,7 @@ Index: qemu/hw/pl110.c | |||
| 18 | 24 | ||
| 19 | if (!pl110_enabled(s)) | 25 | if (!pl110_enabled(s)) |
| 20 | return; | 26 | return; |
| 21 | @@ -146,12 +148,17 @@ | 27 | @@ -145,12 +147,17 @@ static void pl110_update_display(void *o |
| 22 | fprintf(stderr, "pl110: Bad color depth\n"); | 28 | fprintf(stderr, "pl110: Bad color depth\n"); |
| 23 | exit(1); | 29 | exit(1); |
| 24 | } | 30 | } |
| @@ -39,10 +45,10 @@ Index: qemu/hw/pl110.c | |||
| 39 | 45 | ||
| 40 | src_width = s->cols; | 46 | src_width = s->cols; |
| 41 | switch (s->bpp) { | 47 | switch (s->bpp) { |
| 42 | Index: qemu/hw/pl110_template.h | 48 | Index: hw/pl110_template.h |
| 43 | =================================================================== | 49 | =================================================================== |
| 44 | --- qemu.orig/hw/pl110_template.h 2006-02-19 12:31:32.000000000 +0000 | 50 | --- hw/pl110_template.h.orig 2007-06-13 11:48:22.000000000 +0100 |
| 45 | +++ qemu/hw/pl110_template.h 2006-05-24 23:04:03.000000000 +0100 | 51 | +++ hw/pl110_template.h 2007-06-13 11:51:57.000000000 +0100 |
| 46 | @@ -24,6 +24,16 @@ | 52 | @@ -24,6 +24,16 @@ |
| 47 | #error unknown bit depth | 53 | #error unknown bit depth |
| 48 | #endif | 54 | #endif |
| @@ -70,34 +76,32 @@ Index: qemu/hw/pl110_template.h | |||
| 70 | - glue(pl110_draw_line8_lblp,BITS), | 76 | - glue(pl110_draw_line8_lblp,BITS), |
| 71 | - glue(pl110_draw_line16_lblp,BITS), | 77 | - glue(pl110_draw_line16_lblp,BITS), |
| 72 | - glue(pl110_draw_line32_lblp,BITS), | 78 | - glue(pl110_draw_line32_lblp,BITS), |
| 73 | - | ||
| 74 | - glue(pl110_draw_line1_bbbp,BITS), | ||
| 75 | - glue(pl110_draw_line2_bbbp,BITS), | ||
| 76 | - glue(pl110_draw_line4_bbbp,BITS), | ||
| 77 | - glue(pl110_draw_line8_bbbp,BITS), | ||
| 78 | - glue(pl110_draw_line16_bbbp,BITS), | ||
| 79 | - glue(pl110_draw_line32_bbbp,BITS), | ||
| 80 | - | ||
| 81 | - glue(pl110_draw_line1_lbbp,BITS), | ||
| 82 | - glue(pl110_draw_line2_lbbp,BITS), | ||
| 83 | - glue(pl110_draw_line4_lbbp,BITS), | ||
| 84 | - glue(pl110_draw_line8_lbbp,BITS), | ||
| 85 | - glue(pl110_draw_line16_lbbp,BITS), | ||
| 86 | - glue(pl110_draw_line32_lbbp,BITS) | ||
| 87 | + glue(pl110_draw_line1_lblp_bgr,BITS), | 79 | + glue(pl110_draw_line1_lblp_bgr,BITS), |
| 88 | + glue(pl110_draw_line2_lblp_bgr,BITS), | 80 | + glue(pl110_draw_line2_lblp_bgr,BITS), |
| 89 | + glue(pl110_draw_line4_lblp_bgr,BITS), | 81 | + glue(pl110_draw_line4_lblp_bgr,BITS), |
| 90 | + glue(pl110_draw_line8_lblp_bgr,BITS), | 82 | + glue(pl110_draw_line8_lblp_bgr,BITS), |
| 91 | + glue(pl110_draw_line16_lblp_bgr,BITS), | 83 | + glue(pl110_draw_line16_lblp_bgr,BITS), |
| 92 | + glue(pl110_draw_line32_lblp_bgr,BITS), | 84 | + glue(pl110_draw_line32_lblp_bgr,BITS), |
| 93 | + | 85 | |
| 86 | - glue(pl110_draw_line1_bbbp,BITS), | ||
| 87 | - glue(pl110_draw_line2_bbbp,BITS), | ||
| 88 | - glue(pl110_draw_line4_bbbp,BITS), | ||
| 89 | - glue(pl110_draw_line8_bbbp,BITS), | ||
| 90 | - glue(pl110_draw_line16_bbbp,BITS), | ||
| 91 | - glue(pl110_draw_line32_bbbp,BITS), | ||
| 94 | + glue(pl110_draw_line1_bbbp_bgr,BITS), | 92 | + glue(pl110_draw_line1_bbbp_bgr,BITS), |
| 95 | + glue(pl110_draw_line2_bbbp_bgr,BITS), | 93 | + glue(pl110_draw_line2_bbbp_bgr,BITS), |
| 96 | + glue(pl110_draw_line4_bbbp_bgr,BITS), | 94 | + glue(pl110_draw_line4_bbbp_bgr,BITS), |
| 97 | + glue(pl110_draw_line8_bbbp_bgr,BITS), | 95 | + glue(pl110_draw_line8_bbbp_bgr,BITS), |
| 98 | + glue(pl110_draw_line16_bbbp_bgr,BITS), | 96 | + glue(pl110_draw_line16_bbbp_bgr,BITS), |
| 99 | + glue(pl110_draw_line32_bbbp_bgr,BITS), | 97 | + glue(pl110_draw_line32_bbbp_bgr,BITS), |
| 100 | + | 98 | |
| 99 | - glue(pl110_draw_line1_lbbp,BITS), | ||
| 100 | - glue(pl110_draw_line2_lbbp,BITS), | ||
| 101 | - glue(pl110_draw_line4_lbbp,BITS), | ||
| 102 | - glue(pl110_draw_line8_lbbp,BITS), | ||
| 103 | - glue(pl110_draw_line16_lbbp,BITS), | ||
| 104 | - glue(pl110_draw_line32_lbbp,BITS) | ||
| 101 | + glue(pl110_draw_line1_lbbp_bgr,BITS), | 105 | + glue(pl110_draw_line1_lbbp_bgr,BITS), |
| 102 | + glue(pl110_draw_line2_lbbp_bgr,BITS), | 106 | + glue(pl110_draw_line2_lbbp_bgr,BITS), |
| 103 | + glue(pl110_draw_line4_lbbp_bgr,BITS), | 107 | + glue(pl110_draw_line4_lbbp_bgr,BITS), |
| @@ -128,7 +132,7 @@ Index: qemu/hw/pl110_template.h | |||
| 128 | }; | 132 | }; |
| 129 | 133 | ||
| 130 | #undef BITS | 134 | #undef BITS |
| 131 | @@ -61,18 +92,18 @@ | 135 | @@ -61,18 +92,18 @@ static drawfn glue(pl110_draw_fn_,BITS)[ |
| 132 | #else | 136 | #else |
| 133 | 137 | ||
| 134 | #if ORDER == 0 | 138 | #if ORDER == 0 |
| @@ -150,7 +154,7 @@ Index: qemu/hw/pl110_template.h | |||
| 150 | #ifdef WORDS_BIGENDIAN | 154 | #ifdef WORDS_BIGENDIAN |
| 151 | #define SWAP_WORDS 1 | 155 | #define SWAP_WORDS 1 |
| 152 | #endif | 156 | #endif |
| 153 | @@ -195,27 +226,34 @@ | 157 | @@ -195,27 +226,34 @@ static void glue(pl110_draw_line16_,NAME |
| 154 | #ifdef SWAP_WORDS | 158 | #ifdef SWAP_WORDS |
| 155 | data = bswap32(data); | 159 | data = bswap32(data); |
| 156 | #endif | 160 | #endif |
| @@ -191,7 +195,7 @@ Index: qemu/hw/pl110_template.h | |||
| 191 | data >>= 5; | 195 | data >>= 5; |
| 192 | COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); | 196 | COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); |
| 193 | width -= 2; | 197 | width -= 2; |
| 194 | @@ -229,14 +267,21 @@ | 198 | @@ -229,14 +267,21 @@ static void glue(pl110_draw_line32_,NAME |
| 195 | unsigned int r, g, b; | 199 | unsigned int r, g, b; |
| 196 | while (width > 0) { | 200 | while (width > 0) { |
| 197 | data = *(uint32_t *)src; | 201 | data = *(uint32_t *)src; |
diff --git a/meta/packages/qemu/files/arm_nptl.patch b/meta/packages/qemu/files/94-oh-arm-nptl.patch index f9b10aebc5..37d7171983 100644 --- a/meta/packages/qemu/files/arm_nptl.patch +++ b/meta/packages/qemu/files/94-oh-arm-nptl.patch | |||
| @@ -1,27 +1,41 @@ | |||
| 1 | --- | ||
| 2 | configure | 29 ++++++ | ||
| 3 | exec-all.h | 165 -------------------------------------- | ||
| 4 | linux-user/arm/syscall.h | 4 | ||
| 5 | linux-user/main.c | 94 ++++++++++++++++++--- | ||
| 6 | linux-user/qemu.h | 3 | ||
| 7 | linux-user/syscall.c | 90 ++++++++++++++++++-- | ||
| 8 | qemu_spinlock.h | 204 +++++++++++++++++++++++++++++++++++++++++++++++ | ||
| 9 | target-arm/cpu.h | 19 ++++ | ||
| 10 | target-arm/exec.h | 2 | ||
| 11 | target-arm/op.c | 6 + | ||
| 12 | target-arm/translate.c | 10 ++ | ||
| 13 | 11 files changed, 437 insertions(+), 189 deletions(-) | ||
| 14 | |||
| 1 | Index: qemu/configure | 15 | Index: qemu/configure |
| 2 | =================================================================== | 16 | =================================================================== |
| 3 | --- qemu.orig/configure 2006-08-26 16:31:53.000000000 +0100 | 17 | --- qemu.orig/configure 2007-06-13 11:51:56.000000000 +0100 |
| 4 | +++ qemu/configure 2006-08-26 16:31:53.000000000 +0100 | 18 | +++ qemu/configure 2007-06-13 11:51:57.000000000 +0100 |
| 5 | @@ -97,6 +97,7 @@ | 19 | @@ -101,6 +101,7 @@ linux_user="no" |
| 20 | darwin_user="no" | ||
| 6 | build_docs="no" | 21 | build_docs="no" |
| 7 | build_acpi_tables="no" | ||
| 8 | uname_release="" | 22 | uname_release="" |
| 9 | +nptl="yes" | 23 | +nptl="yes" |
| 10 | 24 | ||
| 11 | # OS specific | 25 | # OS specific |
| 12 | targetos=`uname -s` | 26 | targetos=`uname -s` |
| 13 | @@ -243,6 +244,8 @@ | 27 | @@ -287,6 +288,8 @@ for opt do |
| 14 | ;; | 28 | *) echo "undefined SPARC architecture. Exiting";exit 1;; |
| 15 | --enable-iasl) build_acpi_tables="yes" | 29 | esac |
| 16 | ;; | 30 | ;; |
| 17 | + --disable-nptl) nptl="no" | 31 | + --disable-nptl) nptl="no" |
| 18 | + ;; | 32 | + ;; |
| 19 | esac | 33 | esac |
| 20 | done | 34 | done |
| 21 | 35 | ||
| 22 | @@ -441,6 +444,23 @@ | 36 | @@ -530,6 +533,23 @@ int main(void) { |
| 23 | fi | 37 | } |
| 24 | fi | 38 | EOF |
| 25 | 39 | ||
| 26 | +# check NPTL support | 40 | +# check NPTL support |
| 27 | +cat > $TMPC <<EOF | 41 | +cat > $TMPC <<EOF |
| @@ -43,15 +57,15 @@ Index: qemu/configure | |||
| 43 | ########################################## | 57 | ########################################## |
| 44 | # SDL probe | 58 | # SDL probe |
| 45 | 59 | ||
| 46 | @@ -559,6 +579,7 @@ | 60 | @@ -681,6 +701,7 @@ if test -n "$sparc_cpu"; then |
| 61 | echo "Target Sparc Arch $sparc_cpu" | ||
| 47 | fi | 62 | fi |
| 48 | echo "FMOD support $fmod $fmod_support" | ||
| 49 | echo "kqemu support $kqemu" | 63 | echo "kqemu support $kqemu" |
| 50 | +echo "NPTL support $nptl" | 64 | +echo "NPTL support $nptl" |
| 51 | echo "Documentation $build_docs" | 65 | echo "Documentation $build_docs" |
| 52 | [ ! -z "$uname_release" ] && \ | 66 | [ ! -z "$uname_release" ] && \ |
| 53 | echo "uname -r $uname_release" | 67 | echo "uname -r $uname_release" |
| 54 | @@ -880,6 +901,14 @@ | 68 | @@ -1063,6 +1084,14 @@ if test "$target_user_only" = "no"; then |
| 55 | echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak | 69 | echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak |
| 56 | fi | 70 | fi |
| 57 | fi | 71 | fi |
| @@ -68,13 +82,13 @@ Index: qemu/configure | |||
| 68 | if test "$cocoa" = "yes" ; then | 82 | if test "$cocoa" = "yes" ; then |
| 69 | Index: qemu/exec-all.h | 83 | Index: qemu/exec-all.h |
| 70 | =================================================================== | 84 | =================================================================== |
| 71 | --- qemu.orig/exec-all.h 2006-08-26 16:28:32.000000000 +0100 | 85 | --- qemu.orig/exec-all.h 2007-06-13 11:48:22.000000000 +0100 |
| 72 | +++ qemu/exec-all.h 2006-08-26 16:31:53.000000000 +0100 | 86 | +++ qemu/exec-all.h 2007-06-13 11:51:57.000000000 +0100 |
| 73 | @@ -347,163 +347,7 @@ | 87 | @@ -360,170 +360,7 @@ extern CPUWriteMemoryFunc *io_mem_write[ |
| 74 | extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; | 88 | extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; |
| 75 | extern void *io_mem_opaque[IO_MEM_NB_ENTRIES]; | 89 | extern void *io_mem_opaque[IO_MEM_NB_ENTRIES]; |
| 76 | 90 | ||
| 77 | -#ifdef __powerpc__ | 91 | -#if defined(__powerpc__) |
| 78 | -static inline int testandset (int *p) | 92 | -static inline int testandset (int *p) |
| 79 | -{ | 93 | -{ |
| 80 | - int ret; | 94 | - int ret; |
| @@ -90,9 +104,7 @@ Index: qemu/exec-all.h | |||
| 90 | - : "cr0", "memory"); | 104 | - : "cr0", "memory"); |
| 91 | - return ret; | 105 | - return ret; |
| 92 | -} | 106 | -} |
| 93 | -#endif | 107 | -#elif defined(__i386__) |
| 94 | - | ||
| 95 | -#ifdef __i386__ | ||
| 96 | -static inline int testandset (int *p) | 108 | -static inline int testandset (int *p) |
| 97 | -{ | 109 | -{ |
| 98 | - long int readval = 0; | 110 | - long int readval = 0; |
| @@ -103,9 +115,7 @@ Index: qemu/exec-all.h | |||
| 103 | - : "cc"); | 115 | - : "cc"); |
| 104 | - return readval; | 116 | - return readval; |
| 105 | -} | 117 | -} |
| 106 | -#endif | 118 | -#elif defined(__x86_64__) |
| 107 | - | ||
| 108 | -#ifdef __x86_64__ | ||
| 109 | -static inline int testandset (int *p) | 119 | -static inline int testandset (int *p) |
| 110 | -{ | 120 | -{ |
| 111 | - long int readval = 0; | 121 | - long int readval = 0; |
| @@ -116,9 +126,7 @@ Index: qemu/exec-all.h | |||
| 116 | - : "cc"); | 126 | - : "cc"); |
| 117 | - return readval; | 127 | - return readval; |
| 118 | -} | 128 | -} |
| 119 | -#endif | 129 | -#elif defined(__s390__) |
| 120 | - | ||
| 121 | -#ifdef __s390__ | ||
| 122 | -static inline int testandset (int *p) | 130 | -static inline int testandset (int *p) |
| 123 | -{ | 131 | -{ |
| 124 | - int ret; | 132 | - int ret; |
| @@ -130,9 +138,7 @@ Index: qemu/exec-all.h | |||
| 130 | - : "cc", "memory" ); | 138 | - : "cc", "memory" ); |
| 131 | - return ret; | 139 | - return ret; |
| 132 | -} | 140 | -} |
| 133 | -#endif | 141 | -#elif defined(__alpha__) |
| 134 | - | ||
| 135 | -#ifdef __alpha__ | ||
| 136 | -static inline int testandset (int *p) | 142 | -static inline int testandset (int *p) |
| 137 | -{ | 143 | -{ |
| 138 | - int ret; | 144 | - int ret; |
| @@ -149,9 +155,7 @@ Index: qemu/exec-all.h | |||
| 149 | - : "m" (*p)); | 155 | - : "m" (*p)); |
| 150 | - return ret; | 156 | - return ret; |
| 151 | -} | 157 | -} |
| 152 | -#endif | 158 | -#elif defined(__sparc__) |
| 153 | - | ||
| 154 | -#ifdef __sparc__ | ||
| 155 | -static inline int testandset (int *p) | 159 | -static inline int testandset (int *p) |
| 156 | -{ | 160 | -{ |
| 157 | - int ret; | 161 | - int ret; |
| @@ -163,9 +167,7 @@ Index: qemu/exec-all.h | |||
| 163 | - | 167 | - |
| 164 | - return (ret ? 1 : 0); | 168 | - return (ret ? 1 : 0); |
| 165 | -} | 169 | -} |
| 166 | -#endif | 170 | -#elif defined(__arm__) |
| 167 | - | ||
| 168 | -#ifdef __arm__ | ||
| 169 | -static inline int testandset (int *spinlock) | 171 | -static inline int testandset (int *spinlock) |
| 170 | -{ | 172 | -{ |
| 171 | - register unsigned int ret; | 173 | - register unsigned int ret; |
| @@ -175,9 +177,7 @@ Index: qemu/exec-all.h | |||
| 175 | - | 177 | - |
| 176 | - return ret; | 178 | - return ret; |
| 177 | -} | 179 | -} |
| 178 | -#endif | 180 | -#elif defined(__mc68000) |
| 179 | - | ||
| 180 | -#ifdef __mc68000 | ||
| 181 | -static inline int testandset (int *p) | 181 | -static inline int testandset (int *p) |
| 182 | -{ | 182 | -{ |
| 183 | - char ret; | 183 | - char ret; |
| @@ -187,15 +187,36 @@ Index: qemu/exec-all.h | |||
| 187 | - : "cc","memory"); | 187 | - : "cc","memory"); |
| 188 | - return ret; | 188 | - return ret; |
| 189 | -} | 189 | -} |
| 190 | -#endif | 190 | -#elif defined(__ia64) |
| 191 | - | 191 | - |
| 192 | -#ifdef __ia64 | ||
| 193 | -#include <ia64intrin.h> | 192 | -#include <ia64intrin.h> |
| 194 | - | 193 | - |
| 195 | -static inline int testandset (int *p) | 194 | -static inline int testandset (int *p) |
| 196 | -{ | 195 | -{ |
| 197 | - return __sync_lock_test_and_set (p, 1); | 196 | - return __sync_lock_test_and_set (p, 1); |
| 198 | -} | 197 | -} |
| 198 | -#elif defined(__mips__) | ||
| 199 | -static inline int testandset (int *p) | ||
| 200 | -{ | ||
| 201 | - int ret; | ||
| 202 | - | ||
| 203 | - __asm__ __volatile__ ( | ||
| 204 | - " .set push \n" | ||
| 205 | - " .set noat \n" | ||
| 206 | - " .set mips2 \n" | ||
| 207 | - "1: li $1, 1 \n" | ||
| 208 | - " ll %0, %1 \n" | ||
| 209 | - " sc $1, %1 \n" | ||
| 210 | - " beqz $1, 1b \n" | ||
| 211 | - " .set pop " | ||
| 212 | - : "=r" (ret), "+R" (*p) | ||
| 213 | - : | ||
| 214 | - : "memory"); | ||
| 215 | - | ||
| 216 | - return ret; | ||
| 217 | -} | ||
| 218 | -#else | ||
| 219 | -#error unimplemented CPU support | ||
| 199 | -#endif | 220 | -#endif |
| 200 | - | 221 | - |
| 201 | -typedef int spinlock_t; | 222 | -typedef int spinlock_t; |
| @@ -237,9 +258,9 @@ Index: qemu/exec-all.h | |||
| 237 | 258 | ||
| 238 | Index: qemu/linux-user/arm/syscall.h | 259 | Index: qemu/linux-user/arm/syscall.h |
| 239 | =================================================================== | 260 | =================================================================== |
| 240 | --- qemu.orig/linux-user/arm/syscall.h 2006-03-09 19:18:11.000000000 +0000 | 261 | --- qemu.orig/linux-user/arm/syscall.h 2007-06-13 11:48:22.000000000 +0100 |
| 241 | +++ qemu/linux-user/arm/syscall.h 2006-08-26 16:31:53.000000000 +0100 | 262 | +++ qemu/linux-user/arm/syscall.h 2007-06-13 11:51:57.000000000 +0100 |
| 242 | @@ -28,7 +28,9 @@ | 263 | @@ -28,7 +28,9 @@ struct target_pt_regs { |
| 243 | #define ARM_SYSCALL_BASE 0x900000 | 264 | #define ARM_SYSCALL_BASE 0x900000 |
| 244 | #define ARM_THUMB_SYSCALL 0 | 265 | #define ARM_THUMB_SYSCALL 0 |
| 245 | 266 | ||
| @@ -252,9 +273,9 @@ Index: qemu/linux-user/arm/syscall.h | |||
| 252 | #define ARM_NR_thumb_semihosting 0xAB | 273 | #define ARM_NR_thumb_semihosting 0xAB |
| 253 | Index: qemu/linux-user/main.c | 274 | Index: qemu/linux-user/main.c |
| 254 | =================================================================== | 275 | =================================================================== |
| 255 | --- qemu.orig/linux-user/main.c 2006-08-26 16:28:40.000000000 +0100 | 276 | --- qemu.orig/linux-user/main.c 2007-06-13 11:51:55.000000000 +0100 |
| 256 | +++ qemu/linux-user/main.c 2006-08-26 16:31:53.000000000 +0100 | 277 | +++ qemu/linux-user/main.c 2007-06-13 11:51:57.000000000 +0100 |
| 257 | @@ -309,6 +309,50 @@ | 278 | @@ -325,6 +325,50 @@ static void arm_cache_flush(target_ulong |
| 258 | } | 279 | } |
| 259 | } | 280 | } |
| 260 | 281 | ||
| @@ -305,7 +326,7 @@ Index: qemu/linux-user/main.c | |||
| 305 | void cpu_loop(CPUARMState *env) | 326 | void cpu_loop(CPUARMState *env) |
| 306 | { | 327 | { |
| 307 | int trapnr; | 328 | int trapnr; |
| 308 | @@ -365,10 +409,8 @@ | 329 | @@ -430,10 +474,8 @@ void cpu_loop(CPUARMState *env) |
| 309 | } | 330 | } |
| 310 | } | 331 | } |
| 311 | 332 | ||
| @@ -318,7 +339,7 @@ Index: qemu/linux-user/main.c | |||
| 318 | env->regs[0] = do_arm_semihosting (env); | 339 | env->regs[0] = do_arm_semihosting (env); |
| 319 | } else if (n == 0 || n >= ARM_SYSCALL_BASE | 340 | } else if (n == 0 || n >= ARM_SYSCALL_BASE |
| 320 | || (env->thumb && n == ARM_THUMB_SYSCALL)) { | 341 | || (env->thumb && n == ARM_THUMB_SYSCALL)) { |
| 321 | @@ -379,14 +421,34 @@ | 342 | @@ -444,14 +486,34 @@ void cpu_loop(CPUARMState *env) |
| 322 | n -= ARM_SYSCALL_BASE; | 343 | n -= ARM_SYSCALL_BASE; |
| 323 | env->eabi = 0; | 344 | env->eabi = 0; |
| 324 | } | 345 | } |
| @@ -361,7 +382,7 @@ Index: qemu/linux-user/main.c | |||
| 361 | } else { | 382 | } else { |
| 362 | goto error; | 383 | goto error; |
| 363 | } | 384 | } |
| 364 | @@ -425,6 +487,10 @@ | 385 | @@ -490,6 +552,10 @@ void cpu_loop(CPUARMState *env) |
| 365 | } | 386 | } |
| 366 | } | 387 | } |
| 367 | break; | 388 | break; |
| @@ -372,23 +393,23 @@ Index: qemu/linux-user/main.c | |||
| 372 | default: | 393 | default: |
| 373 | error: | 394 | error: |
| 374 | fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", | 395 | fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", |
| 375 | @@ -1639,6 +1705,10 @@ | 396 | @@ -2096,6 +2162,10 @@ int main(int argc, char **argv) |
| 376 | ts->heap_base = info->brk; | 397 | ts->heap_base = info->brk; |
| 377 | /* This will be filled in on the first SYS_HEAPINFO call. */ | 398 | /* This will be filled in on the first SYS_HEAPINFO call. */ |
| 378 | ts->heap_limit = 0; | 399 | ts->heap_limit = 0; |
| 379 | + /* Register the magic kernel code page. The cpu will generate a | 400 | + /* Register the magic kernel code page. The cpu will generate a |
| 380 | + special exception when it tries to execute code here. We can't | 401 | + special exception when it tries to execute code here. We can't |
| 381 | + put real code here because it may be in use by the host kernel. */ | 402 | + put real code here because it may be in use by the host kernel. */ |
| 382 | + page_set_flags(0xffff0000, 0xffff0fff, 0); | 403 | + page_set_flags(0xffff0000, 0xffff0fff, 0); |
| 383 | } | 404 | #endif |
| 384 | #elif defined(TARGET_SPARC) | 405 | |
| 385 | { | 406 | if (gdbstub_port) { |
| 386 | Index: qemu/linux-user/qemu.h | 407 | Index: qemu/linux-user/qemu.h |
| 387 | =================================================================== | 408 | =================================================================== |
| 388 | --- qemu.orig/linux-user/qemu.h 2006-08-26 16:28:40.000000000 +0100 | 409 | --- qemu.orig/linux-user/qemu.h 2007-06-13 11:48:22.000000000 +0100 |
| 389 | +++ qemu/linux-user/qemu.h 2006-08-26 16:33:50.000000000 +0100 | 410 | +++ qemu/linux-user/qemu.h 2007-06-13 11:51:57.000000000 +0100 |
| 390 | @@ -75,6 +75,9 @@ | 411 | @@ -81,6 +81,9 @@ typedef struct TaskState { |
| 391 | uint32_t v86mask; | 412 | uint32_t heap_limit; |
| 392 | #endif | 413 | #endif |
| 393 | int used; /* non zero if used */ | 414 | int used; /* non zero if used */ |
| 394 | +#ifdef USE_NPTL | 415 | +#ifdef USE_NPTL |
| @@ -399,9 +420,9 @@ Index: qemu/linux-user/qemu.h | |||
| 399 | } __attribute__((aligned(16))) TaskState; | 420 | } __attribute__((aligned(16))) TaskState; |
| 400 | Index: qemu/linux-user/syscall.c | 421 | Index: qemu/linux-user/syscall.c |
| 401 | =================================================================== | 422 | =================================================================== |
| 402 | --- qemu.orig/linux-user/syscall.c 2006-08-26 16:28:40.000000000 +0100 | 423 | --- qemu.orig/linux-user/syscall.c 2007-06-13 11:51:55.000000000 +0100 |
| 403 | +++ qemu/linux-user/syscall.c 2006-08-26 16:31:53.000000000 +0100 | 424 | +++ qemu/linux-user/syscall.c 2007-06-13 11:51:57.000000000 +0100 |
| 404 | @@ -66,9 +66,18 @@ | 425 | @@ -71,9 +71,18 @@ |
| 405 | #include <linux/kd.h> | 426 | #include <linux/kd.h> |
| 406 | 427 | ||
| 407 | #include "qemu.h" | 428 | #include "qemu.h" |
| @@ -417,10 +438,10 @@ Index: qemu/linux-user/syscall.c | |||
| 417 | +#define CLONE_NPTL_FLAGS2 0 | 438 | +#define CLONE_NPTL_FLAGS2 0 |
| 418 | +#endif | 439 | +#endif |
| 419 | + | 440 | + |
| 420 | #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) | 441 | #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \ |
| 442 | || defined(TARGET_M68K) || defined(TARGET_SH4) | ||
| 421 | /* 16 bit uid wrappers emulation */ | 443 | /* 16 bit uid wrappers emulation */ |
| 422 | #define USE_UID16 | 444 | @@ -2121,20 +2130,38 @@ int do_modify_ldt(CPUX86State *env, int |
| 423 | @@ -1602,20 +1611,38 @@ | ||
| 424 | thread/process */ | 445 | thread/process */ |
| 425 | #define NEW_STACK_SIZE 8192 | 446 | #define NEW_STACK_SIZE 8192 |
| 426 | 447 | ||
| @@ -460,7 +481,7 @@ Index: qemu/linux-user/syscall.c | |||
| 460 | 481 | ||
| 461 | if (flags & CLONE_VM) { | 482 | if (flags & CLONE_VM) { |
| 462 | ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); | 483 | ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); |
| 463 | @@ -1665,16 +1692,60 @@ | 484 | @@ -2197,16 +2224,60 @@ int do_fork(CPUState *env, unsigned int |
| 464 | #error unsupported target CPU | 485 | #error unsupported target CPU |
| 465 | #endif | 486 | #endif |
| 466 | new_env->opaque = ts; | 487 | new_env->opaque = ts; |
| @@ -525,16 +546,16 @@ Index: qemu/linux-user/syscall.c | |||
| 525 | } | 546 | } |
| 526 | return ret; | 547 | return ret; |
| 527 | } | 548 | } |
| 528 | @@ -1918,7 +1989,7 @@ | 549 | @@ -2483,7 +2554,7 @@ long do_syscall(void *cpu_env, int num, |
| 529 | ret = do_brk(arg1); | 550 | ret = do_brk(arg1); |
| 530 | break; | 551 | break; |
| 531 | case TARGET_NR_fork: | 552 | case TARGET_NR_fork: |
| 532 | - ret = get_errno(do_fork(cpu_env, SIGCHLD, 0)); | 553 | - ret = get_errno(do_fork(cpu_env, SIGCHLD, 0)); |
| 533 | + ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL)); | 554 | + ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL)); |
| 534 | break; | 555 | break; |
| 556 | #ifdef TARGET_NR_waitpid | ||
| 535 | case TARGET_NR_waitpid: | 557 | case TARGET_NR_waitpid: |
| 536 | { | 558 | @@ -3648,7 +3719,8 @@ long do_syscall(void *cpu_env, int num, |
| 537 | @@ -2989,7 +3060,8 @@ | ||
| 538 | ret = get_errno(fsync(arg1)); | 559 | ret = get_errno(fsync(arg1)); |
| 539 | break; | 560 | break; |
| 540 | case TARGET_NR_clone: | 561 | case TARGET_NR_clone: |
| @@ -544,7 +565,7 @@ Index: qemu/linux-user/syscall.c | |||
| 544 | break; | 565 | break; |
| 545 | #ifdef __NR_exit_group | 566 | #ifdef __NR_exit_group |
| 546 | /* new thread calls */ | 567 | /* new thread calls */ |
| 547 | @@ -3339,7 +3411,8 @@ | 568 | @@ -4062,7 +4134,8 @@ long do_syscall(void *cpu_env, int num, |
| 548 | #endif | 569 | #endif |
| 549 | #ifdef TARGET_NR_vfork | 570 | #ifdef TARGET_NR_vfork |
| 550 | case TARGET_NR_vfork: | 571 | case TARGET_NR_vfork: |
| @@ -554,16 +575,16 @@ Index: qemu/linux-user/syscall.c | |||
| 554 | break; | 575 | break; |
| 555 | #endif | 576 | #endif |
| 556 | #ifdef TARGET_NR_ugetrlimit | 577 | #ifdef TARGET_NR_ugetrlimit |
| 557 | @@ -3838,4 +3911,3 @@ | 578 | @@ -4660,4 +4733,3 @@ long do_syscall(void *cpu_env, int num, |
| 558 | #endif | 579 | #endif |
| 559 | return ret; | 580 | return ret; |
| 560 | } | 581 | } |
| 561 | - | 582 | - |
| 562 | Index: qemu/target-arm/cpu.h | 583 | Index: qemu/target-arm/cpu.h |
| 563 | =================================================================== | 584 | =================================================================== |
| 564 | --- qemu.orig/target-arm/cpu.h 2006-03-09 19:18:27.000000000 +0000 | 585 | --- qemu.orig/target-arm/cpu.h 2007-06-13 11:48:22.000000000 +0100 |
| 565 | +++ qemu/target-arm/cpu.h 2006-08-26 16:31:53.000000000 +0100 | 586 | +++ qemu/target-arm/cpu.h 2007-06-13 11:51:57.000000000 +0100 |
| 566 | @@ -35,6 +35,9 @@ | 587 | @@ -37,6 +37,9 @@ |
| 567 | #define EXCP_IRQ 5 | 588 | #define EXCP_IRQ 5 |
| 568 | #define EXCP_FIQ 6 | 589 | #define EXCP_FIQ 6 |
| 569 | #define EXCP_BKPT 7 | 590 | #define EXCP_BKPT 7 |
| @@ -571,18 +592,18 @@ Index: qemu/target-arm/cpu.h | |||
| 571 | + | 592 | + |
| 572 | + | 593 | + |
| 573 | 594 | ||
| 574 | /* We currently assume float and double are IEEE single and double | 595 | typedef void ARMWriteCPFunc(void *opaque, int cp_info, |
| 575 | precision respectively. | 596 | int srcreg, int operand, uint32_t value); |
| 576 | @@ -85,6 +88,7 @@ | 597 | @@ -97,6 +100,7 @@ typedef struct CPUARMState { |
| 577 | uint32_t c9_data; | 598 | uint32_t c9_data; |
| 578 | uint32_t c13_fcse; /* FCSE PID. */ | 599 | uint32_t c13_fcse; /* FCSE PID. */ |
| 579 | uint32_t c13_context; /* Context ID. */ | 600 | uint32_t c13_context; /* Context ID. */ |
| 580 | + uint32_t c13_tls; /* Paul Brook told me to just add this ;) */ | 601 | + uint32_t c13_tls; /* Paul Brook told me to just add this ;) */ |
| 602 | uint32_t c15_cpar; /* XScale Coprocessor Access Register */ | ||
| 581 | } cp15; | 603 | } cp15; |
| 582 | 604 | ||
| 583 | /* Internal CPU feature flags. */ | 605 | @@ -169,6 +173,15 @@ void switch_mode(CPUARMState *, int); |
| 584 | @@ -135,6 +139,15 @@ | 606 | int cpu_arm_signal_handler(int host_signum, void *pinfo, |
| 585 | int cpu_arm_signal_handler(int host_signum, struct siginfo *info, | ||
| 586 | void *puc); | 607 | void *puc); |
| 587 | 608 | ||
| 588 | +void cpu_lock(void); | 609 | +void cpu_lock(void); |
| @@ -597,7 +618,7 @@ Index: qemu/target-arm/cpu.h | |||
| 597 | #define CPSR_M (0x1f) | 618 | #define CPSR_M (0x1f) |
| 598 | #define CPSR_T (1 << 5) | 619 | #define CPSR_T (1 << 5) |
| 599 | #define CPSR_F (1 << 6) | 620 | #define CPSR_F (1 << 6) |
| 600 | @@ -146,7 +159,11 @@ | 621 | @@ -180,7 +193,11 @@ int cpu_arm_signal_handler(int host_sign |
| 601 | #define CPSR_J (1 << 24) | 622 | #define CPSR_J (1 << 24) |
| 602 | #define CPSR_IT_0_1 (3 << 25) | 623 | #define CPSR_IT_0_1 (3 << 25) |
| 603 | #define CPSR_Q (1 << 27) | 624 | #define CPSR_Q (1 << 27) |
| @@ -612,22 +633,22 @@ Index: qemu/target-arm/cpu.h | |||
| 612 | /* Return the current CPSR value. */ | 633 | /* Return the current CPSR value. */ |
| 613 | Index: qemu/target-arm/exec.h | 634 | Index: qemu/target-arm/exec.h |
| 614 | =================================================================== | 635 | =================================================================== |
| 615 | --- qemu.orig/target-arm/exec.h 2006-03-09 19:18:27.000000000 +0000 | 636 | --- qemu.orig/target-arm/exec.h 2007-06-13 11:48:22.000000000 +0100 |
| 616 | +++ qemu/target-arm/exec.h 2006-08-26 16:31:53.000000000 +0100 | 637 | +++ qemu/target-arm/exec.h 2007-06-13 11:51:57.000000000 +0100 |
| 617 | @@ -51,8 +51,6 @@ | 638 | @@ -68,8 +68,6 @@ static inline int cpu_halted(CPUState *e |
| 618 | 639 | ||
| 619 | /* In op_helper.c */ | 640 | /* In op_helper.c */ |
| 620 | 641 | ||
| 621 | -void cpu_lock(void); | 642 | -void cpu_lock(void); |
| 622 | -void cpu_unlock(void); | 643 | -void cpu_unlock(void); |
| 644 | void helper_set_cp(CPUState *, uint32_t, uint32_t); | ||
| 645 | uint32_t helper_get_cp(CPUState *, uint32_t); | ||
| 623 | void helper_set_cp15(CPUState *, uint32_t, uint32_t); | 646 | void helper_set_cp15(CPUState *, uint32_t, uint32_t); |
| 624 | uint32_t helper_get_cp15(CPUState *, uint32_t); | ||
| 625 | |||
| 626 | Index: qemu/target-arm/op.c | 647 | Index: qemu/target-arm/op.c |
| 627 | =================================================================== | 648 | =================================================================== |
| 628 | --- qemu.orig/target-arm/op.c 2006-08-26 16:28:48.000000000 +0100 | 649 | --- qemu.orig/target-arm/op.c 2007-06-13 11:48:22.000000000 +0100 |
| 629 | +++ qemu/target-arm/op.c 2006-08-26 16:31:53.000000000 +0100 | 650 | +++ qemu/target-arm/op.c 2007-06-13 11:51:57.000000000 +0100 |
| 630 | @@ -891,6 +891,12 @@ | 651 | @@ -891,6 +891,12 @@ void OPPROTO op_bkpt(void) |
| 631 | cpu_loop_exit(); | 652 | cpu_loop_exit(); |
| 632 | } | 653 | } |
| 633 | 654 | ||
| @@ -642,9 +663,9 @@ Index: qemu/target-arm/op.c | |||
| 642 | "d" suffix. */ | 663 | "d" suffix. */ |
| 643 | Index: qemu/target-arm/translate.c | 664 | Index: qemu/target-arm/translate.c |
| 644 | =================================================================== | 665 | =================================================================== |
| 645 | --- qemu.orig/target-arm/translate.c 2006-08-26 16:28:48.000000000 +0100 | 666 | --- qemu.orig/target-arm/translate.c 2007-06-13 11:48:22.000000000 +0100 |
| 646 | +++ qemu/target-arm/translate.c 2006-08-26 16:31:53.000000000 +0100 | 667 | +++ qemu/target-arm/translate.c 2007-06-13 11:51:57.000000000 +0100 |
| 647 | @@ -2382,6 +2382,7 @@ | 668 | @@ -3513,6 +3513,7 @@ undef: |
| 648 | s->is_jmp = DISAS_JUMP; | 669 | s->is_jmp = DISAS_JUMP; |
| 649 | } | 670 | } |
| 650 | 671 | ||
| @@ -652,7 +673,7 @@ Index: qemu/target-arm/translate.c | |||
| 652 | /* generate intermediate code in gen_opc_buf and gen_opparam_buf for | 673 | /* generate intermediate code in gen_opc_buf and gen_opparam_buf for |
| 653 | basic block 'tb'. If search_pc is TRUE, also generate PC | 674 | basic block 'tb'. If search_pc is TRUE, also generate PC |
| 654 | information for each intermediate instruction. */ | 675 | information for each intermediate instruction. */ |
| 655 | @@ -2416,6 +2417,15 @@ | 676 | @@ -3548,6 +3549,15 @@ static inline int gen_intermediate_code_ |
| 656 | nb_gen_labels = 0; | 677 | nb_gen_labels = 0; |
| 657 | lj = -1; | 678 | lj = -1; |
| 658 | do { | 679 | do { |
| @@ -671,8 +692,8 @@ Index: qemu/target-arm/translate.c | |||
| 671 | Index: qemu/qemu_spinlock.h | 692 | Index: qemu/qemu_spinlock.h |
| 672 | =================================================================== | 693 | =================================================================== |
| 673 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 694 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
| 674 | +++ qemu/qemu_spinlock.h 2006-08-26 16:31:53.000000000 +0100 | 695 | +++ qemu/qemu_spinlock.h 2007-06-13 11:51:57.000000000 +0100 |
| 675 | @@ -0,0 +1,182 @@ | 696 | @@ -0,0 +1,204 @@ |
| 676 | +/* | 697 | +/* |
| 677 | + * internal execution defines for qemu | 698 | + * internal execution defines for qemu |
| 678 | + * | 699 | + * |
| @@ -820,6 +841,28 @@ Index: qemu/qemu_spinlock.h | |||
| 820 | +} | 841 | +} |
| 821 | +#endif | 842 | +#endif |
| 822 | + | 843 | + |
| 844 | +#ifdef __mips__ | ||
| 845 | +static inline int testandset (int *p) | ||
| 846 | +{ | ||
| 847 | + int ret; | ||
| 848 | + | ||
| 849 | + __asm__ __volatile__ ( | ||
| 850 | + " .set push \n" | ||
| 851 | + " .set noat \n" | ||
| 852 | + " .set mips2 \n" | ||
| 853 | + "1: li $1, 1 \n" | ||
| 854 | + " ll %0, %1 \n" | ||
| 855 | + " sc $1, %1 \n" | ||
| 856 | + " beqz $1, 1b \n" | ||
| 857 | + " .set pop " | ||
| 858 | + : "=r" (ret), "+R" (*p) | ||
| 859 | + : | ||
| 860 | + : "memory"); | ||
| 861 | + | ||
| 862 | + return ret; | ||
| 863 | +} | ||
| 864 | +#endif | ||
| 865 | + | ||
| 823 | +typedef int spinlock_t; | 866 | +typedef int spinlock_t; |
| 824 | + | 867 | + |
| 825 | +#define SPIN_LOCK_UNLOCKED 0 | 868 | +#define SPIN_LOCK_UNLOCKED 0 |
diff --git a/meta/packages/qemu/files/compiler.patch b/meta/packages/qemu/files/compiler.patch deleted file mode 100644 index dad18b3a61..0000000000 --- a/meta/packages/qemu/files/compiler.patch +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | --- qemu/usb-linux.c~ 2006-07-19 19:06:15.000000000 +0100 | ||
| 2 | +++ qemu/usb-linux.c 2006-10-02 12:49:00.000000000 +0100 | ||
| 3 | @@ -26,7 +26,6 @@ | ||
| 4 | #if defined(__linux__) | ||
| 5 | #include <dirent.h> | ||
| 6 | #include <sys/ioctl.h> | ||
| 7 | -#include <linux/compiler.h> | ||
| 8 | #include <linux/usbdevice_fs.h> | ||
| 9 | #include <linux/version.h> | ||
| 10 | |||
diff --git a/meta/packages/qemu/files/configure.patch b/meta/packages/qemu/files/configure.patch deleted file mode 100644 index ea83f8cd6d..0000000000 --- a/meta/packages/qemu/files/configure.patch +++ /dev/null | |||
| @@ -1,13 +0,0 @@ | |||
| 1 | Index: qemu/configure | ||
| 2 | =================================================================== | ||
| 3 | --- qemu.orig/configure 2006-02-09 17:58:47.000000000 +0000 | ||
| 4 | +++ qemu/configure 2006-02-21 17:47:31.000000000 +0000 | ||
| 5 | @@ -482,7 +482,7 @@ | ||
| 6 | fi | ||
| 7 | echo "HOST_CC=$host_cc" >> $config_mak | ||
| 8 | echo "AR=$ar" >> $config_mak | ||
| 9 | -echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak | ||
| 10 | +echo "STRIP=$strip" >> $config_mak | ||
| 11 | echo "CFLAGS=$CFLAGS" >> $config_mak | ||
| 12 | echo "LDFLAGS=$LDFLAGS" >> $config_mak | ||
| 13 | echo "EXESUF=$EXESUF" >> $config_mak | ||
diff --git a/meta/packages/qemu/files/mouse_fix-r0.patch b/meta/packages/qemu/files/mouse_fix-r0.patch deleted file mode 100644 index 8cc19f0392..0000000000 --- a/meta/packages/qemu/files/mouse_fix-r0.patch +++ /dev/null | |||
| @@ -1,25 +0,0 @@ | |||
| 1 | If the cursor is hidden (SDL_ShowCursor(0)) and the input is grabbed | ||
| 2 | (SDL_WM_GrabInput(SDL_GRAB_ON)), then the mouse will give relative motion | ||
| 3 | events even when the cursor reaches the edge fo the screen. This is currently | ||
| 4 | only implemented on Windows and Linux/Unix-a-likes. | ||
| 5 | |||
| 6 | Index: qemu/sdl.c | ||
| 7 | =================================================================== | ||
| 8 | --- qemu.orig/sdl.c 2006-04-13 12:22:22.000000000 +0100 | ||
| 9 | +++ qemu/sdl.c 2006-05-25 00:28:25.000000000 +0100 | ||
| 10 | @@ -280,13 +280,13 @@ | ||
| 11 | |||
| 12 | static void sdl_hide_cursor(void) | ||
| 13 | { | ||
| 14 | - SDL_SetCursor(sdl_cursor_hidden); | ||
| 15 | + SDL_ShowCursor(0); | ||
| 16 | } | ||
| 17 | |||
| 18 | static void sdl_show_cursor(void) | ||
| 19 | { | ||
| 20 | if (!kbd_mouse_is_absolute()) { | ||
| 21 | - SDL_SetCursor(sdl_cursor_normal); | ||
| 22 | + SDL_ShowCursor(1); | ||
| 23 | } | ||
| 24 | } | ||
| 25 | |||
diff --git a/meta/packages/qemu/files/nodocs_cvs.patch b/meta/packages/qemu/files/nodocs_cvs.patch deleted file mode 100644 index b52d860fb0..0000000000 --- a/meta/packages/qemu/files/nodocs_cvs.patch +++ /dev/null | |||
| @@ -1,44 +0,0 @@ | |||
| 1 | Index: qemu/Makefile | ||
| 2 | =================================================================== | ||
| 3 | --- qemu.orig/Makefile 2006-04-18 11:11:37.000000000 +0100 | ||
| 4 | +++ qemu/Makefile 2006-04-18 11:14:34.000000000 +0100 | ||
| 5 | @@ -11,7 +11,7 @@ | ||
| 6 | ifdef CONFIG_STATIC | ||
| 7 | LDFLAGS+=-static | ||
| 8 | endif | ||
| 9 | -DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 | ||
| 10 | +DOCS= | ||
| 11 | |||
| 12 | all: dyngen$(EXESUF) $(TOOLS) $(DOCS) | ||
| 13 | for d in $(TARGET_DIRS); do \ | ||
| 14 | @@ -51,11 +51,11 @@ | ||
| 15 | video.x proll.elf linux_boot.bin; do \ | ||
| 16 | $(INSTALL) -m 644 $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(datadir)"; \ | ||
| 17 | done | ||
| 18 | - mkdir -p "$(DESTDIR)$(docdir)" | ||
| 19 | - $(INSTALL) -m 644 qemu-doc.html qemu-tech.html "$(DESTDIR)$(docdir)" | ||
| 20 | +# mkdir -p "$(DESTDIR)$(docdir)" | ||
| 21 | +# $(INSTALL) -m 644 qemu-doc.html qemu-tech.html "$(DESTDIR)$(docdir)" | ||
| 22 | ifndef CONFIG_WIN32 | ||
| 23 | - mkdir -p "$(DESTDIR)$(mandir)/man1" | ||
| 24 | - $(INSTALL) qemu.1 qemu-img.1 "$(DESTDIR)$(mandir)/man1" | ||
| 25 | +# mkdir -p "$(DESTDIR)$(mandir)/man1" | ||
| 26 | +# $(INSTALL) qemu.1 qemu-img.1 "$(DESTDIR)$(mandir)/man1" | ||
| 27 | mkdir -p "$(DESTDIR)$(datadir)/keymaps" | ||
| 28 | for x in $(KEYMAPS); do \ | ||
| 29 | $(INSTALL) -m 644 $(SRC_PATH)/keymaps/$$x "$(DESTDIR)$(datadir)/keymaps"; \ | ||
| 30 | @@ -122,10 +122,10 @@ | ||
| 31 | $(datadir)/ppc_rom.bin \ | ||
| 32 | $(datadir)/video.x \ | ||
| 33 | $(datadir)/proll.elf \ | ||
| 34 | - $(datadir)/linux_boot.bin \ | ||
| 35 | - $(docdir)/qemu-doc.html \ | ||
| 36 | - $(docdir)/qemu-tech.html \ | ||
| 37 | - $(mandir)/man1/qemu.1 $(mandir)/man1/qemu-img.1 ) | ||
| 38 | + $(datadir)/linux_boot.bin | ||
| 39 | +# $(docdir)/qemu-doc.html \ | ||
| 40 | +# $(docdir)/qemu-tech.html \ | ||
| 41 | +# $(mandir)/man1/qemu.1 $(mandir)/man1/qemu-img.1 ) | ||
| 42 | |||
| 43 | ifneq ($(wildcard .depend),) | ||
| 44 | include .depend | ||
diff --git a/meta/packages/qemu/files/qemu-pci-irq-sharing.patch b/meta/packages/qemu/files/qemu-pci-irq-sharing.patch deleted file mode 100644 index c47e89895f..0000000000 --- a/meta/packages/qemu/files/qemu-pci-irq-sharing.patch +++ /dev/null | |||
| @@ -1,52 +0,0 @@ | |||
| 1 | diff -pNaur qemu-cvs-ts-orig/hw/pci.c qemu-cvs-ts/hw/pci.c | ||
| 2 | --- qemu-cvs-ts-orig/hw/pci.c 2006-08-17 10:46:34.000000000 +0000 | ||
| 3 | +++ qemu-cvs-ts/hw/pci.c 2006-09-23 17:02:41.000000000 +0000 | ||
| 4 | @@ -34,6 +34,7 @@ struct PCIBus { | ||
| 5 | SetIRQFunc *low_set_irq; | ||
| 6 | void *irq_opaque; | ||
| 7 | PCIDevice *devices[256]; | ||
| 8 | + int irq_count[4]; | ||
| 9 | }; | ||
| 10 | |||
| 11 | static void pci_update_mappings(PCIDevice *d); | ||
| 12 | @@ -49,6 +50,7 @@ PCIBus *pci_register_bus(pci_set_irq_fn | ||
| 13 | bus->set_irq = set_irq; | ||
| 14 | bus->irq_opaque = pic; | ||
| 15 | bus->devfn_min = devfn_min; | ||
| 16 | + memset(bus->irq_count, 0, sizeof(bus->irq_count)); | ||
| 17 | first_bus = bus; | ||
| 18 | return bus; | ||
| 19 | } | ||
| 20 | @@ -100,6 +102,7 @@ PCIDevice *pci_register_device(PCIBus *b | ||
| 21 | pci_dev->bus = bus; | ||
| 22 | pci_dev->devfn = devfn; | ||
| 23 | pstrcpy(pci_dev->name, sizeof(pci_dev->name), name); | ||
| 24 | + memset(pci_dev->irq_state, 0, sizeof(pci_dev->irq_state)); | ||
| 25 | |||
| 26 | if (!config_read) | ||
| 27 | config_read = pci_default_read_config; | ||
| 28 | @@ -404,7 +407,10 @@ uint32_t pci_data_read(void *opaque, uin | ||
| 29 | void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level) | ||
| 30 | { | ||
| 31 | PCIBus *bus = pci_dev->bus; | ||
| 32 | - bus->set_irq(pci_dev, bus->irq_opaque, irq_num, level); | ||
| 33 | + bus->irq_count[irq_num] += level - pci_dev->irq_state[irq_num]; | ||
| 34 | + pci_dev->irq_state[irq_num] = level; | ||
| 35 | + bus->set_irq(pci_dev, bus->irq_opaque, | ||
| 36 | + irq_num, !!bus->irq_count[irq_num]); | ||
| 37 | } | ||
| 38 | |||
| 39 | /***********************************************************/ | ||
| 40 | diff -pNaur qemu-cvs-ts-orig/vl.h qemu-cvs-ts/vl.h | ||
| 41 | --- qemu-cvs-ts-orig/vl.h 2006-09-18 01:15:29.000000000 +0000 | ||
| 42 | +++ qemu-cvs-ts/vl.h 2006-09-23 17:15:21.000000000 +0000 | ||
| 43 | @@ -733,6 +733,9 @@ struct PCIDevice { | ||
| 44 | PCIConfigWriteFunc *config_write; | ||
| 45 | /* ??? This is a PC-specific hack, and should be removed. */ | ||
| 46 | int irq_index; | ||
| 47 | + | ||
| 48 | + /* remember last irq levels */ | ||
| 49 | + int irq_state[4]; | ||
| 50 | }; | ||
| 51 | |||
| 52 | PCIDevice *pci_register_device(PCIBus *bus, const char *name, | ||
diff --git a/meta/packages/qemu/files/qemu-usb-wacom-0.8.2.patch b/meta/packages/qemu/files/qemu-usb-wacom-0.8.2.patch deleted file mode 100644 index 33a6db3f18..0000000000 --- a/meta/packages/qemu/files/qemu-usb-wacom-0.8.2.patch +++ /dev/null | |||
| @@ -1,445 +0,0 @@ | |||
| 1 | diff -pNaur qemu-cvs-ts-orig/hw/usb-wacom.c qemu-cvs-ts/hw/usb-wacom.c | ||
| 2 | --- qemu-cvs-ts-orig/hw/usb-wacom.c 1970-01-01 01:00:00.000000000 +0100 | ||
| 3 | +++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-22 20:44:26.000000000 +0200 | ||
| 4 | @@ -0,0 +1,408 @@ | ||
| 5 | +/* | ||
| 6 | + * Wacom PenPartner USB tablet emulation. | ||
| 7 | + * | ||
| 8 | + * Copyright (c) 2006 Openedhand Ltd. | ||
| 9 | + * | ||
| 10 | + * Author: Andrzej Zaborowski <balrog@zabor.org> | ||
| 11 | + * | ||
| 12 | + * Based on hw/usb-hid.c: | ||
| 13 | + * Copyright (c) 2005 Fabrice Bellard | ||
| 14 | + * | ||
| 15 | + * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 16 | + * of this software and associated documentation files (the "Software"), to deal | ||
| 17 | + * in the Software without restriction, including without limitation the rights | ||
| 18 | + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 19 | + * copies of the Software, and to permit persons to whom the Software is | ||
| 20 | + * furnished to do so, subject to the following conditions: | ||
| 21 | + * | ||
| 22 | + * The above copyright notice and this permission notice shall be included in | ||
| 23 | + * all copies or substantial portions of the Software. | ||
| 24 | + * | ||
| 25 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 26 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 27 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 28 | + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 29 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 30 | + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 31 | + * THE SOFTWARE. | ||
| 32 | + */ | ||
| 33 | +#include "vl.h" | ||
| 34 | + | ||
| 35 | +/* Interface requests */ | ||
| 36 | +#define WACOM_GET_REPORT 0x2101 | ||
| 37 | +#define WACOM_SET_REPORT 0x2109 | ||
| 38 | + | ||
| 39 | +/* HID interface requests */ | ||
| 40 | +#define HID_GET_REPORT 0xa101 | ||
| 41 | +#define HID_GET_IDLE 0xa102 | ||
| 42 | +#define HID_GET_PROTOCOL 0xa103 | ||
| 43 | +#define HID_SET_IDLE 0x210a | ||
| 44 | +#define HID_SET_PROTOCOL 0x210b | ||
| 45 | + | ||
| 46 | +#define WACOM_MODE_HID 1 | ||
| 47 | +#define WACOM_MODE_WACOM 2 | ||
| 48 | + | ||
| 49 | +typedef struct USBWacomState { | ||
| 50 | + USBDevice dev; | ||
| 51 | + int dx, dy, dz, buttons_state; | ||
| 52 | + int x, y; | ||
| 53 | + int mouse_grabbed; | ||
| 54 | + int mode; | ||
| 55 | +} USBWacomState; | ||
| 56 | + | ||
| 57 | +static const uint8_t qemu_wacom_dev_descriptor[] = { | ||
| 58 | + 0x12, /* u8 bLength; */ | ||
| 59 | + 0x01, /* u8 bDescriptorType; Device */ | ||
| 60 | + 0x10, 0x10, /* u16 bcdUSB; v1.10 */ | ||
| 61 | + | ||
| 62 | + 0x00, /* u8 bDeviceClass; */ | ||
| 63 | + 0x00, /* u8 bDeviceSubClass; */ | ||
| 64 | + 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */ | ||
| 65 | + 0x08, /* u8 bMaxPacketSize0; 8 Bytes */ | ||
| 66 | + | ||
| 67 | + 0x6a, 0x05, /* u16 idVendor; */ | ||
| 68 | + 0x00, 0x00, /* u16 idProduct; */ | ||
| 69 | + 0x10, 0x42, /* u16 bcdDevice */ | ||
| 70 | + | ||
| 71 | + 0x01, /* u8 iManufacturer; */ | ||
| 72 | + 0x02, /* u8 iProduct; */ | ||
| 73 | + 0x00, /* u8 iSerialNumber; */ | ||
| 74 | + 0x01, /* u8 bNumConfigurations; */ | ||
| 75 | +}; | ||
| 76 | + | ||
| 77 | +static const uint8_t qemu_wacom_config_descriptor[] = { | ||
| 78 | + /* one configuration */ | ||
| 79 | + 0x09, /* u8 bLength; */ | ||
| 80 | + 0x02, /* u8 bDescriptorType; Configuration */ | ||
| 81 | + 0x22, 0x00, /* u16 wTotalLength; */ | ||
| 82 | + 0x01, /* u8 bNumInterfaces; (1) */ | ||
| 83 | + 0x01, /* u8 bConfigurationValue; */ | ||
| 84 | + 0x00, /* u8 iConfiguration; */ | ||
| 85 | + 0x80, /* u8 bmAttributes; | ||
| 86 | + Bit 7: must be set, | ||
| 87 | + 6: Self-powered, | ||
| 88 | + 5: Remote wakeup, | ||
| 89 | + 4..0: resvd */ | ||
| 90 | + 40, /* u8 MaxPower; */ | ||
| 91 | + | ||
| 92 | + /* one interface */ | ||
| 93 | + 0x09, /* u8 if_bLength; */ | ||
| 94 | + 0x04, /* u8 if_bDescriptorType; Interface */ | ||
| 95 | + 0x00, /* u8 if_bInterfaceNumber; */ | ||
| 96 | + 0x00, /* u8 if_bAlternateSetting; */ | ||
| 97 | + 0x01, /* u8 if_bNumEndpoints; */ | ||
| 98 | + 0x03, /* u8 if_bInterfaceClass; HID */ | ||
| 99 | + 0x01, /* u8 if_bInterfaceSubClass; Boot */ | ||
| 100 | + 0x02, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */ | ||
| 101 | + 0x00, /* u8 if_iInterface; */ | ||
| 102 | + | ||
| 103 | + /* HID descriptor */ | ||
| 104 | + 0x09, /* u8 bLength; */ | ||
| 105 | + 0x21, /* u8 bDescriptorType; */ | ||
| 106 | + 0x01, 0x10, /* u16 HID_class */ | ||
| 107 | + 0x00, /* u8 country_code */ | ||
| 108 | + 0x01, /* u8 num_descriptors */ | ||
| 109 | + 0x22, /* u8 type; Report */ | ||
| 110 | + 0x6e, 0x00, /* u16 len */ | ||
| 111 | + | ||
| 112 | + /* one endpoint (status change endpoint) */ | ||
| 113 | + 0x07, /* u8 ep_bLength; */ | ||
| 114 | + 0x05, /* u8 ep_bDescriptorType; Endpoint */ | ||
| 115 | + 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */ | ||
| 116 | + 0x03, /* u8 ep_bmAttributes; Interrupt */ | ||
| 117 | + 0x08, 0x00, /* u16 ep_wMaxPacketSize; */ | ||
| 118 | + 0x0a, /* u8 ep_bInterval; */ | ||
| 119 | +}; | ||
| 120 | + | ||
| 121 | +static void usb_mouse_event(void *opaque, | ||
| 122 | + int dx1, int dy1, int dz1, int buttons_state) | ||
| 123 | +{ | ||
| 124 | + USBWacomState *s = opaque; | ||
| 125 | + | ||
| 126 | + s->dx += dx1; | ||
| 127 | + s->dy += dy1; | ||
| 128 | + s->dz += dz1; | ||
| 129 | + s->buttons_state = buttons_state; | ||
| 130 | +} | ||
| 131 | + | ||
| 132 | +static void usb_wacom_event(void *opaque, | ||
| 133 | + int x, int y, int dz, int buttons_state) | ||
| 134 | +{ | ||
| 135 | + USBWacomState *s = opaque; | ||
| 136 | + | ||
| 137 | + s->x = x; | ||
| 138 | + s->y = y; | ||
| 139 | + s->dz += dz; | ||
| 140 | + s->buttons_state = buttons_state; | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +static inline int int_clamp(int val, int vmin, int vmax) | ||
| 144 | +{ | ||
| 145 | + if (val < vmin) | ||
| 146 | + return vmin; | ||
| 147 | + else if (val > vmax) | ||
| 148 | + return vmax; | ||
| 149 | + else | ||
| 150 | + return val; | ||
| 151 | +} | ||
| 152 | + | ||
| 153 | +static int usb_mouse_poll(USBWacomState *s, uint8_t *buf, int len) | ||
| 154 | +{ | ||
| 155 | + int dx, dy, dz, b, l; | ||
| 156 | + | ||
| 157 | + if (!s->mouse_grabbed) { | ||
| 158 | + qemu_add_mouse_event_handler(usb_mouse_event, s, 1); | ||
| 159 | + s->mouse_grabbed = 1; | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + dx = int_clamp(s->dx, -128, 127); | ||
| 163 | + dy = int_clamp(s->dy, -128, 127); | ||
| 164 | + dz = int_clamp(s->dz, -128, 127); | ||
| 165 | + | ||
| 166 | + s->dx -= dx; | ||
| 167 | + s->dy -= dy; | ||
| 168 | + s->dz -= dz; | ||
| 169 | + | ||
| 170 | + b = 0; | ||
| 171 | + if (s->buttons_state & MOUSE_EVENT_LBUTTON) | ||
| 172 | + b |= 0x01; | ||
| 173 | + if (s->buttons_state & MOUSE_EVENT_RBUTTON) | ||
| 174 | + b |= 0x02; | ||
| 175 | + if (s->buttons_state & MOUSE_EVENT_MBUTTON) | ||
| 176 | + b |= 0x04; | ||
| 177 | + | ||
| 178 | + buf[0] = b; | ||
| 179 | + buf[1] = dx; | ||
| 180 | + buf[2] = dy; | ||
| 181 | + l = 3; | ||
| 182 | + if (len >= 4) { | ||
| 183 | + buf[3] = dz; | ||
| 184 | + l = 4; | ||
| 185 | + } | ||
| 186 | + return l; | ||
| 187 | +} | ||
| 188 | + | ||
| 189 | +static int usb_wacom_poll(USBWacomState *s, uint8_t *buf, int len) | ||
| 190 | +{ | ||
| 191 | + int b; | ||
| 192 | + | ||
| 193 | + if (!s->mouse_grabbed) { | ||
| 194 | + qemu_add_mouse_event_handler(usb_wacom_event, s, 1); | ||
| 195 | + s->mouse_grabbed = 1; | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + b = 0; | ||
| 199 | + if (s->buttons_state & MOUSE_EVENT_LBUTTON) | ||
| 200 | + b |= 0x01; | ||
| 201 | + if (s->buttons_state & MOUSE_EVENT_RBUTTON) | ||
| 202 | + b |= 0x02; | ||
| 203 | + if (s->buttons_state & MOUSE_EVENT_MBUTTON) | ||
| 204 | + b |= 0x04; | ||
| 205 | + | ||
| 206 | + if (len < 7) | ||
| 207 | + return 0; | ||
| 208 | + | ||
| 209 | + buf[0] = s->mode; | ||
| 210 | + buf[1] = s->x & 0xff; | ||
| 211 | + buf[2] = s->x >> 8; | ||
| 212 | + buf[3] = s->y & 0xff; | ||
| 213 | + buf[4] = s->y >> 8; | ||
| 214 | + if (b) { | ||
| 215 | + buf[5] = 0x40; | ||
| 216 | + buf[6] = 0; | ||
| 217 | + } else { | ||
| 218 | + buf[5] = 0x00; | ||
| 219 | + buf[6] = (unsigned char) -120; | ||
| 220 | + } | ||
| 221 | + | ||
| 222 | + return 7; | ||
| 223 | +} | ||
| 224 | + | ||
| 225 | +static void usb_wacom_handle_reset(USBDevice *dev) | ||
| 226 | +{ | ||
| 227 | + USBWacomState *s = (USBWacomState *) dev; | ||
| 228 | + | ||
| 229 | + s->dx = 0; | ||
| 230 | + s->dy = 0; | ||
| 231 | + s->dz = 0; | ||
| 232 | + s->x = 0; | ||
| 233 | + s->y = 0; | ||
| 234 | + s->buttons_state = 0; | ||
| 235 | + s->mode = WACOM_MODE_HID; | ||
| 236 | +} | ||
| 237 | + | ||
| 238 | +static int usb_wacom_handle_control(USBDevice *dev, int request, int value, | ||
| 239 | + int index, int length, uint8_t *data) | ||
| 240 | +{ | ||
| 241 | + USBWacomState *s = (USBWacomState *) dev; | ||
| 242 | + int ret = 0; | ||
| 243 | + | ||
| 244 | + switch (request) { | ||
| 245 | + case DeviceRequest | USB_REQ_GET_STATUS: | ||
| 246 | + data[0] = (1 << USB_DEVICE_SELF_POWERED) | | ||
| 247 | + (dev->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP); | ||
| 248 | + data[1] = 0x00; | ||
| 249 | + ret = 2; | ||
| 250 | + break; | ||
| 251 | + case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: | ||
| 252 | + if (value == USB_DEVICE_REMOTE_WAKEUP) { | ||
| 253 | + dev->remote_wakeup = 0; | ||
| 254 | + } else { | ||
| 255 | + goto fail; | ||
| 256 | + } | ||
| 257 | + ret = 0; | ||
| 258 | + break; | ||
| 259 | + case DeviceOutRequest | USB_REQ_SET_FEATURE: | ||
| 260 | + if (value == USB_DEVICE_REMOTE_WAKEUP) { | ||
| 261 | + dev->remote_wakeup = 1; | ||
| 262 | + } else { | ||
| 263 | + goto fail; | ||
| 264 | + } | ||
| 265 | + ret = 0; | ||
| 266 | + break; | ||
| 267 | + case DeviceOutRequest | USB_REQ_SET_ADDRESS: | ||
| 268 | + dev->addr = value; | ||
| 269 | + ret = 0; | ||
| 270 | + break; | ||
| 271 | + case DeviceRequest | USB_REQ_GET_DESCRIPTOR: | ||
| 272 | + switch (value >> 8) { | ||
| 273 | + case USB_DT_DEVICE: | ||
| 274 | + memcpy(data, qemu_wacom_dev_descriptor, | ||
| 275 | + sizeof(qemu_wacom_dev_descriptor)); | ||
| 276 | + ret = sizeof(qemu_wacom_dev_descriptor); | ||
| 277 | + break; | ||
| 278 | + case USB_DT_CONFIG: | ||
| 279 | + memcpy(data, qemu_wacom_config_descriptor, | ||
| 280 | + sizeof(qemu_wacom_config_descriptor)); | ||
| 281 | + ret = sizeof(qemu_wacom_config_descriptor); | ||
| 282 | + break; | ||
| 283 | + case USB_DT_STRING: | ||
| 284 | + switch (value & 0xff) { | ||
| 285 | + case 0: | ||
| 286 | + /* language ids */ | ||
| 287 | + data[0] = 4; | ||
| 288 | + data[1] = 3; | ||
| 289 | + data[2] = 0x09; | ||
| 290 | + data[3] = 0x04; | ||
| 291 | + ret = 4; | ||
| 292 | + break; | ||
| 293 | + case 1: | ||
| 294 | + /* serial number */ | ||
| 295 | + ret = set_usb_string(data, "1"); | ||
| 296 | + break; | ||
| 297 | + case 2: | ||
| 298 | + ret = set_usb_string(data, "Wacom PenPartner"); | ||
| 299 | + break; | ||
| 300 | + case 3: | ||
| 301 | + /* vendor description */ | ||
| 302 | + ret = set_usb_string(data, "QEMU " QEMU_VERSION); | ||
| 303 | + break; | ||
| 304 | + case 4: | ||
| 305 | + ret = set_usb_string(data, "Wacom Tablet"); | ||
| 306 | + break; | ||
| 307 | + case 5: | ||
| 308 | + ret = set_usb_string(data, "Endpoint1 Interrupt Pipe"); | ||
| 309 | + break; | ||
| 310 | + default: | ||
| 311 | + goto fail; | ||
| 312 | + } | ||
| 313 | + break; | ||
| 314 | + default: | ||
| 315 | + goto fail; | ||
| 316 | + } | ||
| 317 | + break; | ||
| 318 | + case DeviceRequest | USB_REQ_GET_CONFIGURATION: | ||
| 319 | + data[0] = 1; | ||
| 320 | + ret = 1; | ||
| 321 | + break; | ||
| 322 | + case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: | ||
| 323 | + ret = 0; | ||
| 324 | + break; | ||
| 325 | + case DeviceRequest | USB_REQ_GET_INTERFACE: | ||
| 326 | + data[0] = 0; | ||
| 327 | + ret = 1; | ||
| 328 | + break; | ||
| 329 | + case DeviceOutRequest | USB_REQ_SET_INTERFACE: | ||
| 330 | + ret = 0; | ||
| 331 | + break; | ||
| 332 | + case WACOM_SET_REPORT: | ||
| 333 | + qemu_add_mouse_event_handler(NULL, NULL, 0); | ||
| 334 | + s->mouse_grabbed = 0; | ||
| 335 | + s->mode = data[0]; | ||
| 336 | + ret = 0; | ||
| 337 | + break; | ||
| 338 | + case WACOM_GET_REPORT: | ||
| 339 | + data[0] = 0; | ||
| 340 | + data[1] = s->mode; | ||
| 341 | + ret = 2; | ||
| 342 | + break; | ||
| 343 | + /* USB HID requests */ | ||
| 344 | + case HID_GET_REPORT: | ||
| 345 | + if (s->mode == WACOM_MODE_HID) | ||
| 346 | + ret = usb_mouse_poll(s, data, length); | ||
| 347 | + else if (s->mode == WACOM_MODE_WACOM) | ||
| 348 | + ret = usb_wacom_poll(s, data, length); | ||
| 349 | + break; | ||
| 350 | + case HID_SET_IDLE: | ||
| 351 | + ret = 0; | ||
| 352 | + break; | ||
| 353 | + default: | ||
| 354 | + fail: | ||
| 355 | + ret = USB_RET_STALL; | ||
| 356 | + break; | ||
| 357 | + } | ||
| 358 | + return ret; | ||
| 359 | +} | ||
| 360 | + | ||
| 361 | +static int usb_wacom_handle_data(USBDevice *dev, int pid, | ||
| 362 | + uint8_t devep, uint8_t *data, int len) | ||
| 363 | +{ | ||
| 364 | + USBWacomState *s = (USBWacomState *) dev; | ||
| 365 | + int ret = 0; | ||
| 366 | + | ||
| 367 | + switch (pid) { | ||
| 368 | + case USB_TOKEN_IN: | ||
| 369 | + if (devep == 1) { | ||
| 370 | + if (s->mode == WACOM_MODE_HID) | ||
| 371 | + ret = usb_mouse_poll(s, data, len); | ||
| 372 | + else if (s->mode == WACOM_MODE_WACOM) | ||
| 373 | + ret = usb_wacom_poll(s, data, len); | ||
| 374 | + break; | ||
| 375 | + } | ||
| 376 | + /* Fall through. */ | ||
| 377 | + case USB_TOKEN_OUT: | ||
| 378 | + default: | ||
| 379 | + ret = USB_RET_STALL; | ||
| 380 | + break; | ||
| 381 | + } | ||
| 382 | + return ret; | ||
| 383 | +} | ||
| 384 | + | ||
| 385 | +static void usb_wacom_handle_destroy(USBDevice *dev) | ||
| 386 | +{ | ||
| 387 | + USBWacomState *s = (USBWacomState *) dev; | ||
| 388 | + | ||
| 389 | + qemu_add_mouse_event_handler(NULL, NULL, 0); | ||
| 390 | + qemu_free(s); | ||
| 391 | +} | ||
| 392 | + | ||
| 393 | +USBDevice *usb_wacom_init(void) | ||
| 394 | +{ | ||
| 395 | + USBWacomState *s; | ||
| 396 | + | ||
| 397 | + s = qemu_mallocz(sizeof(USBWacomState)); | ||
| 398 | + if (!s) | ||
| 399 | + return NULL; | ||
| 400 | + s->dev.speed = USB_SPEED_FULL; | ||
| 401 | + s->dev.handle_packet = usb_generic_handle_packet; | ||
| 402 | + | ||
| 403 | + s->dev.handle_reset = usb_wacom_handle_reset; | ||
| 404 | + s->dev.handle_control = usb_wacom_handle_control; | ||
| 405 | + s->dev.handle_data = usb_wacom_handle_data; | ||
| 406 | + s->dev.handle_destroy = usb_wacom_handle_destroy; | ||
| 407 | + | ||
| 408 | + pstrcpy(s->dev.devname, sizeof(s->dev.devname), | ||
| 409 | + "QEMU PenPartner Tablet"); | ||
| 410 | + | ||
| 411 | + return (USBDevice *) s; | ||
| 412 | +} | ||
| 413 | diff -pNaur qemu-cvs-ts-orig/hw/usb.h qemu-cvs-ts/hw/usb.h | ||
| 414 | --- qemu-cvs-ts-orig/hw/usb.h 2006-08-12 03:04:27.000000000 +0200 | ||
| 415 | +++ qemu-cvs-ts/hw/usb.h 2006-09-21 01:40:40.000000000 +0200 | ||
| 416 | @@ -218,3 +218,6 @@ USBDevice *usb_tablet_init(void); | ||
| 417 | |||
| 418 | /* usb-msd.c */ | ||
| 419 | USBDevice *usb_msd_init(const char *filename); | ||
| 420 | + | ||
| 421 | +/* usb-wacom.c */ | ||
| 422 | +USBDevice *usb_wacom_init(void); | ||
| 423 | diff -pNaur qemu-cvs-ts-orig/vl.c qemu-cvs-ts/vl.c | ||
| 424 | --- qemu-cvs-ts-orig/vl.c 2006-09-10 16:39:54.000000000 +0200 | ||
| 425 | +++ qemu-cvs-ts/vl.c 2006-09-21 01:45:16.000000000 +0200 | ||
| 426 | @@ -3765,6 +3765,8 @@ static int usb_device_add(const char *de | ||
| 427 | dev = usb_tablet_init(); | ||
| 428 | } else if (strstart(devname, "disk:", &p)) { | ||
| 429 | dev = usb_msd_init(p); | ||
| 430 | + } else if (!strcmp(devname, "wacom-tablet")) { | ||
| 431 | + dev = usb_wacom_init(); | ||
| 432 | } else { | ||
| 433 | return -1; | ||
| 434 | } | ||
| 435 | diff -pNaur qemu-cvs-ts-orig/Makefile.target qemu-cvs-ts/Makefile.target | ||
| 436 | --- qemu-cvs-ts-orig/Makefile.target 2006-09-18 03:15:29.000000000 +0200 | ||
| 437 | +++ qemu-cvs-ts/Makefile.target 2006-09-21 02:32:19.000000000 +0200 | ||
| 438 | @@ -330,6 +330,7 @@ VL_OBJS+= scsi-disk.o cdrom.o lsi53c895a | ||
| 439 | |||
| 440 | # USB layer | ||
| 441 | VL_OBJS+= usb.o usb-hub.o usb-linux.o usb-hid.o usb-ohci.o usb-msd.o | ||
| 442 | +VL_OBJS+= usb-wacom.o | ||
| 443 | |||
| 444 | # PCI network cards | ||
| 445 | VL_OBJS+= ne2000.o rtl8139.o pcnet.o | ||
diff --git a/meta/packages/qemu/files/qemu-usb-wacom-buttons.patch b/meta/packages/qemu/files/qemu-usb-wacom-buttons.patch deleted file mode 100644 index ee24c15780..0000000000 --- a/meta/packages/qemu/files/qemu-usb-wacom-buttons.patch +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | --- qemu-cvs-ts-orig/hw/usb-wacom.c 2006-09-29 22:53:06.000000000 +0000 | ||
| 2 | +++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-29 22:44:14.000000000 +0000 | ||
| 3 | @@ -203,19 +203,18 @@ static int usb_wacom_poll(USBWacomState | ||
| 4 | return 0; | ||
| 5 | |||
| 6 | buf[0] = s->mode; | ||
| 7 | + buf[5] = 0x00; | ||
| 8 | if (b) { | ||
| 9 | buf[1] = s->x & 0xff; | ||
| 10 | buf[2] = s->x >> 8; | ||
| 11 | buf[3] = s->y & 0xff; | ||
| 12 | buf[4] = s->y >> 8; | ||
| 13 | - buf[5] = 0x40; | ||
| 14 | buf[6] = 0; | ||
| 15 | } else { | ||
| 16 | buf[1] = 0; | ||
| 17 | buf[2] = 0; | ||
| 18 | buf[3] = 0; | ||
| 19 | buf[4] = 0; | ||
| 20 | - buf[5] = 0x00; | ||
| 21 | buf[6] = (unsigned char) -127; | ||
| 22 | } | ||
| 23 | |||
diff --git a/meta/packages/qemu/files/qemu-usb-wacom-pressure.patch b/meta/packages/qemu/files/qemu-usb-wacom-pressure.patch deleted file mode 100644 index 668d50d5f2..0000000000 --- a/meta/packages/qemu/files/qemu-usb-wacom-pressure.patch +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | --- qemu-cvs-ts-orig/hw/usb-wacom.c 2006-09-29 17:27:43.000000000 +0000 | ||
| 2 | +++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-29 17:48:13.000000000 +0000 | ||
| 3 | @@ -203,16 +203,20 @@ static int usb_wacom_poll(USBWacomState | ||
| 4 | return 0; | ||
| 5 | |||
| 6 | buf[0] = s->mode; | ||
| 7 | - buf[1] = s->x & 0xff; | ||
| 8 | - buf[2] = s->x >> 8; | ||
| 9 | - buf[3] = s->y & 0xff; | ||
| 10 | - buf[4] = s->y >> 8; | ||
| 11 | if (b) { | ||
| 12 | + buf[1] = s->x & 0xff; | ||
| 13 | + buf[2] = s->x >> 8; | ||
| 14 | + buf[3] = s->y & 0xff; | ||
| 15 | + buf[4] = s->y >> 8; | ||
| 16 | buf[5] = 0x40; | ||
| 17 | buf[6] = 0; | ||
| 18 | } else { | ||
| 19 | + buf[1] = 0; | ||
| 20 | + buf[2] = 0; | ||
| 21 | + buf[3] = 0; | ||
| 22 | + buf[4] = 0; | ||
| 23 | buf[5] = 0x00; | ||
| 24 | - buf[6] = (unsigned char) -120; | ||
| 25 | + buf[6] = (unsigned char) -127; | ||
| 26 | } | ||
| 27 | |||
| 28 | return 7; | ||
diff --git a/meta/packages/qemu/files/qemu-usb-wacom.patch b/meta/packages/qemu/files/qemu-usb-wacom.patch deleted file mode 100644 index c1c39eccaf..0000000000 --- a/meta/packages/qemu/files/qemu-usb-wacom.patch +++ /dev/null | |||
| @@ -1,444 +0,0 @@ | |||
| 1 | diff -pNaur qemu-cvs-ts-orig/hw/usb-wacom.c qemu-cvs-ts/hw/usb-wacom.c | ||
| 2 | --- qemu-cvs-ts-orig/hw/usb-wacom.c 1970-01-01 01:00:00.000000000 +0100 | ||
| 3 | +++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-22 20:44:26.000000000 +0200 | ||
| 4 | @@ -0,0 +1,407 @@ | ||
| 5 | +/* | ||
| 6 | + * Wacom PenPartner USB tablet emulation. | ||
| 7 | + * | ||
| 8 | + * Copyright (c) 2006 Openedhand Ltd. | ||
| 9 | + * | ||
| 10 | + * Author: Andrzej Zaborowski <balrog@zabor.org> | ||
| 11 | + * | ||
| 12 | + * Based on hw/usb-hid.c: | ||
| 13 | + * Copyright (c) 2005 Fabrice Bellard | ||
| 14 | + * | ||
| 15 | + * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 16 | + * of this software and associated documentation files (the "Software"), to deal | ||
| 17 | + * in the Software without restriction, including without limitation the rights | ||
| 18 | + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 19 | + * copies of the Software, and to permit persons to whom the Software is | ||
| 20 | + * furnished to do so, subject to the following conditions: | ||
| 21 | + * | ||
| 22 | + * The above copyright notice and this permission notice shall be included in | ||
| 23 | + * all copies or substantial portions of the Software. | ||
| 24 | + * | ||
| 25 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 26 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 27 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 28 | + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 29 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 30 | + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 31 | + * THE SOFTWARE. | ||
| 32 | + */ | ||
| 33 | +#include "vl.h" | ||
| 34 | + | ||
| 35 | +/* Interface requests */ | ||
| 36 | +#define WACOM_GET_REPORT 0x2101 | ||
| 37 | +#define WACOM_SET_REPORT 0x2109 | ||
| 38 | + | ||
| 39 | +/* HID interface requests */ | ||
| 40 | +#define HID_GET_REPORT 0xa101 | ||
| 41 | +#define HID_GET_IDLE 0xa102 | ||
| 42 | +#define HID_GET_PROTOCOL 0xa103 | ||
| 43 | +#define HID_SET_IDLE 0x210a | ||
| 44 | +#define HID_SET_PROTOCOL 0x210b | ||
| 45 | + | ||
| 46 | +#define WACOM_MODE_HID 1 | ||
| 47 | +#define WACOM_MODE_WACOM 2 | ||
| 48 | + | ||
| 49 | +typedef struct USBWacomState { | ||
| 50 | + USBDevice dev; | ||
| 51 | + int dx, dy, dz, buttons_state; | ||
| 52 | + int x, y; | ||
| 53 | + int mouse_grabbed; | ||
| 54 | + int mode; | ||
| 55 | +} USBWacomState; | ||
| 56 | + | ||
| 57 | +static const uint8_t qemu_wacom_dev_descriptor[] = { | ||
| 58 | + 0x12, /* u8 bLength; */ | ||
| 59 | + 0x01, /* u8 bDescriptorType; Device */ | ||
| 60 | + 0x10, 0x10, /* u16 bcdUSB; v1.10 */ | ||
| 61 | + | ||
| 62 | + 0x00, /* u8 bDeviceClass; */ | ||
| 63 | + 0x00, /* u8 bDeviceSubClass; */ | ||
| 64 | + 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */ | ||
| 65 | + 0x08, /* u8 bMaxPacketSize0; 8 Bytes */ | ||
| 66 | + | ||
| 67 | + 0x6a, 0x05, /* u16 idVendor; */ | ||
| 68 | + 0x00, 0x00, /* u16 idProduct; */ | ||
| 69 | + 0x10, 0x42, /* u16 bcdDevice */ | ||
| 70 | + | ||
| 71 | + 0x01, /* u8 iManufacturer; */ | ||
| 72 | + 0x02, /* u8 iProduct; */ | ||
| 73 | + 0x00, /* u8 iSerialNumber; */ | ||
| 74 | + 0x01, /* u8 bNumConfigurations; */ | ||
| 75 | +}; | ||
| 76 | + | ||
| 77 | +static const uint8_t qemu_wacom_config_descriptor[] = { | ||
| 78 | + /* one configuration */ | ||
| 79 | + 0x09, /* u8 bLength; */ | ||
| 80 | + 0x02, /* u8 bDescriptorType; Configuration */ | ||
| 81 | + 0x22, 0x00, /* u16 wTotalLength; */ | ||
| 82 | + 0x01, /* u8 bNumInterfaces; (1) */ | ||
| 83 | + 0x01, /* u8 bConfigurationValue; */ | ||
| 84 | + 0x00, /* u8 iConfiguration; */ | ||
| 85 | + 0x80, /* u8 bmAttributes; | ||
| 86 | + Bit 7: must be set, | ||
| 87 | + 6: Self-powered, | ||
| 88 | + 5: Remote wakeup, | ||
| 89 | + 4..0: resvd */ | ||
| 90 | + 40, /* u8 MaxPower; */ | ||
| 91 | + | ||
| 92 | + /* one interface */ | ||
| 93 | + 0x09, /* u8 if_bLength; */ | ||
| 94 | + 0x04, /* u8 if_bDescriptorType; Interface */ | ||
| 95 | + 0x00, /* u8 if_bInterfaceNumber; */ | ||
| 96 | + 0x00, /* u8 if_bAlternateSetting; */ | ||
| 97 | + 0x01, /* u8 if_bNumEndpoints; */ | ||
| 98 | + 0x03, /* u8 if_bInterfaceClass; HID */ | ||
| 99 | + 0x01, /* u8 if_bInterfaceSubClass; Boot */ | ||
| 100 | + 0x02, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */ | ||
| 101 | + 0x00, /* u8 if_iInterface; */ | ||
| 102 | + | ||
| 103 | + /* HID descriptor */ | ||
| 104 | + 0x09, /* u8 bLength; */ | ||
| 105 | + 0x21, /* u8 bDescriptorType; */ | ||
| 106 | + 0x01, 0x10, /* u16 HID_class */ | ||
| 107 | + 0x00, /* u8 country_code */ | ||
| 108 | + 0x01, /* u8 num_descriptors */ | ||
| 109 | + 0x22, /* u8 type; Report */ | ||
| 110 | + 0x6e, 0x00, /* u16 len */ | ||
| 111 | + | ||
| 112 | + /* one endpoint (status change endpoint) */ | ||
| 113 | + 0x07, /* u8 ep_bLength; */ | ||
| 114 | + 0x05, /* u8 ep_bDescriptorType; Endpoint */ | ||
| 115 | + 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */ | ||
| 116 | + 0x03, /* u8 ep_bmAttributes; Interrupt */ | ||
| 117 | + 0x08, 0x00, /* u16 ep_wMaxPacketSize; */ | ||
| 118 | + 0x0a, /* u8 ep_bInterval; */ | ||
| 119 | +}; | ||
| 120 | + | ||
| 121 | +static void usb_mouse_event(void *opaque, | ||
| 122 | + int dx1, int dy1, int dz1, int buttons_state) | ||
| 123 | +{ | ||
| 124 | + USBWacomState *s = opaque; | ||
| 125 | + | ||
| 126 | + s->dx += dx1; | ||
| 127 | + s->dy += dy1; | ||
| 128 | + s->dz += dz1; | ||
| 129 | + s->buttons_state = buttons_state; | ||
| 130 | +} | ||
| 131 | + | ||
| 132 | +static void usb_wacom_event(void *opaque, | ||
| 133 | + int x, int y, int dz, int buttons_state) | ||
| 134 | +{ | ||
| 135 | + USBWacomState *s = opaque; | ||
| 136 | + | ||
| 137 | + s->x = x; | ||
| 138 | + s->y = y; | ||
| 139 | + s->dz += dz; | ||
| 140 | + s->buttons_state = buttons_state; | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +static inline int int_clamp(int val, int vmin, int vmax) | ||
| 144 | +{ | ||
| 145 | + if (val < vmin) | ||
| 146 | + return vmin; | ||
| 147 | + else if (val > vmax) | ||
| 148 | + return vmax; | ||
| 149 | + else | ||
| 150 | + return val; | ||
| 151 | +} | ||
| 152 | + | ||
| 153 | +static int usb_mouse_poll(USBWacomState *s, uint8_t *buf, int len) | ||
| 154 | +{ | ||
| 155 | + int dx, dy, dz, b, l; | ||
| 156 | + | ||
| 157 | + if (!s->mouse_grabbed) { | ||
| 158 | + qemu_add_mouse_event_handler(usb_mouse_event, s, 1); | ||
| 159 | + s->mouse_grabbed = 1; | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + dx = int_clamp(s->dx, -128, 127); | ||
| 163 | + dy = int_clamp(s->dy, -128, 127); | ||
| 164 | + dz = int_clamp(s->dz, -128, 127); | ||
| 165 | + | ||
| 166 | + s->dx -= dx; | ||
| 167 | + s->dy -= dy; | ||
| 168 | + s->dz -= dz; | ||
| 169 | + | ||
| 170 | + b = 0; | ||
| 171 | + if (s->buttons_state & MOUSE_EVENT_LBUTTON) | ||
| 172 | + b |= 0x01; | ||
| 173 | + if (s->buttons_state & MOUSE_EVENT_RBUTTON) | ||
| 174 | + b |= 0x02; | ||
| 175 | + if (s->buttons_state & MOUSE_EVENT_MBUTTON) | ||
| 176 | + b |= 0x04; | ||
| 177 | + | ||
| 178 | + buf[0] = b; | ||
| 179 | + buf[1] = dx; | ||
| 180 | + buf[2] = dy; | ||
| 181 | + l = 3; | ||
| 182 | + if (len >= 4) { | ||
| 183 | + buf[3] = dz; | ||
| 184 | + l = 4; | ||
| 185 | + } | ||
| 186 | + return l; | ||
| 187 | +} | ||
| 188 | + | ||
| 189 | +static int usb_wacom_poll(USBWacomState *s, uint8_t *buf, int len) | ||
| 190 | +{ | ||
| 191 | + int b; | ||
| 192 | + | ||
| 193 | + if (!s->mouse_grabbed) { | ||
| 194 | + qemu_add_mouse_event_handler(usb_wacom_event, s, 1); | ||
| 195 | + s->mouse_grabbed = 1; | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + b = 0; | ||
| 199 | + if (s->buttons_state & MOUSE_EVENT_LBUTTON) | ||
| 200 | + b |= 0x01; | ||
| 201 | + if (s->buttons_state & MOUSE_EVENT_RBUTTON) | ||
| 202 | + b |= 0x02; | ||
| 203 | + if (s->buttons_state & MOUSE_EVENT_MBUTTON) | ||
| 204 | + b |= 0x04; | ||
| 205 | + | ||
| 206 | + if (len < 7) | ||
| 207 | + return 0; | ||
| 208 | + | ||
| 209 | + buf[0] = s->mode; | ||
| 210 | + buf[1] = s->x & 0xff; | ||
| 211 | + buf[2] = s->x >> 8; | ||
| 212 | + buf[3] = s->y & 0xff; | ||
| 213 | + buf[4] = s->y >> 8; | ||
| 214 | + if (b) { | ||
| 215 | + buf[5] = 0x40; | ||
| 216 | + buf[6] = 0; | ||
| 217 | + } else { | ||
| 218 | + buf[5] = 0x00; | ||
| 219 | + buf[6] = (unsigned char) -120; | ||
| 220 | + } | ||
| 221 | + | ||
| 222 | + return 7; | ||
| 223 | +} | ||
| 224 | + | ||
| 225 | +static void usb_wacom_handle_reset(USBDevice *dev) | ||
| 226 | +{ | ||
| 227 | + USBWacomState *s = (USBWacomState *) dev; | ||
| 228 | + | ||
| 229 | + s->dx = 0; | ||
| 230 | + s->dy = 0; | ||
| 231 | + s->dz = 0; | ||
| 232 | + s->x = 0; | ||
| 233 | + s->y = 0; | ||
| 234 | + s->buttons_state = 0; | ||
| 235 | + s->mode = WACOM_MODE_HID; | ||
| 236 | +} | ||
| 237 | + | ||
| 238 | +static int usb_wacom_handle_control(USBDevice *dev, int request, int value, | ||
| 239 | + int index, int length, uint8_t *data) | ||
| 240 | +{ | ||
| 241 | + USBWacomState *s = (USBWacomState *) dev; | ||
| 242 | + int ret = 0; | ||
| 243 | + | ||
| 244 | + switch (request) { | ||
| 245 | + case DeviceRequest | USB_REQ_GET_STATUS: | ||
| 246 | + data[0] = (1 << USB_DEVICE_SELF_POWERED) | | ||
| 247 | + (dev->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP); | ||
| 248 | + data[1] = 0x00; | ||
| 249 | + ret = 2; | ||
| 250 | + break; | ||
| 251 | + case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: | ||
| 252 | + if (value == USB_DEVICE_REMOTE_WAKEUP) { | ||
| 253 | + dev->remote_wakeup = 0; | ||
| 254 | + } else { | ||
| 255 | + goto fail; | ||
| 256 | + } | ||
| 257 | + ret = 0; | ||
| 258 | + break; | ||
| 259 | + case DeviceOutRequest | USB_REQ_SET_FEATURE: | ||
| 260 | + if (value == USB_DEVICE_REMOTE_WAKEUP) { | ||
| 261 | + dev->remote_wakeup = 1; | ||
| 262 | + } else { | ||
| 263 | + goto fail; | ||
| 264 | + } | ||
| 265 | + ret = 0; | ||
| 266 | + break; | ||
| 267 | + case DeviceOutRequest | USB_REQ_SET_ADDRESS: | ||
| 268 | + dev->addr = value; | ||
| 269 | + ret = 0; | ||
| 270 | + break; | ||
| 271 | + case DeviceRequest | USB_REQ_GET_DESCRIPTOR: | ||
| 272 | + switch (value >> 8) { | ||
| 273 | + case USB_DT_DEVICE: | ||
| 274 | + memcpy(data, qemu_wacom_dev_descriptor, | ||
| 275 | + sizeof(qemu_wacom_dev_descriptor)); | ||
| 276 | + ret = sizeof(qemu_wacom_dev_descriptor); | ||
| 277 | + break; | ||
| 278 | + case USB_DT_CONFIG: | ||
| 279 | + memcpy(data, qemu_wacom_config_descriptor, | ||
| 280 | + sizeof(qemu_wacom_config_descriptor)); | ||
| 281 | + ret = sizeof(qemu_wacom_config_descriptor); | ||
| 282 | + break; | ||
| 283 | + case USB_DT_STRING: | ||
| 284 | + switch (value & 0xff) { | ||
| 285 | + case 0: | ||
| 286 | + /* language ids */ | ||
| 287 | + data[0] = 4; | ||
| 288 | + data[1] = 3; | ||
| 289 | + data[2] = 0x09; | ||
| 290 | + data[3] = 0x04; | ||
| 291 | + ret = 4; | ||
| 292 | + break; | ||
| 293 | + case 1: | ||
| 294 | + /* serial number */ | ||
| 295 | + ret = set_usb_string(data, "1"); | ||
| 296 | + break; | ||
| 297 | + case 2: | ||
| 298 | + ret = set_usb_string(data, "Wacom PenPartner"); | ||
| 299 | + break; | ||
| 300 | + case 3: | ||
| 301 | + /* vendor description */ | ||
| 302 | + ret = set_usb_string(data, "QEMU " QEMU_VERSION); | ||
| 303 | + break; | ||
| 304 | + case 4: | ||
| 305 | + ret = set_usb_string(data, "Wacom Tablet"); | ||
| 306 | + break; | ||
| 307 | + case 5: | ||
| 308 | + ret = set_usb_string(data, "Endpoint1 Interrupt Pipe"); | ||
| 309 | + break; | ||
| 310 | + default: | ||
| 311 | + goto fail; | ||
| 312 | + } | ||
| 313 | + break; | ||
| 314 | + default: | ||
| 315 | + goto fail; | ||
| 316 | + } | ||
| 317 | + break; | ||
| 318 | + case DeviceRequest | USB_REQ_GET_CONFIGURATION: | ||
| 319 | + data[0] = 1; | ||
| 320 | + ret = 1; | ||
| 321 | + break; | ||
| 322 | + case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: | ||
| 323 | + ret = 0; | ||
| 324 | + break; | ||
| 325 | + case DeviceRequest | USB_REQ_GET_INTERFACE: | ||
| 326 | + data[0] = 0; | ||
| 327 | + ret = 1; | ||
| 328 | + break; | ||
| 329 | + case DeviceOutRequest | USB_REQ_SET_INTERFACE: | ||
| 330 | + ret = 0; | ||
| 331 | + break; | ||
| 332 | + case WACOM_SET_REPORT: | ||
| 333 | + qemu_add_mouse_event_handler(NULL, NULL, 0); | ||
| 334 | + s->mouse_grabbed = 0; | ||
| 335 | + s->mode = data[0]; | ||
| 336 | + ret = 0; | ||
| 337 | + break; | ||
| 338 | + case WACOM_GET_REPORT: | ||
| 339 | + data[0] = 0; | ||
| 340 | + data[1] = s->mode; | ||
| 341 | + ret = 2; | ||
| 342 | + break; | ||
| 343 | + /* USB HID requests */ | ||
| 344 | + case HID_GET_REPORT: | ||
| 345 | + if (s->mode == WACOM_MODE_HID) | ||
| 346 | + ret = usb_mouse_poll(s, data, length); | ||
| 347 | + else if (s->mode == WACOM_MODE_WACOM) | ||
| 348 | + ret = usb_wacom_poll(s, data, length); | ||
| 349 | + break; | ||
| 350 | + case HID_SET_IDLE: | ||
| 351 | + ret = 0; | ||
| 352 | + break; | ||
| 353 | + default: | ||
| 354 | + fail: | ||
| 355 | + ret = USB_RET_STALL; | ||
| 356 | + break; | ||
| 357 | + } | ||
| 358 | + return ret; | ||
| 359 | +} | ||
| 360 | + | ||
| 361 | +static int usb_wacom_handle_data(USBDevice *dev, USBPacket *p) | ||
| 362 | +{ | ||
| 363 | + USBWacomState *s = (USBWacomState *) dev; | ||
| 364 | + int ret = 0; | ||
| 365 | + | ||
| 366 | + switch (p->pid) { | ||
| 367 | + case USB_TOKEN_IN: | ||
| 368 | + if (p->devep == 1) { | ||
| 369 | + if (s->mode == WACOM_MODE_HID) | ||
| 370 | + ret = usb_mouse_poll(s, p->data, p->len); | ||
| 371 | + else if (s->mode == WACOM_MODE_WACOM) | ||
| 372 | + ret = usb_wacom_poll(s, p->data, p->len); | ||
| 373 | + break; | ||
| 374 | + } | ||
| 375 | + /* Fall through. */ | ||
| 376 | + case USB_TOKEN_OUT: | ||
| 377 | + default: | ||
| 378 | + ret = USB_RET_STALL; | ||
| 379 | + break; | ||
| 380 | + } | ||
| 381 | + return ret; | ||
| 382 | +} | ||
| 383 | + | ||
| 384 | +static void usb_wacom_handle_destroy(USBDevice *dev) | ||
| 385 | +{ | ||
| 386 | + USBWacomState *s = (USBWacomState *) dev; | ||
| 387 | + | ||
| 388 | + qemu_add_mouse_event_handler(NULL, NULL, 0); | ||
| 389 | + qemu_free(s); | ||
| 390 | +} | ||
| 391 | + | ||
| 392 | +USBDevice *usb_wacom_init(void) | ||
| 393 | +{ | ||
| 394 | + USBWacomState *s; | ||
| 395 | + | ||
| 396 | + s = qemu_mallocz(sizeof(USBWacomState)); | ||
| 397 | + if (!s) | ||
| 398 | + return NULL; | ||
| 399 | + s->dev.speed = USB_SPEED_FULL; | ||
| 400 | + s->dev.handle_packet = usb_generic_handle_packet; | ||
| 401 | + | ||
| 402 | + s->dev.handle_reset = usb_wacom_handle_reset; | ||
| 403 | + s->dev.handle_control = usb_wacom_handle_control; | ||
| 404 | + s->dev.handle_data = usb_wacom_handle_data; | ||
| 405 | + s->dev.handle_destroy = usb_wacom_handle_destroy; | ||
| 406 | + | ||
| 407 | + pstrcpy(s->dev.devname, sizeof(s->dev.devname), | ||
| 408 | + "QEMU PenPartner Tablet"); | ||
| 409 | + | ||
| 410 | + return (USBDevice *) s; | ||
| 411 | +} | ||
| 412 | diff -pNaur qemu-cvs-ts-orig/hw/usb.h qemu-cvs-ts/hw/usb.h | ||
| 413 | --- qemu-cvs-ts-orig/hw/usb.h 2006-08-12 03:04:27.000000000 +0200 | ||
| 414 | +++ qemu-cvs-ts/hw/usb.h 2006-09-21 01:40:40.000000000 +0200 | ||
| 415 | @@ -218,3 +218,6 @@ USBDevice *usb_tablet_init(void); | ||
| 416 | |||
| 417 | /* usb-msd.c */ | ||
| 418 | USBDevice *usb_msd_init(const char *filename); | ||
| 419 | + | ||
| 420 | +/* usb-wacom.c */ | ||
| 421 | +USBDevice *usb_wacom_init(void); | ||
| 422 | diff -pNaur qemu-cvs-ts-orig/vl.c qemu-cvs-ts/vl.c | ||
| 423 | --- qemu-cvs-ts-orig/vl.c 2006-09-10 16:39:54.000000000 +0200 | ||
| 424 | +++ qemu-cvs-ts/vl.c 2006-09-21 01:45:16.000000000 +0200 | ||
| 425 | @@ -3765,6 +3765,8 @@ static int usb_device_add(const char *de | ||
| 426 | dev = usb_tablet_init(); | ||
| 427 | } else if (strstart(devname, "disk:", &p)) { | ||
| 428 | dev = usb_msd_init(p); | ||
| 429 | + } else if (!strcmp(devname, "wacom-tablet")) { | ||
| 430 | + dev = usb_wacom_init(); | ||
| 431 | } else { | ||
| 432 | return -1; | ||
| 433 | } | ||
| 434 | diff -pNaur qemu-cvs-ts-orig/Makefile.target qemu-cvs-ts/Makefile.target | ||
| 435 | --- qemu-cvs-ts-orig/Makefile.target 2006-09-18 03:15:29.000000000 +0200 | ||
| 436 | +++ qemu-cvs-ts/Makefile.target 2006-09-21 02:32:19.000000000 +0200 | ||
| 437 | @@ -330,6 +330,7 @@ VL_OBJS+= scsi-disk.o cdrom.o lsi53c895a | ||
| 438 | |||
| 439 | # USB layer | ||
| 440 | VL_OBJS+= usb.o usb-hub.o usb-linux.o usb-hid.o usb-ohci.o usb-msd.o | ||
| 441 | +VL_OBJS+= usb-wacom.o | ||
| 442 | |||
| 443 | # PCI network cards | ||
| 444 | VL_OBJS+= ne2000.o rtl8139.o pcnet.o | ||
diff --git a/meta/packages/qemu/files/qemu-x-no-sdl.patch b/meta/packages/qemu/files/qemu-x-no-sdl.patch deleted file mode 100644 index eb00d9806b..0000000000 --- a/meta/packages/qemu/files/qemu-x-no-sdl.patch +++ /dev/null | |||
| @@ -1,630 +0,0 @@ | |||
| 1 | diff -urN qemu-0.8.2/configure qemu-0.8.2-x/configure | ||
| 2 | --- qemu-0.8.2/configure 2006-07-22 18:23:34.000000000 +0100 | ||
| 3 | +++ qemu-0.8.2-x/configure 2006-08-24 14:24:33.000000000 +0100 | ||
| 4 | @@ -492,6 +492,21 @@ | ||
| 5 | fi # cross compilation | ||
| 6 | fi # -z $sdl | ||
| 7 | |||
| 8 | +########################################## | ||
| 9 | +# X Probe | ||
| 10 | + | ||
| 11 | +x11=no | ||
| 12 | +if test -z "$sdl" || test "$sdl" = "no"; then | ||
| 13 | + x11=yes | ||
| 14 | +fi | ||
| 15 | + | ||
| 16 | +if test "$x11" = "yes"; then | ||
| 17 | + x11=no | ||
| 18 | + if `pkg-config --exists x11 xext`; then | ||
| 19 | + x11=yes | ||
| 20 | + fi | ||
| 21 | +fi | ||
| 22 | + | ||
| 23 | # Check if tools are available to build documentation. | ||
| 24 | if [ -x "`which texi2html`" ] && [ -x "`which pod2man`" ]; then | ||
| 25 | build_docs="yes" | ||
| 26 | @@ -540,6 +555,7 @@ | ||
| 27 | if test "$sdl" != "no" ; then | ||
| 28 | echo "SDL static link $sdl_static" | ||
| 29 | fi | ||
| 30 | +echo "X11 support $x11" | ||
| 31 | echo "mingw32 support $mingw32" | ||
| 32 | echo "Adlib support $adlib" | ||
| 33 | echo "CoreAudio support $coreaudio" | ||
| 34 | @@ -748,14 +764,14 @@ | ||
| 35 | fi | ||
| 36 | |||
| 37 | if test "$target_user_only" = "no" -a "$check_gfx" = "yes" \ | ||
| 38 | - -a "$sdl" = "no" -a "$cocoa" = "no" ; then | ||
| 39 | + -a "$sdl" = "no" -a "$x11" = "no" -a "$cocoa" = "no" ; then | ||
| 40 | echo "ERROR: QEMU requires SDL or Cocoa for graphical output" | ||
| 41 | echo "To build QEMU without graphical output configure with --disable-gfx-check" | ||
| 42 | echo "Note that this will disable all output from the virtual graphics card." | ||
| 43 | exit 1; | ||
| 44 | fi | ||
| 45 | |||
| 46 | -#echo "Creating $config_mak, $config_h and $target_dir/Makefile" | ||
| 47 | +echo "Creating $config_mak, $config_h and $target_dir/Makefile" | ||
| 48 | |||
| 49 | mkdir -p $target_dir | ||
| 50 | mkdir -p $target_dir/fpu | ||
| 51 | @@ -882,6 +898,14 @@ | ||
| 52 | fi | ||
| 53 | fi | ||
| 54 | |||
| 55 | +# x11 | ||
| 56 | +if test "$x11" = "yes"; then | ||
| 57 | + echo "#define CONFIG_X11 1" >> $config_h | ||
| 58 | + echo "CONFIG_X11=yes" >> $config_mak | ||
| 59 | + echo "X11_LIBS=`pkg-config --libs x11 xext`" >> $config_mak | ||
| 60 | + echo "X11_CFLAGS=`pkg-config --cflags x11 xext`" >> $config_mak | ||
| 61 | +fi | ||
| 62 | + | ||
| 63 | if test "$cocoa" = "yes" ; then | ||
| 64 | echo "#define CONFIG_COCOA 1" >> $config_h | ||
| 65 | echo "CONFIG_COCOA=yes" >> $config_mak | ||
| 66 | diff -urN qemu-0.8.2/Makefile.target qemu-0.8.2-x/Makefile.target | ||
| 67 | --- qemu-0.8.2/Makefile.target 2006-07-22 18:23:34.000000000 +0100 | ||
| 68 | +++ qemu-0.8.2-x/Makefile.target 2006-08-23 14:47:17.000000000 +0100 | ||
| 69 | @@ -376,6 +376,9 @@ | ||
| 70 | ifdef CONFIG_SDL | ||
| 71 | VL_OBJS+=sdl.o | ||
| 72 | endif | ||
| 73 | +ifdef CONFIG_X11 | ||
| 74 | +VL_OBJS+=x.o | ||
| 75 | +endif | ||
| 76 | VL_OBJS+=vnc.o | ||
| 77 | ifdef CONFIG_COCOA | ||
| 78 | VL_OBJS+=cocoa.o | ||
| 79 | @@ -426,7 +429,7 @@ | ||
| 80 | endif | ||
| 81 | |||
| 82 | $(QEMU_SYSTEM): $(VL_OBJS) libqemu.a | ||
| 83 | - $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS) | ||
| 84 | + $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(X11_LIBS) $(COCOA_LIBS) $(VL_LIBS) | ||
| 85 | |||
| 86 | cocoa.o: cocoa.m | ||
| 87 | $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $< | ||
| 88 | @@ -434,6 +437,10 @@ | ||
| 89 | sdl.o: sdl.c keymaps.c sdl_keysym.h | ||
| 90 | $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $< | ||
| 91 | |||
| 92 | +x.o: x.c keymaps.c | ||
| 93 | + $(CC) $(CFLAGS) $(DEFINES) $(X11_CFLAGS) -c -o $@ $< | ||
| 94 | + | ||
| 95 | + | ||
| 96 | vnc.o: vnc.c keymaps.c sdl_keysym.h vnchextile.h | ||
| 97 | $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $< | ||
| 98 | |||
| 99 | diff -urN qemu-0.8.2/vl.c qemu-0.8.2-x/vl.c | ||
| 100 | --- qemu-0.8.2/vl.c 2006-07-22 18:23:34.000000000 +0100 | ||
| 101 | +++ qemu-0.8.2-x/vl.c 2006-09-29 18:58:26.000000000 +0100 | ||
| 102 | @@ -5217,6 +5217,9 @@ | ||
| 103 | #ifdef USE_CODE_COPY | ||
| 104 | "-no-code-copy disable code copy acceleration\n" | ||
| 105 | #endif | ||
| 106 | +#if defined(CONFIG_X11) | ||
| 107 | + "-parent xid Use pre-existing window as qemu output window\n" | ||
| 108 | +#endif | ||
| 109 | #ifdef TARGET_I386 | ||
| 110 | "-std-vga simulate a standard VGA card with VESA Bochs Extensions\n" | ||
| 111 | " (default is CL-GD5446 PCI VGA)\n" | ||
| 112 | @@ -5302,6 +5305,8 @@ | ||
| 113 | QEMU_OPTION_smp, | ||
| 114 | QEMU_OPTION_vnc, | ||
| 115 | QEMU_OPTION_no_acpi, | ||
| 116 | + | ||
| 117 | + QEMU_OPTION_parent_xid, | ||
| 118 | }; | ||
| 119 | |||
| 120 | typedef struct QEMUOption { | ||
| 121 | @@ -5361,6 +5366,9 @@ | ||
| 122 | #if defined(TARGET_PPC) || defined(TARGET_SPARC) | ||
| 123 | { "g", 1, QEMU_OPTION_g }, | ||
| 124 | #endif | ||
| 125 | +#if defined(CONFIG_X11) | ||
| 126 | + { "parent", HAS_ARG, QEMU_OPTION_parent_xid }, | ||
| 127 | +#endif | ||
| 128 | { "localtime", 0, QEMU_OPTION_localtime }, | ||
| 129 | { "std-vga", 0, QEMU_OPTION_std_vga }, | ||
| 130 | { "monitor", 1, QEMU_OPTION_monitor }, | ||
| 131 | @@ -5608,6 +5616,10 @@ | ||
| 132 | char usb_devices[MAX_USB_CMDLINE][128]; | ||
| 133 | int usb_devices_index; | ||
| 134 | |||
| 135 | +#if defined(CONFIG_X11) | ||
| 136 | + unsigned long parent_xid = 0; | ||
| 137 | +#endif | ||
| 138 | + | ||
| 139 | LIST_INIT (&vm_change_state_head); | ||
| 140 | #ifndef _WIN32 | ||
| 141 | { | ||
| 142 | @@ -6021,6 +6033,11 @@ | ||
| 143 | case QEMU_OPTION_no_acpi: | ||
| 144 | acpi_enabled = 0; | ||
| 145 | break; | ||
| 146 | +#if defined(CONFIG_X11) | ||
| 147 | + case QEMU_OPTION_parent_xid: | ||
| 148 | + parent_xid = strtol(optarg, NULL, 0); | ||
| 149 | + break; | ||
| 150 | +#endif | ||
| 151 | } | ||
| 152 | } | ||
| 153 | } | ||
| 154 | @@ -6142,6 +6159,8 @@ | ||
| 155 | sdl_display_init(ds, full_screen); | ||
| 156 | #elif defined(CONFIG_COCOA) | ||
| 157 | cocoa_display_init(ds, full_screen); | ||
| 158 | +#elif defined(CONFIG_X11) | ||
| 159 | + x_display_init(ds, full_screen, parent_xid); | ||
| 160 | #else | ||
| 161 | dumb_display_init(ds); | ||
| 162 | #endif | ||
| 163 | diff -urN qemu-0.8.2/vl.h qemu-0.8.2-x/vl.h | ||
| 164 | --- qemu-0.8.2/vl.h 2006-07-22 18:23:34.000000000 +0100 | ||
| 165 | +++ qemu-0.8.2-x/vl.h 2006-09-29 18:35:32.000000000 +0100 | ||
| 166 | @@ -767,6 +767,9 @@ | ||
| 167 | /* vnc.c */ | ||
| 168 | void vnc_display_init(DisplayState *ds, int display); | ||
| 169 | |||
| 170 | +/* x.c */ | ||
| 171 | +void x_display_init(DisplayState *ds, int display, unsigned long parent_xid); | ||
| 172 | + | ||
| 173 | /* ide.c */ | ||
| 174 | #define MAX_DISKS 4 | ||
| 175 | |||
| 176 | diff -urN qemu-0.8.2/x.c qemu-0.8.2-x/x.c | ||
| 177 | --- qemu-0.8.2/x.c 1970-01-01 01:00:00.000000000 +0100 | ||
| 178 | +++ qemu-0.8.2-x/x.c 2006-09-29 18:35:02.000000000 +0100 | ||
| 179 | @@ -0,0 +1,451 @@ | ||
| 180 | +#include "vl.h" | ||
| 181 | + | ||
| 182 | +#include <X11/Xlib.h> | ||
| 183 | +#include <X11/Xutil.h> | ||
| 184 | +#include <X11/Xatom.h> | ||
| 185 | +#include <X11/keysym.h> | ||
| 186 | +#include <X11/extensions/XShm.h> | ||
| 187 | + | ||
| 188 | +#include <sys/ipc.h> | ||
| 189 | +#include <sys/shm.h> | ||
| 190 | + | ||
| 191 | +typedef struct XHostScreen | ||
| 192 | +{ | ||
| 193 | + Display *xdpy; | ||
| 194 | + int xscreen; | ||
| 195 | + Visual *xvisual; | ||
| 196 | + Window xwin, xwinroot; | ||
| 197 | + GC xgc; | ||
| 198 | + int xdepth; | ||
| 199 | + XImage *ximg; | ||
| 200 | + int xwin_width, xwin_height; | ||
| 201 | + Bool use_fullscreen; | ||
| 202 | + Bool have_shm; | ||
| 203 | + unsigned char *fb_data; | ||
| 204 | + unsigned long cmap[256]; | ||
| 205 | + XShmSegmentInfo shminfo; | ||
| 206 | +} | ||
| 207 | +XHostScreen; | ||
| 208 | + | ||
| 209 | +static XHostScreen *xscreen; | ||
| 210 | +static int trapped_error_code = 0; | ||
| 211 | +static int (*old_error_handler) (Display *d, XErrorEvent *e); | ||
| 212 | + | ||
| 213 | +static void | ||
| 214 | +x_update(DisplayState *ds, int x, int y, int w, int h); | ||
| 215 | + | ||
| 216 | +static int | ||
| 217 | +error_handler(Display *display, | ||
| 218 | + XErrorEvent *error) | ||
| 219 | +{ | ||
| 220 | + trapped_error_code = error->error_code; | ||
| 221 | + return 0; | ||
| 222 | +} | ||
| 223 | + | ||
| 224 | +static void | ||
| 225 | +x_errors_trap(void) | ||
| 226 | +{ | ||
| 227 | + trapped_error_code = 0; | ||
| 228 | + old_error_handler = XSetErrorHandler(error_handler); | ||
| 229 | +} | ||
| 230 | + | ||
| 231 | +static int | ||
| 232 | +x_errors_untrap(void) | ||
| 233 | +{ | ||
| 234 | + XSetErrorHandler(old_error_handler); | ||
| 235 | + return trapped_error_code; | ||
| 236 | +} | ||
| 237 | + | ||
| 238 | +static void | ||
| 239 | +x_update(DisplayState *ds, int x, int y, int w, int h) | ||
| 240 | +{ | ||
| 241 | + if (xscreen->have_shm) | ||
| 242 | + { | ||
| 243 | + XShmPutImage(xscreen->xdpy, xscreen->xwin, xscreen->xgc, xscreen->ximg, | ||
| 244 | + x, y, x, y, w, h, False); | ||
| 245 | + } | ||
| 246 | + else | ||
| 247 | + { | ||
| 248 | + XPutImage(xscreen->xdpy, xscreen->xwin, xscreen->xgc, xscreen->ximg, | ||
| 249 | + x, y, x, y, w, h); | ||
| 250 | + } | ||
| 251 | + | ||
| 252 | + XSync(xscreen->xdpy, False); | ||
| 253 | +} | ||
| 254 | + | ||
| 255 | +static void | ||
| 256 | +x_resize(DisplayState *ds, int w, int h) | ||
| 257 | +{ | ||
| 258 | + Bool shm_success = False; | ||
| 259 | + int bitmap_pad; | ||
| 260 | + XSizeHints *size_hints; | ||
| 261 | + | ||
| 262 | + if (xscreen->ximg != NULL) | ||
| 263 | + { | ||
| 264 | + if (xscreen->have_shm) | ||
| 265 | + { | ||
| 266 | + XShmDetach(xscreen->xdpy, &xscreen->shminfo); | ||
| 267 | + XDestroyImage (xscreen->ximg); | ||
| 268 | + shmdt(xscreen->shminfo.shmaddr); | ||
| 269 | + shmctl(xscreen->shminfo.shmid, IPC_RMID, 0); | ||
| 270 | + } | ||
| 271 | + else | ||
| 272 | + { | ||
| 273 | + if (xscreen->ximg->data) | ||
| 274 | + { | ||
| 275 | + free(xscreen->ximg->data); | ||
| 276 | + xscreen->ximg->data = NULL; | ||
| 277 | + } | ||
| 278 | + | ||
| 279 | + XDestroyImage(xscreen->ximg); | ||
| 280 | + } | ||
| 281 | + } | ||
| 282 | + | ||
| 283 | + if (xscreen->have_shm) | ||
| 284 | + { | ||
| 285 | + xscreen->ximg = XShmCreateImage(xscreen->xdpy, | ||
| 286 | + xscreen->xvisual, | ||
| 287 | + xscreen->xdepth, | ||
| 288 | + ZPixmap, | ||
| 289 | + NULL, | ||
| 290 | + &xscreen->shminfo, | ||
| 291 | + w, h ); | ||
| 292 | + | ||
| 293 | + xscreen->shminfo.shmid | ||
| 294 | + = shmget(IPC_PRIVATE, | ||
| 295 | + xscreen->ximg->bytes_per_line * h, | ||
| 296 | + IPC_CREAT|0777); | ||
| 297 | + xscreen->shminfo.shmaddr = xscreen->ximg->data | ||
| 298 | + = shmat(xscreen->shminfo.shmid, 0, 0); | ||
| 299 | + | ||
| 300 | + if (xscreen->ximg->data == (char *)-1) | ||
| 301 | + { | ||
| 302 | + xscreen->have_shm = False; | ||
| 303 | + XDestroyImage(xscreen->ximg); | ||
| 304 | + shmctl(xscreen->shminfo.shmid, IPC_RMID, 0); | ||
| 305 | + } | ||
| 306 | + else | ||
| 307 | + { | ||
| 308 | + xscreen->shminfo.readOnly = False; | ||
| 309 | + XShmAttach(xscreen->xdpy, &xscreen->shminfo); | ||
| 310 | + shm_success = True; | ||
| 311 | + } | ||
| 312 | + } | ||
| 313 | + | ||
| 314 | + if (!shm_success) | ||
| 315 | + { | ||
| 316 | + bitmap_pad = ( xscreen->xdepth > 16 ) ? | ||
| 317 | + 32 : (( xscreen->xdepth > 8 )? 16 : 8 ); | ||
| 318 | + | ||
| 319 | + xscreen->ximg = XCreateImage( xscreen->xdpy, | ||
| 320 | + xscreen->xvisual, | ||
| 321 | + xscreen->xdepth, | ||
| 322 | + ZPixmap, 0, 0, | ||
| 323 | + w, | ||
| 324 | + h, | ||
| 325 | + bitmap_pad, | ||
| 326 | + 0); | ||
| 327 | + | ||
| 328 | + xscreen->ximg->data | ||
| 329 | + = malloc( xscreen->ximg->bytes_per_line * h ); | ||
| 330 | + } | ||
| 331 | + | ||
| 332 | + XResizeWindow(xscreen->xdpy, xscreen->xwin, w, h); | ||
| 333 | + | ||
| 334 | + /* Ask the WM to keep our size static */ | ||
| 335 | + size_hints = XAllocSizeHints(); | ||
| 336 | + size_hints->max_width = size_hints->min_width = w; | ||
| 337 | + size_hints->max_height = size_hints->min_height = h; | ||
| 338 | + size_hints->flags = PMinSize|PMaxSize; | ||
| 339 | + XSetWMNormalHints(xscreen->xdpy, xscreen->xwin, size_hints); | ||
| 340 | + XFree(size_hints); | ||
| 341 | + | ||
| 342 | + XMapWindow(xscreen->xdpy, xscreen->xwin); | ||
| 343 | + | ||
| 344 | + XSync(xscreen->xdpy, False); | ||
| 345 | + | ||
| 346 | + xscreen->xwin_width = w; | ||
| 347 | + xscreen->xwin_height = h; | ||
| 348 | + | ||
| 349 | + if (1) // (ds->depth == xscreen->xdepth) | ||
| 350 | + { | ||
| 351 | + ds->data = xscreen->ximg->data; | ||
| 352 | + } | ||
| 353 | + else | ||
| 354 | + { | ||
| 355 | + xscreen->fb_data = malloc(w*h*(ds->depth>>3)); | ||
| 356 | + ds->data = xscreen->fb_data; | ||
| 357 | + } | ||
| 358 | + | ||
| 359 | + ds->linesize = xscreen->ximg->bytes_per_line; | ||
| 360 | + ds->depth = (xscreen->xdepth >= 24) ? 32 : xscreen->xdepth; | ||
| 361 | + ds->bgr = 0; | ||
| 362 | + | ||
| 363 | +#if 0 | ||
| 364 | + if (ds->depth == 32 && screen->format->Rshift == 0) { | ||
| 365 | + ds->bgr = 1; | ||
| 366 | + } else { | ||
| 367 | + ds->bgr = 0; | ||
| 368 | + } | ||
| 369 | +#endif | ||
| 370 | + | ||
| 371 | + ds->width = w; | ||
| 372 | + ds->height = h; | ||
| 373 | + | ||
| 374 | +} | ||
| 375 | + | ||
| 376 | +static void | ||
| 377 | +x_refresh(DisplayState *ds) | ||
| 378 | +{ | ||
| 379 | + vga_hw_update(); | ||
| 380 | +} | ||
| 381 | + | ||
| 382 | +static int | ||
| 383 | +x_listen_poll(void *opaque) | ||
| 384 | +{ | ||
| 385 | + return XPending(xscreen->xdpy); | ||
| 386 | +} | ||
| 387 | + | ||
| 388 | +static void | ||
| 389 | +x_grab(void) | ||
| 390 | +{ | ||
| 391 | + static Bool grab = False; | ||
| 392 | + | ||
| 393 | + if (!grab) | ||
| 394 | + { | ||
| 395 | + if (XGrabPointer (xscreen->xdpy, xscreen->xwin, | ||
| 396 | + True, | ||
| 397 | + NoEventMask, | ||
| 398 | + GrabModeAsync, | ||
| 399 | + GrabModeAsync, | ||
| 400 | + xscreen->xwin, None, CurrentTime) == 0 | ||
| 401 | + && XGrabKeyboard (xscreen->xdpy, xscreen->xwin, True, | ||
| 402 | + GrabModeAsync, | ||
| 403 | + GrabModeAsync, | ||
| 404 | + CurrentTime) == 0) | ||
| 405 | + { | ||
| 406 | + grab = True; | ||
| 407 | + XStoreName(xscreen->xdpy, xscreen->xwin, | ||
| 408 | + "QEmu (ctrl+shift releases mouse and keyboard )"); | ||
| 409 | + } | ||
| 410 | + } | ||
| 411 | + else | ||
| 412 | + { | ||
| 413 | + XUngrabPointer (xscreen->xdpy, CurrentTime); | ||
| 414 | + XUngrabKeyboard (xscreen->xdpy, CurrentTime); | ||
| 415 | + grab = False; | ||
| 416 | + XStoreName(xscreen->xdpy, xscreen->xwin, | ||
| 417 | + "QEmu (ctrl+shift grabs mouse and keyboard )"); | ||
| 418 | + } | ||
| 419 | +} | ||
| 420 | + | ||
| 421 | +static void | ||
| 422 | +x_listen_read(void *opaque) | ||
| 423 | +{ | ||
| 424 | + XEvent xev; | ||
| 425 | + DisplayState *ds = opaque; | ||
| 426 | + Bool grabbed = False; | ||
| 427 | + static int last_x = 0, last_y = 0, button_state = 0, state; | ||
| 428 | + | ||
| 429 | + if (XPending(xscreen->xdpy)) | ||
| 430 | + { | ||
| 431 | + XNextEvent(xscreen->xdpy, &xev); | ||
| 432 | + | ||
| 433 | + switch (xev.type) | ||
| 434 | + { | ||
| 435 | + case EnterNotify: | ||
| 436 | + case LeaveNotify: | ||
| 437 | + break; | ||
| 438 | + case FocusIn: | ||
| 439 | + if (!kbd_mouse_is_absolute()) | ||
| 440 | + x_grab(); | ||
| 441 | + break; | ||
| 442 | + case FocusOut: | ||
| 443 | + break; | ||
| 444 | + case Expose: | ||
| 445 | + while (XCheckTypedWindowEvent(xscreen->xdpy, xev.xexpose.window, | ||
| 446 | + Expose, &xev)); | ||
| 447 | + x_update(ds, 0, 0, | ||
| 448 | + xscreen->xwin_width, | ||
| 449 | + xscreen->xwin_height); | ||
| 450 | + break; | ||
| 451 | + case KeyRelease: | ||
| 452 | + if ((XKeycodeToKeysym(xscreen->xdpy, | ||
| 453 | + xev.xkey.keycode,0) == XK_Shift_L | ||
| 454 | + || XKeycodeToKeysym(xscreen->xdpy, | ||
| 455 | + xev.xkey.keycode,0) == XK_Shift_R) | ||
| 456 | + && (xev.xkey.state & ControlMask)) | ||
| 457 | + { | ||
| 458 | + x_grab(); | ||
| 459 | + break; | ||
| 460 | + } | ||
| 461 | + case KeyPress: | ||
| 462 | + { | ||
| 463 | + int keycode = xev.xkey.keycode-8; /* X adds 8 to keycode */ | ||
| 464 | + | ||
| 465 | + /* FIXME: LUT needed here me thinks */ | ||
| 466 | + | ||
| 467 | + if (keycode & 0x80) /* Extended */ | ||
| 468 | + kbd_put_keycode(0xe0); | ||
| 469 | + | ||
| 470 | + if (xev.type == KeyPress) | ||
| 471 | + kbd_put_keycode(keycode & 0x7f); | ||
| 472 | + else | ||
| 473 | + kbd_put_keycode(keycode | 0x80); | ||
| 474 | + } | ||
| 475 | + break; | ||
| 476 | + case ButtonPress: | ||
| 477 | + case ButtonRelease: | ||
| 478 | + case MotionNotify: | ||
| 479 | + { | ||
| 480 | + int ev_state, ev_x, ev_y, dx, dy; | ||
| 481 | + | ||
| 482 | + state = 0; | ||
| 483 | + | ||
| 484 | + if (xev.type == MotionNotify) | ||
| 485 | + { | ||
| 486 | + ev_state = xev.xmotion.state; | ||
| 487 | + ev_x = xev.xmotion.x; | ||
| 488 | + ev_y = xev.xmotion.y; | ||
| 489 | + | ||
| 490 | + if (ev_state & Button1Mask) | ||
| 491 | + state |= MOUSE_EVENT_LBUTTON; | ||
| 492 | + if (ev_state & Button2Mask) | ||
| 493 | + state |= MOUSE_EVENT_RBUTTON; | ||
| 494 | + if (ev_state & Button3Mask) | ||
| 495 | + state |= MOUSE_EVENT_MBUTTON; | ||
| 496 | + | ||
| 497 | + /* Touchscreen dont send motion notifys */ | ||
| 498 | + if (kbd_mouse_is_absolute() && state == 0) | ||
| 499 | + break; | ||
| 500 | + } | ||
| 501 | + else | ||
| 502 | + { | ||
| 503 | + ev_state = xev.xbutton.state; | ||
| 504 | + ev_x = xev.xbutton.x; | ||
| 505 | + ev_y = xev.xbutton.y; | ||
| 506 | + | ||
| 507 | + if (xev.type == ButtonPress) | ||
| 508 | + { | ||
| 509 | + if (xev.xbutton.button == Button1) | ||
| 510 | + state |= MOUSE_EVENT_LBUTTON; | ||
| 511 | + if (xev.xbutton.state == Button1) | ||
| 512 | + state |= MOUSE_EVENT_RBUTTON; | ||
| 513 | + if (xev.xbutton.state & Button3) | ||
| 514 | + state |= MOUSE_EVENT_MBUTTON; | ||
| 515 | + } | ||
| 516 | + } | ||
| 517 | + | ||
| 518 | + if (kbd_mouse_is_absolute()) | ||
| 519 | + { | ||
| 520 | + dx = ev_x * 0x7FFF / xscreen->xwin_width; | ||
| 521 | + dy = ev_y * 0x7FFF / xscreen->xwin_height; | ||
| 522 | + } | ||
| 523 | + else | ||
| 524 | + { | ||
| 525 | + dx = ev_x - last_x; | ||
| 526 | + dy = ev_y - last_y; | ||
| 527 | + } | ||
| 528 | + | ||
| 529 | + kbd_mouse_event(dx, dy, 0, state); | ||
| 530 | + | ||
| 531 | + last_x = ev_x; | ||
| 532 | + last_y = ev_y; | ||
| 533 | + } | ||
| 534 | + break; | ||
| 535 | + default: | ||
| 536 | + break; | ||
| 537 | + | ||
| 538 | + } | ||
| 539 | + } | ||
| 540 | + return; | ||
| 541 | +} | ||
| 542 | + | ||
| 543 | +void | ||
| 544 | +x_display_init(DisplayState *ds, int full_screen, unsigned long parent_xid) | ||
| 545 | +{ | ||
| 546 | + Cursor empty_cursor; | ||
| 547 | + Pixmap cursor_pxm; | ||
| 548 | + XColor col; | ||
| 549 | + XSetWindowAttributes attr; | ||
| 550 | + | ||
| 551 | + xscreen = malloc(sizeof(XHostScreen)); | ||
| 552 | + memset(xscreen, 0, sizeof(XHostScreen)); | ||
| 553 | + | ||
| 554 | + if ((xscreen->xdpy = XOpenDisplay(getenv("DISPLAY"))) == NULL) | ||
| 555 | + { | ||
| 556 | + fprintf(stderr, "\nqemu cannot open host display. Is DISPLAY set?\n"); | ||
| 557 | + exit(-1); | ||
| 558 | + } | ||
| 559 | + | ||
| 560 | + xscreen->xscreen = DefaultScreen(xscreen->xdpy); | ||
| 561 | + xscreen->xwinroot = RootWindow(xscreen->xdpy, xscreen->xscreen); | ||
| 562 | + xscreen->xgc = XCreateGC(xscreen->xdpy, xscreen->xwinroot, 0, NULL); | ||
| 563 | + xscreen->xdepth = DefaultDepth(xscreen->xdpy, xscreen->xscreen); | ||
| 564 | + xscreen->xvisual = DefaultVisual(xscreen->xdpy, xscreen->xscreen); | ||
| 565 | + | ||
| 566 | + attr.event_mask = ButtonPressMask|ButtonReleaseMask|PointerMotionMask | ||
| 567 | + |KeyPressMask|KeyReleaseMask|ExposureMask | ||
| 568 | + |FocusChangeMask|EnterWindowMask|LeaveWindowMask; | ||
| 569 | + | ||
| 570 | + xscreen->xwin = XCreateWindow(xscreen->xdpy, | ||
| 571 | + xscreen->xwinroot, | ||
| 572 | + 0,0,640,480, | ||
| 573 | + 0, | ||
| 574 | + CopyFromParent, | ||
| 575 | + CopyFromParent, | ||
| 576 | + CopyFromParent, | ||
| 577 | + CWEventMask, | ||
| 578 | + &attr); | ||
| 579 | + | ||
| 580 | + xscreen->have_shm = True; | ||
| 581 | + | ||
| 582 | + if (!XShmQueryExtension(xscreen->xdpy) || getenv("QEMU_X_NO_SHM")) | ||
| 583 | + { | ||
| 584 | + xscreen->have_shm = False; | ||
| 585 | + } | ||
| 586 | + else | ||
| 587 | + { | ||
| 588 | + XShmSegmentInfo shminfo; | ||
| 589 | + | ||
| 590 | + shminfo.shmid=shmget(IPC_PRIVATE, 1, IPC_CREAT|0777); | ||
| 591 | + shminfo.shmaddr=shmat(shminfo.shmid,0,0); | ||
| 592 | + shminfo.readOnly=True; | ||
| 593 | + | ||
| 594 | + x_errors_trap(); | ||
| 595 | + | ||
| 596 | + XShmAttach(xscreen->xdpy, &shminfo); | ||
| 597 | + XSync(xscreen->xdpy, False); | ||
| 598 | + | ||
| 599 | + if (x_errors_untrap()) | ||
| 600 | + { | ||
| 601 | + fprintf(stderr, "QEmu unable to use SHM XImages\n"); | ||
| 602 | + xscreen->have_shm = False; | ||
| 603 | + } | ||
| 604 | + | ||
| 605 | + shmdt(shminfo.shmaddr); | ||
| 606 | + shmctl(shminfo.shmid, IPC_RMID, 0); | ||
| 607 | + } | ||
| 608 | + | ||
| 609 | + if (!kbd_mouse_is_absolute()) | ||
| 610 | + { | ||
| 611 | + /* Only hide cursor if were not a touchscreen */ | ||
| 612 | + cursor_pxm = XCreatePixmap (xscreen->xdpy, xscreen->xwinroot, 1, 1, 1); | ||
| 613 | + memset (&col, 0, sizeof (col)); | ||
| 614 | + empty_cursor = XCreatePixmapCursor (xscreen->xdpy, | ||
| 615 | + cursor_pxm, cursor_pxm, | ||
| 616 | + &col, &col, 1, 1); | ||
| 617 | + XDefineCursor (xscreen->xdpy, xscreen->xwin, empty_cursor); | ||
| 618 | + XFreePixmap (xscreen->xdpy, cursor_pxm); | ||
| 619 | + } | ||
| 620 | + | ||
| 621 | + ds->dpy_update = x_update; | ||
| 622 | + ds->dpy_resize = x_resize; | ||
| 623 | + ds->dpy_refresh = x_refresh; | ||
| 624 | + | ||
| 625 | + if ((qemu_set_fd_handler2 (ConnectionNumber(xscreen->xdpy), | ||
| 626 | + x_listen_poll, x_listen_read, NULL, ds)) == -1) | ||
| 627 | + exit(-1); | ||
| 628 | + | ||
| 629 | + x_resize(ds, 640, 480); | ||
| 630 | +} | ||
diff --git a/meta/packages/qemu/qemu_cvs.bb b/meta/packages/qemu/qemu_cvs.bb index 38cd35705e..2531df15f0 100644 --- a/meta/packages/qemu/qemu_cvs.bb +++ b/meta/packages/qemu/qemu_cvs.bb | |||
| @@ -1,64 +1,44 @@ | |||
| 1 | LICENSE = "GPL" | 1 | LICENSE = "GPL" |
| 2 | DEPENDS = "zlib" | 2 | DEPENDS = "zlib" |
| 3 | PV = "0.8.2+cvs${SRCDATE}" | 3 | PV = "0.9.0+cvs${SRCDATE}" |
| 4 | PR = "r4" | 4 | PR = "r0" |
| 5 | 5 | ||
| 6 | FILESDIR = "${WORKDIR}" | 6 | FILESDIR = "${WORKDIR}" |
| 7 | 7 | ||
| 8 | SRC_URI = "\ | 8 | SRC_URI = "\ |
| 9 | cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \ | 9 | cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \ |
| 10 | svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \ | 10 | file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \ |
| 11 | file://debian/patches/01_doc_typos.patch;patch=1;pnum=1 \ | 11 | file://03_machines_list_no_error.patch;patch=1;pnum=0 \ |
| 12 | file://debian/patches/02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \ | 12 | file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \ |
| 13 | file://debian/patches/03_machines_list_no_error.patch;patch=1;pnum=0 \ | 13 | file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \ |
| 14 | file://debian/patches/04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \ | 14 | file://06_exit_segfault.patch;patch=1;pnum=0 \ |
| 15 | file://debian/patches/05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \ | 15 | file://10_signal_jobs.patch;patch=1;pnum=0 \ |
| 16 | file://debian/patches/06_exit_segfault.patch;patch=1;pnum=0 \ | 16 | file://11_signal_sigaction.patch;patch=1;pnum=0 \ |
| 17 | file://debian/patches/10_signal_jobs.patch;patch=1;pnum=0 \ | 17 | file://12_signal_powerpc_support.patch;patch=1;pnum=1 \ |
| 18 | file://debian/patches/11_signal_sigaction.patch;patch=1;pnum=0 \ | 18 | file://22_net_tuntap_stall.patch;patch=1;pnum=0 \ |
| 19 | file://debian/patches/12_signal_powerpc_support.patch;patch=1;pnum=1 \ | 19 | file://31_syscalls.patch;patch=1;pnum=0 \ |
| 20 | file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \ | 20 | file://32_syscall_sysctl.patch;patch=1;pnum=0 \ |
| 21 | file://debian/patches/22_net_tuntap_stall.patch;patch=1;pnum=0 \ | 21 | file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \ |
| 22 | file://debian/patches/30_syscall_ipc.patch;patch=1;pnum=0 \ | 22 | file://39_syscall_fadvise64.patch;patch=1;pnum=0 \ |
| 23 | file://debian/patches/31_syscalls.patch;patch=1;pnum=0 \ | 23 | file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \ |
| 24 | file://debian/patches/32_syscall_sysctl.patch;patch=1;pnum=0 \ | 24 | file://52_ne2000_return.patch;patch=1;pnum=1 \ |
| 25 | file://debian/patches/33_syscall_ppc_clone.patch;patch=1;pnum=0 \ | 25 | file://61_safe_64bit_int.patch;patch=1;pnum=0 \ |
| 26 | file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \ | 26 | file://63_sparc_build.patch;patch=1;pnum=0 \ |
| 27 | file://debian/patches/36_syscall_prctl.patch;patch=1;pnum=0 \ | 27 | file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \ |
| 28 | file://debian/patches/37_syscall_mount.patch;patch=1;pnum=0 \ | 28 | file://65_kfreebsd.patch;patch=1;pnum=0 \ |
| 29 | file://debian/patches/38_syscall_arm_statfs64.patch;patch=1;pnum=0 \ | 29 | file://66_tls_ld.patch;patch=1;pnum=0 \ |
| 30 | file://debian/patches/39_syscall_fadvise64.patch;patch=1;pnum=0 \ | 30 | file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \ |
| 31 | file://debian/patches/41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \ | 31 | file://93-oh-pl110-rgb.patch;patch=1;pnum=0 \ |
| 32 | file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \ | 32 | file://94-oh-arm-nptl.patch;patch=1;pnum=1" |
| 33 | file://debian/patches/51_serial_small_divider.patch;patch=1;pnum=1 \ | ||
| 34 | file://debian/patches/52_ne2000_return.patch;patch=1;pnum=1 \ | ||
| 35 | file://debian/patches/55_unmux_socketcall.patch;patch=1;pnum=0 \ | ||
| 36 | file://debian/patches/60_ppc_ld.patch;patch=1;pnum=1 \ | ||
| 37 | file://debian/patches/61_safe_64bit_int.patch;patch=1;pnum=0 \ | ||
| 38 | file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \ | ||
| 39 | file://debian/patches/63_sparc_build.patch;patch=1;pnum=0 \ | ||
| 40 | file://debian/patches/64_ppc_asm_constraints.patch;patch=1;pnum=1 \ | ||
| 41 | file://debian/patches/65_kfreebsd.patch;patch=1;pnum=0 \ | ||
| 42 | file://debian/patches/66_tls_ld.patch;patch=1;pnum=0 \ | ||
| 43 | file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \ | ||
| 44 | file://debian/patches/90-oh-wacom.patch;patch=1;pnum=0 \ | ||
| 45 | file://debian/patches/91-oh-sdl-cursor.patch;patch=1;pnum=0 \ | ||
| 46 | file://debian/patches/92-oh-pci-irq-sharing.patch;patch=1;pnum=0 \ | ||
| 47 | file://debian/patches/93-oh-pl110-rgb.patch;patch=1;pnum=0 \ | ||
| 48 | file://debian/patches/94-oh-arm-nptl.patch;patch=1;pnum=1 \ | ||
| 49 | file://debian/patches/95-oh-compiler.patch;patch=1 \ | ||
| 50 | file://debian/patches/96-x.patch;patch=1" | ||
| 51 | # file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \ | ||
| 52 | 33 | ||
| 53 | # file://configure.patch;patch=1;pnum=1 \ | 34 | # svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \ |
| 54 | # file://qemu-sdl-cursor.patch;patch=1;pnum=1 \ | 35 | # file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \ |
| 55 | # file://arm_nptl.patch;patch=1;pnum=1 \ | 36 | # file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \ |
| 56 | # file://pl110_rgb-r0.patch;patch=1;pnum=1 \ | 37 | # file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \ |
| 57 | # file://qemu-pci-irq-sharing.patch;patch=1;pnum=1 \ | 38 | # file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \ |
| 58 | # file://compiler.patch;patch=1;pnum=1 \ | 39 | # file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \ |
| 59 | # file://qemu-usb-wacom-0.8.2.patch;patch=1;pnum=1 \ | 40 | # file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \ |
| 60 | # file://qemu-usb-wacom-pressure.patch;patch=1;pnum=1 \ | 41 | # file://debian/patches/96-x.patch;patch=1" |
| 61 | # file://qemu-usb-wacom-buttons.patch;patch=1" | ||
| 62 | 42 | ||
| 63 | S = "${WORKDIR}/qemu" | 43 | S = "${WORKDIR}/qemu" |
| 64 | 44 | ||
