Am 10.06.2013 14:58, schrieb Gerd Hoffmann: > On 06/10/13 10:42, Peter Wu wrote: >> On Monday 10 June 2013 07:56:01 Gerd Hoffmann wrote: >>> On 06/08/13 23:49, Peter Wu wrote: >>>> When QEMU starts, it always changes the serial port parameters including >>>> baud rate. This confused my guest which thought it was outputting at 9600 >>>> baud while it was in fact changed to 115200. >>>> >>>> >>>> >>>> After this patch, I can use `-serial /dev/ttyS0,baud=9600` to override the >>>> default baud rate of 115200. >>> >>> I think we should just flip the default to 9600. IIRC this is the >>> power-on default baud rate of the 8250 uart family, so this should be >>> the qemu default too. If a guest wants to use a higher baudrate it has >>> to reprogram the uart anyway (and qemu will apply the guest changes to >>> the host uart). >> >> FWIW, when I tried MODE.COM in ms-dos to change the baud rate, `stty -F >> /dev/ttyS0 -a` still reported 115200 baud. This is on Linux 3.9 if that >> matters. > > Hmm, with a linux guest changing the baudrate works just fine. Any > chance mode.com takes a shortcut in case it thinks the rate didn't > change? Does setting the speed first to 4800, then to 9600 work? > >> Besides this comment, any other feedback on the patch itself? > > Style is fine. But it appears to paper over some bug, and I'd prefer to > find+fix the bug instead of allowing/requiring the user to set the baud > rate manually to the correct value.
Well, there's two instances of hardcoded 115200 baudrate: in the chardev for the host and in the device for the guest - I don't see the latter changed here: hw/arm/nseries.c: stw_raw(w ++, 115200); /* u32 console_speed */ hw/char/serial-isa.c: s->baudbase = 115200; hw/char/serial-pci.c: s->baudbase = 115200; hw/char/serial-pci.c: s->baudbase = 115200; hw/display/sm501.c: 115200, chr, DEVICE_NATIVE_ENDIAN); hw/lm32/lm32_hwsetup.h: hwsetup_add_u32(hw, 115200); /* baudrate */ hw/microblaze/petalogix_ml605_mmu.c: irq[5], 115200, serial_hds[0], DEVICE_LITTLE_ENDIAN); hw/mips/mips_mipssim.c: serial_init(0x3f8, env->irq[4], 115200, serial_hds[0], hw/openrisc/openrisc_sim.c: 115200, serial_hds[0], DEVICE_NATIVE_ENDIAN); hw/ppc/ppc405_boards.c: bd.bi_baudrate = 115200; hw/ppc/virtex_ml507.c: serial_mm_init(address_space_mem, 0x83e01003ULL, 2, irq[9], 115200, hw/sparc64/sun4u.c: NULL, 115200, serial_hds[i], DEVICE_BIG_ENDIAN); hw/xtensa/xtensa_lx60.c: 115200, serial_hds[0], DEVICE_NATIVE_ENDIAN); qemu-char.c: check_speed(115200); qemu-char.c:#ifdef B1152000 qemu-char.c: check_speed(1152000); qemu-char.c: spd = B115200; qemu-char.c: tty_serial_init(fd, 115200, 'N', 8, 1); slirp/slirp.h:#define DEFAULT_BAUD 115200 (The slirp define seems unused.) So yes, MS-DOS will get reported from hardware that it is at 115200, whatever you set for the chardev on the host side with your changes. Thought I pointed you to that fact on IRC already... Regards, Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg