From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gerd Hoffmann Subject: Re: [PATCH 01/10] Add test device for use with the test suite Date: Mon, 14 Sep 2009 09:52:42 +0200 Message-ID: <4AADF64A.3010905@redhat.com> References: <1252855135-2519-1-git-send-email-avi@redhat.com> <1252855135-2519-2-git-send-email-avi@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010707050107040502010401" Cc: Marcelo Tosatti , kvm@vger.kernel.org To: Avi Kivity Return-path: Received: from mx1.redhat.com ([209.132.183.28]:59879 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750749AbZINHwm (ORCPT ); Mon, 14 Sep 2009 03:52:42 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n8E7qjG5017739 for ; Mon, 14 Sep 2009 03:52:45 -0400 In-Reply-To: <1252855135-2519-2-git-send-email-avi@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------010707050107040502010401 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 09/13/09 17:18, Avi Kivity wrote: > The test device implements: > - a serial port (0xf1) > - an exit port (0xf4) > - a memory size port (0xd1) > +++ b/hw/pc.c > + extern int testdevice; > + > + if (testdevice) { > + create_test_device(ram_size); > + } > +++ b/qemu-options.hx > +DEF("test-device", 0, QEMU_OPTION_testdevice, > + "-test-device include testsuite support device") > +++ b/vl.c > + case QEMU_OPTION_testdevice: > + testdevice = 1; > + break; This is lame, isn't it? We have qdev now! --------------010707050107040502010401 Content-Type: text/plain; name="0001-add-test-device.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-add-test-device.patch" >>From 7c2b03ba5ac73ccf961febb727dc2b28a159c2ed Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Mon, 14 Sep 2009 09:35:15 +0200 Subject: [PATCH] add test device Don't pollute command line option namespace without reason. Use qdev instead. It is such a nice small example device! Also we have -chardev upstream now which makes it super easy to redirect the output anywhere you want. -chardev file,path=/log/file/some/where,id=testlog -device testdev,chardev=testlog Signed-off-by: Gerd Hoffmann --- Makefile.target | 2 +- hw/testdev.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletions(-) create mode 100644 hw/testdev.c diff --git a/Makefile.target b/Makefile.target index 0fe8b6a..9867cde 100644 --- a/Makefile.target +++ b/Makefile.target @@ -189,7 +189,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 testdev.o # shared objects obj-ppc-y = ppc.o ide/core.o ide/isa.o ide/pci.o ide/macio.o diff --git a/hw/testdev.c b/hw/testdev.c new file mode 100644 index 0000000..199731e --- /dev/null +++ b/hw/testdev.c @@ -0,0 +1,55 @@ +#include "hw.h" +#include "qdev.h" +#include "isa.h" + +struct testdev { + ISADevice dev; + CharDriverState *chr; +}; + +static void test_device_serial_write(void *opaque, uint32_t addr, uint32_t data) +{ + struct testdev *dev = opaque; + uint8_t buf[1] = { data }; + + if (dev->chr) { + qemu_chr_write(dev->chr, buf, 1); + } +} + +static void test_device_exit(void *opaque, uint32_t addr, uint32_t data) +{ + exit(data); +} + +static uint32_t test_device_memsize_read(void *opaque, uint32_t addr) +{ + return ram_size; +} + +static int init_test_device(ISADevice *isa) +{ + struct testdev *dev = DO_UPCAST(struct testdev, dev, isa); + + register_ioport_write(0xf1, 1, 1, test_device_serial_write, dev); + register_ioport_write(0xf4, 1, 4, test_device_exit, dev); + register_ioport_read(0xd1, 1, 4, test_device_memsize_read, dev); + return 0; +} + +static ISADeviceInfo testdev_info = { + .qdev.name = "testdev", + .qdev.size = sizeof(struct testdev), + .init = init_test_device, + .qdev.props = (Property[]) { + DEFINE_PROP_CHR("chardev", struct testdev, chr), + DEFINE_PROP_END_OF_LIST(), + }, +}; + +static void testdev_register_devices(void) +{ + isa_qdev_register(&testdev_info); +} + +device_init(testdev_register_devices) -- 1.6.2.5 --------------010707050107040502010401--