Merge remote-tracking branch 'stefanha/trivial-patches-next' into staging
This commit is contained in:
commit
9423a2e8dd
@ -78,7 +78,7 @@ version 0.10.2:
|
||||
|
||||
- fix savevm/loadvm (Anthony Liguori)
|
||||
- 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)
|
||||
- hotplug: fix error handling for if= parameter (Eduardo Habkost)
|
||||
- qcow2: fix data corruption (Nolan Leake)
|
||||
@ -386,7 +386,7 @@ version 0.5.3:
|
||||
- support of CD-ROM change
|
||||
- multiple network interface support
|
||||
- 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)
|
||||
- VM save/restore commands
|
||||
- new timer API
|
||||
|
4
LICENSE
4
LICENSE
@ -6,9 +6,7 @@ The following points clarify the QEMU license:
|
||||
GNU General Public License. Hence each source file contains its own
|
||||
licensing information.
|
||||
|
||||
In particular, the QEMU virtual CPU core library (libqemu.a) is
|
||||
released under the GNU Lesser General Public License. Many hardware
|
||||
device emulation sources are released under the BSD license.
|
||||
Many hardware device emulation sources are released under the BSD license.
|
||||
|
||||
3) The Tiny Code Generator (TCG) is released under the BSD license
|
||||
(see license headers in files).
|
||||
|
@ -68,10 +68,9 @@ endif
|
||||
fsdev-obj-$(CONFIG_VIRTFS) += $(addprefix fsdev/, $(fsdev-nested-y))
|
||||
|
||||
######################################################################
|
||||
# libqemu_common.a: Target independent part of system emulation. The
|
||||
# long term path is to suppress *all* target specific code in case of
|
||||
# system emulation, i.e. a single QEMU executable should support all
|
||||
# CPUs and machines.
|
||||
# Target independent part of system emulation. The long term path is to
|
||||
# suppress *all* target specific code in case of system emulation, i.e. a
|
||||
# single QEMU executable should support all CPUs and machines.
|
||||
|
||||
common-obj-y = $(block-obj-y) blockdev.o
|
||||
common-obj-y += $(net-obj-y)
|
||||
|
@ -92,8 +92,6 @@ tci-dis.o: QEMU_CFLAGS += -I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/tci
|
||||
|
||||
$(libobj-y): $(GENERATED_HEADERS)
|
||||
|
||||
# libqemu
|
||||
|
||||
translate.o: translate.c cpu.h
|
||||
|
||||
translate-all.o: translate-all.c cpu.h
|
||||
|
@ -1665,7 +1665,7 @@ static void audio_pp_nb_voices (const char *typ, int nb)
|
||||
printf ("Theoretically supports many %s voices\n", typ);
|
||||
break;
|
||||
default:
|
||||
printf ("Theoretically supports upto %d %s voices\n", nb, typ);
|
||||
printf ("Theoretically supports up to %d %s voices\n", nb, typ);
|
||||
break;
|
||||
}
|
||||
|
||||
|
2
block.h
2
block.h
@ -21,7 +21,7 @@ typedef struct QEMUSnapshotInfo {
|
||||
char id_str[128]; /* unique snapshot id */
|
||||
/* the following fields are informative. They are not needed for
|
||||
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 date_sec; /* UTC date of the snapshot */
|
||||
uint32_t date_nsec;
|
||||
|
@ -189,7 +189,7 @@ static int nbd_read(BlockDriverState *bs, int64_t sector_num,
|
||||
|
||||
request.type = NBD_CMD_READ;
|
||||
request.handle = (uint64_t)(intptr_t)bs;
|
||||
request.from = sector_num * 512;;
|
||||
request.from = sector_num * 512;
|
||||
request.len = nb_sectors * 512;
|
||||
|
||||
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.handle = (uint64_t)(intptr_t)bs;
|
||||
request.from = sector_num * 512;;
|
||||
request.from = sector_num * 512;
|
||||
request.len = nb_sectors * 512;
|
||||
|
||||
if (nbd_send_request(s->sock, &request) == -1)
|
||||
|
@ -8,7 +8,7 @@ struct target_pt_regs {
|
||||
abi_ulong r12;
|
||||
abi_ulong rbp;
|
||||
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 r10;
|
||||
abi_ulong r9;
|
||||
|
44
configure
vendored
44
configure
vendored
@ -20,6 +20,11 @@ TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.exe"
|
||||
trap "rm -f $TMPC $TMPO $TMPE" EXIT INT QUIT TERM
|
||||
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() {
|
||||
echo $cc $QEMU_CFLAGS -c -o $TMPO $TMPC >> config.log
|
||||
$cc $QEMU_CFLAGS -c -o $TMPO $TMPC >> config.log 2>&1
|
||||
@ -249,7 +254,7 @@ source_path=`cd "$source_path"; pwd`
|
||||
check_define() {
|
||||
cat > $TMPC <<EOF
|
||||
#if !defined($1)
|
||||
#error Not defined
|
||||
#error $1 not defined
|
||||
#endif
|
||||
int main(void) { return 0; }
|
||||
EOF
|
||||
@ -3279,6 +3284,22 @@ for d in libdis libdis-user; do
|
||||
echo > $d/config.mak
|
||||
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
|
||||
target_dir="$target"
|
||||
config_target_mak=$target_dir/config-target.mak
|
||||
@ -3604,6 +3625,10 @@ else
|
||||
fi
|
||||
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
|
||||
libdis_config_mak=libdis-user/config.mak
|
||||
else
|
||||
@ -3735,23 +3760,6 @@ if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
|
||||
esac
|
||||
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 "QEMU_CFLAGS+=$cflags" >> $config_target_mak
|
||||
echo "QEMU_INCLUDES+=$includes" >> $config_target_mak
|
||||
|
20
console.c
20
console.c
@ -1009,16 +1009,17 @@ static void console_putchar(TextConsole *s, int ch)
|
||||
console_clear_xy(s, x, y);
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'K':
|
||||
switch (s->esc_params[0]) {
|
||||
case 0:
|
||||
/* clear to eol */
|
||||
for(x = s->x; x < s->width; x++) {
|
||||
/* clear to eol */
|
||||
for(x = s->x; x < s->width; x++) {
|
||||
console_clear_xy(s, x, s->y);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
/* clear from beginning of line */
|
||||
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++) {
|
||||
console_clear_xy(s, x, s->y);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'm':
|
||||
console_handle_escape(s);
|
||||
break;
|
||||
console_handle_escape(s);
|
||||
break;
|
||||
case 'n':
|
||||
/* report cursor position */
|
||||
/* TODO: send ESC[row;colR */
|
||||
@ -1687,6 +1688,7 @@ PixelFormat qemu_default_pixelformat(int bpp)
|
||||
pf.rbits = 8;
|
||||
pf.gbits = 8;
|
||||
pf.bbits = 8;
|
||||
break;
|
||||
case 32:
|
||||
pf.rmask = 0x00FF0000;
|
||||
pf.gmask = 0x0000FF00;
|
||||
|
@ -336,7 +336,7 @@ void QEMU_NORETURN cpu_abort(CPUState *env, const char *fmt, ...)
|
||||
GCC_FMT_ATTR(2, 3);
|
||||
extern CPUState *first_cpu;
|
||||
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.
|
||||
|
||||
|
2
cpus.c
2
cpus.c
@ -89,7 +89,7 @@ TimersState timers_state;
|
||||
int64_t cpu_get_icount(void)
|
||||
{
|
||||
int64_t icount;
|
||||
CPUState *env = cpu_single_env;;
|
||||
CPUState *env = cpu_single_env;
|
||||
|
||||
icount = qemu_icount;
|
||||
if (env) {
|
||||
|
@ -7,7 +7,7 @@ machine. It attempts to allow modelling of:
|
||||
- ordinary RAM
|
||||
- memory-mapped I/O (MMIO)
|
||||
- memory controllers that can dynamically reroute physical memory regions
|
||||
to different destinations
|
||||
to different destinations
|
||||
|
||||
The memory model provides support for
|
||||
|
||||
@ -121,7 +121,7 @@ pci (0-2^32-1)
|
||||
|
||||
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
|
||||
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
|
||||
@ -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
|
||||
(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 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
|
||||
accesses; unaligned accesses will be emulated by two aligned accesses.
|
||||
- .old_portio and .old_mmio can be used to ease porting from code using
|
||||
|
@ -2678,7 +2678,7 @@ gdb_handlesig (CPUState *env, int sig)
|
||||
}
|
||||
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. */
|
||||
return sig;
|
||||
}
|
||||
|
@ -915,7 +915,7 @@ ETEXI
|
||||
"<tlb header> = 32bit x 4\n\t\t\t"
|
||||
"<tlb header prefix> = 32bit x 4",
|
||||
.user_print = pcie_aer_inject_error_print,
|
||||
.mhandler.cmd_new = do_pcie_aer_inejct_error,
|
||||
.mhandler.cmd_new = do_pcie_aer_inject_error,
|
||||
},
|
||||
|
||||
STEXI
|
||||
|
@ -90,7 +90,7 @@ int v9fs_co_mkdir(V9fsPDU *pdu, V9fsFidState *fidp, V9fsString *name,
|
||||
V9fsState *s = pdu->s;
|
||||
|
||||
if (v9fs_request_cancelled(pdu)) {
|
||||
return -EINTR;;
|
||||
return -EINTR;
|
||||
}
|
||||
cred_init(&cred);
|
||||
cred.fc_mode = mode;
|
||||
@ -124,7 +124,7 @@ int v9fs_co_opendir(V9fsPDU *pdu, V9fsFidState *fidp)
|
||||
V9fsState *s = pdu->s;
|
||||
|
||||
if (v9fs_request_cancelled(pdu)) {
|
||||
return -EINTR;;
|
||||
return -EINTR;
|
||||
}
|
||||
v9fs_path_read_lock(s);
|
||||
v9fs_co_run_in_worker(
|
||||
@ -152,7 +152,7 @@ int v9fs_co_closedir(V9fsPDU *pdu, V9fsFidOpenState *fs)
|
||||
V9fsState *s = pdu->s;
|
||||
|
||||
if (v9fs_request_cancelled(pdu)) {
|
||||
return -EINTR;;
|
||||
return -EINTR;
|
||||
}
|
||||
v9fs_co_run_in_worker(
|
||||
{
|
||||
|
@ -44,7 +44,7 @@ typedef struct V9fsThPool {
|
||||
qemu_coroutine_self()); \
|
||||
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 \
|
||||
*/ \
|
||||
qemu_coroutine_yield(); \
|
||||
|
@ -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)
|
||||
{
|
||||
int fd, ret;
|
||||
fd = openat(dirfd, name, O_NONBLOCK | O_NOFOLLOW);;
|
||||
fd = openat(dirfd, name, O_NONBLOCK | O_NOFOLLOW);
|
||||
if (fd < 0) {
|
||||
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->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);
|
||||
/* flag = 0 imply don't follow symlink */
|
||||
ret = name_to_handle(dirfd, buffer, fh, &mnt_id, 0);
|
||||
|
@ -1492,7 +1492,7 @@ static void v9fs_walk(void *opaque)
|
||||
int32_t fid, newfid;
|
||||
V9fsString *wnames = NULL;
|
||||
V9fsFidState *fidp;
|
||||
V9fsFidState *newfidp = NULL;;
|
||||
V9fsFidState *newfidp = NULL;
|
||||
V9fsPDU *pdu = opaque;
|
||||
V9fsState *s = pdu->s;
|
||||
|
||||
@ -2398,7 +2398,7 @@ static void v9fs_link(void *opaque)
|
||||
V9fsState *s = pdu->s;
|
||||
int32_t dfid, oldfid;
|
||||
V9fsFidState *dfidp, *oldfidp;
|
||||
V9fsString name;;
|
||||
V9fsString name;
|
||||
size_t offset = 7;
|
||||
int err = 0;
|
||||
|
||||
|
@ -304,7 +304,7 @@ void acpi_pm_tmr_calc_overflow_time(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;
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
* QEMU Alpha DP264/CLIPPER hardware system emulator.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
@ -609,7 +609,7 @@ static uint32_t gic_cpu_read(gic_state *s, int cpu, int offset)
|
||||
return 0;
|
||||
case 0x0c: /* Acknowledge */
|
||||
return gic_acknowledge_irq(s, cpu);
|
||||
case 0x14: /* Runing Priority */
|
||||
case 0x14: /* Running Priority */
|
||||
return s->running_priority[cpu];
|
||||
case 0x18: /* Highest Pending Interrupt */
|
||||
return s->current_pending[cpu];
|
||||
|
@ -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 ++ = 0x20; /* Operational settings negotation Ok */
|
||||
*rpkt ++ = 0x20; /* Operational settings negotiation Ok */
|
||||
memcpy(rpkt, pkt, 7); rpkt += 7;
|
||||
*rpkt ++ = 0xff;
|
||||
*rpkt = 0xff;
|
||||
|
@ -783,7 +783,7 @@ static void cirrus_bitblt_cputovideo_next(CirrusVGAState * s)
|
||||
s->cirrus_srccounter -= s->cirrus_blt_srcpitch;
|
||||
if (s->cirrus_srccounter <= 0)
|
||||
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 */
|
||||
/* XXX: keep alignment to speed up transfer */
|
||||
end_ptr = s->cirrus_bltbuf + s->cirrus_blt_srcpitch;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* 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
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -295,7 +295,7 @@
|
||||
|
||||
#define E1000_KUMCTRLSTA 0x00034 /* MAC-PHY interface - 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_GCR 0x05B00 /* PCI-Ex Control */
|
||||
|
@ -258,7 +258,7 @@ typedef struct {
|
||||
|
||||
/* 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. */
|
||||
uint8_t mem[PCI_MEM_SIZE] __attribute__((aligned(8)));;
|
||||
uint8_t mem[PCI_MEM_SIZE] __attribute__((aligned(8)));
|
||||
|
||||
/* Configuration bytes. */
|
||||
uint8_t configuration[22];
|
||||
|
14
hw/es1370.c
14
hw/es1370.c
@ -788,7 +788,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
|
||||
int cnt = d->frame_cnt >> 16;
|
||||
int size = d->frame_cnt & 0xffff;
|
||||
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 index = d - &s->chan[0];
|
||||
|
||||
@ -807,7 +807,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
|
||||
|
||||
temp -= acquired;
|
||||
addr += acquired;
|
||||
transfered += acquired;
|
||||
transferred += acquired;
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -823,11 +823,11 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
|
||||
break;
|
||||
temp -= copied;
|
||||
addr += copied;
|
||||
transfered += copied;
|
||||
transferred += copied;
|
||||
}
|
||||
}
|
||||
|
||||
if (csc_bytes == transfered) {
|
||||
if (csc_bytes == transferred) {
|
||||
*irq = 1;
|
||||
d->scount = sc | (sc << 16);
|
||||
ldebug ("sc = %d, rate = %f\n",
|
||||
@ -836,10 +836,10 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
|
||||
}
|
||||
else {
|
||||
*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) {
|
||||
/* 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->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)
|
||||
|
@ -180,7 +180,7 @@ struct fs_dma_channel
|
||||
struct dma_descr_context current_c;
|
||||
struct dma_descr_data current_d;
|
||||
|
||||
/* Controll registers. */
|
||||
/* Control registers. */
|
||||
uint32_t regs[DMA_REG_MAX];
|
||||
};
|
||||
|
||||
|
@ -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];
|
||||
|
||||
/* 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
|
||||
multiple interrupts are simultaneously active it chooses vector
|
||||
0x30 and lets the sw choose the priorities. */
|
||||
|
2
hw/fdc.c
2
hw/fdc.c
@ -2,7 +2,7 @@
|
||||
* QEMU Floppy disk emulator (Intel 82078)
|
||||
*
|
||||
* 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
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
40
hw/fmopl.c
40
hw/fmopl.c
@ -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);
|
||||
}
|
||||
|
||||
/* set algorythm connection */
|
||||
static void set_algorythm( OPL_CH *CH)
|
||||
/* set algorithm connection */
|
||||
static void set_algorithm( OPL_CH *CH)
|
||||
{
|
||||
INT32 *carrier = &outd[0];
|
||||
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
|
||||
INLINE void OPL_CALC_RH( OPL_CH *CH )
|
||||
{
|
||||
@ -715,7 +715,7 @@ static void OPLCloseTable( void )
|
||||
free(VIB_TABLE);
|
||||
}
|
||||
|
||||
/* CSM Key Controll */
|
||||
/* CSM Key Control */
|
||||
INLINE void CSMKeyControll(OPL_CH *CH)
|
||||
{
|
||||
OPL_SLOT *slot1 = &CH->SLOT[SLOT1];
|
||||
@ -762,7 +762,7 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v)
|
||||
|
||||
switch(r&0xe0)
|
||||
{
|
||||
case 0x00: /* 00-1f:controll */
|
||||
case 0x00: /* 00-1f:control */
|
||||
switch(r&0x1f)
|
||||
{
|
||||
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"));
|
||||
}
|
||||
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)
|
||||
YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v);
|
||||
return;
|
||||
@ -895,14 +895,14 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v)
|
||||
case 0xbd:
|
||||
/* 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->vib_table = &VIB_TABLE[v&0x40 ? VIB_ENT : 0];
|
||||
OPL->rythm = v&0x3f;
|
||||
if(OPL->rythm&0x20)
|
||||
OPL->rhythm = v&0x3f;
|
||||
if(OPL->rhythm&0x20)
|
||||
{
|
||||
#if 0
|
||||
usrintf_showmessage("OPL Rythm mode select");
|
||||
usrintf_showmessage("OPL Rhythm mode select");
|
||||
#endif
|
||||
/* BD key on/off */
|
||||
if(rkey&0x10)
|
||||
@ -995,7 +995,7 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v)
|
||||
int feedback = (v>>1)&7;
|
||||
CH->FB = feedback ? (8+1) - feedback : 0;
|
||||
CH->CON = v&1;
|
||||
set_algorythm(CH);
|
||||
set_algorithm(CH);
|
||||
}
|
||||
return;
|
||||
case 0xe0: /* wave type */
|
||||
@ -1049,7 +1049,7 @@ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
|
||||
OPLSAMPLE *buf = buffer;
|
||||
UINT32 amsCnt = OPL->amsCnt;
|
||||
UINT32 vibCnt = OPL->vibCnt;
|
||||
UINT8 rythm = OPL->rythm&0x20;
|
||||
UINT8 rhythm = OPL->rhythm&0x20;
|
||||
OPL_CH *CH,*R_CH;
|
||||
|
||||
if( (void *)OPL != cur_chip ){
|
||||
@ -1057,7 +1057,7 @@ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
|
||||
/* channel pointers */
|
||||
S_CH = OPL->P_CH;
|
||||
E_CH = &S_CH[9];
|
||||
/* rythm slot */
|
||||
/* rhythm slot */
|
||||
SLOT7_1 = &S_CH[7].SLOT[SLOT1];
|
||||
SLOT7_2 = &S_CH[7].SLOT[SLOT2];
|
||||
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;
|
||||
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++ )
|
||||
{
|
||||
/* 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++)
|
||||
OPL_CALC_CH(CH);
|
||||
/* Rythn part */
|
||||
if(rythm)
|
||||
if(rhythm)
|
||||
OPL_CALC_RH(S_CH);
|
||||
/* limit check */
|
||||
data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT );
|
||||
@ -1110,7 +1110,7 @@ void Y8950UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
|
||||
OPLSAMPLE *buf = buffer;
|
||||
UINT32 amsCnt = OPL->amsCnt;
|
||||
UINT32 vibCnt = OPL->vibCnt;
|
||||
UINT8 rythm = OPL->rythm&0x20;
|
||||
UINT8 rhythm = OPL->rhythm&0x20;
|
||||
OPL_CH *CH,*R_CH;
|
||||
YM_DELTAT *DELTAT = OPL->deltat;
|
||||
|
||||
@ -1122,7 +1122,7 @@ void Y8950UpdateOne(FM_OPL *OPL, INT16 *buffer, int length)
|
||||
/* channel pointers */
|
||||
S_CH = OPL->P_CH;
|
||||
E_CH = &S_CH[9];
|
||||
/* rythm slot */
|
||||
/* rhythm slot */
|
||||
SLOT7_1 = &S_CH[7].SLOT[SLOT1];
|
||||
SLOT7_2 = &S_CH[7].SLOT[SLOT2];
|
||||
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;
|
||||
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++ )
|
||||
{
|
||||
/* 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++)
|
||||
OPL_CALC_CH(CH);
|
||||
/* Rythn part */
|
||||
if(rythm)
|
||||
if(rhythm)
|
||||
OPL_CALC_RH(S_CH);
|
||||
/* limit check */
|
||||
data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT );
|
||||
@ -1380,7 +1380,7 @@ int OPLTimerOver(FM_OPL *OPL,int c)
|
||||
else
|
||||
{ /* Timer A */
|
||||
OPL_STATUS_SET(OPL,0x40);
|
||||
/* CSM mode key,TL controll */
|
||||
/* CSM mode key,TL control */
|
||||
if( OPL->mode & 0x80 )
|
||||
{ /* CSM mode total level latch and auto key on */
|
||||
int ch;
|
||||
|
@ -110,8 +110,8 @@ typedef struct fm_opl_f {
|
||||
/* FM channel slots */
|
||||
OPL_CH *P_CH; /* pointer of CH */
|
||||
int max_ch; /* maximum channel */
|
||||
/* Rythm sention */
|
||||
UINT8 rythm; /* Rythm mode , key flag */
|
||||
/* Rhythm sention */
|
||||
UINT8 rhythm; /* Rhythm mode , key flag */
|
||||
#if BUILD_Y8950
|
||||
/* Delta-T ADPCM unit (Y8950) */
|
||||
YM_DELTAT *deltat; /* DELTA-T ADPCM */
|
||||
|
@ -27,7 +27,7 @@
|
||||
|
||||
/* 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 short GUSword;
|
||||
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: */
|
||||
/* -dma_count is actually count-1 */
|
||||
/* -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 */
|
||||
|
||||
/* ** GF1 mixer emulation functions: */
|
||||
|
@ -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
|
||||
* dma_addr is a translated address within accessible memory, not the physical one,
|
||||
* 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:
|
||||
* 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);
|
||||
if (state->gusdma >= 4)
|
||||
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? */
|
||||
|
@ -1000,7 +1000,7 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
|
||||
printf("ide: CMD=%02x\n", val);
|
||||
#endif
|
||||
s = idebus_active_if(bus);
|
||||
/* ignore commands to non existant slave */
|
||||
/* ignore commands to non existent slave */
|
||||
if (s != bus->ifs && !s->bs)
|
||||
return;
|
||||
|
||||
|
@ -172,7 +172,7 @@ static void vt82c686b_init_ports(PCIIDEState *d) {
|
||||
/* via ide func */
|
||||
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;
|
||||
|
||||
pci_config_set_prog_interface(pci_conf, 0x8a); /* legacy ATA mode */
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* 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
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -697,7 +697,7 @@ static uint32_t do_phy_read(lan9118_state *s, int reg)
|
||||
return 0x0007;
|
||||
case 3: /* ID2 */
|
||||
return 0xc0d1;
|
||||
case 4: /* Auto-neg advertisment */
|
||||
case 4: /* Auto-neg advertisement */
|
||||
return s->phy_advertise;
|
||||
case 5: /* Auto-neg Link Partner Ability */
|
||||
return 0x0f71;
|
||||
@ -731,7 +731,7 @@ static void do_phy_write(lan9118_state *s, int reg, uint32_t val)
|
||||
s->phy_status |= 0x0020;
|
||||
}
|
||||
break;
|
||||
case 4: /* Auto-neg advertisment */
|
||||
case 4: /* Auto-neg advertisement */
|
||||
s->phy_advertise = (val & 0x2d7f) | 0x80;
|
||||
break;
|
||||
/* TODO 17, 18, 27, 31 */
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Copyright (c) 2011
|
||||
* Written by Mathieu Sonet - www.elasticsheep.com
|
||||
*
|
||||
* This code is licenced under the GPL.
|
||||
* This code is licensed under the GPL.
|
||||
*
|
||||
* *****************************************************************
|
||||
*
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Copyright (c) 2011
|
||||
* Written by Mathieu Sonet - www.elasticsheep.com
|
||||
*
|
||||
* This code is licenced under the GPL.
|
||||
* This code is licensed under the GPL.
|
||||
*
|
||||
* *****************************************************************
|
||||
*/
|
||||
|
@ -911,6 +911,7 @@ void mips_malta_init (ram_addr_t ram_size,
|
||||
uint32_t *end = addr + bios_size;
|
||||
while (addr < end) {
|
||||
bswap32s(addr);
|
||||
addr++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -1616,7 +1616,7 @@ static void omap_prcm_write(void *opaque, target_phys_addr_t addr,
|
||||
case 0x500: /* CM_CLKEN_PLL */
|
||||
if (value & 0xffffff30)
|
||||
fprintf(stderr, "%s: write 0s in CM_CLKEN_PLL for "
|
||||
"future compatiblity\n", __FUNCTION__);
|
||||
"future compatibility\n", __FUNCTION__);
|
||||
if ((s->clken[9] ^ value) & 0xcc) {
|
||||
s->clken[9] &= ~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 */
|
||||
if (value & 0xfc4000d7)
|
||||
fprintf(stderr, "%s: write 0s in CM_CLKSEL1_PLL for "
|
||||
"future compatiblity\n", __FUNCTION__);
|
||||
"future compatibility\n", __FUNCTION__);
|
||||
if ((s->clksel[5] ^ value) & 0x003fff00) {
|
||||
s->clksel[5] = value & 0x03bfff28;
|
||||
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 */
|
||||
if (value & ~3)
|
||||
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)) {
|
||||
s->clksel[6] = value & 3;
|
||||
omap_prcm_dpll_update(s);
|
||||
|
2
hw/pc.c
2
hw/pc.c
@ -983,7 +983,7 @@ void pc_memory_init(MemoryRegion *system_memory,
|
||||
linux_boot = (kernel_filename != NULL);
|
||||
|
||||
/* 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().
|
||||
*/
|
||||
ram = g_malloc(sizeof(*ram));
|
||||
|
@ -34,7 +34,7 @@ static void pci_error_message(Monitor *mon)
|
||||
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)
|
||||
{
|
||||
pci_error_message(mon);
|
||||
|
@ -826,7 +826,7 @@ typedef struct PCIEAERErrorName {
|
||||
} PCIEAERErrorName;
|
||||
|
||||
/*
|
||||
* AER error name -> value convertion table
|
||||
* AER error name -> value conversion table
|
||||
* This naming scheme is same to linux aer-injection tool.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
int do_pcie_aer_inejct_error(Monitor *mon,
|
||||
int do_pcie_aer_inject_error(Monitor *mon,
|
||||
const QDict *qdict, QObject **ret_data)
|
||||
{
|
||||
const char *id = qdict_get_str(qdict, "id");
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Copyright (c) 2011
|
||||
* Written by Mathieu Sonet - www.elasticsheep.com
|
||||
*
|
||||
* This code is licenced under the GPL.
|
||||
* This code is licensed under the GPL.
|
||||
*
|
||||
* *****************************************************************
|
||||
*
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Copyright (c) 2011
|
||||
* Written by Mathieu Sonet - www.elasticsheep.com
|
||||
*
|
||||
* This code is licenced under the GPL.
|
||||
* This code is licensed under the GPL.
|
||||
*
|
||||
* *****************************************************************
|
||||
*/
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Copyright (c) 2011
|
||||
* Written by Mathieu Sonet - www.elasticsheep.com
|
||||
*
|
||||
* This code is licenced under the GPL.
|
||||
* This code is licensed under the GPL.
|
||||
*
|
||||
* *****************************************************************
|
||||
*/
|
||||
|
@ -358,7 +358,7 @@ static void pl110_write(void *opaque, target_phys_addr_t offset,
|
||||
int n;
|
||||
|
||||
/* For simplicity invalidate the display whenever a control register
|
||||
is writen to. */
|
||||
is written to. */
|
||||
s->invalidate = 1;
|
||||
if (offset >= 0x200 && offset < 0x400) {
|
||||
/* Pallette. */
|
||||
|
@ -311,9 +311,9 @@ static uint64_t pl181_read(void *opaque, target_phys_addr_t offset,
|
||||
case 0x48: /* FifoCnt */
|
||||
/* The documentation is somewhat vague about exactly what FifoCnt
|
||||
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
|
||||
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. */
|
||||
tmp = (s->datacnt + 3) >> 2;
|
||||
if (s->linux_hack) {
|
||||
|
2
hw/ppc.c
2
hw/ppc.c
@ -1153,7 +1153,7 @@ void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val)
|
||||
/* NVRAM helpers */
|
||||
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)
|
||||
|
@ -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
|
||||
* considered that we should have had already an interrupt
|
||||
* 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_update_irq(s);
|
||||
|
@ -157,7 +157,7 @@
|
||||
* Exeption-related registers
|
||||
*/
|
||||
|
||||
/* Immediate data for TRAPA instuction - TRA */
|
||||
/* Immediate data for TRAPA instruction - TRA */
|
||||
#define SH7750_TRA_REGOFS 0x000020 /* offset */
|
||||
#define SH7750_TRA SH7750_P4_REG32(SH7750_TRA_REGOFS)
|
||||
#define SH7750_TRA_A7 SH7750_A7_REG32(SH7750_TRA_REGOFS)
|
||||
|
@ -429,7 +429,7 @@ static void smc91c111_writeb(void *opaque, target_phys_addr_t offset,
|
||||
smc91c111_update(s);
|
||||
return;
|
||||
}
|
||||
break;;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
switch (offset) {
|
||||
|
@ -141,7 +141,7 @@ typedef struct sPAPREnvironment {
|
||||
#define H_DABRX_KERNEL (1ULL<<(63-62))
|
||||
#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
|
||||
|
||||
/* pSeries hypervisor opcodes */
|
||||
|
@ -123,7 +123,7 @@ static int ssd0303_send(i2c_slave *i2c, uint8_t data)
|
||||
case 0xa7: /* Inverse on. */
|
||||
s->inverse = 1;
|
||||
break;
|
||||
case 0xa8: /* Set multipled ratio (Ignored). */
|
||||
case 0xa8: /* Set multiplied ratio (Ignored). */
|
||||
s->cmd_state = SSD0303_CMD_SKIP1;
|
||||
break;
|
||||
case 0xad: /* DC-DC power control. */
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* 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
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
|
@ -627,9 +627,10 @@ void virtio_init_pci(VirtIOPCIProxy *proxy, VirtIODevice *vdev)
|
||||
if (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 + 0x2e, vdev->device_id);
|
||||
config[0x3d] = 1;
|
||||
pci_set_word(config + PCI_SUBSYSTEM_VENDOR_ID,
|
||||
pci_get_word(config + PCI_VENDOR_ID));
|
||||
pci_set_word(config + PCI_SUBSYSTEM_ID, vdev->device_id);
|
||||
config[PCI_INTERRUPT_PIN] = 1;
|
||||
|
||||
memory_region_init(&proxy->msix_bar, "virtio-msix", 4096);
|
||||
if (vdev->nvectors && !msix_init(&proxy->pci_dev, vdev->nvectors,
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* 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
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -42,7 +42,7 @@ typedef struct IB700state {
|
||||
|
||||
/* 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,
|
||||
* 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. */
|
||||
|
@ -75,11 +75,11 @@ TABLE 1
|
||||
+-------------------------+---+---+---------+---------+
|
||||
| Precision | u | v | FPSR.EP | length |
|
||||
+-------------------------+---+---+---------+---------+
|
||||
| Single | 0 ü 0 | x | 1 words |
|
||||
| Double | 1 ü 1 | x | 2 words |
|
||||
| Extended | 1 ü 1 | x | 3 words |
|
||||
| Packed decimal | 1 ü 1 | 0 | 3 words |
|
||||
| Expanded packed decimal | 1 ü 1 | 1 | 4 words |
|
||||
| Single | 0 | 0 | x | 1 words |
|
||||
| Double | 1 | 1 | x | 2 words |
|
||||
| Extended | 1 | 1 | x | 3 words |
|
||||
| Packed decimal | 1 | 1 | 0 | 3 words |
|
||||
| Expanded packed decimal | 1 | 1 | 1 | 4 words |
|
||||
+-------------------------+---+---+---------+---------+
|
||||
Note: x = don't care
|
||||
*/
|
||||
@ -89,10 +89,10 @@ TABLE 2
|
||||
+---+---+---------------------------------+
|
||||
| w | x | Number of registers to transfer |
|
||||
+---+---+---------------------------------+
|
||||
| 0 ü 1 | 1 |
|
||||
| 1 ü 0 | 2 |
|
||||
| 1 ü 1 | 3 |
|
||||
| 0 ü 0 | 4 |
|
||||
| 0 | 1 | 1 |
|
||||
| 1 | 0 | 2 |
|
||||
| 1 | 1 | 3 |
|
||||
| 0 | 0 | 4 |
|
||||
+---+---+---------------------------------+
|
||||
*/
|
||||
|
||||
@ -153,10 +153,10 @@ TABLE 5
|
||||
+-------------------------+---+---+
|
||||
| Rounding Precision | e | f |
|
||||
+-------------------------+---+---+
|
||||
| IEEE Single precision | 0 ü 0 |
|
||||
| IEEE Double precision | 0 ü 1 |
|
||||
| IEEE Extended precision | 1 ü 0 |
|
||||
| undefined (trap) | 1 ü 1 |
|
||||
| IEEE Single precision | 0 | 0 |
|
||||
| IEEE Double precision | 0 | 1 |
|
||||
| IEEE Extended precision | 1 | 0 |
|
||||
| undefined (trap) | 1 | 1 |
|
||||
+-------------------------+---+---+
|
||||
*/
|
||||
|
||||
@ -165,10 +165,10 @@ TABLE 5
|
||||
+---------------------------------+---+---+
|
||||
| Rounding Mode | g | h |
|
||||
+---------------------------------+---+---+
|
||||
| Round to nearest (default) | 0 ü 0 |
|
||||
| Round toward plus infinity | 0 ü 1 |
|
||||
| Round toward negative infinity | 1 ü 0 |
|
||||
| Round toward zero | 1 ü 1 |
|
||||
| Round to nearest (default) | 0 | 0 |
|
||||
| Round toward plus infinity | 0 | 1 |
|
||||
| Round toward negative infinity | 1 | 0 |
|
||||
| Round toward zero | 1 | 1 |
|
||||
+---------------------------------+---+---+
|
||||
*/
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* 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
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -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))
|
||||
return -TARGET_EFAULT;
|
||||
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_otime = tswapal(host_sd->sem_otime);
|
||||
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
|
||||
|
||||
cmd = target_to_host_fcntl_cmd(arg2);
|
||||
if (cmd == -TARGET_EINVAL)
|
||||
return cmd;
|
||||
if (cmd == -TARGET_EINVAL) {
|
||||
ret = cmd;
|
||||
break;
|
||||
}
|
||||
|
||||
switch(arg2) {
|
||||
case TARGET_F_GETLK64:
|
||||
|
@ -8,7 +8,7 @@ struct target_pt_regs {
|
||||
abi_ulong r12;
|
||||
abi_ulong rbp;
|
||||
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 r10;
|
||||
abi_ulong r9;
|
||||
|
38
memory.h
38
memory.h
@ -149,7 +149,7 @@ struct MemoryRegionPortio {
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* @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
|
||||
* region will be modify memory directly.
|
||||
* region will modify memory directly.
|
||||
*
|
||||
* @mr: the #MemoryRegion to be initialized.
|
||||
* @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.
|
||||
* pointer. Accesses into the region will be modify
|
||||
* pointer. Accesses into the region will modify
|
||||
* memory directly.
|
||||
*
|
||||
* @mr: the #MemoryRegion to be initialized.
|
||||
@ -250,7 +250,7 @@ void memory_region_init_rom_device(MemoryRegion *mr,
|
||||
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
|
||||
* (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())
|
||||
* 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).
|
||||
*
|
||||
* @mr: the memory region being updated.
|
||||
@ -435,10 +435,10 @@ void memory_region_add_eventfd(MemoryRegion *mr,
|
||||
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()
|
||||
* call.
|
||||
* Cancels an eventfd trigger requested by a previous
|
||||
* memory_region_add_eventfd() call.
|
||||
*
|
||||
* @mr: the memory region being updated.
|
||||
* @addr: the address within @mr that is to be monitored
|
||||
@ -454,9 +454,9 @@ void memory_region_del_eventfd(MemoryRegion *mr,
|
||||
uint64_t data,
|
||||
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
|
||||
* may only be added once as a subregion (unless removed with
|
||||
* 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,
|
||||
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
|
||||
* lower @priority. Subregions without priority are taken as @priority 0.
|
||||
* 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,
|
||||
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);
|
||||
/* 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);
|
||||
|
||||
|
@ -81,8 +81,6 @@ uint64_t ram_bytes_total(void);
|
||||
int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque);
|
||||
int ram_load(QEMUFile *f, void *opaque, int version_id);
|
||||
|
||||
extern int incoming_expected;
|
||||
|
||||
/**
|
||||
* @migrate_add_blocker - prevent migration from proceeding
|
||||
*
|
||||
|
@ -414,6 +414,7 @@ static int net_socket_listen_init(VLANState *vlan,
|
||||
fd = qemu_socket(PF_INET, SOCK_STREAM, 0);
|
||||
if (fd < 0) {
|
||||
perror("socket");
|
||||
g_free(s);
|
||||
return -1;
|
||||
}
|
||||
socket_set_nonblock(fd);
|
||||
@ -425,11 +426,13 @@ static int net_socket_listen_init(VLANState *vlan,
|
||||
ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
|
||||
if (ret < 0) {
|
||||
perror("bind");
|
||||
g_free(s);
|
||||
return -1;
|
||||
}
|
||||
ret = listen(fd, 0);
|
||||
if (ret < 0) {
|
||||
perror("listen");
|
||||
g_free(s);
|
||||
return -1;
|
||||
}
|
||||
s->vlan = vlan;
|
||||
|
@ -65,7 +65,7 @@ static int tap_alloc(char *dev, size_t dev_size)
|
||||
static int arp_fd = 0;
|
||||
int ip_muxid, arp_muxid;
|
||||
struct strioctl strioc_if, strioc_ppa;
|
||||
int link_type = I_PLINK;;
|
||||
int link_type = I_PLINK;
|
||||
struct lifreq ifr;
|
||||
char actual_name[32] = "";
|
||||
|
||||
|
@ -44,6 +44,13 @@ int setenv(const char *name, const char *value, int overwrite)
|
||||
char *string = g_malloc(length);
|
||||
snprintf(string, length, "%s=%s", name, value);
|
||||
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;
|
||||
}
|
||||
|
@ -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
|
||||
# to be used in rdesktop 1.3.x ( See rdesktop.org)
|
||||
# generated from XKB map de, and changed manually
|
||||
|
@ -1065,7 +1065,7 @@ diff -wruN --exclude '*~' --exclude '*.o' --exclude '*.bin' --exclude '*.out' --
|
||||
+ tab, 4 * sizeof(uint32_t));
|
||||
+ }
|
||||
+#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];
|
||||
@@ -2645,85 +2843,12 @@
|
||||
|
@ -50,7 +50,7 @@ run_multiboot:
|
||||
shr $0x4, %ecx
|
||||
mov %cx, %gs
|
||||
|
||||
/* now push the indirect jump decriptor there */
|
||||
/* now push the indirect jump descriptor there */
|
||||
mov (prot_jump), %ebx
|
||||
add %eax, %ebx
|
||||
movl %ebx, %gs:GS_PROT_JUMP
|
||||
|
@ -128,8 +128,8 @@ static ssize_t handle_aiocb_ioctl(struct qemu_paiocb *aiocb)
|
||||
return -errno;
|
||||
|
||||
/*
|
||||
* This looks weird, but the aio code only consideres a request
|
||||
* successful if it has written the number full number of bytes.
|
||||
* This looks weird, but the aio code only considers a request
|
||||
* successful if it has written the full number of bytes.
|
||||
*
|
||||
* 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()
|
||||
|
@ -13,7 +13,7 @@
|
||||
# partially-delivered JSON text in such a way that this response
|
||||
# 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
|
||||
# partially read JSON data from a previous session.
|
||||
#
|
||||
|
@ -107,7 +107,6 @@ For system emulation, the following hardware targets are supported:
|
||||
@item MusicPal (MV88W8618 ARM processor)
|
||||
@item Gumstix "Connex" and "Verdex" motherboards (PXA255/270).
|
||||
@item Siemens SX1 smartphone (OMAP310 processor)
|
||||
@item Syborg SVP base model (ARM Cortex-A8).
|
||||
@item AXIS-Devboard88 (CRISv32 ETRAX-FS).
|
||||
@item Petalogix Spartan 3aDSP1800 MMU ref design (MicroBlaze).
|
||||
@item Avnet LX60/LX110/LX200 boards (Xtensa)
|
||||
@ -2079,28 +2078,6 @@ Secure Digital card connected to OMAP MMC/SD host
|
||||
Three on-chip UARTs
|
||||
@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
|
||||
information is available in the QEMU mailing-list archive.
|
||||
|
||||
|
@ -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
|
||||
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,
|
||||
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
|
||||
the @option{-snapshot} option, unsafe caching is always used.
|
||||
|
||||
|
@ -96,10 +96,6 @@ Alpha and S390 hosts, but TCG (see below) doesn't support those yet.
|
||||
|
||||
@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
|
||||
Floating point library supporting both full software emulation and
|
||||
native host FPU instructions.
|
||||
@ -685,7 +681,6 @@ are available. They are used for regression testing.
|
||||
@menu
|
||||
* test-i386::
|
||||
* linux-test::
|
||||
* qruncom.c::
|
||||
@end menu
|
||||
|
||||
@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
|
||||
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
|
||||
@chapter Index
|
||||
@printindex cp
|
||||
|
@ -41,12 +41,12 @@
|
||||
#ifdef __linux__
|
||||
#define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x)
|
||||
#define DEFINE_TLS(type, x) __thread __typeof__(type) tls__##x
|
||||
#define get_tls(x) tls__##x
|
||||
#define tls_var(x) tls__##x
|
||||
#else
|
||||
/* Dummy implementations which define plain global variables */
|
||||
#define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x)
|
||||
#define DEFINE_TLS(type, x) __typeof__(type) tls__##x
|
||||
#define get_tls(x) tls__##x
|
||||
#define tls_var(x) tls__##x
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
2
qerror.c
2
qerror.c
@ -261,7 +261,7 @@ static const QErrorStringTable qerror_table[] = {
|
||||
},
|
||||
{
|
||||
.error_fmt = QERR_INVALID_PARAMETER_COMBINATION,
|
||||
.desc = "Invalid paramter combination",
|
||||
.desc = "Invalid parameter combination",
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
@ -1907,7 +1907,7 @@ sub process {
|
||||
my $ok = 0;
|
||||
for (my $ln = $linenr - 1; $ln >= $first_line; $ln--) {
|
||||
#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
|
||||
if ($lines[$ln - 1] =~ m{\bprintk\(}) {
|
||||
if ($rawlines[$ln - 1] !~ m{\\n"}) {
|
||||
@ -1999,7 +1999,7 @@ sub process {
|
||||
for (my $n = 0; $n < $#elements; $n += 2) {
|
||||
$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 $cc = '';
|
||||
if (length($opline) >= ($off + length($elements[$n + 1]))) {
|
||||
|
2
sysemu.h
2
sysemu.h
@ -148,7 +148,7 @@ void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict);
|
||||
|
||||
/* pcie aer error injection */
|
||||
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);
|
||||
|
||||
/* serial ports */
|
||||
|
@ -497,7 +497,7 @@ void do_interrupt (CPUState *env)
|
||||
}
|
||||
} else {
|
||||
/* For VEIC mode, the external interrupt controller feeds the
|
||||
vector throught the CP0Cause IP lines. */
|
||||
vector through the CP0Cause IP lines. */
|
||||
vector = pending;
|
||||
}
|
||||
offset = 0x200 + vector * spacing;
|
||||
|
@ -513,15 +513,15 @@ enum cc_op {
|
||||
|
||||
CC_OP_ADD_64, /* overflow on add (64bit) */
|
||||
CC_OP_ADDU_64, /* overflow on unsigned add (64bit) */
|
||||
CC_OP_SUB_64, /* overflow on substraction (64bit) */
|
||||
CC_OP_SUBU_64, /* overflow on unsigned substraction (64bit) */
|
||||
CC_OP_SUB_64, /* overflow on subtraction (64bit) */
|
||||
CC_OP_SUBU_64, /* overflow on unsigned subtraction (64bit) */
|
||||
CC_OP_ABS_64, /* sign eval on abs (64bit) */
|
||||
CC_OP_NABS_64, /* sign eval on nabs (64bit) */
|
||||
|
||||
CC_OP_ADD_32, /* overflow on add (32bit) */
|
||||
CC_OP_ADDU_32, /* overflow on unsigned add (32bit) */
|
||||
CC_OP_SUB_32, /* overflow on substraction (32bit) */
|
||||
CC_OP_SUBU_32, /* overflow on unsigned substraction (32bit) */
|
||||
CC_OP_SUB_32, /* overflow on subtraction (32bit) */
|
||||
CC_OP_SUBU_32, /* overflow on unsigned subtraction (32bit) */
|
||||
CC_OP_ABS_32, /* sign eval on abs (64bit) */
|
||||
CC_OP_NABS_32, /* sign eval on nabs (64bit) */
|
||||
|
||||
|
@ -1336,7 +1336,7 @@ void HELPER(meeb)(uint32_t f1, uint32_t val)
|
||||
uint32_t HELPER(cebr)(uint32_t f1, uint32_t f2)
|
||||
{
|
||||
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__,
|
||||
v1, f1, 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)
|
||||
{
|
||||
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__,
|
||||
v1, f1, v2);
|
||||
return set_cc_f64(v1, v2);
|
||||
|
@ -23,11 +23,6 @@
|
||||
*/
|
||||
#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
|
||||
|
||||
#if TCG_TARGET_REG_BITS == 64
|
||||
|
@ -389,7 +389,7 @@ static inline void tcg_gen_helperN(void *func, int flags, int sizemask,
|
||||
TCGArg ret, int nargs, TCGArg *args)
|
||||
{
|
||||
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,
|
||||
nargs, args);
|
||||
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;
|
||||
TCGArg args[2];
|
||||
fn = tcg_const_ptr((tcg_target_long)func);
|
||||
fn = tcg_const_ptr(func);
|
||||
args[0] = GET_TCGV_I32(a);
|
||||
args[1] = GET_TCGV_I32(b);
|
||||
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;
|
||||
TCGArg args[2];
|
||||
fn = tcg_const_ptr((tcg_target_long)func);
|
||||
fn = tcg_const_ptr(func);
|
||||
args[0] = GET_TCGV_I64(a);
|
||||
args[1] = GET_TCGV_I64(b);
|
||||
tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask,
|
||||
|
@ -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_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) \
|
||||
TCGV_NAT_TO_PTR(tcg_global_reg_new_i32((R), (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_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) \
|
||||
TCGV_NAT_TO_PTR(tcg_global_reg_new_i64((R), (N)))
|
||||
#define tcg_global_mem_new_ptr(R, O, N) \
|
||||
|
@ -115,12 +115,6 @@ speed: sha1 sha1-i386
|
||||
time ./sha1
|
||||
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
|
||||
hello-arm: hello-arm.o
|
||||
arm-linux-ld -o $@ $<
|
||||
|
284
tests/qruncom.c
284
tests/qruncom.c
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@
|
||||
* *
|
||||
* THE 'ZYWRLE' VNC CODEC SOURCE CODE IS (C) COPYRIGHT 2006 *
|
||||
* BY Hitachi Systems & Services, Ltd. *
|
||||
* (Noriaki Yamazaki, Research & Developement Center) *
|
||||
* (Noriaki Yamazaki, Research & Development Center) *
|
||||
* *
|
||||
* *
|
||||
********************************************************************
|
||||
|
@ -8,7 +8,7 @@
|
||||
* *
|
||||
* THE 'ZYWRLE' VNC CODEC SOURCE CODE IS (C) COPYRIGHT 2006 *
|
||||
* BY Hitachi Systems & Services, Ltd. *
|
||||
* (Noriaki Yamazaki, Research & Developement Center) *
|
||||
* (Noriaki Yamazaki, Research & Development Center) *
|
||||
* *
|
||||
* *
|
||||
********************************************************************
|
||||
|
2
ui/vnc.c
2
ui/vnc.c
@ -2183,7 +2183,7 @@ static int protocol_client_auth(VncState *vs, uint8_t *data, size_t len)
|
||||
|
||||
#ifdef CONFIG_VNC_TLS
|
||||
case VNC_AUTH_VENCRYPT:
|
||||
VNC_DEBUG("Accept VeNCrypt auth\n");;
|
||||
VNC_DEBUG("Accept VeNCrypt auth\n");
|
||||
start_auth_vencrypt(vs);
|
||||
break;
|
||||
#endif /* CONFIG_VNC_TLS */
|
||||
|
@ -542,9 +542,9 @@ static int usbredir_handle_data(USBDevice *udev, USBPacket *p)
|
||||
case USB_ENDPOINT_XFER_ISOC:
|
||||
return usbredir_handle_iso_data(dev, p, ep);
|
||||
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:
|
||||
return usbredir_handle_interrupt_data(dev, p, ep);;
|
||||
return usbredir_handle_interrupt_data(dev, p, ep);
|
||||
default:
|
||||
ERROR("handle_data ep %02X has unknown type %d\n", ep,
|
||||
dev->endpoint[EP2I(ep)].type);
|
||||
|
Loading…
Reference in New Issue
Block a user