* [Qemu-devel] Re: [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)
2009-11-25 22:53 ` [Qemu-devel] " H. Peter Anvin
@ 2009-11-26 7:43 ` Jan Kiszka
0 siblings, 0 replies; 9+ messages in thread
From: Jan Kiszka @ 2009-11-26 7:43 UTC (permalink / raw)
To: H. Peter Anvin; +Cc: qemu-devel, H. Peter Anvin
[-- Attachment #1: Type: text/plain, Size: 522 bytes --]
H. Peter Anvin wrote:
...
> diff --git a/qemu-options.hx b/qemu-options.hx
> index b65fd74..92ade30 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -1586,6 +1586,17 @@ The default device is @code{vc} in graphical mode and @code{stdio} in
> non graphical mode.
> ETEXI
>
> +DEF("debugcon", HAS_ARG, QEMU_OPTION_debugcon, \
> + "-debugcon dev redirect the debug console to char device 'dev'\n")
> +STEXI
> +@item -monitor @var{dev}
^^^^^^^
Classic copy&paste mistake.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)
2009-11-25 22:54 ` Gerd Hoffmann
@ 2009-11-26 13:18 ` Paolo Bonzini
0 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2009-11-26 13:18 UTC (permalink / raw)
To: qemu-devel
On 11/25/2009 11:54 PM, Gerd Hoffmann wrote:
>
> Wouldn't be that hard I think.
Cool. I had thought of a similar exercise to wet my feet with
qdev/qemuopts, I may actually do it when I have some time...
Paolo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)
[not found] ` <20091230164946.GA9858@morn.localdomain>
@ 2010-01-02 3:01 ` H. Peter Anvin
2010-01-02 3:02 ` H. Peter Anvin
1 sibling, 0 replies; 9+ messages in thread
From: H. Peter Anvin @ 2010-01-02 3:01 UTC (permalink / raw)
To: Kevin O'Connor; +Cc: H. Peter Anvin, qemu-devel, kraxel
On 12/30/2009 08:49 AM, Kevin O'Connor wrote:
> On Tue, Dec 29, 2009 at 01:51:36PM -0800, H. Peter Anvin wrote:
>> Add generic support for debugging consoles (simple I/O ports which
>> when written to cause debugging output to be written to a target.)
>> The current implementation matches Bochs' port 0xe9, allowing the same
>> debugging code to be used for both Bochs and Qemu.
>>
>> There is no vm state associated with the debugging port, simply
>> because it has none -- the entire interface is a single, stateless,
>> write-only port.
>>
>> Most of the code was cribbed from the serial port driver.
>
> Hi,
>
> SeaBIOS writes debugging info to port 0x0402. Unfortunately, qemu has
> to be recompiled in order to display this info. Will your patch
> enable one to get at the 0x0402 data without recompiling?
>
Yes.
-hpa
--
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel. I don't speak on their behalf.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)
[not found] ` <20091230164946.GA9858@morn.localdomain>
2010-01-02 3:01 ` [Qemu-devel] [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9) H. Peter Anvin
@ 2010-01-02 3:02 ` H. Peter Anvin
2010-01-02 17:53 ` Kevin O'Connor
1 sibling, 1 reply; 9+ messages in thread
From: H. Peter Anvin @ 2010-01-02 3:02 UTC (permalink / raw)
To: qemu-devel
On 12/30/2009 08:49 AM, Kevin O'Connor wrote:
>
> Hi,
>
> SeaBIOS writes debugging info to port 0x0402. Unfortunately, qemu has
> to be recompiled in order to display this info. Will your patch
> enable one to get at the 0x0402 data without recompiling?
>
> -Kevin
>
Incidentally, it's somewhat unusual choice of ports... port 0x80 is the
normal port for BIOSes to display debugging information on.
-hpa
--
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel. I don't speak on their behalf.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)
2010-01-02 3:02 ` H. Peter Anvin
@ 2010-01-02 17:53 ` Kevin O'Connor
2010-01-02 18:56 ` H. Peter Anvin
0 siblings, 1 reply; 9+ messages in thread
From: Kevin O'Connor @ 2010-01-02 17:53 UTC (permalink / raw)
To: H. Peter Anvin; +Cc: qemu-devel
On Fri, Jan 01, 2010 at 07:02:59PM -0800, H. Peter Anvin wrote:
> On 12/30/2009 08:49 AM, Kevin O'Connor wrote:
> > SeaBIOS writes debugging info to port 0x0402. Unfortunately, qemu has
> > to be recompiled in order to display this info. Will your patch
> > enable one to get at the 0x0402 data without recompiling?
>
> Incidentally, it's somewhat unusual choice of ports... port 0x80 is the
> normal port for BIOSes to display debugging information on.
Port 0x0402 is a carry over from Bochs bios.
Port 0x80 isn't generally used to emit a stream of ascii data, and it
can be used by other programs besides the bios. I'd guess that's why
Bochs chose a different port.
-Kevin
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)
2010-01-02 17:53 ` Kevin O'Connor
@ 2010-01-02 18:56 ` H. Peter Anvin
2010-01-03 2:13 ` François Revol
0 siblings, 1 reply; 9+ messages in thread
From: H. Peter Anvin @ 2010-01-02 18:56 UTC (permalink / raw)
To: Kevin O'Connor; +Cc: qemu-devel
On 01/02/2010 09:53 AM, Kevin O'Connor wrote:
> On Fri, Jan 01, 2010 at 07:02:59PM -0800, H. Peter Anvin wrote:
>> On 12/30/2009 08:49 AM, Kevin O'Connor wrote:
>>> SeaBIOS writes debugging info to port 0x0402. Unfortunately, qemu has
>>> to be recompiled in order to display this info. Will your patch
>>> enable one to get at the 0x0402 data without recompiling?
>>
>> Incidentally, it's somewhat unusual choice of ports... port 0x80 is the
>> normal port for BIOSes to display debugging information on.
>
> Port 0x0402 is a carry over from Bochs bios.
>
> Port 0x80 isn't generally used to emit a stream of ascii data, and it
> can be used by other programs besides the bios. I'd guess that's why
> Bochs chose a different port.
>
> -Kevin
Makes sense. Either way, it works with my patch looking something like:
-chardev stdio,id=seabios \
-device isa-debugcon,iobase=0x402,chardev=seabios
... should do the job.
-hpa
--
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel. I don't speak on their behalf.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)
2010-01-02 18:56 ` H. Peter Anvin
@ 2010-01-03 2:13 ` François Revol
0 siblings, 0 replies; 9+ messages in thread
From: François Revol @ 2010-01-03 2:13 UTC (permalink / raw)
To: qemu-devel
> Makes sense. Either way, it works with my patch looking something
> like:
>
> -chardev stdio,id=seabios \
> -device isa-debugcon,iobase=0x402,chardev=seabios
>
> ... should do the job.
Btw,
I once added another method of debug output to ZETA, that was using the
low-level protocol used by laplink (nibble mode). I needed this for a
laptop that didn't have a serial port but still had a // one. This
allowed bidirectionnal debugging (including sending kernel debugger
commands) with a null-printer cable.
I also wrote code to support it in Haiku, though I'm not sure I've
added the receiving driver yet.
See:
http://dev.haiku-os.org/browser/haiku/trunk/src/add-ons/kernel/debugger/laplinkll
I don't know if the parallel port emulation in QEMU supports dumping
bytes at nibble mode yet, it might be interesting to add this anyway.
Though it should also be possible to just use 8bit mode and dump data
straight to it as with the 0x402 port.
François.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)
[not found] <1262123496-12007-1-git-send-email-hpa@linux.intel.com>
[not found] ` <20091230164946.GA9858@morn.localdomain>
@ 2010-01-04 14:13 ` Gerd Hoffmann
2010-01-08 16:36 ` [Qemu-devel] " Anthony Liguori
2 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2010-01-04 14:13 UTC (permalink / raw)
To: H. Peter Anvin; +Cc: qemu-devel
On 12/29/09 22:51, H. Peter Anvin wrote:
> Add generic support for debugging consoles (simple I/O ports which
> when written to cause debugging output to be written to a target.)
> The current implementation matches Bochs' port 0xe9, allowing the same
> debugging code to be used for both Bochs and Qemu.
Looks good to me.
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
cheers,
Gerd
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)
[not found] <1262123496-12007-1-git-send-email-hpa@linux.intel.com>
[not found] ` <20091230164946.GA9858@morn.localdomain>
2010-01-04 14:13 ` [Qemu-devel] " Gerd Hoffmann
@ 2010-01-08 16:36 ` Anthony Liguori
2 siblings, 0 replies; 9+ messages in thread
From: Anthony Liguori @ 2010-01-08 16:36 UTC (permalink / raw)
To: H. Peter Anvin; +Cc: qemu-devel, kraxel
On 12/29/2009 03:51 PM, H. Peter Anvin wrote:
> Add generic support for debugging consoles (simple I/O ports which
> when written to cause debugging output to be written to a target.)
> The current implementation matches Bochs' port 0xe9, allowing the same
> debugging code to be used for both Bochs and Qemu.
>
> There is no vm state associated with the debugging port, simply
> because it has none -- the entire interface is a single, stateless,
> write-only port.
>
> Most of the code was cribbed from the serial port driver.
>
> v2: removed non-ISA variants (they can be introduced when/if someone
> wants them, using code from the serial port); added configurable
> readback (Bochs returns 0xe9 on a read from this register, mimic that
> by default) This retains the apparently somewhat controversial user
> friendly option, however.
>
> v3: reimplemented the user friendly option as a synthetic option
> ("-debugcon foo" basically ends up being a parser-level shorthand for
> "-chardev stdio,id=debugcon -device isa-debugcon,chardev=debugcon") --
> this dramatically reduced the complexity while keeping the same level
> of user friendliness.
>
> v4: spaces, not tabs.
>
> v5: update to match current top of tree. Calling qemu_chr_open()
> already during parsing no longer works; defer until we are parsing the
> other console-like devices.
>
> Signed-off-by: H. Peter Anvin<hpa@linux.intel.com>
>
Applied. Thanks.
Regards,
Anthony Liguori
> ---
> Makefile.target | 2 +-
> hw/debugcon.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> qemu-options.hx | 11 ++++++
> vl.c | 23 ++++++++++++
> 4 files changed, 142 insertions(+), 1 deletions(-)
> create mode 100644 hw/debugcon.c
>
> diff --git a/Makefile.target b/Makefile.target
> index 7c1f30c..0a803ef 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -194,7 +194,7 @@ obj-i386-y += fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o
> obj-i386-y += cirrus_vga.o apic.o ioapic.o parallel.o acpi.o piix_pci.o
> obj-i386-y += usb-uhci.o vmmouse.o vmport.o vmware_vga.o hpet.o
> obj-i386-y += device-hotplug.o pci-hotplug.o smbios.o wdt_ib700.o
> -obj-i386-y += ne2000-isa.o
> +obj-i386-y += ne2000-isa.o debugcon.o
>
> # shared objects
> obj-ppc-y = ppc.o ide/core.o ide/qdev.o ide/isa.o ide/pci.o ide/macio.o
> diff --git a/hw/debugcon.c b/hw/debugcon.c
> new file mode 100644
> index 0000000..d549091
> --- /dev/null
> +++ b/hw/debugcon.c
> @@ -0,0 +1,107 @@
> +/*
> + * QEMU Bochs-style debug console ("port E9") emulation
> + *
> + * Copyright (c) 2003-2004 Fabrice Bellard
> + * Copyright (c) 2008 Citrix Systems, Inc.
> + * Copyright (c) Intel Corporation; author: H. Peter Anvin
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +
> +#include "hw.h"
> +#include "qemu-char.h"
> +#include "isa.h"
> +#include "pc.h"
> +
> +//#define DEBUG_DEBUGCON
> +
> +typedef struct DebugconState {
> + CharDriverState *chr;
> + uint32_t readback;
> +} DebugconState;
> +
> +typedef struct ISADebugconState {
> + ISADevice dev;
> + uint32_t iobase;
> + DebugconState state;
> +} ISADebugconState;
> +
> +static void debugcon_ioport_write(void *opaque, uint32_t addr, uint32_t val)
> +{
> + DebugconState *s = opaque;
> + unsigned char ch = val;
> +
> +#ifdef DEBUG_DEBUGCON
> + printf("debugcon: write addr=0x%04x val=0x%02x\n", addr, val);
> +#endif
> +
> + qemu_chr_write(s->chr,&ch, 1);
> +}
> +
> +
> +static uint32_t debugcon_ioport_read(void *opaque, uint32_t addr)
> +{
> + DebugconState *s = opaque;
> +
> +#ifdef DEBUG_DEBUGCON
> + printf("debugcon: read addr=0x%04x\n", addr, val);
> +#endif
> +
> + return s->readback;
> +}
> +
> +static void debugcon_init_core(DebugconState *s)
> +{
> + if (!s->chr) {
> + fprintf(stderr, "Can't create debugcon device, empty char device\n");
> + exit(1);
> + }
> +
> + qemu_chr_add_handlers(s->chr, NULL, NULL, NULL, s);
> +}
> +
> +static int debugcon_isa_initfn(ISADevice *dev)
> +{
> + ISADebugconState *isa = DO_UPCAST(ISADebugconState, dev, dev);
> + DebugconState *s =&isa->state;
> +
> + debugcon_init_core(s);
> + register_ioport_write(isa->iobase, 1, 1, debugcon_ioport_write, s);
> + register_ioport_read(isa->iobase, 1, 1, debugcon_ioport_read, s);
> + return 0;
> +}
> +
> +static ISADeviceInfo debugcon_isa_info = {
> + .qdev.name = "isa-debugcon",
> + .qdev.size = sizeof(ISADebugconState),
> + .init = debugcon_isa_initfn,
> + .qdev.props = (Property[]) {
> + DEFINE_PROP_HEX32("iobase", ISADebugconState, iobase, 0xe9),
> + DEFINE_PROP_CHR("chardev", ISADebugconState, state.chr),
> + DEFINE_PROP_HEX32("readback", ISADebugconState, state.readback, 0xe9),
> + DEFINE_PROP_END_OF_LIST(),
> + },
> +};
> +
> +static void debugcon_register_devices(void)
> +{
> + isa_qdev_register(&debugcon_isa_info);
> +}
> +
> +device_init(debugcon_register_devices)
> diff --git a/qemu-options.hx b/qemu-options.hx
> index ecd50eb..9005fe8 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -1598,6 +1598,17 @@ STEXI
> Setup monitor on chardev @var{name}.
> ETEXI
>
> +DEF("debugcon", HAS_ARG, QEMU_OPTION_debugcon, \
> + "-debugcon dev redirect the debug console to char device 'dev'\n")
> +STEXI
> +@item -debugcon @var{dev}
> +Redirect the debug console to host device @var{dev} (same devices as the
> +serial port). The debug console is an I/O port which is typically port
> +0xe9; writing to that I/O port sends output to this device.
> +The default device is @code{vc} in graphical mode and @code{stdio} in
> +non graphical mode.
> +ETEXI
> +
> DEF("pidfile", HAS_ARG, QEMU_OPTION_pidfile, \
> "-pidfile file write PID to 'file'\n")
> STEXI
> diff --git a/vl.c b/vl.c
> index e881e45..2b0b653 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4748,6 +4748,7 @@ struct device_config {
> DEV_SERIAL, /* -serial */
> DEV_PARALLEL, /* -parallel */
> DEV_VIRTCON, /* -virtioconsole */
> + DEV_DEBUGCON, /* -debugcon */
> } type;
> const char *cmdline;
> QTAILQ_ENTRY(device_config) next;
> @@ -4845,6 +4846,23 @@ static int virtcon_parse(const char *devname)
> return 0;
> }
>
> +static int debugcon_parse(const char *devname)
> +{
> + QemuOpts *opts;
> +
> + if (!qemu_chr_open("debugcon", devname, NULL)) {
> + exit(1);
> + }
> + opts = qemu_opts_create(&qemu_device_opts, "debugcon", 1);
> + if (!opts) {
> + fprintf(stderr, "qemu: already have a debugcon device\n");
> + exit(1);
> + }
> + qemu_opt_set(opts, "driver", "isa-debugcon");
> + qemu_opt_set(opts, "chardev", "debugcon");
> + return 0;
> +}
> +
> int main(int argc, char **argv, char **envp)
> {
> const char *gdbstub_dev = NULL;
> @@ -5390,6 +5408,9 @@ int main(int argc, char **argv, char **envp)
> add_device_config(DEV_PARALLEL, optarg);
> default_parallel = 0;
> break;
> + case QEMU_OPTION_debugcon:
> + add_device_config(DEV_DEBUGCON, optarg);
> + break;
> case QEMU_OPTION_loadvm:
> loadvm = optarg;
> break;
> @@ -5927,6 +5948,8 @@ int main(int argc, char **argv, char **envp)
> exit(1);
> if (foreach_device_config(DEV_VIRTCON, virtcon_parse)< 0)
> exit(1);
> + if (foreach_device_config(DEV_DEBUGCON, debugcon_parse)< 0)
> + exit(1);
>
> module_call_init(MODULE_INIT_DEVICE);
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2010-01-08 16:36 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1262123496-12007-1-git-send-email-hpa@linux.intel.com>
[not found] ` <20091230164946.GA9858@morn.localdomain>
2010-01-02 3:01 ` [Qemu-devel] [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9) H. Peter Anvin
2010-01-02 3:02 ` H. Peter Anvin
2010-01-02 17:53 ` Kevin O'Connor
2010-01-02 18:56 ` H. Peter Anvin
2010-01-03 2:13 ` François Revol
2010-01-04 14:13 ` [Qemu-devel] " Gerd Hoffmann
2010-01-08 16:36 ` [Qemu-devel] " Anthony Liguori
2009-11-20 21:33 H. Peter Anvin
2009-11-23 10:52 ` Gerd Hoffmann
2009-11-23 20:11 ` H. Peter Anvin
2009-11-24 23:05 ` H. Peter Anvin
2009-11-25 12:46 ` Gerd Hoffmann
2009-11-25 18:01 ` H. Peter Anvin
2009-11-25 22:21 ` Gerd Hoffmann
2009-11-25 22:26 ` H. Peter Anvin
2009-11-25 22:31 ` H. Peter Anvin
2009-11-25 22:54 ` Gerd Hoffmann
2009-11-26 13:18 ` [Qemu-devel] " Paolo Bonzini
2009-11-25 22:53 ` [Qemu-devel] " H. Peter Anvin
2009-11-26 7:43 ` [Qemu-devel] " Jan Kiszka
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).