From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O2ufq-0000yP-Re for qemu-devel@nongnu.org; Fri, 16 Apr 2010 19:10:10 -0400 Received: from [140.186.70.92] (port=46908 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O2ufp-0000xb-Do for qemu-devel@nongnu.org; Fri, 16 Apr 2010 19:10:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O2ufn-0006SW-HO for qemu-devel@nongnu.org; Fri, 16 Apr 2010 19:10:09 -0400 Received: from fg-out-1718.google.com ([72.14.220.156]:2979) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O2ufn-0006SK-C1 for qemu-devel@nongnu.org; Fri, 16 Apr 2010 19:10:07 -0400 Received: by fg-out-1718.google.com with SMTP id e21so488342fga.10 for ; Fri, 16 Apr 2010 16:10:05 -0700 (PDT) From: Artyom Tarasenko Date: Sat, 17 Apr 2010 01:10:04 +0200 Message-Id: <1271459404-21790-1-git-send-email-atar4qemu@google.com> Subject: [Qemu-devel] [patch 01/02] create empty_slot device List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: blauwirbel@gmail.com, Artyom Tarasenko create empty_slot device The empty_slot device emulates known to a bus but not connected devices. Signed-off-by: Artyom Tarasenko --- hw/empty_slot.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ hw/empty_slot.h | 2 + 2 files changed, 94 insertions(+), 0 deletions(-) create mode 100644 hw/empty_slot.c create 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, ...) \ + do { printf("empty_slot: " fmt , ## __VA_ARGS__); } while (0) +#else +#define DPRINTF(fmt, ...) do {} while (0) +#endif + +typedef struct EmptySlot { + SysBusDevice busdev; + uint64_t size; +} EmptySlot; + +static uint32_t empty_slot_readl(void *opaque, target_phys_addr_t addr) +{ + DPRINTF("read from " TARGET_FMT_plx "\n", addr); + return 0; +} + +static void empty_slot_writel(void *opaque, target_phys_addr_t addr, + uint32_t val) +{ + DPRINTF("write 0x%x to " TARGET_FMT_plx "\n", val, addr); +} + +CPUReadMemoryFunc * const empty_slot_read[3] = { + empty_slot_readl, + empty_slot_readl, + empty_slot_readl, +}; + +static CPUWriteMemoryFunc * const empty_slot_write[3] = { + empty_slot_writel, + empty_slot_writel, + empty_slot_writel, +}; + +void empty_slot_init(target_phys_addr_t addr, uint64_t slot_size) +{ + DeviceState *dev; + SysBusDevice *s; + EmptySlot *e; + + dev = qdev_create(NULL, "empty_slot"); + s = sysbus_from_qdev(dev); + e = FROM_SYSBUS(EmptySlot, s); + e->size = slot_size; + + qdev_init_nofail(dev); + + sysbus_mmio_map(s, 0, addr); +} + +static int empty_slot_init1(SysBusDevice *dev) +{ + EmptySlot *s = FROM_SYSBUS(EmptySlot, dev); + ram_addr_t empty_slot_offset; + + empty_slot_offset = cpu_register_io_memory(empty_slot_read, + empty_slot_write, s); + sysbus_init_mmio(dev, s->size, empty_slot_offset | IO_MEM_RAM); + return 0; +} + +static SysBusDeviceInfo empty_slot_info = { + .init = empty_slot_init1, + .qdev.name = "empty_slot", + .qdev.size = sizeof(EmptySlot), +}; + +static void empty_slot_register_devices(void) +{ + sysbus_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); -- 1.6.6.1