Merge remote-tracking branch 'stefanha/trivial-patches-next' into staging

This commit is contained in:
Anthony Liguori 2011-12-14 07:59:21 -06:00
commit 9423a2e8dd
94 changed files with 228 additions and 533 deletions

View File

@ -78,7 +78,7 @@ version 0.10.2:
- fix savevm/loadvm (Anthony Liguori) - fix savevm/loadvm (Anthony Liguori)
- live migration: fix dirty tracking windows (Glauber Costa) - live migration: fix dirty tracking windows (Glauber Costa)
- live migration: improve error propogation (Glauber Costa) - live migration: improve error propagation (Glauber Costa)
- qcow2: fix image creation for > ~2TB images (Chris Wright) - qcow2: fix image creation for > ~2TB images (Chris Wright)
- hotplug: fix error handling for if= parameter (Eduardo Habkost) - hotplug: fix error handling for if= parameter (Eduardo Habkost)
- qcow2: fix data corruption (Nolan Leake) - qcow2: fix data corruption (Nolan Leake)
@ -386,7 +386,7 @@ version 0.5.3:
- support of CD-ROM change - support of CD-ROM change
- multiple network interface support - multiple network interface support
- initial x86-64 host support (Gwenole Beauchesne) - initial x86-64 host support (Gwenole Beauchesne)
- lret to outer priviledge fix (OS/2 install fix) - lret to outer privilege fix (OS/2 install fix)
- task switch fixes (SkyOS boot) - task switch fixes (SkyOS boot)
- VM save/restore commands - VM save/restore commands
- new timer API - new timer API

View File

@ -6,9 +6,7 @@ The following points clarify the QEMU license:
GNU General Public License. Hence each source file contains its own GNU General Public License. Hence each source file contains its own
licensing information. licensing information.
In particular, the QEMU virtual CPU core library (libqemu.a) is Many hardware device emulation sources are released under the BSD license.
released under the GNU Lesser General Public License. Many hardware
device emulation sources are released under the BSD license.
3) The Tiny Code Generator (TCG) is released under the BSD license 3) The Tiny Code Generator (TCG) is released under the BSD license
(see license headers in files). (see license headers in files).

View File

@ -68,10 +68,9 @@ endif
fsdev-obj-$(CONFIG_VIRTFS) += $(addprefix fsdev/, $(fsdev-nested-y)) fsdev-obj-$(CONFIG_VIRTFS) += $(addprefix fsdev/, $(fsdev-nested-y))
###################################################################### ######################################################################
# libqemu_common.a: Target independent part of system emulation. The # Target independent part of system emulation. The long term path is to
# long term path is to suppress *all* target specific code in case of # suppress *all* target specific code in case of system emulation, i.e. a
# system emulation, i.e. a single QEMU executable should support all # single QEMU executable should support all CPUs and machines.
# CPUs and machines.
common-obj-y = $(block-obj-y) blockdev.o common-obj-y = $(block-obj-y) blockdev.o
common-obj-y += $(net-obj-y) common-obj-y += $(net-obj-y)

View File

@ -92,8 +92,6 @@ tci-dis.o: QEMU_CFLAGS += -I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/tci
$(libobj-y): $(GENERATED_HEADERS) $(libobj-y): $(GENERATED_HEADERS)
# libqemu
translate.o: translate.c cpu.h translate.o: translate.c cpu.h
translate-all.o: translate-all.c cpu.h translate-all.o: translate-all.c cpu.h

View File

@ -1665,7 +1665,7 @@ static void audio_pp_nb_voices (const char *typ, int nb)
printf ("Theoretically supports many %s voices\n", typ); printf ("Theoretically supports many %s voices\n", typ);
break; break;
default: default:
printf ("Theoretically supports upto %d %s voices\n", nb, typ); printf ("Theoretically supports up to %d %s voices\n", nb, typ);
break; break;
} }

View File

@ -21,7 +21,7 @@ typedef struct QEMUSnapshotInfo {
char id_str[128]; /* unique snapshot id */ char id_str[128]; /* unique snapshot id */
/* the following fields are informative. They are not needed for /* the following fields are informative. They are not needed for
the consistency of the snapshot */ the consistency of the snapshot */
char name[256]; /* user choosen name */ char name[256]; /* user chosen name */
uint32_t vm_state_size; /* VM state info size */ uint32_t vm_state_size; /* VM state info size */
uint32_t date_sec; /* UTC date of the snapshot */ uint32_t date_sec; /* UTC date of the snapshot */
uint32_t date_nsec; uint32_t date_nsec;

View File

@ -189,7 +189,7 @@ static int nbd_read(BlockDriverState *bs, int64_t sector_num,
request.type = NBD_CMD_READ; request.type = NBD_CMD_READ;
request.handle = (uint64_t)(intptr_t)bs; request.handle = (uint64_t)(intptr_t)bs;
request.from = sector_num * 512;; request.from = sector_num * 512;
request.len = nb_sectors * 512; request.len = nb_sectors * 512;
if (nbd_send_request(s->sock, &request) == -1) if (nbd_send_request(s->sock, &request) == -1)
@ -219,7 +219,7 @@ static int nbd_write(BlockDriverState *bs, int64_t sector_num,
request.type = NBD_CMD_WRITE; request.type = NBD_CMD_WRITE;
request.handle = (uint64_t)(intptr_t)bs; request.handle = (uint64_t)(intptr_t)bs;
request.from = sector_num * 512;; request.from = sector_num * 512;
request.len = nb_sectors * 512; request.len = nb_sectors * 512;
if (nbd_send_request(s->sock, &request) == -1) if (nbd_send_request(s->sock, &request) == -1)

View File

@ -8,7 +8,7 @@ struct target_pt_regs {
abi_ulong r12; abi_ulong r12;
abi_ulong rbp; abi_ulong rbp;
abi_ulong rbx; abi_ulong rbx;
/* arguments: non interrupts/non tracing syscalls only save upto here*/ /* arguments: non interrupts/non tracing syscalls only save up to here */
abi_ulong r11; abi_ulong r11;
abi_ulong r10; abi_ulong r10;
abi_ulong r9; abi_ulong r9;

44
configure vendored
View File

@ -20,6 +20,11 @@ TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.exe"
trap "rm -f $TMPC $TMPO $TMPE" EXIT INT QUIT TERM trap "rm -f $TMPC $TMPO $TMPE" EXIT INT QUIT TERM
rm -f config.log rm -f config.log
# Print a helpful header at the top of config.log
echo "# QEMU configure log $(date)" >> config.log
echo "# produced by $0 $*" >> config.log
echo "#" >> config.log
compile_object() { compile_object() {
echo $cc $QEMU_CFLAGS -c -o $TMPO $TMPC >> config.log echo $cc $QEMU_CFLAGS -c -o $TMPO $TMPC >> config.log
$cc $QEMU_CFLAGS -c -o $TMPO $TMPC >> config.log 2>&1 $cc $QEMU_CFLAGS -c -o $TMPO $TMPC >> config.log 2>&1
@ -249,7 +254,7 @@ source_path=`cd "$source_path"; pwd`
check_define() { check_define() {
cat > $TMPC <<EOF cat > $TMPC <<EOF
#if !defined($1) #if !defined($1)
#error Not defined #error $1 not defined
#endif #endif
int main(void) { return 0; } int main(void) { return 0; }
EOF EOF
@ -3279,6 +3284,22 @@ for d in libdis libdis-user; do
echo > $d/config.mak echo > $d/config.mak
done done
# use included Linux headers
if test "$linux" = "yes" ; then
mkdir -p linux-headers
case "$cpu" in
i386|x86_64)
symlink $source_path/linux-headers/asm-x86 linux-headers/asm
;;
ppcemb|ppc|ppc64)
symlink $source_path/linux-headers/asm-powerpc linux-headers/asm
;;
s390x)
symlink $source_path/linux-headers/asm-s390 linux-headers/asm
;;
esac
fi
for target in $target_list; do for target in $target_list; do
target_dir="$target" target_dir="$target"
config_target_mak=$target_dir/config-target.mak config_target_mak=$target_dir/config-target.mak
@ -3604,6 +3625,10 @@ else
fi fi
includes="-I\$(SRC_PATH)/tcg $includes" includes="-I\$(SRC_PATH)/tcg $includes"
if test "$linux" = "yes" ; then
includes="-I\$(SRC_PATH)/linux-headers $includes"
fi
if test "$target_user_only" = "yes" ; then if test "$target_user_only" = "yes" ; then
libdis_config_mak=libdis-user/config.mak libdis_config_mak=libdis-user/config.mak
else else
@ -3735,23 +3760,6 @@ if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
esac esac
fi fi
# use included Linux headers
if test "$linux" = "yes" ; then
includes="-I\$(SRC_PATH)/linux-headers $includes"
mkdir -p linux-headers
case "$cpu" in
i386|x86_64)
symlink $source_path/linux-headers/asm-x86 linux-headers/asm
;;
ppcemb|ppc|ppc64)
symlink $source_path/linux-headers/asm-powerpc linux-headers/asm
;;
s390x)
symlink $source_path/linux-headers/asm-s390 linux-headers/asm
;;
esac
fi
echo "LDFLAGS+=$ldflags" >> $config_target_mak echo "LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
echo "QEMU_INCLUDES+=$includes" >> $config_target_mak echo "QEMU_INCLUDES+=$includes" >> $config_target_mak

View File

@ -1009,16 +1009,17 @@ static void console_putchar(TextConsole *s, int ch)
console_clear_xy(s, x, y); console_clear_xy(s, x, y);
} }
} }
break; break;
} }
break;
case 'K': case 'K':
switch (s->esc_params[0]) { switch (s->esc_params[0]) {
case 0: case 0:
/* clear to eol */ /* clear to eol */
for(x = s->x; x < s->width; x++) { for(x = s->x; x < s->width; x++) {
console_clear_xy(s, x, s->y); console_clear_xy(s, x, s->y);
} }
break; break;
case 1: case 1:
/* clear from beginning of line */ /* clear from beginning of line */
for (x = 0; x <= s->x; x++) { for (x = 0; x <= s->x; x++) {
@ -1030,12 +1031,12 @@ static void console_putchar(TextConsole *s, int ch)
for(x = 0; x < s->width; x++) { for(x = 0; x < s->width; x++) {
console_clear_xy(s, x, s->y); console_clear_xy(s, x, s->y);
} }
break; break;
} }
break; break;
case 'm': case 'm':
console_handle_escape(s); console_handle_escape(s);
break; break;
case 'n': case 'n':
/* report cursor position */ /* report cursor position */
/* TODO: send ESC[row;colR */ /* TODO: send ESC[row;colR */
@ -1687,6 +1688,7 @@ PixelFormat qemu_default_pixelformat(int bpp)
pf.rbits = 8; pf.rbits = 8;
pf.gbits = 8; pf.gbits = 8;
pf.bbits = 8; pf.bbits = 8;
break;
case 32: case 32:
pf.rmask = 0x00FF0000; pf.rmask = 0x00FF0000;
pf.gmask = 0x0000FF00; pf.gmask = 0x0000FF00;

View File

@ -336,7 +336,7 @@ void QEMU_NORETURN cpu_abort(CPUState *env, const char *fmt, ...)
GCC_FMT_ATTR(2, 3); GCC_FMT_ATTR(2, 3);
extern CPUState *first_cpu; extern CPUState *first_cpu;
DECLARE_TLS(CPUState *,cpu_single_env); DECLARE_TLS(CPUState *,cpu_single_env);
#define cpu_single_env get_tls(cpu_single_env) #define cpu_single_env tls_var(cpu_single_env)
/* Flags for use in ENV->INTERRUPT_PENDING. /* Flags for use in ENV->INTERRUPT_PENDING.

2
cpus.c
View File

@ -89,7 +89,7 @@ TimersState timers_state;
int64_t cpu_get_icount(void) int64_t cpu_get_icount(void)
{ {
int64_t icount; int64_t icount;
CPUState *env = cpu_single_env;; CPUState *env = cpu_single_env;
icount = qemu_icount; icount = qemu_icount;
if (env) { if (env) {

View File

@ -7,7 +7,7 @@ machine. It attempts to allow modelling of:
- ordinary RAM - ordinary RAM
- memory-mapped I/O (MMIO) - memory-mapped I/O (MMIO)
- memory controllers that can dynamically reroute physical memory regions - memory controllers that can dynamically reroute physical memory regions
to different destinations to different destinations
The memory model provides support for The memory model provides support for
@ -121,7 +121,7 @@ pci (0-2^32-1)
ram: ram@0x00000000-0xffffffff ram: ram@0x00000000-0xffffffff
The is a (simplified) PC memory map. The 4GB RAM block is mapped into the This is a (simplified) PC memory map. The 4GB RAM block is mapped into the
system address space via two aliases: "lomem" is a 1:1 mapping of the first system address space via two aliases: "lomem" is a 1:1 mapping of the first
3.5GB; "himem" maps the last 0.5GB at address 4GB. This leaves 0.5GB for the 3.5GB; "himem" maps the last 0.5GB at address 4GB. This leaves 0.5GB for the
so-called PCI hole, that allows a 32-bit PCI bus to exist in a system with so-called PCI hole, that allows a 32-bit PCI bus to exist in a system with
@ -164,7 +164,7 @@ various constraints can be supplied to control how these callbacks are called:
- .impl.min_access_size, .impl.max_access_size define the access sizes - .impl.min_access_size, .impl.max_access_size define the access sizes
(in bytes) supported by the *implementation*; other access sizes will be (in bytes) supported by the *implementation*; other access sizes will be
emulated using the ones available. For example a 4-byte write will be emulated using the ones available. For example a 4-byte write will be
emulated using four 1-byte write, if .impl.max_access_size = 1. emulated using four 1-byte writes, if .impl.max_access_size = 1.
- .impl.valid specifies that the *implementation* only supports unaligned - .impl.valid specifies that the *implementation* only supports unaligned
accesses; unaligned accesses will be emulated by two aligned accesses. accesses; unaligned accesses will be emulated by two aligned accesses.
- .old_portio and .old_mmio can be used to ease porting from code using - .old_portio and .old_mmio can be used to ease porting from code using

View File

@ -2678,7 +2678,7 @@ gdb_handlesig (CPUState *env, int sig)
} }
else if (n == 0 || errno != EAGAIN) else if (n == 0 || errno != EAGAIN)
{ {
/* XXX: Connection closed. Should probably wait for annother /* XXX: Connection closed. Should probably wait for another
connection before continuing. */ connection before continuing. */
return sig; return sig;
} }

View File

@ -915,7 +915,7 @@ ETEXI
"<tlb header> = 32bit x 4\n\t\t\t" "<tlb header> = 32bit x 4\n\t\t\t"
"<tlb header prefix> = 32bit x 4", "<tlb header prefix> = 32bit x 4",
.user_print = pcie_aer_inject_error_print, .user_print = pcie_aer_inject_error_print,
.mhandler.cmd_new = do_pcie_aer_inejct_error, .mhandler.cmd_new = do_pcie_aer_inject_error,
}, },
STEXI STEXI

View File

@ -90,7 +90,7 @@ int v9fs_co_mkdir(V9fsPDU *pdu, V9fsFidState *fidp, V9fsString *name,
V9fsState *s = pdu->s; V9fsState *s = pdu->s;
if (v9fs_request_cancelled(pdu)) { if (v9fs_request_cancelled(pdu)) {
return -EINTR;; return -EINTR;
} }
cred_init(&cred); cred_init(&cred);
cred.fc_mode = mode; cred.fc_mode = mode;
@ -124,7 +124,7 @@ int v9fs_co_opendir(V9fsPDU *pdu, V9fsFidState *fidp)
V9fsState *s = pdu->s; V9fsState *s = pdu->s;
if (v9fs_request_cancelled(pdu)) { if (v9fs_request_cancelled(pdu)) {
return -EINTR;; return -EINTR;
} }
v9fs_path_read_lock(s); v9fs_path_read_lock(s);
v9fs_co_run_in_worker( v9fs_co_run_in_worker(
@ -152,7 +152,7 @@ int v9fs_co_closedir(V9fsPDU *pdu, V9fsFidOpenState *fs)
V9fsState *s = pdu->s; V9fsState *s = pdu->s;
if (v9fs_request_cancelled(pdu)) { if (v9fs_request_cancelled(pdu)) {
return -EINTR;; return -EINTR;
} }
v9fs_co_run_in_worker( v9fs_co_run_in_worker(
{ {

View File

@ -44,7 +44,7 @@ typedef struct V9fsThPool {
qemu_coroutine_self()); \ qemu_coroutine_self()); \
qemu_bh_schedule(co_bh); \ qemu_bh_schedule(co_bh); \
/* \ /* \
* yeild in qemu thread and re-enter back \ * yield in qemu thread and re-enter back \
* in glib worker thread \ * in glib worker thread \
*/ \ */ \
qemu_coroutine_yield(); \ qemu_coroutine_yield(); \

View File

@ -59,7 +59,7 @@ static inline int open_by_handle(int mountfd, const char *fh, int flags)
static int handle_update_file_cred(int dirfd, const char *name, FsCred *credp) static int handle_update_file_cred(int dirfd, const char *name, FsCred *credp)
{ {
int fd, ret; int fd, ret;
fd = openat(dirfd, name, O_NONBLOCK | O_NOFOLLOW);; fd = openat(dirfd, name, O_NONBLOCK | O_NOFOLLOW);
if (fd < 0) { if (fd < 0) {
return fd; return fd;
} }
@ -520,7 +520,7 @@ static int handle_name_to_path(FsContext *ctx, V9fsPath *dir_path,
} }
fh = g_malloc(sizeof(struct file_handle) + data->handle_bytes); fh = g_malloc(sizeof(struct file_handle) + data->handle_bytes);
fh->handle_bytes = data->handle_bytes; fh->handle_bytes = data->handle_bytes;
/* add a "./" at the begining of the path */ /* add a "./" at the beginning of the path */
snprintf(buffer, PATH_MAX, "./%s", name); snprintf(buffer, PATH_MAX, "./%s", name);
/* flag = 0 imply don't follow symlink */ /* flag = 0 imply don't follow symlink */
ret = name_to_handle(dirfd, buffer, fh, &mnt_id, 0); ret = name_to_handle(dirfd, buffer, fh, &mnt_id, 0);

View File

@ -1492,7 +1492,7 @@ static void v9fs_walk(void *opaque)
int32_t fid, newfid; int32_t fid, newfid;
V9fsString *wnames = NULL; V9fsString *wnames = NULL;
V9fsFidState *fidp; V9fsFidState *fidp;
V9fsFidState *newfidp = NULL;; V9fsFidState *newfidp = NULL;
V9fsPDU *pdu = opaque; V9fsPDU *pdu = opaque;
V9fsState *s = pdu->s; V9fsState *s = pdu->s;
@ -2398,7 +2398,7 @@ static void v9fs_link(void *opaque)
V9fsState *s = pdu->s; V9fsState *s = pdu->s;
int32_t dfid, oldfid; int32_t dfid, oldfid;
V9fsFidState *dfidp, *oldfidp; V9fsFidState *dfidp, *oldfidp;
V9fsString name;; V9fsString name;
size_t offset = 7; size_t offset = 7;
int err = 0; int err = 0;

View File

@ -304,7 +304,7 @@ void acpi_pm_tmr_calc_overflow_time(ACPIPMTimer *tmr)
uint32_t acpi_pm_tmr_get(ACPIPMTimer *tmr) uint32_t acpi_pm_tmr_get(ACPIPMTimer *tmr)
{ {
uint32_t d = acpi_pm_tmr_get_clock();; uint32_t d = acpi_pm_tmr_get_clock();
return d & 0xffffff; return d & 0xffffff;
} }

View File

@ -2,7 +2,7 @@
* QEMU Alpha DP264/CLIPPER hardware system emulator. * QEMU Alpha DP264/CLIPPER hardware system emulator.
* *
* Choose CLIPPER IRQ mappings over, say, DP264, MONET, or WEBBRICK * Choose CLIPPER IRQ mappings over, say, DP264, MONET, or WEBBRICK
* variants because CLIPPER doesn't have an SMC669 SuperIO controler * variants because CLIPPER doesn't have an SMC669 SuperIO controller
* that we need to emulate as well. * that we need to emulate as well.
*/ */

View File

@ -609,7 +609,7 @@ static uint32_t gic_cpu_read(gic_state *s, int cpu, int offset)
return 0; return 0;
case 0x0c: /* Acknowledge */ case 0x0c: /* Acknowledge */
return gic_acknowledge_irq(s, cpu); return gic_acknowledge_irq(s, cpu);
case 0x14: /* Runing Priority */ case 0x14: /* Running Priority */
return s->running_priority[cpu]; return s->running_priority[cpu];
case 0x18: /* Highest Pending Interrupt */ case 0x18: /* Highest Pending Interrupt */
return s->current_pending[cpu]; return s->current_pending[cpu];

View File

@ -222,7 +222,7 @@ static void csrhci_in_packet(struct csrhci_s *s, uint8_t *pkt)
rpkt = csrhci_out_packet_csr(s, H4_NEG_PKT, 10); rpkt = csrhci_out_packet_csr(s, H4_NEG_PKT, 10);
*rpkt ++ = 0x20; /* Operational settings negotation Ok */ *rpkt ++ = 0x20; /* Operational settings negotiation Ok */
memcpy(rpkt, pkt, 7); rpkt += 7; memcpy(rpkt, pkt, 7); rpkt += 7;
*rpkt ++ = 0xff; *rpkt ++ = 0xff;
*rpkt = 0xff; *rpkt = 0xff;

View File

@ -783,7 +783,7 @@ static void cirrus_bitblt_cputovideo_next(CirrusVGAState * s)
s->cirrus_srccounter -= s->cirrus_blt_srcpitch; s->cirrus_srccounter -= s->cirrus_blt_srcpitch;
if (s->cirrus_srccounter <= 0) if (s->cirrus_srccounter <= 0)
goto the_end; goto the_end;
/* more bytes than needed can be transfered because of /* more bytes than needed can be transferred because of
word alignment, so we keep them for the next line */ word alignment, so we keep them for the next line */
/* XXX: keep alignment to speed up transfer */ /* XXX: keep alignment to speed up transfer */
end_ptr = s->cirrus_bltbuf + s->cirrus_blt_srcpitch; end_ptr = s->cirrus_bltbuf + s->cirrus_blt_srcpitch;

View File

@ -1,7 +1,7 @@
/* /*
* QEMU NVRAM emulation for DS1225Y chip * QEMU NVRAM emulation for DS1225Y chip
* *
* Copyright (c) 2007-2008 Hervé Poussineau * Copyright (c) 2007-2008 Hervé Poussineau
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal

View File

@ -295,7 +295,7 @@
#define E1000_KUMCTRLSTA 0x00034 /* MAC-PHY interface - RW */ #define E1000_KUMCTRLSTA 0x00034 /* MAC-PHY interface - RW */
#define E1000_MDPHYA 0x0003C /* PHY address - RW */ #define E1000_MDPHYA 0x0003C /* PHY address - RW */
#define E1000_MANC2H 0x05860 /* Managment Control To Host - RW */ #define E1000_MANC2H 0x05860 /* Management Control To Host - RW */
#define E1000_SW_FW_SYNC 0x05B5C /* Software-Firmware Synchronization - RW */ #define E1000_SW_FW_SYNC 0x05B5C /* Software-Firmware Synchronization - RW */
#define E1000_GCR 0x05B00 /* PCI-Ex Control */ #define E1000_GCR 0x05B00 /* PCI-Ex Control */

View File

@ -258,7 +258,7 @@ typedef struct {
/* Data in mem is always in the byte order of the controller (le). /* Data in mem is always in the byte order of the controller (le).
* It must be dword aligned to allow direct access to 32 bit values. */ * It must be dword aligned to allow direct access to 32 bit values. */
uint8_t mem[PCI_MEM_SIZE] __attribute__((aligned(8)));; uint8_t mem[PCI_MEM_SIZE] __attribute__((aligned(8)));
/* Configuration bytes. */ /* Configuration bytes. */
uint8_t configuration[22]; uint8_t configuration[22];

View File

@ -788,7 +788,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
int cnt = d->frame_cnt >> 16; int cnt = d->frame_cnt >> 16;
int size = d->frame_cnt & 0xffff; int size = d->frame_cnt & 0xffff;
int left = ((size - cnt + 1) << 2) + d->leftover; int left = ((size - cnt + 1) << 2) + d->leftover;
int transfered = 0; int transferred = 0;
int temp = audio_MIN (max, audio_MIN (left, csc_bytes)); int temp = audio_MIN (max, audio_MIN (left, csc_bytes));
int index = d - &s->chan[0]; int index = d - &s->chan[0];
@ -807,7 +807,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
temp -= acquired; temp -= acquired;
addr += acquired; addr += acquired;
transfered += acquired; transferred += acquired;
} }
} }
else { else {
@ -823,11 +823,11 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
break; break;
temp -= copied; temp -= copied;
addr += copied; addr += copied;
transfered += copied; transferred += copied;
} }
} }
if (csc_bytes == transfered) { if (csc_bytes == transferred) {
*irq = 1; *irq = 1;
d->scount = sc | (sc << 16); d->scount = sc | (sc << 16);
ldebug ("sc = %d, rate = %f\n", ldebug ("sc = %d, rate = %f\n",
@ -836,10 +836,10 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
} }
else { else {
*irq = 0; *irq = 0;
d->scount = sc | (((csc_bytes - transfered - 1) >> d->shift) << 16); d->scount = sc | (((csc_bytes - transferred - 1) >> d->shift) << 16);
} }
cnt += (transfered + d->leftover) >> 2; cnt += (transferred + d->leftover) >> 2;
if (s->sctl & loop_sel) { if (s->sctl & loop_sel) {
/* Bah, how stupid is that having a 0 represent true value? /* Bah, how stupid is that having a 0 represent true value?
@ -853,7 +853,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
d->frame_cnt |= cnt << 16; d->frame_cnt |= cnt << 16;
} }
d->leftover = (transfered + d->leftover) & 3; d->leftover = (transferred + d->leftover) & 3;
} }
static void es1370_run_channel (ES1370State *s, size_t chan, int free_or_avail) static void es1370_run_channel (ES1370State *s, size_t chan, int free_or_avail)

View File

@ -180,7 +180,7 @@ struct fs_dma_channel
struct dma_descr_context current_c; struct dma_descr_context current_c;
struct dma_descr_data current_d; struct dma_descr_data current_d;
/* Controll registers. */ /* Control registers. */
uint32_t regs[DMA_REG_MAX]; uint32_t regs[DMA_REG_MAX];
}; };

View File

@ -53,7 +53,7 @@ static void pic_update(struct etrax_pic *fs)
fs->regs[R_R_MASKED_VECT] = fs->regs[R_R_VECT] & fs->regs[R_RW_MASK]; fs->regs[R_R_MASKED_VECT] = fs->regs[R_R_VECT] & fs->regs[R_RW_MASK];
/* The ETRAX interrupt controller signals interrupts to teh core /* The ETRAX interrupt controller signals interrupts to the core
through an interrupt request wire and an irq vector bus. If through an interrupt request wire and an irq vector bus. If
multiple interrupts are simultaneously active it chooses vector multiple interrupts are simultaneously active it chooses vector
0x30 and lets the sw choose the priorities. */ 0x30 and lets the sw choose the priorities. */

View File

@ -2,7 +2,7 @@
* QEMU Floppy disk emulator (Intel 82078) * QEMU Floppy disk emulator (Intel 82078)
* *
* Copyright (c) 2003, 2007 Jocelyn Mayer * Copyright (c) 2003, 2007 Jocelyn Mayer
* Copyright (c) 2008 Hervé Poussineau * Copyright (c) 2008 Hervé Poussineau
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal

View File

@ -362,8 +362,8 @@ INLINE UINT32 OPL_CALC_SLOT( OPL_SLOT *SLOT )
return SLOT->TLL+ENV_CURVE[SLOT->evc>>ENV_BITS]+(SLOT->ams ? ams : 0); return SLOT->TLL+ENV_CURVE[SLOT->evc>>ENV_BITS]+(SLOT->ams ? ams : 0);
} }
/* set algorythm connection */ /* set algorithm connection */
static void set_algorythm( OPL_CH *CH) static void set_algorithm( OPL_CH *CH)
{ {
INT32 *carrier = &outd[0]; INT32 *carrier = &outd[0];
CH->connect1 = CH->CON ? carrier : &feedback2; CH->connect1 = CH->CON ? carrier : &feedback2;
@ -498,7 +498,7 @@ INLINE void OPL_CALC_CH( OPL_CH *CH )
} }
} }
/* ---------- calcrate rythm block ---------- */ /* ---------- calcrate rhythm block ---------- */
#define WHITE_NOISE_db 6.0 #define WHITE_NOISE_db 6.0
INLINE void OPL_CALC_RH( OPL_CH *CH ) INLINE void OPL_CALC_RH( OPL_CH *CH )
{ {
@ -715,7 +715,7 @@ static void OPLCloseTable( void )
free(VIB_TABLE); free(VIB_TABLE);
} }
/* CSM Key Controll */ /* CSM Key Control */
INLINE void CSMKeyControll(OPL_CH *CH) INLINE void CSMKeyControll(OPL_CH *CH)
{ {
OPL_SLOT *slot1 = &CH->SLOT[SLOT1]; OPL_SLOT *slot1 = &CH->SLOT[SLOT1];
@ -762,7 +762,7 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v)
switch(r&0xe0) switch(r&0xe0)
{ {
case 0x00: /* 00-1f:controll */ case 0x00: /* 00-1f:control */
switch(r&0x1f) switch(r&0x1f)
{ {
case 0x01: case 0x01:
@ -826,7 +826,7 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v)
LOG(LOG_WAR,("OPL:write unmapped KEYBOARD port\n")); LOG(LOG_WAR,("OPL:write unmapped KEYBOARD port\n"));
} }
return; return;
case 0x07: /* DELTA-T controll : START,REC,MEMDATA,REPT,SPOFF,x,x,RST */ case 0x07: /* DELTA-T control : START,REC,MEMDATA,REPT,SPOFF,x,x,RST */
if(OPL->type&OPL_TYPE_ADPCM) if(OPL->type&OPL_TYPE_ADPCM)
YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v); YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v);
return; return;
@ -895,14 +895,14 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v)
case 0xbd: case 0xbd:
/* amsep,vibdep,r,bd,sd,tom,tc,hh */ /* amsep,vibdep,r,bd,sd,tom,tc,hh */
{ {
UINT8 rkey = OPL->rythm^v; UINT8 rkey = OPL->rhythm^v;
OPL->ams_table = &AMS_TABLE[v&0x80 ? AMS_ENT : 0]; OPL->ams_table = &AMS_TABLE[v&0x80 ? AMS_ENT : 0];
OPL->vib_table = &VIB_TABLE[v&0x40 ? VIB_ENT : 0]; OPL->vib_table = &VIB_TABLE[v&0x40 ? VIB_ENT : 0];
OPL->rythm = v&0x3f; OPL->rhythm = v&0x3f;
if(OPL->rythm&0x20) if(OPL->rhythm&0x20)
{ {
#if 0 #if 0
usrintf_showmessage("OPL Rythm mode select"); usrintf_showmessage("OPL Rhythm mode select");
#endif #endif
/* BD key on/off */ /* BD key on/off */
if(rkey&0x10) if(rkey&0x10)
@ -995,7 +995,7 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v)
int feedback = (v>>1)&7; int feedback = (v>>1)&7;
CH->FB = feedback ? (8+1) - feedback : 0; CH->FB = feedback ? (8+1) - feedback : 0;
CH->CON = v&1; CH->CON = v&1;
set_algorythm(CH); set_algorithm(CH);
} }
return; return;
case 0xe0: /* wave type */ case 0xe0: /* wave type */
@ -1049,7 +1049,7 @@ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
OPLSAMPLE *buf = buffer; OPLSAMPLE *buf = buffer;
UINT32 amsCnt = OPL->amsCnt; UINT32 amsCnt = OPL->amsCnt;
UINT32 vibCnt = OPL->vibCnt; UINT32 vibCnt = OPL->vibCnt;
UINT8 rythm = OPL->rythm&0x20; UINT8 rhythm = OPL->rhythm&0x20;
OPL_CH *CH,*R_CH; OPL_CH *CH,*R_CH;
if( (void *)OPL != cur_chip ){ if( (void *)OPL != cur_chip ){
@ -1057,7 +1057,7 @@ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
/* channel pointers */ /* channel pointers */
S_CH = OPL->P_CH; S_CH = OPL->P_CH;
E_CH = &S_CH[9]; E_CH = &S_CH[9];
/* rythm slot */ /* rhythm slot */
SLOT7_1 = &S_CH[7].SLOT[SLOT1]; SLOT7_1 = &S_CH[7].SLOT[SLOT1];
SLOT7_2 = &S_CH[7].SLOT[SLOT2]; SLOT7_2 = &S_CH[7].SLOT[SLOT2];
SLOT8_1 = &S_CH[8].SLOT[SLOT1]; SLOT8_1 = &S_CH[8].SLOT[SLOT1];
@ -1068,7 +1068,7 @@ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
ams_table = OPL->ams_table; ams_table = OPL->ams_table;
vib_table = OPL->vib_table; vib_table = OPL->vib_table;
} }
R_CH = rythm ? &S_CH[6] : E_CH; R_CH = rhythm ? &S_CH[6] : E_CH;
for( i=0; i < length ; i++ ) for( i=0; i < length ; i++ )
{ {
/* channel A channel B channel C */ /* channel A channel B channel C */
@ -1080,7 +1080,7 @@ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
for(CH=S_CH ; CH < R_CH ; CH++) for(CH=S_CH ; CH < R_CH ; CH++)
OPL_CALC_CH(CH); OPL_CALC_CH(CH);
/* Rythn part */ /* Rythn part */
if(rythm) if(rhythm)
OPL_CALC_RH(S_CH); OPL_CALC_RH(S_CH);
/* limit check */ /* limit check */
data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT ); data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT );
@ -1110,7 +1110,7 @@ void Y8950UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
OPLSAMPLE *buf = buffer; OPLSAMPLE *buf = buffer;
UINT32 amsCnt = OPL->amsCnt; UINT32 amsCnt = OPL->amsCnt;
UINT32 vibCnt = OPL->vibCnt; UINT32 vibCnt = OPL->vibCnt;
UINT8 rythm = OPL->rythm&0x20; UINT8 rhythm = OPL->rhythm&0x20;
OPL_CH *CH,*R_CH; OPL_CH *CH,*R_CH;
YM_DELTAT *DELTAT = OPL->deltat; YM_DELTAT *DELTAT = OPL->deltat;
@ -1122,7 +1122,7 @@ void Y8950UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
/* channel pointers */ /* channel pointers */
S_CH = OPL->P_CH; S_CH = OPL->P_CH;
E_CH = &S_CH[9]; E_CH = &S_CH[9];
/* rythm slot */ /* rhythm slot */
SLOT7_1 = &S_CH[7].SLOT[SLOT1]; SLOT7_1 = &S_CH[7].SLOT[SLOT1];
SLOT7_2 = &S_CH[7].SLOT[SLOT2]; SLOT7_2 = &S_CH[7].SLOT[SLOT2];
SLOT8_1 = &S_CH[8].SLOT[SLOT1]; SLOT8_1 = &S_CH[8].SLOT[SLOT1];
@ -1133,7 +1133,7 @@ void Y8950UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
ams_table = OPL->ams_table; ams_table = OPL->ams_table;
vib_table = OPL->vib_table; vib_table = OPL->vib_table;
} }
R_CH = rythm ? &S_CH[6] : E_CH; R_CH = rhythm ? &S_CH[6] : E_CH;
for( i=0; i < length ; i++ ) for( i=0; i < length ; i++ )
{ {
/* channel A channel B channel C */ /* channel A channel B channel C */
@ -1148,7 +1148,7 @@ void Y8950UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
for(CH=S_CH ; CH < R_CH ; CH++) for(CH=S_CH ; CH < R_CH ; CH++)
OPL_CALC_CH(CH); OPL_CALC_CH(CH);
/* Rythn part */ /* Rythn part */
if(rythm) if(rhythm)
OPL_CALC_RH(S_CH); OPL_CALC_RH(S_CH);
/* limit check */ /* limit check */
data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT ); data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT );
@ -1380,7 +1380,7 @@ int OPLTimerOver(FM_OPL *OPL,int c)
else else
{ /* Timer A */ { /* Timer A */
OPL_STATUS_SET(OPL,0x40); OPL_STATUS_SET(OPL,0x40);
/* CSM mode key,TL controll */ /* CSM mode key,TL control */
if( OPL->mode & 0x80 ) if( OPL->mode & 0x80 )
{ /* CSM mode total level latch and auto key on */ { /* CSM mode total level latch and auto key on */
int ch; int ch;

View File

@ -110,8 +110,8 @@ typedef struct fm_opl_f {
/* FM channel slots */ /* FM channel slots */
OPL_CH *P_CH; /* pointer of CH */ OPL_CH *P_CH; /* pointer of CH */
int max_ch; /* maximum channel */ int max_ch; /* maximum channel */
/* Rythm sention */ /* Rhythm sention */
UINT8 rythm; /* Rythm mode , key flag */ UINT8 rhythm; /* Rhythm mode , key flag */
#if BUILD_Y8950 #if BUILD_Y8950
/* Delta-T ADPCM unit (Y8950) */ /* Delta-T ADPCM unit (Y8950) */
YM_DELTAT *deltat; /* DELTA-T ADPCM */ YM_DELTAT *deltat; /* DELTA-T ADPCM */

View File

@ -27,7 +27,7 @@
/* data types (need to be adjusted if neither a VC6 nor a C99 compatible compiler is used) */ /* data types (need to be adjusted if neither a VC6 nor a C99 compatible compiler is used) */
#if defined _WIN32 && defined _MSC_VER /* doesnt support other win32 compilers yet, do it yourself... */ #if defined _WIN32 && defined _MSC_VER /* doesn't support other win32 compilers yet, do it yourself... */
typedef unsigned char GUSbyte; typedef unsigned char GUSbyte;
typedef unsigned short GUSword; typedef unsigned short GUSword;
typedef unsigned int GUSdword; typedef unsigned int GUSdword;
@ -83,7 +83,7 @@ void gus_dma_transferdata(GUSEmuState *state, char *dma_addr, unsigned int count
/* it is possible to break down a single transfer into multiple ones, but take care that: */ /* it is possible to break down a single transfer into multiple ones, but take care that: */
/* -dma_count is actually count-1 */ /* -dma_count is actually count-1 */
/* -before and during a transfer, DREQ is set and TC cleared */ /* -before and during a transfer, DREQ is set and TC cleared */
/* -when calling gus_dma_transferdata(), TC is only set true for call transfering the last byte */ /* -when calling gus_dma_transferdata(), TC is only set true for call transferring the last byte */
/* -after the last transfer, DREQ is cleared and TC is set */ /* -after the last transfer, DREQ is cleared and TC is set */
/* ** GF1 mixer emulation functions: */ /* ** GF1 mixer emulation functions: */

View File

@ -502,7 +502,7 @@ void gus_dma_transferdata(GUSEmuState * state, char *dma_addr, unsigned int coun
/* this function gets called by the callback function as soon as a DMA transfer is about to start /* this function gets called by the callback function as soon as a DMA transfer is about to start
* dma_addr is a translated address within accessible memory, not the physical one, * dma_addr is a translated address within accessible memory, not the physical one,
* count is (real dma count register)+1 * count is (real dma count register)+1
* note that the amount of bytes transfered is fully determined by values in the DMA registers * note that the amount of bytes transferred is fully determined by values in the DMA registers
* do not forget to update DMA states after transferring the entire block: * do not forget to update DMA states after transferring the entire block:
* DREQ cleared & TC asserted after the _whole_ transfer */ * DREQ cleared & TC asserted after the _whole_ transfer */
@ -517,7 +517,7 @@ void gus_dma_transferdata(GUSEmuState * state, char *dma_addr, unsigned int coun
int offset = (GUSregw(GUS42DMAStart) << 4) + (GUSregb(GUS50DMAHigh) & 0xf); int offset = (GUSregw(GUS42DMAStart) << 4) + (GUSregb(GUS50DMAHigh) & 0xf);
if (state->gusdma >= 4) if (state->gusdma >= 4)
offset = (offset & 0xc0000) + (2 * (offset & 0x1fff0)); /* 16 bit address translation */ offset = (offset & 0xc0000) + (2 * (offset & 0x1fff0)); /* 16 bit address translation */
destaddr = (char *) state->himemaddr + offset; /* wavetable RAM adress */ destaddr = (char *) state->himemaddr + offset; /* wavetable RAM address */
} }
GUSregw(GUS42DMAStart) += (GUSword) (count >> 4); /* ToDo: add 16bit GUS page limit? */ GUSregw(GUS42DMAStart) += (GUSword) (count >> 4); /* ToDo: add 16bit GUS page limit? */

View File

@ -1000,7 +1000,7 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
printf("ide: CMD=%02x\n", val); printf("ide: CMD=%02x\n", val);
#endif #endif
s = idebus_active_if(bus); s = idebus_active_if(bus);
/* ignore commands to non existant slave */ /* ignore commands to non existent slave */
if (s != bus->ifs && !s->bs) if (s != bus->ifs && !s->bs)
return; return;

View File

@ -172,7 +172,7 @@ static void vt82c686b_init_ports(PCIIDEState *d) {
/* via ide func */ /* via ide func */
static int vt82c686b_ide_initfn(PCIDevice *dev) static int vt82c686b_ide_initfn(PCIDevice *dev)
{ {
PCIIDEState *d = DO_UPCAST(PCIIDEState, dev, dev);; PCIIDEState *d = DO_UPCAST(PCIIDEState, dev, dev);
uint8_t *pci_conf = d->dev.config; uint8_t *pci_conf = d->dev.config;
pci_config_set_prog_interface(pci_conf, 0x8a); /* legacy ATA mode */ pci_config_set_prog_interface(pci_conf, 0x8a); /* legacy ATA mode */

View File

@ -1,7 +1,7 @@
/* /*
* QEMU JAZZ LED emulator. * QEMU JAZZ LED emulator.
* *
* Copyright (c) 2007 Hervé Poussineau * Copyright (c) 2007 Hervé Poussineau
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal

View File

@ -697,7 +697,7 @@ static uint32_t do_phy_read(lan9118_state *s, int reg)
return 0x0007; return 0x0007;
case 3: /* ID2 */ case 3: /* ID2 */
return 0xc0d1; return 0xc0d1;
case 4: /* Auto-neg advertisment */ case 4: /* Auto-neg advertisement */
return s->phy_advertise; return s->phy_advertise;
case 5: /* Auto-neg Link Partner Ability */ case 5: /* Auto-neg Link Partner Ability */
return 0x0f71; return 0x0f71;
@ -731,7 +731,7 @@ static void do_phy_write(lan9118_state *s, int reg, uint32_t val)
s->phy_status |= 0x0020; s->phy_status |= 0x0020;
} }
break; break;
case 4: /* Auto-neg advertisment */ case 4: /* Auto-neg advertisement */
s->phy_advertise = (val & 0x2d7f) | 0x80; s->phy_advertise = (val & 0x2d7f) | 0x80;
break; break;
/* TODO 17, 18, 27, 31 */ /* TODO 17, 18, 27, 31 */

View File

@ -4,7 +4,7 @@
* Copyright (c) 2011 * Copyright (c) 2011
* Written by Mathieu Sonet - www.elasticsheep.com * Written by Mathieu Sonet - www.elasticsheep.com
* *
* This code is licenced under the GPL. * This code is licensed under the GPL.
* *
* ***************************************************************** * *****************************************************************
* *

View File

@ -4,7 +4,7 @@
* Copyright (c) 2011 * Copyright (c) 2011
* Written by Mathieu Sonet - www.elasticsheep.com * Written by Mathieu Sonet - www.elasticsheep.com
* *
* This code is licenced under the GPL. * This code is licensed under the GPL.
* *
* ***************************************************************** * *****************************************************************
*/ */

View File

@ -911,6 +911,7 @@ void mips_malta_init (ram_addr_t ram_size,
uint32_t *end = addr + bios_size; uint32_t *end = addr + bios_size;
while (addr < end) { while (addr < end) {
bswap32s(addr); bswap32s(addr);
addr++;
} }
} }
#endif #endif

View File

@ -1616,7 +1616,7 @@ static void omap_prcm_write(void *opaque, target_phys_addr_t addr,
case 0x500: /* CM_CLKEN_PLL */ case 0x500: /* CM_CLKEN_PLL */
if (value & 0xffffff30) if (value & 0xffffff30)
fprintf(stderr, "%s: write 0s in CM_CLKEN_PLL for " fprintf(stderr, "%s: write 0s in CM_CLKEN_PLL for "
"future compatiblity\n", __FUNCTION__); "future compatibility\n", __FUNCTION__);
if ((s->clken[9] ^ value) & 0xcc) { if ((s->clken[9] ^ value) & 0xcc) {
s->clken[9] &= ~0xcc; s->clken[9] &= ~0xcc;
s->clken[9] |= value & 0xcc; s->clken[9] |= value & 0xcc;
@ -1635,7 +1635,7 @@ static void omap_prcm_write(void *opaque, target_phys_addr_t addr,
case 0x540: /* CM_CLKSEL1_PLL */ case 0x540: /* CM_CLKSEL1_PLL */
if (value & 0xfc4000d7) if (value & 0xfc4000d7)
fprintf(stderr, "%s: write 0s in CM_CLKSEL1_PLL for " fprintf(stderr, "%s: write 0s in CM_CLKSEL1_PLL for "
"future compatiblity\n", __FUNCTION__); "future compatibility\n", __FUNCTION__);
if ((s->clksel[5] ^ value) & 0x003fff00) { if ((s->clksel[5] ^ value) & 0x003fff00) {
s->clksel[5] = value & 0x03bfff28; s->clksel[5] = value & 0x03bfff28;
omap_prcm_dpll_update(s); omap_prcm_dpll_update(s);
@ -1647,7 +1647,7 @@ static void omap_prcm_write(void *opaque, target_phys_addr_t addr,
case 0x544: /* CM_CLKSEL2_PLL */ case 0x544: /* CM_CLKSEL2_PLL */
if (value & ~3) if (value & ~3)
fprintf(stderr, "%s: write 0s in CM_CLKSEL2_PLL[31:2] for " fprintf(stderr, "%s: write 0s in CM_CLKSEL2_PLL[31:2] for "
"future compatiblity\n", __FUNCTION__); "future compatibility\n", __FUNCTION__);
if (s->clksel[6] != (value & 3)) { if (s->clksel[6] != (value & 3)) {
s->clksel[6] = value & 3; s->clksel[6] = value & 3;
omap_prcm_dpll_update(s); omap_prcm_dpll_update(s);

View File

@ -983,7 +983,7 @@ void pc_memory_init(MemoryRegion *system_memory,
linux_boot = (kernel_filename != NULL); linux_boot = (kernel_filename != NULL);
/* Allocate RAM. We allocate it as a single memory region and use /* Allocate RAM. We allocate it as a single memory region and use
* aliases to address portions of it, mostly for backwards compatiblity * aliases to address portions of it, mostly for backwards compatibility
* with older qemus that used qemu_ram_alloc(). * with older qemus that used qemu_ram_alloc().
*/ */
ram = g_malloc(sizeof(*ram)); ram = g_malloc(sizeof(*ram));

View File

@ -34,7 +34,7 @@ static void pci_error_message(Monitor *mon)
monitor_printf(mon, "PCI devices not supported\n"); monitor_printf(mon, "PCI devices not supported\n");
} }
int do_pcie_aer_inejct_error(Monitor *mon, int do_pcie_aer_inject_error(Monitor *mon,
const QDict *qdict, QObject **ret_data) const QDict *qdict, QObject **ret_data)
{ {
pci_error_message(mon); pci_error_message(mon);

View File

@ -826,7 +826,7 @@ typedef struct PCIEAERErrorName {
} PCIEAERErrorName; } PCIEAERErrorName;
/* /*
* AER error name -> value convertion table * AER error name -> value conversion table
* This naming scheme is same to linux aer-injection tool. * This naming scheme is same to linux aer-injection tool.
*/ */
static const struct PCIEAERErrorName pcie_aer_error_list[] = { static const struct PCIEAERErrorName pcie_aer_error_list[] = {
@ -951,7 +951,7 @@ static int pcie_aer_parse_error_string(const char *error_name,
return -EINVAL; return -EINVAL;
} }
int do_pcie_aer_inejct_error(Monitor *mon, int do_pcie_aer_inject_error(Monitor *mon,
const QDict *qdict, QObject **ret_data) const QDict *qdict, QObject **ret_data)
{ {
const char *id = qdict_get_str(qdict, "id"); const char *id = qdict_get_str(qdict, "id");

View File

@ -4,7 +4,7 @@
* Copyright (c) 2011 * Copyright (c) 2011
* Written by Mathieu Sonet - www.elasticsheep.com * Written by Mathieu Sonet - www.elasticsheep.com
* *
* This code is licenced under the GPL. * This code is licensed under the GPL.
* *
* ***************************************************************** * *****************************************************************
* *

View File

@ -4,7 +4,7 @@
* Copyright (c) 2011 * Copyright (c) 2011
* Written by Mathieu Sonet - www.elasticsheep.com * Written by Mathieu Sonet - www.elasticsheep.com
* *
* This code is licenced under the GPL. * This code is licensed under the GPL.
* *
* ***************************************************************** * *****************************************************************
*/ */

View File

@ -4,7 +4,7 @@
* Copyright (c) 2011 * Copyright (c) 2011
* Written by Mathieu Sonet - www.elasticsheep.com * Written by Mathieu Sonet - www.elasticsheep.com
* *
* This code is licenced under the GPL. * This code is licensed under the GPL.
* *
* ***************************************************************** * *****************************************************************
*/ */

View File

@ -358,7 +358,7 @@ static void pl110_write(void *opaque, target_phys_addr_t offset,
int n; int n;
/* For simplicity invalidate the display whenever a control register /* For simplicity invalidate the display whenever a control register
is writen to. */ is written to. */
s->invalidate = 1; s->invalidate = 1;
if (offset >= 0x200 && offset < 0x400) { if (offset >= 0x200 && offset < 0x400) {
/* Pallette. */ /* Pallette. */

View File

@ -311,9 +311,9 @@ static uint64_t pl181_read(void *opaque, target_phys_addr_t offset,
case 0x48: /* FifoCnt */ case 0x48: /* FifoCnt */
/* The documentation is somewhat vague about exactly what FifoCnt /* The documentation is somewhat vague about exactly what FifoCnt
does. On real hardware it appears to be when decrememnted does. On real hardware it appears to be when decrememnted
when a word is transfered between the FIFO and the serial when a word is transferred between the FIFO and the serial
data engine. DataCnt is decremented after each byte is data engine. DataCnt is decremented after each byte is
transfered between the serial engine and the card. transferred between the serial engine and the card.
We don't emulate this level of detail, so both can be the same. */ We don't emulate this level of detail, so both can be the same. */
tmp = (s->datacnt + 3) >> 2; tmp = (s->datacnt + 3) >> 2;
if (s->linux_hack) { if (s->linux_hack) {

View File

@ -1153,7 +1153,7 @@ void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val)
/* NVRAM helpers */ /* NVRAM helpers */
static inline uint32_t nvram_read (nvram_t *nvram, uint32_t addr) static inline uint32_t nvram_read (nvram_t *nvram, uint32_t addr)
{ {
return (*nvram->read_fn)(nvram->opaque, addr);; return (*nvram->read_fn)(nvram->opaque, addr);
} }
static inline void nvram_write (nvram_t *nvram, uint32_t addr, uint32_t val) static inline void nvram_write (nvram_t *nvram, uint32_t addr, uint32_t val)

View File

@ -2662,7 +2662,7 @@ static void rtl8139_IntrStatus_write(RTL8139State *s, uint32_t val)
* Computing if we miss an interrupt here is not that correct but * Computing if we miss an interrupt here is not that correct but
* considered that we should have had already an interrupt * considered that we should have had already an interrupt
* and probably emulated is slower is better to assume this resetting was * and probably emulated is slower is better to assume this resetting was
* done before testing on previous rtl8139_update_irq lead to IRQ loosing * done before testing on previous rtl8139_update_irq lead to IRQ losing
*/ */
rtl8139_set_next_tctr_time(s, qemu_get_clock_ns(vm_clock)); rtl8139_set_next_tctr_time(s, qemu_get_clock_ns(vm_clock));
rtl8139_update_irq(s); rtl8139_update_irq(s);

View File

@ -157,7 +157,7 @@
* Exeption-related registers * Exeption-related registers
*/ */
/* Immediate data for TRAPA instuction - TRA */ /* Immediate data for TRAPA instruction - TRA */
#define SH7750_TRA_REGOFS 0x000020 /* offset */ #define SH7750_TRA_REGOFS 0x000020 /* offset */
#define SH7750_TRA SH7750_P4_REG32(SH7750_TRA_REGOFS) #define SH7750_TRA SH7750_P4_REG32(SH7750_TRA_REGOFS)
#define SH7750_TRA_A7 SH7750_A7_REG32(SH7750_TRA_REGOFS) #define SH7750_TRA_A7 SH7750_A7_REG32(SH7750_TRA_REGOFS)

View File

@ -429,7 +429,7 @@ static void smc91c111_writeb(void *opaque, target_phys_addr_t offset,
smc91c111_update(s); smc91c111_update(s);
return; return;
} }
break;; break;
case 3: case 3:
switch (offset) { switch (offset) {

View File

@ -141,7 +141,7 @@ typedef struct sPAPREnvironment {
#define H_DABRX_KERNEL (1ULL<<(63-62)) #define H_DABRX_KERNEL (1ULL<<(63-62))
#define H_DABRX_USER (1ULL<<(63-63)) #define H_DABRX_USER (1ULL<<(63-63))
/* Each control block has to be on a 4K bondary */ /* Each control block has to be on a 4K boundary */
#define H_CB_ALIGNMENT 4096 #define H_CB_ALIGNMENT 4096
/* pSeries hypervisor opcodes */ /* pSeries hypervisor opcodes */

View File

@ -123,7 +123,7 @@ static int ssd0303_send(i2c_slave *i2c, uint8_t data)
case 0xa7: /* Inverse on. */ case 0xa7: /* Inverse on. */
s->inverse = 1; s->inverse = 1;
break; break;
case 0xa8: /* Set multipled ratio (Ignored). */ case 0xa8: /* Set multiplied ratio (Ignored). */
s->cmd_state = SSD0303_CMD_SKIP1; s->cmd_state = SSD0303_CMD_SKIP1;
break; break;
case 0xad: /* DC-DC power control. */ case 0xad: /* DC-DC power control. */

View File

@ -5,7 +5,7 @@
* *
* FB support code. Based on G364 fb emulator * FB support code. Based on G364 fb emulator
* *
* Copyright (c) 2007 Hervé Poussineau * Copyright (c) 2007 Hervé Poussineau
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as

View File

@ -627,9 +627,10 @@ void virtio_init_pci(VirtIOPCIProxy *proxy, VirtIODevice *vdev)
if (proxy->class_code) { if (proxy->class_code) {
pci_config_set_class(config, proxy->class_code); pci_config_set_class(config, proxy->class_code);
} }
pci_set_word(config + 0x2c, pci_get_word(config + PCI_VENDOR_ID)); pci_set_word(config + PCI_SUBSYSTEM_VENDOR_ID,
pci_set_word(config + 0x2e, vdev->device_id); pci_get_word(config + PCI_VENDOR_ID));
config[0x3d] = 1; pci_set_word(config + PCI_SUBSYSTEM_ID, vdev->device_id);
config[PCI_INTERRUPT_PIN] = 1;
memory_region_init(&proxy->msix_bar, "virtio-msix", 4096); memory_region_init(&proxy->msix_bar, "virtio-msix", 4096);
if (vdev->nvectors && !msix_init(&proxy->pci_dev, vdev->nvectors, if (vdev->nvectors && !msix_init(&proxy->pci_dev, vdev->nvectors,

View File

@ -1,7 +1,7 @@
/* /*
* QEMU VMPort emulation * QEMU VMPort emulation
* *
* Copyright (C) 2007 Hervé Poussineau * Copyright (C) 2007 Hervé Poussineau
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal

View File

@ -42,7 +42,7 @@ typedef struct IB700state {
/* This is the timer. We use a global here because the watchdog /* This is the timer. We use a global here because the watchdog
* code ensures there is only one watchdog (it is located at a fixed, * code ensures there is only one watchdog (it is located at a fixed,
* unchangable IO port, so there could only ever be one anyway). * unchangeable IO port, so there could only ever be one anyway).
*/ */
/* A write to this register enables the timer. */ /* A write to this register enables the timer. */

View File

@ -75,11 +75,11 @@ TABLE 1
+-------------------------+---+---+---------+---------+ +-------------------------+---+---+---------+---------+
| Precision | u | v | FPSR.EP | length | | Precision | u | v | FPSR.EP | length |
+-------------------------+---+---+---------+---------+ +-------------------------+---+---+---------+---------+
| Single | 0 ü 0 | x | 1 words | | Single | 0 | 0 | x | 1 words |
| Double | 1 ü 1 | x | 2 words | | Double | 1 | 1 | x | 2 words |
| Extended | 1 ü 1 | x | 3 words | | Extended | 1 | 1 | x | 3 words |
| Packed decimal | 1 ü 1 | 0 | 3 words | | Packed decimal | 1 | 1 | 0 | 3 words |
| Expanded packed decimal | 1 ü 1 | 1 | 4 words | | Expanded packed decimal | 1 | 1 | 1 | 4 words |
+-------------------------+---+---+---------+---------+ +-------------------------+---+---+---------+---------+
Note: x = don't care Note: x = don't care
*/ */
@ -89,10 +89,10 @@ TABLE 2
+---+---+---------------------------------+ +---+---+---------------------------------+
| w | x | Number of registers to transfer | | w | x | Number of registers to transfer |
+---+---+---------------------------------+ +---+---+---------------------------------+
| 0 ü 1 | 1 | | 0 | 1 | 1 |
| 1 ü 0 | 2 | | 1 | 0 | 2 |
| 1 ü 1 | 3 | | 1 | 1 | 3 |
| 0 ü 0 | 4 | | 0 | 0 | 4 |
+---+---+---------------------------------+ +---+---+---------------------------------+
*/ */
@ -153,10 +153,10 @@ TABLE 5
+-------------------------+---+---+ +-------------------------+---+---+
| Rounding Precision | e | f | | Rounding Precision | e | f |
+-------------------------+---+---+ +-------------------------+---+---+
| IEEE Single precision | 0 ü 0 | | IEEE Single precision | 0 | 0 |
| IEEE Double precision | 0 ü 1 | | IEEE Double precision | 0 | 1 |
| IEEE Extended precision | 1 ü 0 | | IEEE Extended precision | 1 | 0 |
| undefined (trap) | 1 ü 1 | | undefined (trap) | 1 | 1 |
+-------------------------+---+---+ +-------------------------+---+---+
*/ */
@ -165,10 +165,10 @@ TABLE 5
+---------------------------------+---+---+ +---------------------------------+---+---+
| Rounding Mode | g | h | | Rounding Mode | g | h |
+---------------------------------+---+---+ +---------------------------------+---+---+
| Round to nearest (default) | 0 ü 0 | | Round to nearest (default) | 0 | 0 |
| Round toward plus infinity | 0 ü 1 | | Round toward plus infinity | 0 | 1 |
| Round toward negative infinity | 1 ü 0 | | Round toward negative infinity | 1 | 0 |
| Round toward zero | 1 ü 1 | | Round toward zero | 1 | 1 |
+---------------------------------+---+---+ +---------------------------------+---+---+
*/ */

View File

@ -1,7 +1,7 @@
/* /*
* cpu to uname machine name map * cpu to uname machine name map
* *
* Copyright (c) 2009 Loïc Minier * Copyright (c) 2009 Loïc Minier
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View File

@ -2377,7 +2377,7 @@ static inline abi_long host_to_target_semid_ds(abi_ulong target_addr,
if (!lock_user_struct(VERIFY_WRITE, target_sd, target_addr, 0)) if (!lock_user_struct(VERIFY_WRITE, target_sd, target_addr, 0))
return -TARGET_EFAULT; return -TARGET_EFAULT;
if (host_to_target_ipc_perm(target_addr,&(host_sd->sem_perm))) if (host_to_target_ipc_perm(target_addr,&(host_sd->sem_perm)))
return -TARGET_EFAULT;; return -TARGET_EFAULT;
target_sd->sem_nsems = tswapal(host_sd->sem_nsems); target_sd->sem_nsems = tswapal(host_sd->sem_nsems);
target_sd->sem_otime = tswapal(host_sd->sem_otime); target_sd->sem_otime = tswapal(host_sd->sem_otime);
target_sd->sem_ctime = tswapal(host_sd->sem_ctime); target_sd->sem_ctime = tswapal(host_sd->sem_ctime);
@ -7521,8 +7521,10 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
#endif #endif
cmd = target_to_host_fcntl_cmd(arg2); cmd = target_to_host_fcntl_cmd(arg2);
if (cmd == -TARGET_EINVAL) if (cmd == -TARGET_EINVAL) {
return cmd; ret = cmd;
break;
}
switch(arg2) { switch(arg2) {
case TARGET_F_GETLK64: case TARGET_F_GETLK64:

View File

@ -8,7 +8,7 @@ struct target_pt_regs {
abi_ulong r12; abi_ulong r12;
abi_ulong rbp; abi_ulong rbp;
abi_ulong rbx; abi_ulong rbx;
/* arguments: non interrupts/non tracing syscalls only save upto here*/ /* arguments: non interrupts/non tracing syscalls only save up to here */
abi_ulong r11; abi_ulong r11;
abi_ulong r10; abi_ulong r10;
abi_ulong r9; abi_ulong r9;

View File

@ -149,7 +149,7 @@ struct MemoryRegionPortio {
/** /**
* memory_region_init: Initialize a memory region * memory_region_init: Initialize a memory region
* *
* The region typically acts as a container for other memory regions. Us * The region typically acts as a container for other memory regions. Use
* memory_region_add_subregion() to add subregions. * memory_region_add_subregion() to add subregions.
* *
* @mr: the #MemoryRegion to be initialized * @mr: the #MemoryRegion to be initialized
@ -162,7 +162,7 @@ void memory_region_init(MemoryRegion *mr,
/** /**
* memory_region_init_io: Initialize an I/O memory region. * memory_region_init_io: Initialize an I/O memory region.
* *
* Accesses into the region will be cause the callbacks in @ops to be called. * Accesses into the region will cause the callbacks in @ops to be called.
* if @size is nonzero, subregions will be clipped to @size. * if @size is nonzero, subregions will be clipped to @size.
* *
* @mr: the #MemoryRegion to be initialized. * @mr: the #MemoryRegion to be initialized.
@ -180,7 +180,7 @@ void memory_region_init_io(MemoryRegion *mr,
/** /**
* memory_region_init_ram: Initialize RAM memory region. Accesses into the * memory_region_init_ram: Initialize RAM memory region. Accesses into the
* region will be modify memory directly. * region will modify memory directly.
* *
* @mr: the #MemoryRegion to be initialized. * @mr: the #MemoryRegion to be initialized.
* @dev: a device associated with the region; may be %NULL. * @dev: a device associated with the region; may be %NULL.
@ -196,7 +196,7 @@ void memory_region_init_ram(MemoryRegion *mr,
/** /**
* memory_region_init_ram: Initialize RAM memory region from a user-provided. * memory_region_init_ram: Initialize RAM memory region from a user-provided.
* pointer. Accesses into the region will be modify * pointer. Accesses into the region will modify
* memory directly. * memory directly.
* *
* @mr: the #MemoryRegion to be initialized. * @mr: the #MemoryRegion to be initialized.
@ -250,7 +250,7 @@ void memory_region_init_rom_device(MemoryRegion *mr,
uint64_t size); uint64_t size);
/** /**
* memory_region_destroy: Destroy a memory region and relaim all resources. * memory_region_destroy: Destroy a memory region and reclaim all resources.
* *
* @mr: the region to be destroyed. May not currently be a subregion * @mr: the region to be destroyed. May not currently be a subregion
* (see memory_region_add_subregion()) or referenced in an alias * (see memory_region_add_subregion()) or referenced in an alias
@ -417,7 +417,7 @@ void memory_region_clear_coalescing(MemoryRegion *mr);
* *
* Marks a word in an IO region (initialized with memory_region_init_io()) * Marks a word in an IO region (initialized with memory_region_init_io())
* as a trigger for an eventfd event. The I/O callback will not be called. * as a trigger for an eventfd event. The I/O callback will not be called.
* The caller must be prepared to handle failure (hat is, take the required * The caller must be prepared to handle failure (that is, take the required
* action if the callback _is_ called). * action if the callback _is_ called).
* *
* @mr: the memory region being updated. * @mr: the memory region being updated.
@ -435,10 +435,10 @@ void memory_region_add_eventfd(MemoryRegion *mr,
int fd); int fd);
/** /**
* memory_region_del_eventfd: Cancel and eventfd. * memory_region_del_eventfd: Cancel an eventfd.
* *
* Cancels an eventfd trigger request by a previous memory_region_add_eventfd() * Cancels an eventfd trigger requested by a previous
* call. * memory_region_add_eventfd() call.
* *
* @mr: the memory region being updated. * @mr: the memory region being updated.
* @addr: the address within @mr that is to be monitored * @addr: the address within @mr that is to be monitored
@ -454,9 +454,9 @@ void memory_region_del_eventfd(MemoryRegion *mr,
uint64_t data, uint64_t data,
int fd); int fd);
/** /**
* memory_region_add_subregion: Add a sub-region to a container. * memory_region_add_subregion: Add a subregion to a container.
* *
* Adds a sub-region at @offset. The sub-region may not overlap with other * Adds a subregion at @offset. The subregion may not overlap with other
* subregions (except for those explicitly marked as overlapping). A region * subregions (except for those explicitly marked as overlapping). A region
* may only be added once as a subregion (unless removed with * may only be added once as a subregion (unless removed with
* memory_region_del_subregion()); use memory_region_init_alias() if you * memory_region_del_subregion()); use memory_region_init_alias() if you
@ -471,9 +471,9 @@ void memory_region_add_subregion(MemoryRegion *mr,
target_phys_addr_t offset, target_phys_addr_t offset,
MemoryRegion *subregion); MemoryRegion *subregion);
/** /**
* memory_region_add_subregion: Add a sub-region to a container, with overlap. * memory_region_add_subregion: Add a subregion to a container, with overlap.
* *
* Adds a sub-region at @offset. The sub-region may overlap with other * Adds a subregion at @offset. The subregion may overlap with other
* subregions. Conflicts are resolved by having a higher @priority hide a * subregions. Conflicts are resolved by having a higher @priority hide a
* lower @priority. Subregions without priority are taken as @priority 0. * lower @priority. Subregions without priority are taken as @priority 0.
* A region may only be added once as a subregion (unless removed with * A region may only be added once as a subregion (unless removed with
@ -501,11 +501,17 @@ void memory_region_add_subregion_overlap(MemoryRegion *mr,
void memory_region_del_subregion(MemoryRegion *mr, void memory_region_del_subregion(MemoryRegion *mr,
MemoryRegion *subregion); MemoryRegion *subregion);
/* Start a transaction; changes will be accumulated and made visible only /**
* when the transaction ends. * memory_region_transaction_begin: Start a transaction.
*
* During a transaction, changes will be accumulated and made visible
* only when the transaction ends (is commited).
*/ */
void memory_region_transaction_begin(void); void memory_region_transaction_begin(void);
/* Commit a transaction and make changes visible to the guest.
/**
* memory_region_transaction_commit: Commit a transaction and make changes
* visible to the guest.
*/ */
void memory_region_transaction_commit(void); void memory_region_transaction_commit(void);

View File

@ -81,8 +81,6 @@ uint64_t ram_bytes_total(void);
int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque); int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque);
int ram_load(QEMUFile *f, void *opaque, int version_id); int ram_load(QEMUFile *f, void *opaque, int version_id);
extern int incoming_expected;
/** /**
* @migrate_add_blocker - prevent migration from proceeding * @migrate_add_blocker - prevent migration from proceeding
* *

View File

@ -414,6 +414,7 @@ static int net_socket_listen_init(VLANState *vlan,
fd = qemu_socket(PF_INET, SOCK_STREAM, 0); fd = qemu_socket(PF_INET, SOCK_STREAM, 0);
if (fd < 0) { if (fd < 0) {
perror("socket"); perror("socket");
g_free(s);
return -1; return -1;
} }
socket_set_nonblock(fd); socket_set_nonblock(fd);
@ -425,11 +426,13 @@ static int net_socket_listen_init(VLANState *vlan,
ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)); ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
if (ret < 0) { if (ret < 0) {
perror("bind"); perror("bind");
g_free(s);
return -1; return -1;
} }
ret = listen(fd, 0); ret = listen(fd, 0);
if (ret < 0) { if (ret < 0) {
perror("listen"); perror("listen");
g_free(s);
return -1; return -1;
} }
s->vlan = vlan; s->vlan = vlan;

View File

@ -65,7 +65,7 @@ static int tap_alloc(char *dev, size_t dev_size)
static int arp_fd = 0; static int arp_fd = 0;
int ip_muxid, arp_muxid; int ip_muxid, arp_muxid;
struct strioctl strioc_if, strioc_ppa; struct strioctl strioc_if, strioc_ppa;
int link_type = I_PLINK;; int link_type = I_PLINK;
struct lifreq ifr; struct lifreq ifr;
char actual_name[32] = ""; char actual_name[32] = "";

View File

@ -44,6 +44,13 @@ int setenv(const char *name, const char *value, int overwrite)
char *string = g_malloc(length); char *string = g_malloc(length);
snprintf(string, length, "%s=%s", name, value); snprintf(string, length, "%s=%s", name, value);
result = putenv(string); result = putenv(string);
/* Windows takes a copy and does not continue to use our string.
* Therefore it can be safely freed on this platform. POSIX code
* typically has to leak the string because according to the spec it
* becomes part of the environment.
*/
g_free(string);
} }
return result; return result;
} }

View File

@ -1,4 +1,4 @@
# 2004-03-16 Halldór Guðmundsson and Morten Lange # 2004-03-16 Halldór Guðmundsson and Morten Lange
# Keyboard definition file for the Icelandic keyboard # Keyboard definition file for the Icelandic keyboard
# to be used in rdesktop 1.3.x ( See rdesktop.org) # to be used in rdesktop 1.3.x ( See rdesktop.org)
# generated from XKB map de, and changed manually # generated from XKB map de, and changed manually

View File

@ -1065,7 +1065,7 @@ diff -wruN --exclude '*~' --exclude '*.o' --exclude '*.bin' --exclude '*.out' --
+ tab, 4 * sizeof(uint32_t)); + tab, 4 * sizeof(uint32_t));
+ } + }
+#if 0 +#if 0
/* escc is usefull to get MacOS X debug messages */ /* escc is useful to get MacOS X debug messages */
{ {
OF_regprop_t regs[8]; OF_regprop_t regs[8];
@@ -2645,85 +2843,12 @@ @@ -2645,85 +2843,12 @@

View File

@ -50,7 +50,7 @@ run_multiboot:
shr $0x4, %ecx shr $0x4, %ecx
mov %cx, %gs mov %cx, %gs
/* now push the indirect jump decriptor there */ /* now push the indirect jump descriptor there */
mov (prot_jump), %ebx mov (prot_jump), %ebx
add %eax, %ebx add %eax, %ebx
movl %ebx, %gs:GS_PROT_JUMP movl %ebx, %gs:GS_PROT_JUMP

View File

@ -128,8 +128,8 @@ static ssize_t handle_aiocb_ioctl(struct qemu_paiocb *aiocb)
return -errno; return -errno;
/* /*
* This looks weird, but the aio code only consideres a request * This looks weird, but the aio code only considers a request
* successful if it has written the number full number of bytes. * successful if it has written the full number of bytes.
* *
* Now we overload aio_nbytes as aio_ioctl_cmd for the ioctl command, * Now we overload aio_nbytes as aio_ioctl_cmd for the ioctl command,
* so in fact we return the ioctl command here to make posix_aio_read() * so in fact we return the ioctl command here to make posix_aio_read()

View File

@ -13,7 +13,7 @@
# partially-delivered JSON text in such a way that this response # partially-delivered JSON text in such a way that this response
# can be obtained. # can be obtained.
# #
# Such clients should also preceed this command # Such clients should also precede this command
# with a 0xFF byte to make such the guest agent flushes any # with a 0xFF byte to make such the guest agent flushes any
# partially read JSON data from a previous session. # partially read JSON data from a previous session.
# #

View File

@ -107,7 +107,6 @@ For system emulation, the following hardware targets are supported:
@item MusicPal (MV88W8618 ARM processor) @item MusicPal (MV88W8618 ARM processor)
@item Gumstix "Connex" and "Verdex" motherboards (PXA255/270). @item Gumstix "Connex" and "Verdex" motherboards (PXA255/270).
@item Siemens SX1 smartphone (OMAP310 processor) @item Siemens SX1 smartphone (OMAP310 processor)
@item Syborg SVP base model (ARM Cortex-A8).
@item AXIS-Devboard88 (CRISv32 ETRAX-FS). @item AXIS-Devboard88 (CRISv32 ETRAX-FS).
@item Petalogix Spartan 3aDSP1800 MMU ref design (MicroBlaze). @item Petalogix Spartan 3aDSP1800 MMU ref design (MicroBlaze).
@item Avnet LX60/LX110/LX200 boards (Xtensa) @item Avnet LX60/LX110/LX200 boards (Xtensa)
@ -2079,28 +2078,6 @@ Secure Digital card connected to OMAP MMC/SD host
Three on-chip UARTs Three on-chip UARTs
@end itemize @end itemize
The "Syborg" Symbian Virtual Platform base model includes the following
elements:
@itemize @minus
@item
ARM Cortex-A8 CPU
@item
Interrupt controller
@item
Timer
@item
Real Time Clock
@item
Keyboard
@item
Framebuffer
@item
Touchscreen
@item
UARTs
@end itemize
A Linux 2.6 test image is available on the QEMU web site. More A Linux 2.6 test image is available on the QEMU web site. More
information is available in the QEMU mailing-list archive. information is available in the QEMU mailing-list archive.

View File

@ -217,7 +217,7 @@ qcow2. If performance is more important than correctness,
In case you don't care about data integrity over host failures, use In case you don't care about data integrity over host failures, use
cache=unsafe. This option tells qemu that it never needs to write any data cache=unsafe. This option tells qemu that it never needs to write any data
to the disk but can instead keeps things in cache. If anything goes wrong, to the disk but can instead keeps things in cache. If anything goes wrong,
like your host losing power, the disk storage getting disconnected accidently, like your host losing power, the disk storage getting disconnected accidentally,
etc. you're image will most probably be rendered unusable. When using etc. you're image will most probably be rendered unusable. When using
the @option{-snapshot} option, unsafe caching is always used. the @option{-snapshot} option, unsafe caching is always used.

View File

@ -96,10 +96,6 @@ Alpha and S390 hosts, but TCG (see below) doesn't support those yet.
@item Precise exceptions support. @item Precise exceptions support.
@item The virtual CPU is a library (@code{libqemu}) which can be used
in other projects (look at @file{qemu/tests/qruncom.c} to have an
example of user mode @code{libqemu} usage).
@item @item
Floating point library supporting both full software emulation and Floating point library supporting both full software emulation and
native host FPU instructions. native host FPU instructions.
@ -685,7 +681,6 @@ are available. They are used for regression testing.
@menu @menu
* test-i386:: * test-i386::
* linux-test:: * linux-test::
* qruncom.c::
@end menu @end menu
@node test-i386 @node test-i386
@ -711,11 +706,6 @@ This program tests various Linux system calls. It is used to verify
that the system call parameters are correctly converted between target that the system call parameters are correctly converted between target
and host CPUs. and host CPUs.
@node qruncom.c
@section @file{qruncom.c}
Example of usage of @code{libqemu} to emulate a user mode i386 CPU.
@node Index @node Index
@chapter Index @chapter Index
@printindex cp @printindex cp

View File

@ -41,12 +41,12 @@
#ifdef __linux__ #ifdef __linux__
#define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x) #define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x)
#define DEFINE_TLS(type, x) __thread __typeof__(type) tls__##x #define DEFINE_TLS(type, x) __thread __typeof__(type) tls__##x
#define get_tls(x) tls__##x #define tls_var(x) tls__##x
#else #else
/* Dummy implementations which define plain global variables */ /* Dummy implementations which define plain global variables */
#define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x) #define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x)
#define DEFINE_TLS(type, x) __typeof__(type) tls__##x #define DEFINE_TLS(type, x) __typeof__(type) tls__##x
#define get_tls(x) tls__##x #define tls_var(x) tls__##x
#endif #endif
#endif #endif

View File

@ -261,7 +261,7 @@ static const QErrorStringTable qerror_table[] = {
}, },
{ {
.error_fmt = QERR_INVALID_PARAMETER_COMBINATION, .error_fmt = QERR_INVALID_PARAMETER_COMBINATION,
.desc = "Invalid paramter combination", .desc = "Invalid parameter combination",
}, },
{} {}
}; };

View File

@ -1907,7 +1907,7 @@ sub process {
my $ok = 0; my $ok = 0;
for (my $ln = $linenr - 1; $ln >= $first_line; $ln--) { for (my $ln = $linenr - 1; $ln >= $first_line; $ln--) {
#print "CHECK<$lines[$ln - 1]\n"; #print "CHECK<$lines[$ln - 1]\n";
# we have a preceeding printk if it ends # we have a preceding printk if it ends
# with "\n" ignore it, else it is to blame # with "\n" ignore it, else it is to blame
if ($lines[$ln - 1] =~ m{\bprintk\(}) { if ($lines[$ln - 1] =~ m{\bprintk\(}) {
if ($rawlines[$ln - 1] !~ m{\\n"}) { if ($rawlines[$ln - 1] !~ m{\\n"}) {
@ -1999,7 +1999,7 @@ sub process {
for (my $n = 0; $n < $#elements; $n += 2) { for (my $n = 0; $n < $#elements; $n += 2) {
$off += length($elements[$n]); $off += length($elements[$n]);
# Pick up the preceeding and succeeding characters. # Pick up the preceding and succeeding characters.
my $ca = substr($opline, 0, $off); my $ca = substr($opline, 0, $off);
my $cc = ''; my $cc = '';
if (length($opline) >= ($off + length($elements[$n + 1]))) { if (length($opline) >= ($off + length($elements[$n + 1]))) {

View File

@ -148,7 +148,7 @@ void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict);
/* pcie aer error injection */ /* pcie aer error injection */
void pcie_aer_inject_error_print(Monitor *mon, const QObject *data); void pcie_aer_inject_error_print(Monitor *mon, const QObject *data);
int do_pcie_aer_inejct_error(Monitor *mon, int do_pcie_aer_inject_error(Monitor *mon,
const QDict *qdict, QObject **ret_data); const QDict *qdict, QObject **ret_data);
/* serial ports */ /* serial ports */

View File

@ -497,7 +497,7 @@ void do_interrupt (CPUState *env)
} }
} else { } else {
/* For VEIC mode, the external interrupt controller feeds the /* For VEIC mode, the external interrupt controller feeds the
vector throught the CP0Cause IP lines. */ vector through the CP0Cause IP lines. */
vector = pending; vector = pending;
} }
offset = 0x200 + vector * spacing; offset = 0x200 + vector * spacing;

View File

@ -513,15 +513,15 @@ enum cc_op {
CC_OP_ADD_64, /* overflow on add (64bit) */ CC_OP_ADD_64, /* overflow on add (64bit) */
CC_OP_ADDU_64, /* overflow on unsigned add (64bit) */ CC_OP_ADDU_64, /* overflow on unsigned add (64bit) */
CC_OP_SUB_64, /* overflow on substraction (64bit) */ CC_OP_SUB_64, /* overflow on subtraction (64bit) */
CC_OP_SUBU_64, /* overflow on unsigned substraction (64bit) */ CC_OP_SUBU_64, /* overflow on unsigned subtraction (64bit) */
CC_OP_ABS_64, /* sign eval on abs (64bit) */ CC_OP_ABS_64, /* sign eval on abs (64bit) */
CC_OP_NABS_64, /* sign eval on nabs (64bit) */ CC_OP_NABS_64, /* sign eval on nabs (64bit) */
CC_OP_ADD_32, /* overflow on add (32bit) */ CC_OP_ADD_32, /* overflow on add (32bit) */
CC_OP_ADDU_32, /* overflow on unsigned add (32bit) */ CC_OP_ADDU_32, /* overflow on unsigned add (32bit) */
CC_OP_SUB_32, /* overflow on substraction (32bit) */ CC_OP_SUB_32, /* overflow on subtraction (32bit) */
CC_OP_SUBU_32, /* overflow on unsigned substraction (32bit) */ CC_OP_SUBU_32, /* overflow on unsigned subtraction (32bit) */
CC_OP_ABS_32, /* sign eval on abs (64bit) */ CC_OP_ABS_32, /* sign eval on abs (64bit) */
CC_OP_NABS_32, /* sign eval on nabs (64bit) */ CC_OP_NABS_32, /* sign eval on nabs (64bit) */

View File

@ -1336,7 +1336,7 @@ void HELPER(meeb)(uint32_t f1, uint32_t val)
uint32_t HELPER(cebr)(uint32_t f1, uint32_t f2) uint32_t HELPER(cebr)(uint32_t f1, uint32_t f2)
{ {
float32 v1 = env->fregs[f1].l.upper; float32 v1 = env->fregs[f1].l.upper;
float32 v2 = env->fregs[f2].l.upper;; float32 v2 = env->fregs[f2].l.upper;
HELPER_LOG("%s: comparing 0x%d from f%d and 0x%d\n", __FUNCTION__, HELPER_LOG("%s: comparing 0x%d from f%d and 0x%d\n", __FUNCTION__,
v1, f1, v2); v1, f1, v2);
return set_cc_f32(v1, v2); return set_cc_f32(v1, v2);
@ -1346,7 +1346,7 @@ uint32_t HELPER(cebr)(uint32_t f1, uint32_t f2)
uint32_t HELPER(cdbr)(uint32_t f1, uint32_t f2) uint32_t HELPER(cdbr)(uint32_t f1, uint32_t f2)
{ {
float64 v1 = env->fregs[f1].d; float64 v1 = env->fregs[f1].d;
float64 v2 = env->fregs[f2].d;; float64 v2 = env->fregs[f2].d;
HELPER_LOG("%s: comparing 0x%ld from f%d and 0x%ld\n", __FUNCTION__, HELPER_LOG("%s: comparing 0x%ld from f%d and 0x%ld\n", __FUNCTION__,
v1, f1, v2); v1, f1, v2);
return set_cc_f64(v1, v2); return set_cc_f64(v1, v2);

View File

@ -23,11 +23,6 @@
*/ */
#define TCG_TARGET_I386 1 #define TCG_TARGET_I386 1
#if defined(__x86_64__)
# define TCG_TARGET_REG_BITS 64
#else
# define TCG_TARGET_REG_BITS 32
#endif
//#define TCG_TARGET_WORDS_BIGENDIAN //#define TCG_TARGET_WORDS_BIGENDIAN
#if TCG_TARGET_REG_BITS == 64 #if TCG_TARGET_REG_BITS == 64

View File

@ -389,7 +389,7 @@ static inline void tcg_gen_helperN(void *func, int flags, int sizemask,
TCGArg ret, int nargs, TCGArg *args) TCGArg ret, int nargs, TCGArg *args)
{ {
TCGv_ptr fn; TCGv_ptr fn;
fn = tcg_const_ptr((tcg_target_long)func); fn = tcg_const_ptr(func);
tcg_gen_callN(&tcg_ctx, fn, flags, sizemask, ret, tcg_gen_callN(&tcg_ctx, fn, flags, sizemask, ret,
nargs, args); nargs, args);
tcg_temp_free_ptr(fn); tcg_temp_free_ptr(fn);
@ -405,7 +405,7 @@ static inline void tcg_gen_helper32(void *func, int sizemask, TCGv_i32 ret,
{ {
TCGv_ptr fn; TCGv_ptr fn;
TCGArg args[2]; TCGArg args[2];
fn = tcg_const_ptr((tcg_target_long)func); fn = tcg_const_ptr(func);
args[0] = GET_TCGV_I32(a); args[0] = GET_TCGV_I32(a);
args[1] = GET_TCGV_I32(b); args[1] = GET_TCGV_I32(b);
tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask, tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask,
@ -418,7 +418,7 @@ static inline void tcg_gen_helper64(void *func, int sizemask, TCGv_i64 ret,
{ {
TCGv_ptr fn; TCGv_ptr fn;
TCGArg args[2]; TCGArg args[2];
fn = tcg_const_ptr((tcg_target_long)func); fn = tcg_const_ptr(func);
args[0] = GET_TCGV_I64(a); args[0] = GET_TCGV_I64(a);
args[1] = GET_TCGV_I64(b); args[1] = GET_TCGV_I64(b);
tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask, tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask,

View File

@ -544,7 +544,7 @@ void tcg_add_target_add_op_defs(const TCGTargetOpDef *tdefs);
#define TCGV_NAT_TO_PTR(n) MAKE_TCGV_PTR(GET_TCGV_I32(n)) #define TCGV_NAT_TO_PTR(n) MAKE_TCGV_PTR(GET_TCGV_I32(n))
#define TCGV_PTR_TO_NAT(n) MAKE_TCGV_I32(GET_TCGV_PTR(n)) #define TCGV_PTR_TO_NAT(n) MAKE_TCGV_I32(GET_TCGV_PTR(n))
#define tcg_const_ptr(V) TCGV_NAT_TO_PTR(tcg_const_i32(V)) #define tcg_const_ptr(V) TCGV_NAT_TO_PTR(tcg_const_i32((tcg_target_long)(V)))
#define tcg_global_reg_new_ptr(R, N) \ #define tcg_global_reg_new_ptr(R, N) \
TCGV_NAT_TO_PTR(tcg_global_reg_new_i32((R), (N))) TCGV_NAT_TO_PTR(tcg_global_reg_new_i32((R), (N)))
#define tcg_global_mem_new_ptr(R, O, N) \ #define tcg_global_mem_new_ptr(R, O, N) \
@ -555,7 +555,7 @@ void tcg_add_target_add_op_defs(const TCGTargetOpDef *tdefs);
#define TCGV_NAT_TO_PTR(n) MAKE_TCGV_PTR(GET_TCGV_I64(n)) #define TCGV_NAT_TO_PTR(n) MAKE_TCGV_PTR(GET_TCGV_I64(n))
#define TCGV_PTR_TO_NAT(n) MAKE_TCGV_I64(GET_TCGV_PTR(n)) #define TCGV_PTR_TO_NAT(n) MAKE_TCGV_I64(GET_TCGV_PTR(n))
#define tcg_const_ptr(V) TCGV_NAT_TO_PTR(tcg_const_i64(V)) #define tcg_const_ptr(V) TCGV_NAT_TO_PTR(tcg_const_i64((tcg_target_long)(V)))
#define tcg_global_reg_new_ptr(R, N) \ #define tcg_global_reg_new_ptr(R, N) \
TCGV_NAT_TO_PTR(tcg_global_reg_new_i64((R), (N))) TCGV_NAT_TO_PTR(tcg_global_reg_new_i64((R), (N)))
#define tcg_global_mem_new_ptr(R, O, N) \ #define tcg_global_mem_new_ptr(R, O, N) \

View File

@ -115,12 +115,6 @@ speed: sha1 sha1-i386
time ./sha1 time ./sha1
time $(QEMU) ./sha1-i386 time $(QEMU) ./sha1-i386
# broken test
# NOTE: -fomit-frame-pointer is currently needed : this is a bug in libqemu
qruncom: qruncom.c ../ioport-user.c ../i386-user/libqemu.a
$(CC) $(CFLAGS) -fomit-frame-pointer $(LDFLAGS) -I../target-i386 -I.. -I../i386-user -I../fpu \
-o $@ $(filter %.c, $^) -L../i386-user -lqemu -lm
# arm test # arm test
hello-arm: hello-arm.o hello-arm: hello-arm.o
arm-linux-ld -o $@ $< arm-linux-ld -o $@ $<

View File

@ -1,284 +0,0 @@
/*
* Example of use of user mode libqemu: launch a basic .com DOS
* executable
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <signal.h>
#include <malloc.h>
#include "cpu.h"
//#define SIGTEST
int cpu_get_pic_interrupt(CPUState *env)
{
return -1;
}
uint64_t cpu_get_tsc(CPUState *env)
{
return 0;
}
static void set_gate(void *ptr, unsigned int type, unsigned int dpl,
unsigned long addr, unsigned int sel)
{
unsigned int e1, e2;
e1 = (addr & 0xffff) | (sel << 16);
e2 = (addr & 0xffff0000) | 0x8000 | (dpl << 13) | (type << 8);
stl((uint8_t *)ptr, e1);
stl((uint8_t *)ptr + 4, e2);
}
uint64_t idt_table[256];
/* only dpl matters as we do only user space emulation */
static void set_idt(int n, unsigned int dpl)
{
set_gate(idt_table + n, 0, dpl, 0, 0);
}
void g_free(void *ptr)
{
free(ptr);
}
void *g_malloc(size_t size)
{
return malloc(size);
}
void *g_malloc0(size_t size)
{
void *ptr;
ptr = g_malloc(size);
if (!ptr)
return NULL;
memset(ptr, 0, size);
return ptr;
}
void *qemu_vmalloc(size_t size)
{
return memalign(4096, size);
}
void qemu_vfree(void *ptr)
{
free(ptr);
}
void qemu_printf(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vprintf(fmt, ap);
va_end(ap);
}
/* XXX: this is a bug in helper2.c */
int errno;
/**********************************************/
#define COM_BASE_ADDR 0x10100
static void usage(void)
{
printf("qruncom version 0.1 (c) 2003 Fabrice Bellard\n"
"usage: qruncom file.com\n"
"user mode libqemu demo: run simple .com DOS executables\n");
exit(1);
}
static inline uint8_t *seg_to_linear(unsigned int seg, unsigned int reg)
{
return (uint8_t *)((seg << 4) + (reg & 0xffff));
}
static inline void pushw(CPUState *env, int val)
{
env->regs[R_ESP] = (env->regs[R_ESP] & ~0xffff) | ((env->regs[R_ESP] - 2) & 0xffff);
*(uint16_t *)seg_to_linear(env->segs[R_SS].selector, env->regs[R_ESP]) = val;
}
static void host_segv_handler(int host_signum, siginfo_t *info,
void *puc)
{
if (cpu_signal_handler(host_signum, info, puc)) {
return;
}
abort();
}
int main(int argc, char **argv)
{
uint8_t *vm86_mem;
const char *filename;
int fd, ret, seg;
CPUState *env;
if (argc != 2)
usage();
filename = argv[1];
vm86_mem = mmap((void *)0x00000000, 0x110000,
PROT_WRITE | PROT_READ | PROT_EXEC,
MAP_FIXED | MAP_ANON | MAP_PRIVATE, -1, 0);
if (vm86_mem == MAP_FAILED) {
perror("mmap");
exit(1);
}
/* load the MSDOS .com executable */
fd = open(filename, O_RDONLY);
if (fd < 0) {
perror(filename);
exit(1);
}
ret = read(fd, vm86_mem + COM_BASE_ADDR, 65536 - 256);
if (ret < 0) {
perror("read");
exit(1);
}
close(fd);
/* install exception handler for CPU emulator */
{
struct sigaction act;
sigfillset(&act.sa_mask);
act.sa_flags = SA_SIGINFO;
// act.sa_flags |= SA_ONSTACK;
act.sa_sigaction = host_segv_handler;
sigaction(SIGSEGV, &act, NULL);
sigaction(SIGBUS, &act, NULL);
}
// cpu_set_log(CPU_LOG_TB_IN_ASM | CPU_LOG_TB_OUT_ASM | CPU_LOG_EXEC);
env = cpu_init("qemu32");
cpu_x86_set_cpl(env, 3);
env->cr[0] = CR0_PG_MASK | CR0_WP_MASK | CR0_PE_MASK;
/* NOTE: hflags duplicates some of the virtual CPU state */
env->hflags |= HF_PE_MASK | VM_MASK;
/* flags setup : we activate the IRQs by default as in user
mode. We also activate the VM86 flag to run DOS code */
env->eflags |= IF_MASK | VM_MASK;
/* init basic registers */
env->eip = 0x100;
env->regs[R_ESP] = 0xfffe;
seg = (COM_BASE_ADDR - 0x100) >> 4;
cpu_x86_load_seg_cache(env, R_CS, seg,
(seg << 4), 0xffff, 0);
cpu_x86_load_seg_cache(env, R_SS, seg,
(seg << 4), 0xffff, 0);
cpu_x86_load_seg_cache(env, R_DS, seg,
(seg << 4), 0xffff, 0);
cpu_x86_load_seg_cache(env, R_ES, seg,
(seg << 4), 0xffff, 0);
cpu_x86_load_seg_cache(env, R_FS, seg,
(seg << 4), 0xffff, 0);
cpu_x86_load_seg_cache(env, R_GS, seg,
(seg << 4), 0xffff, 0);
/* exception support */
env->idt.base = (unsigned long)idt_table;
env->idt.limit = sizeof(idt_table) - 1;
set_idt(0, 0);
set_idt(1, 0);
set_idt(2, 0);
set_idt(3, 3);
set_idt(4, 3);
set_idt(5, 3);
set_idt(6, 0);
set_idt(7, 0);
set_idt(8, 0);
set_idt(9, 0);
set_idt(10, 0);
set_idt(11, 0);
set_idt(12, 0);
set_idt(13, 0);
set_idt(14, 0);
set_idt(15, 0);
set_idt(16, 0);
set_idt(17, 0);
set_idt(18, 0);
set_idt(19, 0);
/* put return code */
*seg_to_linear(env->segs[R_CS].selector, 0) = 0xb4; /* mov ah, $0 */
*seg_to_linear(env->segs[R_CS].selector, 1) = 0x00;
*seg_to_linear(env->segs[R_CS].selector, 2) = 0xcd; /* int $0x21 */
*seg_to_linear(env->segs[R_CS].selector, 3) = 0x21;
pushw(env, 0x0000);
/* the value of these registers seem to be assumed by pi_10.com */
env->regs[R_ESI] = 0x100;
env->regs[R_ECX] = 0xff;
env->regs[R_EBP] = 0x0900;
env->regs[R_EDI] = 0xfffe;
/* inform the emulator of the mmaped memory */
page_set_flags(0x00000000, 0x110000,
PAGE_WRITE | PAGE_READ | PAGE_EXEC | PAGE_VALID);
for(;;) {
ret = cpu_x86_exec(env);
switch(ret) {
case EXCP0D_GPF:
{
int int_num, ah;
int_num = *(uint8_t *)(env->segs[R_CS].base + env->eip + 1);
if (int_num != 0x21)
goto unknown_int;
ah = (env->regs[R_EAX] >> 8) & 0xff;
switch(ah) {
case 0x00: /* exit */
exit(0);
case 0x02: /* write char */
{
uint8_t c = env->regs[R_EDX];
write(1, &c, 1);
}
break;
case 0x09: /* write string */
{
uint8_t c;
for(;;) {
c = *seg_to_linear(env->segs[R_DS].selector, env->regs[R_EAX]);
if (c == '$')
break;
write(1, &c, 1);
}
env->regs[R_EAX] = (env->regs[R_EAX] & ~0xff) | '$';
}
break;
default:
unknown_int:
fprintf(stderr, "unsupported int 0x%02x\n", int_num);
cpu_dump_state(env, stderr, fprintf, 0);
// exit(1);
}
env->eip += 2;
}
break;
default:
fprintf(stderr, "unhandled cpu_exec return code (0x%x)\n", ret);
cpu_dump_state(env, stderr, fprintf, 0);
exit(1);
}
}
}

View File

@ -9,7 +9,7 @@
* * * *
* THE 'ZYWRLE' VNC CODEC SOURCE CODE IS (C) COPYRIGHT 2006 * * THE 'ZYWRLE' VNC CODEC SOURCE CODE IS (C) COPYRIGHT 2006 *
* BY Hitachi Systems & Services, Ltd. * * BY Hitachi Systems & Services, Ltd. *
* (Noriaki Yamazaki, Research & Developement Center) * * (Noriaki Yamazaki, Research & Development Center) *
* * * *
* * * *
******************************************************************** ********************************************************************

View File

@ -8,7 +8,7 @@
* * * *
* THE 'ZYWRLE' VNC CODEC SOURCE CODE IS (C) COPYRIGHT 2006 * * THE 'ZYWRLE' VNC CODEC SOURCE CODE IS (C) COPYRIGHT 2006 *
* BY Hitachi Systems & Services, Ltd. * * BY Hitachi Systems & Services, Ltd. *
* (Noriaki Yamazaki, Research & Developement Center) * * (Noriaki Yamazaki, Research & Development Center) *
* * * *
* * * *
******************************************************************** ********************************************************************

View File

@ -2183,7 +2183,7 @@ static int protocol_client_auth(VncState *vs, uint8_t *data, size_t len)
#ifdef CONFIG_VNC_TLS #ifdef CONFIG_VNC_TLS
case VNC_AUTH_VENCRYPT: case VNC_AUTH_VENCRYPT:
VNC_DEBUG("Accept VeNCrypt auth\n");; VNC_DEBUG("Accept VeNCrypt auth\n");
start_auth_vencrypt(vs); start_auth_vencrypt(vs);
break; break;
#endif /* CONFIG_VNC_TLS */ #endif /* CONFIG_VNC_TLS */

View File

@ -542,9 +542,9 @@ static int usbredir_handle_data(USBDevice *udev, USBPacket *p)
case USB_ENDPOINT_XFER_ISOC: case USB_ENDPOINT_XFER_ISOC:
return usbredir_handle_iso_data(dev, p, ep); return usbredir_handle_iso_data(dev, p, ep);
case USB_ENDPOINT_XFER_BULK: case USB_ENDPOINT_XFER_BULK:
return usbredir_handle_bulk_data(dev, p, ep);; return usbredir_handle_bulk_data(dev, p, ep);
case USB_ENDPOINT_XFER_INT: case USB_ENDPOINT_XFER_INT:
return usbredir_handle_interrupt_data(dev, p, ep);; return usbredir_handle_interrupt_data(dev, p, ep);
default: default:
ERROR("handle_data ep %02X has unknown type %d\n", ep, ERROR("handle_data ep %02X has unknown type %d\n", ep,
dev->endpoint[EP2I(ep)].type); dev->endpoint[EP2I(ep)].type);