1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-26 05:02:18 +00:00

Update to 2006-04-08 snapshot.

Submitted by:	Juergen Lock <nox@jelal.kn-bremen.de> (maintainer)
This commit is contained in:
Norikatsu Shigemura 2006-04-09 17:09:42 +00:00
parent abf29a1822
commit 8c52a70b64
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=159220
26 changed files with 514 additions and 952 deletions

View File

@ -6,8 +6,8 @@
#
PORTNAME= qemu
PORTVERSION= 0.8.0
PORTREVISION= 5
PORTVERSION= 0.8.0s.20060408
PORTREVISION= 0
CATEGORIES= emulators
MASTER_SITES= http://www.qemu.org/:release \
http://people.fruitsalad.org/nox/qemu/:snapshot \
@ -15,10 +15,8 @@ MASTER_SITES= http://www.qemu.org/:release \
http://qemu.dad-answers.com/download/qemu/:snapshot \
http://people.brandeis.edu/~jcoiner/qemu_idedma/:idedma \
http://people.freebsd.org/~maho/qemu/:misc
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:release
.if defined (WITH_HACKS_IDEDMA) || defined (WITH_HACKS)
DISTFILES+= qemu_dma_patch.tar.gz:idedma
.endif
DISTNAME= ${PORTNAME}-snapshot-2006-04-08_23
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:snapshot
.if defined (WITH_HACKS_CIRRUS) || defined (WITH_HACKS)
DISTFILES+= patch3_cirrus:misc
.endif
@ -33,10 +31,11 @@ BUILD_DEPENDS+= texi2html:${PORTSDIR}/textproc/texi2html
RUN_DEPENDS+= ${LOCALBASE}/sbin/smbd:${PORTSDIR}/net/samba
.endif
.if defined(WITH_KQEMU)
BUILD_DEPENDS+= ${LOCALBASE}/include/kqemu/kqemu.h:${PORTSDIR}/emulators/kqemu-kmod
BUILD_DEPENDS+= kqemu-kmod>=1.3.0pre5:${PORTSDIR}/emulators/kqemu-kmod
.endif
HAS_CONFIGURE= yes
USE_BZIP2= yes
USE_GMAKE= yes
USE_GETOPT_LONG= yes
USE_SDL= sdl
@ -64,11 +63,9 @@ pre-everything::
@${ECHO_MSG} "Notice: you can build qemu with the (alpha!) kqemu accelerator kernel module"
@${ECHO_MSG} "by defining WITH_KQEMU."
.endif
.if !defined(WITH_HACKS_IDEDMA) && !defined(WITH_HACKS_CIRRUS) && !defined(WITH_HACKS)
.if !defined(WITH_HACKS_CIRRUS) && !defined(WITH_HACKS)
@${ECHO_MSG} "You can build qemu with some hacks (esp. for speedup)"
@${ECHO_MSG} "by defining WITH_HACKS, or specifically:"
@${ECHO_MSG} "1. WITH_HACKS_IDEDMA: IDE Bus-master DMA Support by John Coiner"
@${ECHO_MSG} "http://people.brandeis.edu/~jcoiner/qemu_idedma/qemu_dma_patch.html"
@${ECHO_MSG} "2. WITH_HACKS_CIRRUS: higher speed on large display (cirrus_vga)"
@${ECHO_MSG} "by Juergen Pfennig"
@${ECHO_MSG} "http://lists.gnu.org/archive/html/qemu-devel/2006-01/msg00208.html"
@ -92,9 +89,6 @@ pre-patch:
done
post-patch:
.if defined(WITH_HACKS_IDEDMA) || defined (WITH_HACKS)
@cd ${WRKDIR} ; ${TAR} xfz ${DISTDIR}/${DIST_SUBDIR}/qemu_dma_patch.tar.gz ; ${CP} new_qemu_dma_patch/bios.bin ${WRKSRC}/pc-bios; cd ${WRKSRC}; ${PATCH} --quiet -p1 < ../new_qemu_dma_patch/qemu-piix4-udma.patch
.endif
.if defined(WITH_HACKS_CIRRUS) || defined (WITH_HACKS)
@cd ${WRKSRC} ; ${PATCH} --quiet < ${DISTDIR}/${DIST_SUBDIR}/patch3_cirrus
.endif

View File

@ -1,9 +1,6 @@
MD5 (qemu/qemu-0.8.0.tar.gz) = eb175b26583280706fe7e4d8910d320d
SHA256 (qemu/qemu-0.8.0.tar.gz) = de388539ce86971a2cbe8474fca8b6160898c95772e3e6e08a7794d48db32a61
SIZE (qemu/qemu-0.8.0.tar.gz) = 1497965
MD5 (qemu/qemu_dma_patch.tar.gz) = 5e339dc201d411af56bad684d3f89338
SHA256 (qemu/qemu_dma_patch.tar.gz) = cdf74bf5e079d835e100f116d940686b13ec2b7ed6aee5a6a97a4441ea5f2b8f
SIZE (qemu/qemu_dma_patch.tar.gz) = 25837
MD5 (qemu/qemu-snapshot-2006-04-08_23.tar.bz2) = 74fd8046d94d5d800f1df35282dba733
SHA256 (qemu/qemu-snapshot-2006-04-08_23.tar.bz2) = 5cdcab83fa0fa6188c846f2d9c96d019300f6c7742d2ecf3cceae0a014fd6318
SIZE (qemu/qemu-snapshot-2006-04-08_23.tar.bz2) = 1288264
MD5 (qemu/patch3_cirrus) = ebe7ed9fce804c49e024bc93bfdfc810
SHA256 (qemu/patch3_cirrus) = e862371834b7d895a896fbdb84fd9f70d17b5729a6f6789a48a61504fc941e11
SIZE (qemu/patch3_cirrus) = 8817

View File

@ -1,8 +1,9 @@
Index: qemu/configure
@@ -122,6 +122,7 @@
@@ -122,7 +122,8 @@
*)
oss="yes"
linux="yes"
user="yes"
+usb="linux"
if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
kqemu="yes"

View File

@ -1,11 +0,0 @@
# 1.9
Index: qemu/dyngen.h
@@ -59,7 +59,7 @@
{
unsigned long p;
- p = start & ~(MIN_CACHE_LINE_SIZE - 1);
+ start &= ~(MIN_CACHE_LINE_SIZE - 1);
stop = (stop + MIN_CACHE_LINE_SIZE - 1) & ~(MIN_CACHE_LINE_SIZE - 1);
for (p = start; p < stop; p += MIN_CACHE_LINE_SIZE) {

View File

@ -1,5 +1,5 @@
Index: qemu/Makefile
@@ -13,7 +13,7 @@
@@ -13,11 +13,14 @@
endif
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1
@ -8,14 +8,6 @@ Index: qemu/Makefile
for d in $(TARGET_DIRS); do \
$(MAKE) -C $$d $@ || exit 1 ; \
done
@@ -21,10 +21,13 @@
ifdef CONFIG_WIN32
$(MAKE) -C kqemu -f Makefile.winnt
else
- $(MAKE) -C kqemu
+ ( cd kqemu && $(BSD_MAKE) -f Makefile.freebsd )
endif
endif
+bsd/libmath.a:
+ ( cd bsd ; $(BSD_MAKE) CC=$(CC) )
@ -23,7 +15,7 @@ Index: qemu/Makefile
qemu-img$(EXESUF): qemu-img.c block.c block-cow.c block-qcow.c aes.c block-vmdk.c block-cloop.c block-dmg.c block-bochs.c block-vpc.c block-vvfat.c
$(CC) -DQEMU_TOOL $(CFLAGS) $(LDFLAGS) $(DEFINES) -o $@ $^ -lz $(LIBS)
@@ -33,6 +36,7 @@
@@ -26,6 +29,7 @@
clean:
# avoid old build problems by removing potentially incorrect old files
@ -31,25 +23,6 @@ Index: qemu/Makefile
rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
rm -f *.o *.a $(TOOLS) dyngen$(EXESUF) TAGS *.pod *~ */*~
$(MAKE) -C tests clean
@@ -40,7 +44,7 @@
$(MAKE) -C $$d $@ || exit 1 ; \
done
ifdef CONFIG_KQEMU
- $(MAKE) -C kqemu clean
+ cd kqemu && $(BSD_MAKE) -f Makefile.freebsd clean
endif
distclean: clean
@@ -73,9 +77,6 @@
for d in $(TARGET_DIRS); do \
$(MAKE) -C $$d $@ || exit 1 ; \
done
-ifdef CONFIG_KQEMU
- cd kqemu ; ./install.sh
-endif
# various test targets
test speed test2: all
Index: qemu/Makefile.target
@@ -391,8 +391,8 @@
VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld

View File

@ -1,44 +0,0 @@
# 1.19
Index: qemu/hw/ne2000.c
@@ -648,6 +648,8 @@
{
NE2000State* s=(NE2000State*)opaque;
+ qemu_put_8s(f, &s->rxcr);
+
qemu_put_8s(f, &s->cmd);
qemu_put_be32s(f, &s->start);
qemu_put_be32s(f, &s->stop);
@@ -672,8 +674,13 @@
{
NE2000State* s=(NE2000State*)opaque;
- if (version_id != 1)
+ if (version_id == 2) {
+ qemu_get_8s(f, &s->rxcr);
+ } else if (version_id == 1) {
+ s->rxcr = 0x0c;
+ } else {
return -EINVAL;
+ }
qemu_get_8s(f, &s->cmd);
qemu_get_be32s(f, &s->start);
@@ -732,7 +739,7 @@
s->macaddr[4],
s->macaddr[5]);
- register_savevm("ne2000", 0, 1, ne2000_save, ne2000_load, s);
+ register_savevm("ne2000", 0, 2, ne2000_save, ne2000_load, s);
}
/***********************************************************/
@@ -803,7 +810,7 @@
s->macaddr[5]);
/* XXX: instance number ? */
- register_savevm("ne2000", 0, 1, ne2000_save, ne2000_load, s);
+ register_savevm("ne2000", 0, 2, ne2000_save, ne2000_load, s);
register_savevm("ne2000_pci", 0, 1, generic_pci_save, generic_pci_load,
&d->dev);
}

View File

@ -1,28 +0,0 @@
# 1.6
Index: qemu/hw/usb-uhci.c
@@ -153,6 +153,7 @@
switch(addr) {
case 0x0c:
val = s->sof_timing;
+ break;
default:
val = 0xff;
break;
@@ -654,6 +655,7 @@
pci_conf[0x0b] = 0x0c;
pci_conf[0x0e] = 0x00; // header_type
pci_conf[0x3d] = 4; // interrupt pin 3
+ pci_conf[0x60] = 0x10; // release number
for(i = 0; i < NB_PORTS; i++) {
port = &s->ports[i];
@@ -666,6 +668,8 @@
uhci_reset(s);
- pci_register_io_region(&s->dev, 0, 0x20,
+ /* Use region 4 for consistency with real hardware. BSD guests seem
+ to rely on this. */
+ pci_register_io_region(&s->dev, 4, 0x20,
PCI_ADDRESS_SPACE_IO, uhci_map);
}

View File

@ -1,11 +0,0 @@
# 1.4
Index: qemu/hw/usb.c
@@ -183,7 +183,7 @@
q = buf;
len = strlen(str);
- *q++ = 2 * len + 1;
+ *q++ = 2 * len + 2;
*q++ = 3;
for(i = 0; i < len; i++) {
*q++ = str[i];

View File

@ -0,0 +1,243 @@
Index: qemu/audio/alsaaudio.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/alsaaudio.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.1.2.8
diff -u -r1.1.1.4 -r1.1.1.1.2.8
--- audio/alsaaudio.c 21 Nov 2005 12:47:06 -0000 1.1.1.4
+++ audio/alsaaudio.c 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.8
@@ -61,8 +61,8 @@
.size_in_usec_in = 1,
.size_in_usec_out = 1,
#endif
- .pcm_name_out = "hw:0,0",
- .pcm_name_in = "hw:0,0",
+ .pcm_name_out = "default",
+ .pcm_name_in = "default",
#ifdef HIGH_LATENCY
.buffer_size_in = 400000,
.period_size_in = 400000 / 4,
Index: qemu/audio/audio.h
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/audio.h,v
retrieving revision 1.1.1.3
retrieving revision 1.1.1.1.2.5
diff -u -r1.1.1.3 -r1.1.1.1.2.5
--- audio/audio.h 21 Nov 2005 12:47:06 -0000 1.1.1.3
+++ audio/audio.h 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.5
@@ -111,7 +111,7 @@
}
uint32_t popcount (uint32_t u);
-inline uint32_t lsbindex (uint32_t u);
+uint32_t lsbindex (uint32_t u);
#ifdef __GNUC__
#define audio_MIN(a, b) ( __extension__ ({ \
Index: qemu/audio/dsound_template.h
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/dsound_template.h,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.1.2.2
diff -u -r1.1.1.2 -r1.1.1.1.2.2
--- audio/dsound_template.h 5 Nov 2005 20:42:14 -0000 1.1.1.2
+++ audio/dsound_template.h 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.2
@@ -70,7 +70,13 @@
int i;
LPVOID p1 = NULL, p2 = NULL;
DWORD blen1 = 0, blen2 = 0;
+ DWORD flag;
+#ifdef DSBTYPE_IN
+ flag = entire ? DSCBLOCK_ENTIREBUFFER : 0;
+#else
+ flag = entire ? DSBLOCK_ENTIREBUFFER : 0;
+#endif
for (i = 0; i < conf.lock_retries; ++i) {
hr = glue (IFACE, _Lock) (
buf,
@@ -80,13 +86,7 @@
&blen1,
&p2,
&blen2,
- (entire
-#ifdef DSBTYPE_IN
- ? DSCBLOCK_ENTIREBUFFER
-#else
- ? DSBLOCK_ENTIREBUFFER
-#endif
- : 0)
+ flag
);
if (FAILED (hr)) {
Index: qemu/audio/dsoundaudio.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/dsoundaudio.c,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.1.2.2
diff -u -r1.1.1.2 -r1.1.1.1.2.2
--- audio/dsoundaudio.c 5 Nov 2005 20:42:14 -0000 1.1.1.2
+++ audio/dsoundaudio.c 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.2
@@ -987,6 +987,12 @@
hr = IDirectSound_Initialize (s->dsound, NULL);
if (FAILED (hr)) {
dsound_logerr (hr, "Could not initialize DirectSound\n");
+
+ hr = IDirectSound_Release (s->dsound);
+ if (FAILED (hr)) {
+ dsound_logerr (hr, "Could not release DirectSound\n");
+ }
+ s->dsound = NULL;
return NULL;
}
Index: qemu/audio/ossaudio.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/ossaudio.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.1.2.5
diff -u -r1.1.1.4 -r1.1.1.1.2.5
--- audio/ossaudio.c 21 Nov 2005 12:47:06 -0000 1.1.1.4
+++ audio/ossaudio.c 7 Apr 2006 22:23:42 -0000 1.1.1.1.2.5
@@ -324,9 +324,18 @@
return 0;
}
- if (abinfo.bytes < 0 || abinfo.bytes > bufsize) {
- ldebug ("warning: Invalid available size, size=%d bufsize=%d\n",
- abinfo.bytes, bufsize);
+ if (abinfo.bytes > bufsize) {
+#ifndef __FreeBSD__
+ dolog ("warning: Invalid available size, size=%d bufsize=%d\n"
+ "please report your OS/audio hw to malc@pulsesoft.com\n",
+ abinfo.bytes, bufsize);
+#endif
+ abinfo.bytes = bufsize;
+ }
+
+ if (abinfo.bytes < 0) {
+ dolog ("warning: Invalid available size, size=%d bufsize=%d\n",
+ abinfo.bytes, bufsize);
return 0;
}
Index: qemu/hw/es1370.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/hw/es1370.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.1.2.7
diff -u -r1.1.1.4 -r1.1.1.1.2.7
--- hw/es1370.c 21 Nov 2005 12:47:06 -0000 1.1.1.4
+++ hw/es1370.c 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.7
@@ -479,9 +479,10 @@
IO_WRITE_PROTO (es1370_writeb)
{
ES1370State *s = opaque;
- addr = es1370_fixup (s, addr);
uint32_t shift, mask;
+ addr = es1370_fixup (s, addr);
+
switch (addr) {
case ES1370_REG_CONTROL:
case ES1370_REG_CONTROL + 1:
Index: qemu/hw/sb16.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/hw/sb16.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.1.2.6
diff -u -r1.1.1.4 -r1.1.1.1.2.6
--- hw/sb16.c 21 Nov 2005 12:47:06 -0000 1.1.1.4
+++ hw/sb16.c 7 Apr 2006 22:23:59 -0000 1.1.1.1.2.6
@@ -193,6 +193,31 @@
#define DMA8_AUTO 1
#define DMA8_HIGH 2
+static void continue_dma8 (SB16State *s)
+{
+ if (s->freq > 0) {
+ audsettings_t as;
+
+ s->audio_free = 0;
+
+ as.freq = s->freq;
+ as.nchannels = 1 << s->fmt_stereo;
+ as.fmt = s->fmt;
+
+ s->voice = AUD_open_out (
+ &s->card,
+ s->voice,
+ "sb16",
+ s,
+ SB_audio_callback,
+ &as,
+ 0 /* little endian */
+ );
+ }
+
+ control (s, 1);
+}
+
static void dma_cmd8 (SB16State *s, int mask, int dma_len)
{
s->fmt = AUD_FMT_U8;
@@ -201,7 +226,8 @@
s->fmt_signed = 0;
s->fmt_stereo = (s->mixer_regs[0x0e] & 2) != 0;
if (-1 == s->time_const) {
- s->freq = 11025;
+ if (s->freq <= 0)
+ s->freq = 11025;
}
else {
int tmp = (256 - s->time_const);
@@ -239,27 +265,7 @@
s->freq, s->fmt_stereo, s->fmt_signed, s->fmt_bits,
s->block_size, s->dma_auto, s->fifo, s->highspeed);
- if (s->freq) {
- audsettings_t as;
-
- s->audio_free = 0;
-
- as.freq = s->freq;
- as.nchannels = 1 << s->fmt_stereo;
- as.fmt = s->fmt;
-
- s->voice = AUD_open_out (
- &s->card,
- s->voice,
- "sb16",
- s,
- SB_audio_callback,
- &as,
- 0 /* little endian */
- );
- }
-
- control (s, 1);
+ continue_dma8 (s);
speaker (s, 1);
}
@@ -437,7 +443,7 @@
break;
case 0x1c: /* Auto-Initialize DMA DAC, 8-bit */
- control (s, 1);
+ dma_cmd8 (s, DMA8_AUTO, -1);
break;
case 0x20: /* Direct ADC, Juice/PL */
@@ -531,7 +537,9 @@
break;
case 0xd4: /* continue DMA operation. 8bit */
- control (s, 1);
+ /* KQ6 (or maybe Sierras audblst.drv in general) resets
+ the frequency between halt/continue */
+ continue_dma8 (s);
break;
case 0xd5: /* halt DMA operation. 16bit */

View File

@ -1,29 +0,0 @@
# 1.24
Index: qemu/sdl.c
@@ -404,6 +404,7 @@
mod_state = (ev->key.keysym.mod & gui_grab_code);
if (!mod_state) {
if (gui_key_modifier_pressed) {
+ gui_key_modifier_pressed = 0;
if (gui_keysym == 0) {
/* exit/enter grab if pressing Ctrl-Alt */
if (!gui_grab)
@@ -415,7 +416,6 @@
reset_keys();
break;
}
- gui_key_modifier_pressed = 0;
gui_keysym = 0;
}
}
@@ -456,8 +456,8 @@
}
break;
case SDL_ACTIVEEVENT:
- if (gui_grab && (ev->active.gain & SDL_ACTIVEEVENTMASK) == 0 &&
- !gui_fullscreen_initial_grab) {
+ if (gui_grab && ev->active.state == SDL_APPINPUTFOCUS &&
+ !ev->active.gain && !gui_fullscreen_initial_grab) {
sdl_grab_end();
}
break;

View File

@ -1,18 +0,0 @@
# 1.6
Index: qemu/slirp/socket.c
@@ -573,6 +573,7 @@
addr.sin_port = port;
if (((s = socket(AF_INET,SOCK_STREAM,0)) < 0) ||
+ (setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int)) < 0) ||
(bind(s,(struct sockaddr *)&addr, sizeof(addr)) < 0) ||
(listen(s,1) < 0)) {
int tmperrno = errno; /* Don't clobber the real reason we failed */
@@ -587,7 +588,6 @@
#endif
return NULL;
}
- setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int));
setsockopt(s,SOL_SOCKET,SO_OOBINLINE,(char *)&opt,sizeof(int));
getsockname(s,(struct sockaddr *)&addr,&addrlen);

View File

@ -1,257 +0,0 @@
Index: qemu/vl.c
===================================================================
RCS file: /sources/qemu/qemu/vl.c,v
retrieving revision 1.157
diff -u -p -r1.157 vl.c
--- vl.c 18 Dec 2005 20:34:32 -0000 1.157
+++ vl.c 20 Dec 2005 21:11:37 -0000
@@ -1768,13 +1768,16 @@ VLANState *qemu_find_vlan(int id)
}
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
- IOReadHandler *fd_read, void *opaque)
+ IOReadHandler *fd_read,
+ IOCanRWHandler *fd_can_read,
+ void *opaque)
{
VLANClientState *vc, **pvc;
vc = qemu_mallocz(sizeof(VLANClientState));
if (!vc)
return NULL;
vc->fd_read = fd_read;
+ vc->fd_can_read = fd_can_read;
vc->opaque = opaque;
vc->vlan = vlan;
@@ -1786,6 +1789,20 @@ VLANClientState *qemu_new_vlan_client(VL
return vc;
}
+int qemu_can_send_packet(VLANClientState *vc1)
+{
+ VLANState *vlan = vc1->vlan;
+ VLANClientState *vc;
+
+ for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
+ if (vc != vc1) {
+ if (vc->fd_can_read && !vc->fd_can_read(vc->opaque))
+ return 0;
+ }
+ }
+ return 1;
+}
+
void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
{
VLANState *vlan = vc1->vlan;
@@ -1811,7 +1828,7 @@ static VLANClientState *slirp_vc;
int slirp_can_output(void)
{
- return 1;
+ return qemu_can_send_packet(slirp_vc);
}
void slirp_output(const uint8_t *pkt, int pkt_len)
@@ -1839,7 +1856,7 @@ static int net_slirp_init(VLANState *vla
slirp_init();
}
slirp_vc = qemu_new_vlan_client(vlan,
- slirp_receive, NULL);
+ slirp_receive, NULL, NULL);
snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector");
return 0;
}
@@ -2024,7 +2041,7 @@ static TAPState *net_tap_fd_init(VLANSta
if (!s)
return NULL;
s->fd = fd;
- s->vc = qemu_new_vlan_client(vlan, tap_receive, s);
+ s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s);
qemu_set_fd_handler(s->fd, tap_send, NULL, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd);
return s;
@@ -2327,7 +2344,7 @@ static NetSocketState *net_socket_fd_ini
return NULL;
s->fd = fd;
- s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, s);
+ s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s);
qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
/* mcast: save bound address as dst */
@@ -2355,7 +2372,7 @@ static NetSocketState *net_socket_fd_ini
return NULL;
s->fd = fd;
s->vc = qemu_new_vlan_client(vlan,
- net_socket_receive, s);
+ net_socket_receive, NULL, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str),
"socket: fd=%d", fd);
if (is_connected) {
Index: qemu/vl.h
===================================================================
RCS file: /sources/qemu/qemu/vl.h,v
retrieving revision 1.99
diff -u -p -r1.99 vl.h
--- vl.h 18 Dec 2005 20:34:32 -0000 1.99
+++ vl.h 20 Dec 2005 21:11:38 -0000
@@ -279,6 +279,9 @@ typedef struct VLANClientState VLANClien
struct VLANClientState {
IOReadHandler *fd_read;
+ /* Packets may still be sent if this returns zero. It's used to
+ rate-limit the slirp code. */
+ IOCanRWHandler *fd_can_read;
void *opaque;
struct VLANClientState *next;
struct VLANState *vlan;
@@ -293,8 +296,12 @@ typedef struct VLANState {
VLANState *qemu_find_vlan(int id);
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
- IOReadHandler *fd_read, void *opaque);
+ IOReadHandler *fd_read,
+ IOCanRWHandler *fd_can_read,
+ void *opaque);
+int qemu_can_send_packet(VLANClientState *vc);
void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
+void qemu_handler_true(void *opaque);
void do_info_network(void);
Index: qemu/hw/lance.c
===================================================================
RCS file: /sources/qemu/qemu/hw/lance.c,v
retrieving revision 1.5
diff -u -p -r1.5 lance.c
--- hw/lance.c 15 Nov 2005 22:16:05 -0000 1.5
+++ hw/lance.c 20 Dec 2005 21:11:38 -0000
@@ -283,6 +283,11 @@ static CPUWriteMemoryFunc *lance_mem_wri
#define MIN_BUF_SIZE 60
+static void lance_can_receive(void *opaque)
+{
+ return 1;
+}
+
static void lance_receive(void *opaque, const uint8_t *buf, int size)
{
LANCEState *s = opaque;
@@ -440,7 +445,7 @@ void lance_init(NICInfo *nd, int irq, ui
lance_reset(s);
- s->vc = qemu_new_vlan_client(nd->vlan, lance_receive, s);
+ s->vc = qemu_new_vlan_client(nd->vlan, lance_receive, lance_can_receive, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str),
"lance macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
Index: qemu/hw/ne2000.c
===================================================================
RCS file: /sources/qemu/qemu/hw/ne2000.c,v
retrieving revision 1.17
diff -u -p -r1.17 ne2000.c
--- hw/ne2000.c 22 Nov 2005 20:16:13 -0000 1.17
+++ hw/ne2000.c 20 Dec 2005 21:11:38 -0000
@@ -200,14 +200,10 @@ static int compute_mcast_idx(const uint8
return (crc >> 26);
}
-/* return the max buffer size if the NE2000 can receive more data */
-static int ne2000_can_receive(void *opaque)
+static int ne2000_buffer_full(NE2000State *s)
{
- NE2000State *s = opaque;
int avail, index, boundary;
-
- if (s->cmd & E8390_STOP)
- return 0;
+
index = s->curpag << 8;
boundary = s->boundary << 8;
if (index < boundary)
@@ -215,8 +211,17 @@ static int ne2000_can_receive(void *opaq
else
avail = (s->stop - s->start) - (index - boundary);
if (avail < (MAX_ETH_FRAME_SIZE + 4))
- return 0;
- return MAX_ETH_FRAME_SIZE;
+ return 1;
+ return 0;
+}
+
+static int ne2000_can_receive(void *opaque)
+{
+ NE2000State *s = opaque;
+
+ if (s->cmd & E8390_STOP)
+ return 1;
+ return !ne2000_buffer_full(s);
}
#define MIN_BUF_SIZE 60
@@ -234,7 +239,7 @@ static void ne2000_receive(void *opaque,
printf("NE2000: received len=%d\n", size);
#endif
- if (!ne2000_can_receive(s))
+ if (s->cmd & E8390_STOP || ne2000_buffer_full(s))
return;
/* XXX: check this */
@@ -715,7 +720,8 @@ void isa_ne2000_init(int base, int irq,
ne2000_reset(s);
- s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive, s);
+ s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive,
+ ne2000_can_receive, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str),
"ne2000 macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
@@ -784,7 +790,8 @@ void pci_ne2000_init(PCIBus *bus, NICInf
s->pci_dev = (PCIDevice *)d;
memcpy(s->macaddr, nd->macaddr, 6);
ne2000_reset(s);
- s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive, s);
+ s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive,
+ ne2000_can_receive, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str),
"ne2000 pci macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
Index: qemu/hw/smc91c111.c
===================================================================
RCS file: /sources/qemu/qemu/hw/smc91c111.c,v
retrieving revision 1.2
diff -u -p -r1.2 smc91c111.c
--- hw/smc91c111.c 18 Dec 2005 17:39:52 -0000 1.2
+++ hw/smc91c111.c 20 Dec 2005 21:11:38 -0000
@@ -593,6 +593,17 @@ static uint32_t smc91c111_readl(void *op
return val;
}
+static int smc91c111_can_receive(void *opaque)
+{
+ smc91c111_state *s = (smc91c111_state *)opaque;
+
+ if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST))
+ return 1;
+ if (s->allocated == (1 << NUM_PACKETS) - 1)
+ return 0;
+ return 1;
+}
+
static void smc91c111_receive(void *opaque, const uint8_t *buf, int size)
{
smc91c111_state *s = (smc91c111_state *)opaque;
@@ -697,6 +708,7 @@ void smc91c111_init(NICInfo *nd, uint32_
smc91c111_reset(s);
- s->vc = qemu_new_vlan_client(nd->vlan, smc91c111_receive, s);
+ s->vc = qemu_new_vlan_client(nd->vlan, smc91c111_receive,
+ smc91c111_can_receive, s);
/* ??? Save/restore. */
}

View File

@ -1,29 +0,0 @@
# 1.53
Index: qemu/target-i386/translate.c
@@ -5803,14 +5803,24 @@
op = (modrm >> 3) & 7;
switch(op) {
case 0: /* fxsave */
- if (mod == 3 || !(s->cpuid_features & CPUID_FXSR))
+ if (mod == 3 || !(s->cpuid_features & CPUID_FXSR) ||
+ (s->flags & HF_EM_MASK))
goto illegal_op;
+ if (s->flags & HF_TS_MASK) {
+ gen_exception(s, EXCP07_PREX, pc_start - s->cs_base);
+ break;
+ }
gen_lea_modrm(s, modrm, &reg_addr, &offset_addr);
gen_op_fxsave_A0((s->dflag == 2));
break;
case 1: /* fxrstor */
- if (mod == 3 || !(s->cpuid_features & CPUID_FXSR))
+ if (mod == 3 || !(s->cpuid_features & CPUID_FXSR) ||
+ (s->flags & HF_EM_MASK))
goto illegal_op;
+ if (s->flags & HF_TS_MASK) {
+ gen_exception(s, EXCP07_PREX, pc_start - s->cs_base);
+ break;
+ }
gen_lea_modrm(s, modrm, &reg_addr, &offset_addr);
gen_op_fxrstor_A0((s->dflag == 2));
break;

View File

@ -6,8 +6,8 @@
#
PORTNAME= qemu
PORTVERSION= 0.8.0
PORTREVISION= 5
PORTVERSION= 0.8.0s.20060408
PORTREVISION= 0
CATEGORIES= emulators
MASTER_SITES= http://www.qemu.org/:release \
http://people.fruitsalad.org/nox/qemu/:snapshot \
@ -15,10 +15,8 @@ MASTER_SITES= http://www.qemu.org/:release \
http://qemu.dad-answers.com/download/qemu/:snapshot \
http://people.brandeis.edu/~jcoiner/qemu_idedma/:idedma \
http://people.freebsd.org/~maho/qemu/:misc
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:release
.if defined (WITH_HACKS_IDEDMA) || defined (WITH_HACKS)
DISTFILES+= qemu_dma_patch.tar.gz:idedma
.endif
DISTNAME= ${PORTNAME}-snapshot-2006-04-08_23
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:snapshot
.if defined (WITH_HACKS_CIRRUS) || defined (WITH_HACKS)
DISTFILES+= patch3_cirrus:misc
.endif
@ -33,10 +31,11 @@ BUILD_DEPENDS+= texi2html:${PORTSDIR}/textproc/texi2html
RUN_DEPENDS+= ${LOCALBASE}/sbin/smbd:${PORTSDIR}/net/samba
.endif
.if defined(WITH_KQEMU)
BUILD_DEPENDS+= ${LOCALBASE}/include/kqemu/kqemu.h:${PORTSDIR}/emulators/kqemu-kmod
BUILD_DEPENDS+= kqemu-kmod>=1.3.0pre5:${PORTSDIR}/emulators/kqemu-kmod
.endif
HAS_CONFIGURE= yes
USE_BZIP2= yes
USE_GMAKE= yes
USE_GETOPT_LONG= yes
USE_SDL= sdl
@ -64,11 +63,9 @@ pre-everything::
@${ECHO_MSG} "Notice: you can build qemu with the (alpha!) kqemu accelerator kernel module"
@${ECHO_MSG} "by defining WITH_KQEMU."
.endif
.if !defined(WITH_HACKS_IDEDMA) && !defined(WITH_HACKS_CIRRUS) && !defined(WITH_HACKS)
.if !defined(WITH_HACKS_CIRRUS) && !defined(WITH_HACKS)
@${ECHO_MSG} "You can build qemu with some hacks (esp. for speedup)"
@${ECHO_MSG} "by defining WITH_HACKS, or specifically:"
@${ECHO_MSG} "1. WITH_HACKS_IDEDMA: IDE Bus-master DMA Support by John Coiner"
@${ECHO_MSG} "http://people.brandeis.edu/~jcoiner/qemu_idedma/qemu_dma_patch.html"
@${ECHO_MSG} "2. WITH_HACKS_CIRRUS: higher speed on large display (cirrus_vga)"
@${ECHO_MSG} "by Juergen Pfennig"
@${ECHO_MSG} "http://lists.gnu.org/archive/html/qemu-devel/2006-01/msg00208.html"
@ -92,9 +89,6 @@ pre-patch:
done
post-patch:
.if defined(WITH_HACKS_IDEDMA) || defined (WITH_HACKS)
@cd ${WRKDIR} ; ${TAR} xfz ${DISTDIR}/${DIST_SUBDIR}/qemu_dma_patch.tar.gz ; ${CP} new_qemu_dma_patch/bios.bin ${WRKSRC}/pc-bios; cd ${WRKSRC}; ${PATCH} --quiet -p1 < ../new_qemu_dma_patch/qemu-piix4-udma.patch
.endif
.if defined(WITH_HACKS_CIRRUS) || defined (WITH_HACKS)
@cd ${WRKSRC} ; ${PATCH} --quiet < ${DISTDIR}/${DIST_SUBDIR}/patch3_cirrus
.endif

View File

@ -1,9 +1,6 @@
MD5 (qemu/qemu-0.8.0.tar.gz) = eb175b26583280706fe7e4d8910d320d
SHA256 (qemu/qemu-0.8.0.tar.gz) = de388539ce86971a2cbe8474fca8b6160898c95772e3e6e08a7794d48db32a61
SIZE (qemu/qemu-0.8.0.tar.gz) = 1497965
MD5 (qemu/qemu_dma_patch.tar.gz) = 5e339dc201d411af56bad684d3f89338
SHA256 (qemu/qemu_dma_patch.tar.gz) = cdf74bf5e079d835e100f116d940686b13ec2b7ed6aee5a6a97a4441ea5f2b8f
SIZE (qemu/qemu_dma_patch.tar.gz) = 25837
MD5 (qemu/qemu-snapshot-2006-04-08_23.tar.bz2) = 74fd8046d94d5d800f1df35282dba733
SHA256 (qemu/qemu-snapshot-2006-04-08_23.tar.bz2) = 5cdcab83fa0fa6188c846f2d9c96d019300f6c7742d2ecf3cceae0a014fd6318
SIZE (qemu/qemu-snapshot-2006-04-08_23.tar.bz2) = 1288264
MD5 (qemu/patch3_cirrus) = ebe7ed9fce804c49e024bc93bfdfc810
SHA256 (qemu/patch3_cirrus) = e862371834b7d895a896fbdb84fd9f70d17b5729a6f6789a48a61504fc941e11
SIZE (qemu/patch3_cirrus) = 8817

View File

@ -1,8 +1,9 @@
Index: qemu/configure
@@ -122,6 +122,7 @@
@@ -122,7 +122,8 @@
*)
oss="yes"
linux="yes"
user="yes"
+usb="linux"
if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
kqemu="yes"

View File

@ -1,11 +0,0 @@
# 1.9
Index: qemu/dyngen.h
@@ -59,7 +59,7 @@
{
unsigned long p;
- p = start & ~(MIN_CACHE_LINE_SIZE - 1);
+ start &= ~(MIN_CACHE_LINE_SIZE - 1);
stop = (stop + MIN_CACHE_LINE_SIZE - 1) & ~(MIN_CACHE_LINE_SIZE - 1);
for (p = start; p < stop; p += MIN_CACHE_LINE_SIZE) {

View File

@ -1,5 +1,5 @@
Index: qemu/Makefile
@@ -13,7 +13,7 @@
@@ -13,11 +13,14 @@
endif
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1
@ -8,14 +8,6 @@ Index: qemu/Makefile
for d in $(TARGET_DIRS); do \
$(MAKE) -C $$d $@ || exit 1 ; \
done
@@ -21,10 +21,13 @@
ifdef CONFIG_WIN32
$(MAKE) -C kqemu -f Makefile.winnt
else
- $(MAKE) -C kqemu
+ ( cd kqemu && $(BSD_MAKE) -f Makefile.freebsd )
endif
endif
+bsd/libmath.a:
+ ( cd bsd ; $(BSD_MAKE) CC=$(CC) )
@ -23,7 +15,7 @@ Index: qemu/Makefile
qemu-img$(EXESUF): qemu-img.c block.c block-cow.c block-qcow.c aes.c block-vmdk.c block-cloop.c block-dmg.c block-bochs.c block-vpc.c block-vvfat.c
$(CC) -DQEMU_TOOL $(CFLAGS) $(LDFLAGS) $(DEFINES) -o $@ $^ -lz $(LIBS)
@@ -33,6 +36,7 @@
@@ -26,6 +29,7 @@
clean:
# avoid old build problems by removing potentially incorrect old files
@ -31,25 +23,6 @@ Index: qemu/Makefile
rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
rm -f *.o *.a $(TOOLS) dyngen$(EXESUF) TAGS *.pod *~ */*~
$(MAKE) -C tests clean
@@ -40,7 +44,7 @@
$(MAKE) -C $$d $@ || exit 1 ; \
done
ifdef CONFIG_KQEMU
- $(MAKE) -C kqemu clean
+ cd kqemu && $(BSD_MAKE) -f Makefile.freebsd clean
endif
distclean: clean
@@ -73,9 +77,6 @@
for d in $(TARGET_DIRS); do \
$(MAKE) -C $$d $@ || exit 1 ; \
done
-ifdef CONFIG_KQEMU
- cd kqemu ; ./install.sh
-endif
# various test targets
test speed test2: all
Index: qemu/Makefile.target
@@ -391,8 +391,8 @@
VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld

View File

@ -1,44 +0,0 @@
# 1.19
Index: qemu/hw/ne2000.c
@@ -648,6 +648,8 @@
{
NE2000State* s=(NE2000State*)opaque;
+ qemu_put_8s(f, &s->rxcr);
+
qemu_put_8s(f, &s->cmd);
qemu_put_be32s(f, &s->start);
qemu_put_be32s(f, &s->stop);
@@ -672,8 +674,13 @@
{
NE2000State* s=(NE2000State*)opaque;
- if (version_id != 1)
+ if (version_id == 2) {
+ qemu_get_8s(f, &s->rxcr);
+ } else if (version_id == 1) {
+ s->rxcr = 0x0c;
+ } else {
return -EINVAL;
+ }
qemu_get_8s(f, &s->cmd);
qemu_get_be32s(f, &s->start);
@@ -732,7 +739,7 @@
s->macaddr[4],
s->macaddr[5]);
- register_savevm("ne2000", 0, 1, ne2000_save, ne2000_load, s);
+ register_savevm("ne2000", 0, 2, ne2000_save, ne2000_load, s);
}
/***********************************************************/
@@ -803,7 +810,7 @@
s->macaddr[5]);
/* XXX: instance number ? */
- register_savevm("ne2000", 0, 1, ne2000_save, ne2000_load, s);
+ register_savevm("ne2000", 0, 2, ne2000_save, ne2000_load, s);
register_savevm("ne2000_pci", 0, 1, generic_pci_save, generic_pci_load,
&d->dev);
}

View File

@ -1,28 +0,0 @@
# 1.6
Index: qemu/hw/usb-uhci.c
@@ -153,6 +153,7 @@
switch(addr) {
case 0x0c:
val = s->sof_timing;
+ break;
default:
val = 0xff;
break;
@@ -654,6 +655,7 @@
pci_conf[0x0b] = 0x0c;
pci_conf[0x0e] = 0x00; // header_type
pci_conf[0x3d] = 4; // interrupt pin 3
+ pci_conf[0x60] = 0x10; // release number
for(i = 0; i < NB_PORTS; i++) {
port = &s->ports[i];
@@ -666,6 +668,8 @@
uhci_reset(s);
- pci_register_io_region(&s->dev, 0, 0x20,
+ /* Use region 4 for consistency with real hardware. BSD guests seem
+ to rely on this. */
+ pci_register_io_region(&s->dev, 4, 0x20,
PCI_ADDRESS_SPACE_IO, uhci_map);
}

View File

@ -1,11 +0,0 @@
# 1.4
Index: qemu/hw/usb.c
@@ -183,7 +183,7 @@
q = buf;
len = strlen(str);
- *q++ = 2 * len + 1;
+ *q++ = 2 * len + 2;
*q++ = 3;
for(i = 0; i < len; i++) {
*q++ = str[i];

View File

@ -0,0 +1,243 @@
Index: qemu/audio/alsaaudio.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/alsaaudio.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.1.2.8
diff -u -r1.1.1.4 -r1.1.1.1.2.8
--- audio/alsaaudio.c 21 Nov 2005 12:47:06 -0000 1.1.1.4
+++ audio/alsaaudio.c 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.8
@@ -61,8 +61,8 @@
.size_in_usec_in = 1,
.size_in_usec_out = 1,
#endif
- .pcm_name_out = "hw:0,0",
- .pcm_name_in = "hw:0,0",
+ .pcm_name_out = "default",
+ .pcm_name_in = "default",
#ifdef HIGH_LATENCY
.buffer_size_in = 400000,
.period_size_in = 400000 / 4,
Index: qemu/audio/audio.h
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/audio.h,v
retrieving revision 1.1.1.3
retrieving revision 1.1.1.1.2.5
diff -u -r1.1.1.3 -r1.1.1.1.2.5
--- audio/audio.h 21 Nov 2005 12:47:06 -0000 1.1.1.3
+++ audio/audio.h 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.5
@@ -111,7 +111,7 @@
}
uint32_t popcount (uint32_t u);
-inline uint32_t lsbindex (uint32_t u);
+uint32_t lsbindex (uint32_t u);
#ifdef __GNUC__
#define audio_MIN(a, b) ( __extension__ ({ \
Index: qemu/audio/dsound_template.h
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/dsound_template.h,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.1.2.2
diff -u -r1.1.1.2 -r1.1.1.1.2.2
--- audio/dsound_template.h 5 Nov 2005 20:42:14 -0000 1.1.1.2
+++ audio/dsound_template.h 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.2
@@ -70,7 +70,13 @@
int i;
LPVOID p1 = NULL, p2 = NULL;
DWORD blen1 = 0, blen2 = 0;
+ DWORD flag;
+#ifdef DSBTYPE_IN
+ flag = entire ? DSCBLOCK_ENTIREBUFFER : 0;
+#else
+ flag = entire ? DSBLOCK_ENTIREBUFFER : 0;
+#endif
for (i = 0; i < conf.lock_retries; ++i) {
hr = glue (IFACE, _Lock) (
buf,
@@ -80,13 +86,7 @@
&blen1,
&p2,
&blen2,
- (entire
-#ifdef DSBTYPE_IN
- ? DSCBLOCK_ENTIREBUFFER
-#else
- ? DSBLOCK_ENTIREBUFFER
-#endif
- : 0)
+ flag
);
if (FAILED (hr)) {
Index: qemu/audio/dsoundaudio.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/dsoundaudio.c,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.1.2.2
diff -u -r1.1.1.2 -r1.1.1.1.2.2
--- audio/dsoundaudio.c 5 Nov 2005 20:42:14 -0000 1.1.1.2
+++ audio/dsoundaudio.c 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.2
@@ -987,6 +987,12 @@
hr = IDirectSound_Initialize (s->dsound, NULL);
if (FAILED (hr)) {
dsound_logerr (hr, "Could not initialize DirectSound\n");
+
+ hr = IDirectSound_Release (s->dsound);
+ if (FAILED (hr)) {
+ dsound_logerr (hr, "Could not release DirectSound\n");
+ }
+ s->dsound = NULL;
return NULL;
}
Index: qemu/audio/ossaudio.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/audio/ossaudio.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.1.2.5
diff -u -r1.1.1.4 -r1.1.1.1.2.5
--- audio/ossaudio.c 21 Nov 2005 12:47:06 -0000 1.1.1.4
+++ audio/ossaudio.c 7 Apr 2006 22:23:42 -0000 1.1.1.1.2.5
@@ -324,9 +324,18 @@
return 0;
}
- if (abinfo.bytes < 0 || abinfo.bytes > bufsize) {
- ldebug ("warning: Invalid available size, size=%d bufsize=%d\n",
- abinfo.bytes, bufsize);
+ if (abinfo.bytes > bufsize) {
+#ifndef __FreeBSD__
+ dolog ("warning: Invalid available size, size=%d bufsize=%d\n"
+ "please report your OS/audio hw to malc@pulsesoft.com\n",
+ abinfo.bytes, bufsize);
+#endif
+ abinfo.bytes = bufsize;
+ }
+
+ if (abinfo.bytes < 0) {
+ dolog ("warning: Invalid available size, size=%d bufsize=%d\n",
+ abinfo.bytes, bufsize);
return 0;
}
Index: qemu/hw/es1370.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/hw/es1370.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.1.2.7
diff -u -r1.1.1.4 -r1.1.1.1.2.7
--- hw/es1370.c 21 Nov 2005 12:47:06 -0000 1.1.1.4
+++ hw/es1370.c 7 Apr 2006 22:05:21 -0000 1.1.1.1.2.7
@@ -479,9 +479,10 @@
IO_WRITE_PROTO (es1370_writeb)
{
ES1370State *s = opaque;
- addr = es1370_fixup (s, addr);
uint32_t shift, mask;
+ addr = es1370_fixup (s, addr);
+
switch (addr) {
case ES1370_REG_CONTROL:
case ES1370_REG_CONTROL + 1:
Index: qemu/hw/sb16.c
===================================================================
RCS file: /home/malc/cvsroot/bellard/qemu/hw/sb16.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.1.2.6
diff -u -r1.1.1.4 -r1.1.1.1.2.6
--- hw/sb16.c 21 Nov 2005 12:47:06 -0000 1.1.1.4
+++ hw/sb16.c 7 Apr 2006 22:23:59 -0000 1.1.1.1.2.6
@@ -193,6 +193,31 @@
#define DMA8_AUTO 1
#define DMA8_HIGH 2
+static void continue_dma8 (SB16State *s)
+{
+ if (s->freq > 0) {
+ audsettings_t as;
+
+ s->audio_free = 0;
+
+ as.freq = s->freq;
+ as.nchannels = 1 << s->fmt_stereo;
+ as.fmt = s->fmt;
+
+ s->voice = AUD_open_out (
+ &s->card,
+ s->voice,
+ "sb16",
+ s,
+ SB_audio_callback,
+ &as,
+ 0 /* little endian */
+ );
+ }
+
+ control (s, 1);
+}
+
static void dma_cmd8 (SB16State *s, int mask, int dma_len)
{
s->fmt = AUD_FMT_U8;
@@ -201,7 +226,8 @@
s->fmt_signed = 0;
s->fmt_stereo = (s->mixer_regs[0x0e] & 2) != 0;
if (-1 == s->time_const) {
- s->freq = 11025;
+ if (s->freq <= 0)
+ s->freq = 11025;
}
else {
int tmp = (256 - s->time_const);
@@ -239,27 +265,7 @@
s->freq, s->fmt_stereo, s->fmt_signed, s->fmt_bits,
s->block_size, s->dma_auto, s->fifo, s->highspeed);
- if (s->freq) {
- audsettings_t as;
-
- s->audio_free = 0;
-
- as.freq = s->freq;
- as.nchannels = 1 << s->fmt_stereo;
- as.fmt = s->fmt;
-
- s->voice = AUD_open_out (
- &s->card,
- s->voice,
- "sb16",
- s,
- SB_audio_callback,
- &as,
- 0 /* little endian */
- );
- }
-
- control (s, 1);
+ continue_dma8 (s);
speaker (s, 1);
}
@@ -437,7 +443,7 @@
break;
case 0x1c: /* Auto-Initialize DMA DAC, 8-bit */
- control (s, 1);
+ dma_cmd8 (s, DMA8_AUTO, -1);
break;
case 0x20: /* Direct ADC, Juice/PL */
@@ -531,7 +537,9 @@
break;
case 0xd4: /* continue DMA operation. 8bit */
- control (s, 1);
+ /* KQ6 (or maybe Sierras audblst.drv in general) resets
+ the frequency between halt/continue */
+ continue_dma8 (s);
break;
case 0xd5: /* halt DMA operation. 16bit */

View File

@ -1,29 +0,0 @@
# 1.24
Index: qemu/sdl.c
@@ -404,6 +404,7 @@
mod_state = (ev->key.keysym.mod & gui_grab_code);
if (!mod_state) {
if (gui_key_modifier_pressed) {
+ gui_key_modifier_pressed = 0;
if (gui_keysym == 0) {
/* exit/enter grab if pressing Ctrl-Alt */
if (!gui_grab)
@@ -415,7 +416,6 @@
reset_keys();
break;
}
- gui_key_modifier_pressed = 0;
gui_keysym = 0;
}
}
@@ -456,8 +456,8 @@
}
break;
case SDL_ACTIVEEVENT:
- if (gui_grab && (ev->active.gain & SDL_ACTIVEEVENTMASK) == 0 &&
- !gui_fullscreen_initial_grab) {
+ if (gui_grab && ev->active.state == SDL_APPINPUTFOCUS &&
+ !ev->active.gain && !gui_fullscreen_initial_grab) {
sdl_grab_end();
}
break;

View File

@ -1,18 +0,0 @@
# 1.6
Index: qemu/slirp/socket.c
@@ -573,6 +573,7 @@
addr.sin_port = port;
if (((s = socket(AF_INET,SOCK_STREAM,0)) < 0) ||
+ (setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int)) < 0) ||
(bind(s,(struct sockaddr *)&addr, sizeof(addr)) < 0) ||
(listen(s,1) < 0)) {
int tmperrno = errno; /* Don't clobber the real reason we failed */
@@ -587,7 +588,6 @@
#endif
return NULL;
}
- setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int));
setsockopt(s,SOL_SOCKET,SO_OOBINLINE,(char *)&opt,sizeof(int));
getsockname(s,(struct sockaddr *)&addr,&addrlen);

View File

@ -1,257 +0,0 @@
Index: qemu/vl.c
===================================================================
RCS file: /sources/qemu/qemu/vl.c,v
retrieving revision 1.157
diff -u -p -r1.157 vl.c
--- vl.c 18 Dec 2005 20:34:32 -0000 1.157
+++ vl.c 20 Dec 2005 21:11:37 -0000
@@ -1768,13 +1768,16 @@ VLANState *qemu_find_vlan(int id)
}
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
- IOReadHandler *fd_read, void *opaque)
+ IOReadHandler *fd_read,
+ IOCanRWHandler *fd_can_read,
+ void *opaque)
{
VLANClientState *vc, **pvc;
vc = qemu_mallocz(sizeof(VLANClientState));
if (!vc)
return NULL;
vc->fd_read = fd_read;
+ vc->fd_can_read = fd_can_read;
vc->opaque = opaque;
vc->vlan = vlan;
@@ -1786,6 +1789,20 @@ VLANClientState *qemu_new_vlan_client(VL
return vc;
}
+int qemu_can_send_packet(VLANClientState *vc1)
+{
+ VLANState *vlan = vc1->vlan;
+ VLANClientState *vc;
+
+ for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
+ if (vc != vc1) {
+ if (vc->fd_can_read && !vc->fd_can_read(vc->opaque))
+ return 0;
+ }
+ }
+ return 1;
+}
+
void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
{
VLANState *vlan = vc1->vlan;
@@ -1811,7 +1828,7 @@ static VLANClientState *slirp_vc;
int slirp_can_output(void)
{
- return 1;
+ return qemu_can_send_packet(slirp_vc);
}
void slirp_output(const uint8_t *pkt, int pkt_len)
@@ -1839,7 +1856,7 @@ static int net_slirp_init(VLANState *vla
slirp_init();
}
slirp_vc = qemu_new_vlan_client(vlan,
- slirp_receive, NULL);
+ slirp_receive, NULL, NULL);
snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector");
return 0;
}
@@ -2024,7 +2041,7 @@ static TAPState *net_tap_fd_init(VLANSta
if (!s)
return NULL;
s->fd = fd;
- s->vc = qemu_new_vlan_client(vlan, tap_receive, s);
+ s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s);
qemu_set_fd_handler(s->fd, tap_send, NULL, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd);
return s;
@@ -2327,7 +2344,7 @@ static NetSocketState *net_socket_fd_ini
return NULL;
s->fd = fd;
- s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, s);
+ s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s);
qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
/* mcast: save bound address as dst */
@@ -2355,7 +2372,7 @@ static NetSocketState *net_socket_fd_ini
return NULL;
s->fd = fd;
s->vc = qemu_new_vlan_client(vlan,
- net_socket_receive, s);
+ net_socket_receive, NULL, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str),
"socket: fd=%d", fd);
if (is_connected) {
Index: qemu/vl.h
===================================================================
RCS file: /sources/qemu/qemu/vl.h,v
retrieving revision 1.99
diff -u -p -r1.99 vl.h
--- vl.h 18 Dec 2005 20:34:32 -0000 1.99
+++ vl.h 20 Dec 2005 21:11:38 -0000
@@ -279,6 +279,9 @@ typedef struct VLANClientState VLANClien
struct VLANClientState {
IOReadHandler *fd_read;
+ /* Packets may still be sent if this returns zero. It's used to
+ rate-limit the slirp code. */
+ IOCanRWHandler *fd_can_read;
void *opaque;
struct VLANClientState *next;
struct VLANState *vlan;
@@ -293,8 +296,12 @@ typedef struct VLANState {
VLANState *qemu_find_vlan(int id);
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
- IOReadHandler *fd_read, void *opaque);
+ IOReadHandler *fd_read,
+ IOCanRWHandler *fd_can_read,
+ void *opaque);
+int qemu_can_send_packet(VLANClientState *vc);
void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
+void qemu_handler_true(void *opaque);
void do_info_network(void);
Index: qemu/hw/lance.c
===================================================================
RCS file: /sources/qemu/qemu/hw/lance.c,v
retrieving revision 1.5
diff -u -p -r1.5 lance.c
--- hw/lance.c 15 Nov 2005 22:16:05 -0000 1.5
+++ hw/lance.c 20 Dec 2005 21:11:38 -0000
@@ -283,6 +283,11 @@ static CPUWriteMemoryFunc *lance_mem_wri
#define MIN_BUF_SIZE 60
+static void lance_can_receive(void *opaque)
+{
+ return 1;
+}
+
static void lance_receive(void *opaque, const uint8_t *buf, int size)
{
LANCEState *s = opaque;
@@ -440,7 +445,7 @@ void lance_init(NICInfo *nd, int irq, ui
lance_reset(s);
- s->vc = qemu_new_vlan_client(nd->vlan, lance_receive, s);
+ s->vc = qemu_new_vlan_client(nd->vlan, lance_receive, lance_can_receive, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str),
"lance macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
Index: qemu/hw/ne2000.c
===================================================================
RCS file: /sources/qemu/qemu/hw/ne2000.c,v
retrieving revision 1.17
diff -u -p -r1.17 ne2000.c
--- hw/ne2000.c 22 Nov 2005 20:16:13 -0000 1.17
+++ hw/ne2000.c 20 Dec 2005 21:11:38 -0000
@@ -200,14 +200,10 @@ static int compute_mcast_idx(const uint8
return (crc >> 26);
}
-/* return the max buffer size if the NE2000 can receive more data */
-static int ne2000_can_receive(void *opaque)
+static int ne2000_buffer_full(NE2000State *s)
{
- NE2000State *s = opaque;
int avail, index, boundary;
-
- if (s->cmd & E8390_STOP)
- return 0;
+
index = s->curpag << 8;
boundary = s->boundary << 8;
if (index < boundary)
@@ -215,8 +211,17 @@ static int ne2000_can_receive(void *opaq
else
avail = (s->stop - s->start) - (index - boundary);
if (avail < (MAX_ETH_FRAME_SIZE + 4))
- return 0;
- return MAX_ETH_FRAME_SIZE;
+ return 1;
+ return 0;
+}
+
+static int ne2000_can_receive(void *opaque)
+{
+ NE2000State *s = opaque;
+
+ if (s->cmd & E8390_STOP)
+ return 1;
+ return !ne2000_buffer_full(s);
}
#define MIN_BUF_SIZE 60
@@ -234,7 +239,7 @@ static void ne2000_receive(void *opaque,
printf("NE2000: received len=%d\n", size);
#endif
- if (!ne2000_can_receive(s))
+ if (s->cmd & E8390_STOP || ne2000_buffer_full(s))
return;
/* XXX: check this */
@@ -715,7 +720,8 @@ void isa_ne2000_init(int base, int irq,
ne2000_reset(s);
- s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive, s);
+ s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive,
+ ne2000_can_receive, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str),
"ne2000 macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
@@ -784,7 +790,8 @@ void pci_ne2000_init(PCIBus *bus, NICInf
s->pci_dev = (PCIDevice *)d;
memcpy(s->macaddr, nd->macaddr, 6);
ne2000_reset(s);
- s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive, s);
+ s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive,
+ ne2000_can_receive, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str),
"ne2000 pci macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
Index: qemu/hw/smc91c111.c
===================================================================
RCS file: /sources/qemu/qemu/hw/smc91c111.c,v
retrieving revision 1.2
diff -u -p -r1.2 smc91c111.c
--- hw/smc91c111.c 18 Dec 2005 17:39:52 -0000 1.2
+++ hw/smc91c111.c 20 Dec 2005 21:11:38 -0000
@@ -593,6 +593,17 @@ static uint32_t smc91c111_readl(void *op
return val;
}
+static int smc91c111_can_receive(void *opaque)
+{
+ smc91c111_state *s = (smc91c111_state *)opaque;
+
+ if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST))
+ return 1;
+ if (s->allocated == (1 << NUM_PACKETS) - 1)
+ return 0;
+ return 1;
+}
+
static void smc91c111_receive(void *opaque, const uint8_t *buf, int size)
{
smc91c111_state *s = (smc91c111_state *)opaque;
@@ -697,6 +708,7 @@ void smc91c111_init(NICInfo *nd, uint32_
smc91c111_reset(s);
- s->vc = qemu_new_vlan_client(nd->vlan, smc91c111_receive, s);
+ s->vc = qemu_new_vlan_client(nd->vlan, smc91c111_receive,
+ smc91c111_can_receive, s);
/* ??? Save/restore. */
}

View File

@ -1,29 +0,0 @@
# 1.53
Index: qemu/target-i386/translate.c
@@ -5803,14 +5803,24 @@
op = (modrm >> 3) & 7;
switch(op) {
case 0: /* fxsave */
- if (mod == 3 || !(s->cpuid_features & CPUID_FXSR))
+ if (mod == 3 || !(s->cpuid_features & CPUID_FXSR) ||
+ (s->flags & HF_EM_MASK))
goto illegal_op;
+ if (s->flags & HF_TS_MASK) {
+ gen_exception(s, EXCP07_PREX, pc_start - s->cs_base);
+ break;
+ }
gen_lea_modrm(s, modrm, &reg_addr, &offset_addr);
gen_op_fxsave_A0((s->dflag == 2));
break;
case 1: /* fxrstor */
- if (mod == 3 || !(s->cpuid_features & CPUID_FXSR))
+ if (mod == 3 || !(s->cpuid_features & CPUID_FXSR) ||
+ (s->flags & HF_EM_MASK))
goto illegal_op;
+ if (s->flags & HF_TS_MASK) {
+ gen_exception(s, EXCP07_PREX, pc_start - s->cs_base);
+ break;
+ }
gen_lea_modrm(s, modrm, &reg_addr, &offset_addr);
gen_op_fxrstor_A0((s->dflag == 2));
break;