Message ID | 1271459404-21790-1-git-send-email-atar4qemu@google.com |
---|---|
State | New |
Headers | show |
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<atar4qemu@gmail.com> > --- > What's this for? Is there a 2/2 missing? Regards, Anthony Liguori > 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); >
On 5/3/10, Anthony Liguori <anthony@codemonkey.ws> wrote: > 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<atar4qemu@gmail.com> > > --- > > > > > > What's this for? It provides a dummy device, used by Sparc32 in 2/2. > Is there a 2/2 missing? No, I've applied both (676d9b9b883691cf99e298291dbc2ad7956516b9 and da9fcfa54486797a5f261b43ad0c0b2f8dc47181).
2010/5/3 Anthony Liguori <anthony@codemonkey.ws>: > 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<atar4qemu@gmail.com> >> --- >> > > 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 > >> 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); >> > >
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);
create empty_slot device The empty_slot device emulates known to a bus but not connected devices. Signed-off-by: Artyom Tarasenko <atar4qemu@gmail.com> --- 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