qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [patch 01/02] create empty_slot device


From: Artyom Tarasenko
Subject: Re: [Qemu-devel] [patch 01/02] create empty_slot device
Date: Mon, 3 May 2010 23:23:35 +0200

2010/5/3 Anthony Liguori <address@hidden>:
> 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<address@hidden>
>> ---
>>
>
> 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);
>>
>
>



-- 
Regards,
Artyom Tarasenko

solaris/sparc under qemu blog: http://tyom.blogspot.com/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]