From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O937Q-00011a-Kd for qemu-devel@nongnu.org; Mon, 03 May 2010 17:24:00 -0400 Received: from [140.186.70.92] (port=44556 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O937P-00010a-7y for qemu-devel@nongnu.org; Mon, 03 May 2010 17:24:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O937N-0006Fl-H0 for qemu-devel@nongnu.org; Mon, 03 May 2010 17:23:59 -0400 Received: from mail-ww0-f45.google.com ([74.125.82.45]:61695) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O937M-0006FP-TU for qemu-devel@nongnu.org; Mon, 03 May 2010 17:23:57 -0400 Received: by wwb28 with SMTP id 28so36586wwb.4 for ; Mon, 03 May 2010 14:23:55 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <4BDF156E.2090207@codemonkey.ws> References: <1271459404-21790-1-git-send-email-atar4qemu@google.com> <4BDF156E.2090207@codemonkey.ws> From: Artyom Tarasenko Date: Mon, 3 May 2010 23:23:35 +0200 Message-ID: Subject: Re: [Qemu-devel] [patch 01/02] create empty_slot device Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: blauwirbel@gmail.com, qemu-devel@nongnu.org, Artyom Tarasenko 2010/5/3 Anthony Liguori : > On 04/16/2010 06:10 PM, Artyom Tarasenko wrote: >> >> create empty_slot device >> >> The empty_slot device emulates known to a bus but not connected devices. >> >> Signed-off-by: Artyom Tarasenko >> --- >> > > What's this for? It's an empty slot for a bus with a handshake. E.g. sbus, or a ram bus with a parity check. > Is there a 2/2 missing? Is already in the current master. > > Regards, > > Anthony Liguori > >> =A0hw/empty_slot.c | =A0 92 >> +++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> =A0hw/empty_slot.h | =A0 =A02 + >> =A02 files changed, 94 insertions(+), 0 deletions(-) >> =A0create mode 100644 hw/empty_slot.c >> =A0create mode 100644 hw/empty_slot.h >> >> diff --git a/hw/empty_slot.c b/hw/empty_slot.c >> new file mode 100644 >> index 0000000..8dc10ac >> --- /dev/null >> +++ b/hw/empty_slot.c >> @@ -0,0 +1,92 @@ >> +/* >> + * QEMU Empty Slot >> + * >> + * The empty_slot device emulates known to a bus but not connected >> devices. >> + * >> + * Copyright (c) 2010 Artyom Tarasenko >> + * >> + * This code is licensed under the GNU GPL v2 or (at your option) any >> later >> + * version. >> + */ >> + >> +#include "hw.h" >> +#include "sysbus.h" >> +#include "empty_slot.h" >> + >> +//#define DEBUG_EMPTY_SLOT >> + >> +#ifdef DEBUG_EMPTY_SLOT >> +#define DPRINTF(fmt, ...) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ >> + =A0 =A0do { printf("empty_slot: " fmt , ## __VA_ARGS__); } while (0) >> +#else >> +#define DPRINTF(fmt, ...) do {} while (0) >> +#endif >> + >> +typedef struct EmptySlot { >> + =A0 =A0SysBusDevice busdev; >> + =A0 =A0uint64_t size; >> +} EmptySlot; >> + >> +static uint32_t empty_slot_readl(void *opaque, target_phys_addr_t addr) >> +{ >> + =A0 =A0DPRINTF("read from " TARGET_FMT_plx "\n", addr); >> + =A0 =A0return 0; >> +} >> + >> +static void empty_slot_writel(void *opaque, target_phys_addr_t addr, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0uint32_t va= l) >> +{ >> + =A0 =A0DPRINTF("write 0x%x to " TARGET_FMT_plx "\n", val, addr); >> +} >> + >> +CPUReadMemoryFunc * const empty_slot_read[3] =3D { >> + =A0 =A0empty_slot_readl, >> + =A0 =A0empty_slot_readl, >> + =A0 =A0empty_slot_readl, >> +}; >> + >> +static CPUWriteMemoryFunc * const empty_slot_write[3] =3D { >> + =A0 =A0empty_slot_writel, >> + =A0 =A0empty_slot_writel, >> + =A0 =A0empty_slot_writel, >> +}; >> + >> +void empty_slot_init(target_phys_addr_t addr, uint64_t slot_size) >> +{ >> + =A0 =A0DeviceState *dev; >> + =A0 =A0SysBusDevice *s; >> + =A0 =A0EmptySlot *e; >> + >> + =A0 =A0dev =3D qdev_create(NULL, "empty_slot"); >> + =A0 =A0s =3D sysbus_from_qdev(dev); >> + =A0 =A0e =3D FROM_SYSBUS(EmptySlot, s); >> + =A0 =A0e->size =3D slot_size; >> + >> + =A0 =A0qdev_init_nofail(dev); >> + >> + =A0 =A0sysbus_mmio_map(s, 0, addr); >> +} >> + >> +static int empty_slot_init1(SysBusDevice *dev) >> +{ >> + =A0 =A0EmptySlot *s =3D FROM_SYSBUS(EmptySlot, dev); >> + =A0 =A0ram_addr_t empty_slot_offset; >> + >> + =A0 =A0empty_slot_offset =3D cpu_register_io_memory(empty_slot_read, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 empty_slot_write, s); >> + =A0 =A0sysbus_init_mmio(dev, s->size, empty_slot_offset | IO_MEM_RAM); >> + =A0 =A0return 0; >> +} >> + >> +static SysBusDeviceInfo empty_slot_info =3D { >> + =A0 =A0.init =3D empty_slot_init1, >> + =A0 =A0.qdev.name =A0=3D "empty_slot", >> + =A0 =A0.qdev.size =A0=3D sizeof(EmptySlot), >> +}; >> + >> +static void empty_slot_register_devices(void) >> +{ >> + =A0 =A0sysbus_register_withprop(&empty_slot_info); >> +} >> + >> +device_init(empty_slot_register_devices); >> diff --git a/hw/empty_slot.h b/hw/empty_slot.h >> new file mode 100644 >> index 0000000..377731e >> --- /dev/null >> +++ b/hw/empty_slot.h >> @@ -0,0 +1,2 @@ >> +/* empty_slot.c */ >> +void empty_slot_init(target_phys_addr_t addr, uint64_t slot_size); >> > > --=20 Regards, Artyom Tarasenko solaris/sparc under qemu blog: http://tyom.blogspot.com/