All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev
@ 2010-08-01 13:42 Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 01/20] [MIPS] cpu: add a init inplace method Hervé Poussineau
                   ` (20 more replies)
  0 siblings, 21 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 13:42 UTC (permalink / raw)
  To: QEMU Developers

[-- Attachment #1: Type: text/plain, Size: 547 bytes --]

This series converts devices used by MIPS Magnum emulation to qdev devices.
Once applied, Magnum emulation will be fully creatable by a 
configuration file (see attached file)

usage:
qemu-system-mips64el -M empty -nodefaults -readconfig magnum
-netdev id=nic,type=user
-drive id=disk,format=qcow2,if=none,file=1G.qcow2
-drive id=cdrom,media=cdrom,format=raw,if=none,file=arccd.iso
-chardev id=serial0,backend=vc
-chardev id=serial1,backend=vc
-chardev id=parallel0,backend=vc

All feedback is very appreciated.

Regards,

Hervé

[-- Attachment #2: magnum.qemu --]
[-- Type: text/plain, Size: 1523 bytes --]

# MIPS Magnum definition for QEMU

[device]
  driver = "mips-board"
  romfile = "/mnt/C/NTPROM.bin"
  ramsize = "64"

[device]
  driver = "cpu-mips"
  model = "R4000"

[device]
  driver = "rc4030"

[device]
  driver = "isabus"
  iobase = "0x90000000"
  size = "0x1000000"

[device]
  driver = "mc146818rtc"
  base_year = "1980"

[device]
  driver = "rc4030-g364fb"
  iobase = "0x60000000"
  vram = "0x40000000"
  vram_size = "0x800000"
  irq = "3"

[device]
  driver = "rc4030-dp83932"
  iobase = "0x80001000"
  irq = "4"
  mac = "52:54:00:12:34:56"
  netdev = "nic"

[device]
  driver = "rc4030-esp"
  iobase = "0x80002000"
  irq = "5"
  dma = "0"

[device]
  driver = "scsi-disk"
  drive = "disk"
  scsi-id = "0"

[device]
  driver = "scsi-disk"
  drive = "cdrom"
  scsi-id = "4"

[device]
  driver = "rc4030-fdc"
  iobase = "0x80003000"
  irq = "1"
  dma = "0"

[device]
  driver = "rtc-forward"
  iobase = "0x80004000"
  size = "0x1000"

[device]
  driver = "rc4030-i8042"
  iobase = "0x80005000"
  size = "0x1000"
  mask = "0x1"
  irq_kbd = "6"
  irq_aux = "7"

[device]
  driver = "rc4030-serial"
  chardev = "serial0"
  iobase = "0x80006000"
  irq = "8"

[device]
  driver = "rc4030-serial"
  chardev = "serial1"
  iobase = "0x80007000"
  irq = "9"

[device]
  driver = "rc4030-parallel"
  chardev = "parallel0"
  iobase = "0x80008000"
  irq = "0"

[device]
  driver = "ds1225y"
  iobase = "0x80009000"
  size = "0x2000"
  filename = "nvram"

[device]
  driver = "jazz-led"
  iobase = "0x8000f000"
  size = "0x1000"

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 01/20] [MIPS] cpu: add a init inplace method
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 02/20] [MIPS] cpu: convert to qdev Hervé Poussineau
                   ` (19 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau


Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 target-mips/cpu.h       |    1 +
 target-mips/translate.c |   16 ++++++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/target-mips/cpu.h b/target-mips/cpu.h
index b8e6fee..b75e1e6 100644
--- a/target-mips/cpu.h
+++ b/target-mips/cpu.h
@@ -586,6 +586,7 @@ enum {
 
 int cpu_mips_exec(CPUMIPSState *s);
 CPUMIPSState *cpu_mips_init(const char *cpu_model);
+int cpu_mips_init_inplace(CPUMIPSState *env, const char *cpu_model);
 //~ uint32_t cpu_mips_get_clock (void);
 int cpu_mips_signal_handler(int host_signum, void *pinfo, void *puc);
 
diff --git a/target-mips/translate.c b/target-mips/translate.c
index 20b66a8..558f6ac 100644
--- a/target-mips/translate.c
+++ b/target-mips/translate.c
@@ -12580,15 +12580,13 @@ static void mips_tcg_init(void)
 
 #include "translate_init.c"
 
-CPUMIPSState *cpu_mips_init (const char *cpu_model)
+int cpu_mips_init_inplace(CPUMIPSState *env, const char *cpu_model)
 {
-    CPUMIPSState *env;
     const mips_def_t *def;
 
     def = cpu_mips_find_by_name(cpu_model);
     if (!def)
-        return NULL;
-    env = qemu_mallocz(sizeof(CPUMIPSState));
+        return -1;
     env->cpu_model = def;
     env->cpu_model_str = cpu_model;
 
@@ -12601,6 +12599,16 @@ CPUMIPSState *cpu_mips_init (const char *cpu_model)
     mips_tcg_init();
     cpu_reset(env);
     qemu_init_vcpu(env);
+    return 0;
+}
+
+CPUMIPSState *cpu_mips_init (const char *cpu_model)
+{
+    CPUMIPSState *env;
+
+    env = qemu_mallocz(sizeof(CPUMIPSState));
+    if (!cpu_mips_init_inplace(env, cpu_model))
+        return NULL;
     return env;
 }
 
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 02/20] [MIPS] cpu: convert to qdev
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 01/20] [MIPS] cpu: add a init inplace method Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 03/20] [MIPS] Jazz emulation: create a qdev cpu Hervé Poussineau
                   ` (18 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Add a qdev device representing a whole MIPS CPU, ie the core, the interrupt controller, and the timer.
Export a qdev bus, so other devices can use MIPS CPU interrupts

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips_cpudevs.h |    4 ++
 hw/mips_int.c     |   81 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 85 insertions(+), 0 deletions(-)

diff --git a/hw/mips_cpudevs.h b/hw/mips_cpudevs.h
index db82b41..495b3fd 100644
--- a/hw/mips_cpudevs.h
+++ b/hw/mips_cpudevs.h
@@ -1,5 +1,7 @@
 #ifndef HW_MIPS_CPUDEVS_H
 #define HW_MIPS_CPUDEVS_H
+#include "qdev.h"
+
 /* Definitions for MIPS CPU internal devices.  */
 
 /* mips_addr.c */
@@ -8,6 +10,8 @@ uint64_t cpu_mips_phys_to_kseg0(void *opaque, uint64_t addr);
 
 /* mips_int.c */
 void cpu_mips_irq_init_cpu(CPUState *env);
+BusState *cpu_mips_init_cpu(const char *model);
+void cpu_mips_register(DeviceInfo *info);
 
 /* mips_timer.c */
 void cpu_mips_clock_init(CPUState *);
diff --git a/hw/mips_int.c b/hw/mips_int.c
index 477f6ab..8e868be 100644
--- a/hw/mips_int.c
+++ b/hw/mips_int.c
@@ -22,6 +22,7 @@
 
 #include "hw.h"
 #include "mips_cpudevs.h"
+#include "sysbus.h"
 #include "cpu.h"
 
 static void cpu_mips_irq_request(void *opaque, int irq, int level)
@@ -63,3 +64,83 @@ void cpu_mips_soft_irq(CPUState *env, int irq, int level)
 
     qemu_set_irq(env->irq[irq], level);
 }
+
+typedef struct CPUMIPS
+{
+    SysBusDevice busdev;
+    BusState qbus;
+    char *model;
+    CPUState state;
+} CPUMIPS;
+
+static void cpu_mips_irq_request1(void *opaque, int irq, int level)
+{
+    CPUMIPS *s = FROM_SYSBUS(CPUMIPS, sysbus_from_qdev(opaque));
+    CPUState *env = &s->state;
+    cpu_mips_irq_request(env, irq, level);
+}
+
+static void cpu_device_reset(DeviceState *d)
+{
+    CPUMIPS *s = FROM_SYSBUS(CPUMIPS, sysbus_from_qdev(d));
+    cpu_reset(&s->state);
+}
+
+static struct BusInfo cpu_bus_info = {
+    .name      = "cpu",
+    .size      = 0,
+};
+
+void cpu_mips_register(DeviceInfo *info)
+{
+    info->bus_info = &cpu_bus_info;
+    qdev_register(info);
+}
+
+static int cpu_device_init(SysBusDevice *dev)
+{
+    CPUMIPS* cpu = FROM_SYSBUS(CPUMIPS, dev);
+
+    if (cpu_mips_init_inplace(&cpu->state, cpu->model) < 0)
+        return -1;
+
+    cpu_mips_clock_init(&cpu->state);
+
+    qbus_create_inplace(&cpu->qbus, &cpu_bus_info, &dev->qdev, NULL);
+    qdev_init_gpio_in(cpu->qbus.parent, cpu_mips_irq_request1, 8);
+    return 0;
+}
+
+static SysBusDeviceInfo cpu_device_info = {
+    .qdev.name  = "cpu-mips",
+    .qdev.size  = sizeof(CPUMIPS),
+    .qdev.reset = cpu_device_reset,
+    .init       = cpu_device_init,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_STRING("model", CPUMIPS, model),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
+static void mips_register_devices(void)
+{
+    sysbus_register_withprop(&cpu_device_info);
+}
+
+device_init(mips_register_devices)
+
+BusState *cpu_mips_init_cpu(const char *cpu_model)
+{
+    DeviceState *dev;
+
+    dev = qdev_create(NULL, "cpu-mips");
+    if (!dev) {
+        return NULL;
+    }
+    qdev_prop_set_string(dev, "model", qemu_strdup(cpu_model));
+    if (qdev_init(dev) < 0) {
+        return NULL;
+    }
+    return &container_of(dev, CPUMIPS, busdev.qdev)->qbus;
+}
+
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 03/20] [MIPS] Jazz emulation: create a qdev cpu
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 01/20] [MIPS] cpu: add a init inplace method Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 02/20] [MIPS] cpu: convert to qdev Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 04/20] [MIPS] rc4030: convert to qdev Hervé Poussineau
                   ` (17 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau


Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips_jazz.c |   21 +++++----------------
 1 files changed, 5 insertions(+), 16 deletions(-)

diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index 71b05a2..78ef8f0 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -43,12 +43,6 @@ enum jazz_model_e
     JAZZ_PICA61,
 };
 
-static void main_cpu_reset(void *opaque)
-{
-    CPUState *env = opaque;
-    cpu_reset(env);
-}
-
 static uint32_t rtc_readb(void *opaque, target_phys_addr_t addr)
 {
     return cpu_inw(0x71);
@@ -128,7 +122,7 @@ void mips_jazz_init (ram_addr_t ram_size,
 {
     char *filename;
     int bios_size, n;
-    CPUState *env;
+    BusState *cpu;
     qemu_irq *rc4030, *i8259;
     rc4030_dma *dmas;
     void* rc4030_opaque;
@@ -150,12 +144,11 @@ void mips_jazz_init (ram_addr_t ram_size,
         cpu_model = "24Kf";
 #endif
     }
-    env = cpu_init(cpu_model);
-    if (!env) {
+    cpu = cpu_mips_init_cpu(cpu_model);
+    if (!cpu) {
         fprintf(stderr, "Unable to find CPU definition\n");
         exit(1);
     }
-    qemu_register_reset(main_cpu_reset, env);
 
     /* allocate RAM */
     ram_offset = qemu_ram_alloc(NULL, "mips_jazz.ram", ram_size);
@@ -184,17 +177,13 @@ void mips_jazz_init (ram_addr_t ram_size,
         exit(1);
     }
 
-    /* Init CPU internal devices */
-    cpu_mips_irq_init_cpu(env);
-    cpu_mips_clock_init(env);
-
     /* Chipset */
-    rc4030_opaque = rc4030_init(env->irq[6], env->irq[3], &rc4030, &dmas);
+    rc4030_opaque = rc4030_init(qdev_get_gpio_in(cpu->parent, 6), qdev_get_gpio_in(cpu->parent, 3), &rc4030, &dmas);
     s_dma_dummy = cpu_register_io_memory(dma_dummy_read, dma_dummy_write, NULL);
     cpu_register_physical_memory(0x8000d000, 0x00001000, s_dma_dummy);
 
     /* ISA devices */
-    i8259 = i8259_init(env->irq[4]);
+    i8259 = i8259_init(qdev_get_gpio_in(cpu->parent, 4));
     isa_bus_new(NULL);
     isa_bus_irqs(i8259);
     cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 04/20] [MIPS] rc4030: convert to qdev
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (2 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 03/20] [MIPS] Jazz emulation: create a qdev cpu Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 05/20] Add a stub for some rc4030 functions, if rc4030 support is not compiled in Hervé Poussineau
                   ` (16 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

rc4030_init() function will be removed later, once all rc4030 devices are converted to qdev

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips.h      |    9 ---
 hw/mips_jazz.c |    3 +-
 hw/rc4030.c    |  170 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 hw/rc4030.h    |   41 ++++++++++++++
 4 files changed, 199 insertions(+), 24 deletions(-)
 create mode 100644 hw/rc4030.h

diff --git a/hw/mips.h b/hw/mips.h
index 617ea10..55fb701 100644
--- a/hw/mips.h
+++ b/hw/mips.h
@@ -23,15 +23,6 @@ void mipsnet_init(int base, qemu_irq irq, NICInfo *nd);
 /* jazz_led.c */
 extern void jazz_led_init(target_phys_addr_t base);
 
-/* rc4030.c */
-typedef struct rc4030DMAState *rc4030_dma;
-void rc4030_dma_memory_rw(void *opaque, target_phys_addr_t addr, uint8_t *buf, int len, int is_write);
-void rc4030_dma_read(void *dma, uint8_t *buf, int len);
-void rc4030_dma_write(void *dma, uint8_t *buf, int len);
-
-void *rc4030_init(qemu_irq timer, qemu_irq jazz_bus,
-                  qemu_irq **irqs, rc4030_dma **dmas);
-
 /* dp8393x.c */
 void dp83932_init(NICInfo *nd, target_phys_addr_t base, int it_shift,
                   qemu_irq irq, void* mem_opaque,
diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index 78ef8f0..c000fd3 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -36,6 +36,7 @@
 #include "mips-bios.h"
 #include "loader.h"
 #include "mc146818rtc.h"
+#include "rc4030.h"
 
 enum jazz_model_e
 {
@@ -178,7 +179,7 @@ void mips_jazz_init (ram_addr_t ram_size,
     }
 
     /* Chipset */
-    rc4030_opaque = rc4030_init(qdev_get_gpio_in(cpu->parent, 6), qdev_get_gpio_in(cpu->parent, 3), &rc4030, &dmas);
+    rc4030_opaque = rc4030_init(cpu, &rc4030, &dmas);
     s_dma_dummy = cpu_register_io_memory(dma_dummy_read, dma_dummy_write, NULL);
     cpu_register_physical_memory(0x8000d000, 0x00001000, s_dma_dummy);
 
diff --git a/hw/rc4030.c b/hw/rc4030.c
index 2231373..3c8cdfa 100644
--- a/hw/rc4030.c
+++ b/hw/rc4030.c
@@ -23,8 +23,12 @@
  */
 
 #include "hw.h"
-#include "mips.h"
+#include "monitor.h"
 #include "qemu-timer.h"
+#include "rc4030.h"
+
+/* As long as we can't include mips_cpudevs.h ... */
+void cpu_mips_register(DeviceInfo *info);
 
 /********************************************************/
 /* debug rc4030 */
@@ -47,6 +51,13 @@ do { fprintf(stderr, "rc4030 ERROR: %s: " fmt, __func__ , ## __VA_ARGS__); } whi
 /********************************************************/
 /* rc4030 emulation                                     */
 
+struct RC4030Bus {
+    BusState qbus;
+    rc4030_dma *dmas;
+    uint32_t assigned;
+};
+static RC4030Bus *rc4030bus;
+
 typedef struct dma_pagetable_entry {
     int32_t frame;
     int32_t owner;
@@ -65,6 +76,9 @@ typedef struct dma_pagetable_entry {
 
 typedef struct rc4030State
 {
+    DeviceState busdev;
+    RC4030Bus bus;
+
     uint32_t config; /* 0x0000: RC4030 config register */
     uint32_t revision; /* 0x0008: RC4030 Revision register */
     uint32_t invalid_address_register; /* 0x0010: Invalid Address register */
@@ -461,7 +475,8 @@ static void update_jazz_irq(rc4030State *s)
 
 static void rc4030_irq_jazz_request(void *opaque, int irq, int level)
 {
-    rc4030State *s = opaque;
+    DeviceState *dev = opaque;
+    rc4030State *s = container_of(dev, rc4030State, busdev);
 
     if (level) {
         s->isr_jazz |= 1 << irq;
@@ -585,9 +600,9 @@ static CPUWriteMemoryFunc * const jazzio_write[3] = {
     jazzio_writel,
 };
 
-static void rc4030_reset(void *opaque)
+static void rc4030_reset(DeviceState *d)
 {
-    rc4030State *s = opaque;
+    rc4030State *s = container_of(d, rc4030State, busdev);
     int i;
 
     s->config = 0x410; /* some boards seem to accept 0x104 too */
@@ -797,29 +812,156 @@ static rc4030_dma *rc4030_allocate_dmas(void *opaque, int n)
     return s;
 }
 
-void *rc4030_init(qemu_irq timer, qemu_irq jazz_bus,
-                  qemu_irq **irqs, rc4030_dma **dmas)
+void *rc4030_get_opaque(void)
 {
     rc4030State *s;
+
+    if (!rc4030bus) {
+        hw_error("Tried to get rc4030 pointer with no rc4030 bus present.\n");
+    }
+    s = container_of(rc4030bus, rc4030State, bus);
+
+    return s;
+}
+
+rc4030_dma rc4030_get_dma(int dma)
+{
+    if (!rc4030bus) {
+        hw_error("Tried to get rc4030 dma channel %d with no rc4030 bus present.\n",
+                 dma);
+    }
+    return rc4030bus->dmas[dma];
+}
+
+static void rc4030bus_dev_print(Monitor *mon, DeviceState *dev, int indent)
+{
+    RC4030Device *d = DO_UPCAST(RC4030Device, qdev, dev);
+
+    if (d->rc4030irq[1] != -1) {
+        monitor_printf(mon, "%*src4030 irqs %d,%d\n", indent, "",
+                       d->rc4030irq[0], d->rc4030irq[1]);
+    } else if (d->rc4030irq[0] != -1) {
+        monitor_printf(mon, "%*src4030 irq %d\n", indent, "",
+                       d->rc4030irq[0]);
+    }
+}
+
+static struct BusInfo rc4030_bus_info = {
+    .name      = "rc4030",
+    .size      = sizeof(RC4030Bus),
+    .print_dev = rc4030bus_dev_print,
+};
+
+static int rc4030_init1(DeviceState *dev, DeviceInfo *base)
+{
+    rc4030State *s = container_of(dev, rc4030State, busdev);
     int s_chipset, s_jazzio;
 
-    s = qemu_mallocz(sizeof(rc4030State));
+    if (rc4030bus) {
+        return 1;
+    }
 
-    *irqs = qemu_allocate_irqs(rc4030_irq_jazz_request, s, 16);
-    *dmas = rc4030_allocate_dmas(s, 4);
+    qbus_create_inplace(&s->bus.qbus, &rc4030_bus_info, dev, NULL);
+    qdev_init_gpio_in(dev, rc4030_irq_jazz_request, 16);
+    s->bus.dmas = rc4030_allocate_dmas(s, 4);
 
     s->periodic_timer = qemu_new_timer(vm_clock, rc4030_periodic_timer, s);
-    s->timer_irq = timer;
-    s->jazz_bus_irq = jazz_bus;
+    s->timer_irq = qdev_get_gpio_in(qdev_get_parent_bus(dev)->parent, 6);
+    s->jazz_bus_irq = qdev_get_gpio_in(qdev_get_parent_bus(dev)->parent, 3);
 
-    qemu_register_reset(rc4030_reset, s);
     register_savevm(NULL, "rc4030", 0, 2, rc4030_save, rc4030_load, s);
-    rc4030_reset(s);
 
     s_chipset = cpu_register_io_memory(rc4030_read, rc4030_write, s);
     cpu_register_physical_memory(0x80000000, 0x300, s_chipset);
     s_jazzio = cpu_register_io_memory(jazzio_read, jazzio_write, s);
     cpu_register_physical_memory(0xf0000000, 0x00001000, s_jazzio);
 
-    return s;
+    rc4030bus = &s->bus;
+
+    return 0;
+}
+
+void rc4030_init_irq(RC4030Device *dev, qemu_irq *p, int rc4030irq)
+{
+    assert(dev->nirqs < ARRAY_SIZE(dev->rc4030irq));
+    if (rc4030bus->assigned & (1 << rc4030irq)) {
+        RC4030_ERROR("rc4030 irq %d already assigned\n", rc4030irq);
+        exit(1);
+    }
+    rc4030bus->assigned |= (1 << rc4030irq);
+    dev->rc4030irq[dev->nirqs] = rc4030irq;
+    *p = qdev_get_gpio_in(rc4030bus->qbus.parent, rc4030irq);
+    dev->nirqs++;
 }
+
+static int rc4030_qdev_init(DeviceState *qdev, DeviceInfo *base)
+{
+    RC4030Device *dev = DO_UPCAST(RC4030Device, qdev, qdev);
+    RC4030DeviceInfo *info = DO_UPCAST(RC4030DeviceInfo, qdev, base);
+
+    dev->rc4030irq[0] = -1;
+    dev->rc4030irq[1] = -1;
+
+    return info->init(dev);
+}
+
+void rc4030_qdev_register(RC4030DeviceInfo *info)
+{
+    info->qdev.init = rc4030_qdev_init;
+    info->qdev.bus_info = &rc4030_bus_info;
+    qdev_register(&info->qdev);
+}
+
+RC4030Device *rc4030_create(const char *name)
+{
+    DeviceState *dev;
+
+    if (!rc4030bus) {
+        hw_error("Tried to create rc4030 device %s with no rc4030 bus present.\n",
+                 name);
+    }
+    dev = qdev_create(&rc4030bus->qbus, name);
+    return DO_UPCAST(RC4030Device, qdev, dev);
+}
+
+RC4030Device *rc4030_create_simple(const char *name)
+{
+    RC4030Device *dev;
+
+    dev = rc4030_create(name);
+    qdev_init_nofail(&dev->qdev);
+    return dev;
+}
+
+extern struct BusInfo cpu_bus_info;
+static DeviceInfo rc4030_info = {
+    .name    = "rc4030",
+    .size    = sizeof(rc4030State),
+    .reset   = rc4030_reset,
+    .init    = rc4030_init1,
+};
+
+static void rc4030_register_devices(void)
+{
+    cpu_mips_register(&rc4030_info);
+}
+
+device_init(rc4030_register_devices)
+
+void *rc4030_init(BusState *bus,
+                  qemu_irq **irqs, rc4030_dma **dmas)
+{
+    DeviceState *dev;
+    rc4030State* rc4030;
+
+    dev = qdev_create(bus, "rc4030");
+    qdev_init_nofail(dev);
+
+    rc4030 = DO_UPCAST(rc4030State, busdev, dev);
+
+    *irqs = rc4030->busdev.gpio_in;
+    *dmas = rc4030->bus.dmas;
+
+    return rc4030;
+}
+
diff --git a/hw/rc4030.h b/hw/rc4030.h
new file mode 100644
index 0000000..58522f3
--- /dev/null
+++ b/hw/rc4030.h
@@ -0,0 +1,41 @@
+#ifndef HW_RC4030_H
+#define HW_RC4030_H
+
+/* RC4030 bus */
+
+#include "qdev.h"
+
+typedef struct RC4030Bus RC4030Bus;
+typedef struct RC4030Device RC4030Device;
+typedef struct RC4030DeviceInfo RC4030DeviceInfo;
+
+struct RC4030Device {
+    DeviceState qdev;
+    uint32_t rc4030irq[2];
+    int nirqs;
+};
+
+typedef int (*rc4030_qdev_initfn)(RC4030Device *dev);
+struct RC4030DeviceInfo {
+    DeviceInfo qdev;
+    rc4030_qdev_initfn init;
+};
+
+void rc4030_init_irq(RC4030Device *dev, qemu_irq *p, int rc4030irq);
+void rc4030_qdev_register(RC4030DeviceInfo *info);
+RC4030Device *rc4030_create(const char *name);
+RC4030Device *rc4030_create_simple(const char *name);
+
+typedef struct rc4030DMAState *rc4030_dma;
+void rc4030_dma_memory_rw(void *opaque, target_phys_addr_t addr, uint8_t *buf, int len, int is_write);
+void rc4030_dma_read(void *dma, uint8_t *buf, int len);
+void rc4030_dma_write(void *dma, uint8_t *buf, int len);
+
+void *rc4030_get_opaque(void);
+rc4030_dma rc4030_get_dma(int dma);
+
+/* Non-qdev compatibility stuff... */
+void *rc4030_init(BusState *parent,
+                  qemu_irq **irqs, rc4030_dma **dmas);
+
+#endif
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 05/20] Add a stub for some rc4030 functions, if rc4030 support is not compiled in.
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (3 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 04/20] [MIPS] rc4030: convert to qdev Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 06/20] [MIPS] qdev: convert i8042 to rc4030 device Hervé Poussineau
                   ` (15 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Will be used by next commits, when rc4030 devices will be converted to qdev

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 arch_init.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/arch_init.c b/arch_init.c
index 47bb4b2..67b8d83 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -40,6 +40,7 @@
 #include "net.h"
 #include "gdbstub.h"
 #include "hw/smbios.h"
+#include "hw/rc4030.h"
 
 #ifdef TARGET_SPARC
 int graphic_width = 1024;
@@ -640,3 +641,23 @@ int xen_available(void)
     return 0;
 #endif
 }
+
+#ifndef TARGET_MIPS
+void rc4030_init_irq(RC4030Device *dev, qemu_irq *p, int rc4030irq)
+{
+}
+
+void rc4030_qdev_register(RC4030DeviceInfo *info)
+{
+}
+
+RC4030Device *rc4030_create(const char *name)
+{
+    return NULL;
+}
+
+RC4030Device *rc4030_create_simple(const char *name)
+{
+    return NULL;
+}
+#endif
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 06/20] [MIPS] qdev: convert i8042 to rc4030 device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (4 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 05/20] Add a stub for some rc4030 functions, if rc4030 support is not compiled in Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 07/20] [MIPS] qdev: convert parallel port " Hervé Poussineau
                   ` (14 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation
Remove i8042_mm_init() function, which is not used anymore

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips_jazz.c |    2 +-
 hw/pc.h        |    3 --
 hw/pckbd.c     |   65 ++++++++++++++++++++++++++++++++++++++-----------------
 3 files changed, 46 insertions(+), 24 deletions(-)

diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index c000fd3..9663a3c 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -252,7 +252,7 @@ void mips_jazz_init (ram_addr_t ram_size,
     cpu_register_physical_memory(0x80004000, 0x00001000, s_rtc);
 
     /* Keyboard (i8042) */
-    i8042_mm_init(rc4030[6], rc4030[7], 0x80005000, 0x1000, 0x1);
+    rc4030_create_simple("rc4030-i8042");
 
     /* Serial ports */
     if (serial_hds[0]) {
diff --git a/hw/pc.h b/hw/pc.h
index 63b0249..e078fd9 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -74,9 +74,6 @@ void *vmmouse_init(void *m);
 /* pckbd.c */
 
 void i8042_init(qemu_irq kbd_irq, qemu_irq mouse_irq, uint32_t io_base);
-void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq,
-                   target_phys_addr_t base, ram_addr_t size,
-                   target_phys_addr_t mask);
 void i8042_isa_mouse_fake_event(void *opaque);
 void i8042_setup_a20_line(ISADevice *dev, qemu_irq *a20_out);
 
diff --git a/hw/pckbd.c b/hw/pckbd.c
index 0533b1d..c422a78 100644
--- a/hw/pckbd.c
+++ b/hw/pckbd.c
@@ -26,6 +26,8 @@
 #include "pc.h"
 #include "ps2.h"
 #include "sysemu.h"
+#include "rc4030.h"
+#include "qdev-addr.h"
 
 /* debug PC keyboard */
 //#define DEBUG_KBD
@@ -407,26 +409,6 @@ static CPUWriteMemoryFunc * const kbd_mm_write[] = {
     &kbd_mm_writeb,
 };
 
-void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq,
-                   target_phys_addr_t base, ram_addr_t size,
-                   target_phys_addr_t mask)
-{
-    KBDState *s = qemu_mallocz(sizeof(KBDState));
-    int s_io_memory;
-
-    s->irq_kbd = kbd_irq;
-    s->irq_mouse = mouse_irq;
-    s->mask = mask;
-
-    vmstate_register(NULL, 0, &vmstate_kbd, s);
-    s_io_memory = cpu_register_io_memory(kbd_mm_read, kbd_mm_write, s);
-    cpu_register_physical_memory(base, size, s_io_memory);
-
-    s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
-    s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);
-    qemu_register_reset(kbd_reset, s);
-}
-
 typedef struct ISAKBDState {
     ISADevice dev;
     KBDState  kbd;
@@ -486,8 +468,51 @@ static ISADeviceInfo i8042_info = {
     .init          = i8042_initfn,
 };
 
+typedef struct RC4030KBDState {
+    RC4030Device dev;
+    target_phys_addr_t iobase;
+    uint32_t size;
+    uint32_t irq_kbd;
+    uint32_t irq_aux;
+    KBDState kbd;
+} RC4030KBDState;
+
+static int i8042_rc4030_initfn(RC4030Device *dev)
+{
+    RC4030KBDState *rc4030 = DO_UPCAST(RC4030KBDState, dev, dev);
+    KBDState *s = &rc4030->kbd;
+    int s_io;
+
+    rc4030_init_irq(dev, &s->irq_kbd, rc4030->irq_kbd);
+    rc4030_init_irq(dev, &s->irq_mouse, rc4030->irq_aux);
+
+    s_io = cpu_register_io_memory(kbd_mm_read, kbd_mm_write, s);
+    cpu_register_physical_memory(rc4030->iobase, rc4030->size, s_io);
+
+    s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
+    s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);
+    qemu_register_reset(kbd_reset, s);
+
+    return 0;
+}
+
+static RC4030DeviceInfo i8042_rc4030_info = {
+    .qdev.name  = "rc4030-i8042",
+    .qdev.size  = sizeof(RC4030KBDState),
+    .init       = i8042_rc4030_initfn,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", RC4030KBDState, iobase, 0x80005000),
+        DEFINE_PROP_HEX32("size", RC4030KBDState, size, 0x1000),
+        DEFINE_PROP_TADDR("mask", RC4030KBDState, kbd.mask, 0x1),
+        DEFINE_PROP_UINT32("irq_kbd", RC4030KBDState, irq_kbd, 6),
+        DEFINE_PROP_UINT32("irq_aux", RC4030KBDState, irq_aux, 7),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
 static void i8042_register(void)
 {
     isa_qdev_register(&i8042_info);
+    rc4030_qdev_register(&i8042_rc4030_info);
 }
 device_init(i8042_register)
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 07/20] [MIPS] qdev: convert parallel port to rc4030 device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (5 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 06/20] [MIPS] qdev: convert i8042 to rc4030 device Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 08/20] [MIPS] qdev: convert serial " Hervé Poussineau
                   ` (13 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation
Remove parallel_mm_init() function, which is not used anymore

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips_jazz.c |    5 ++-
 hw/parallel.c  |   58 +++++++++++++++++++++++++++++++++++++++++++++----------
 hw/pc.h        |    2 +-
 3 files changed, 51 insertions(+), 14 deletions(-)

diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index 9663a3c..a027559 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -271,8 +271,9 @@ void mips_jazz_init (ram_addr_t ram_size,
     }
 
     /* Parallel port */
-    if (parallel_hds[0])
-        parallel_mm_init(0x80008000, 0, rc4030[0], parallel_hds[0]);
+    if (parallel_hds[0]) {
+        parallel_rc4030_init(parallel_hds[0]);
+    }
 
     /* Sound card */
     /* FIXME: missing Jazz sound at 0x8000c000, rc4030[2] */
diff --git a/hw/parallel.c b/hw/parallel.c
index 6b11672..cb36fba 100644
--- a/hw/parallel.c
+++ b/hw/parallel.c
@@ -27,6 +27,8 @@
 #include "isa.h"
 #include "pc.h"
 #include "sysemu.h"
+#include "rc4030.h"
+#include "qdev-addr.h"
 
 //#define DEBUG_PARALLEL
 
@@ -87,6 +89,13 @@ typedef struct ISAParallelState {
     ParallelState state;
 } ISAParallelState;
 
+typedef struct RC4030ParallelState {
+    RC4030Device dev;
+    target_phys_addr_t iobase;
+    uint32_t irq;
+    ParallelState state;
+} RC4030ParallelState;
+
 static void parallel_update_irq(ParallelState *s)
 {
     if (s->irq_pending)
@@ -446,6 +455,12 @@ static void parallel_reset(void *opaque)
     s->last_read_offset = ~0U;
 }
 
+static void parallel_rc4030_reset(DeviceState *d)
+{
+    RC4030ParallelState *rc4030 = container_of(d, RC4030ParallelState, dev.qdev);
+    parallel_reset(&rc4030->state);
+}
+
 static const int isa_parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc };
 
 static int parallel_isa_initfn(ISADevice *dev)
@@ -565,21 +580,28 @@ static CPUWriteMemoryFunc * const parallel_mm_write_sw[] = {
     &parallel_mm_writel,
 };
 
-/* If fd is zero, it means that the parallel device uses the console */
-ParallelState *parallel_mm_init(target_phys_addr_t base, int it_shift, qemu_irq irq, CharDriverState *chr)
+static int parallel_rc4030_initfn(RC4030Device *dev)
 {
-    ParallelState *s;
+    RC4030ParallelState *s = container_of(dev, RC4030ParallelState, dev);
     int io_sw;
 
-    s = qemu_mallocz(sizeof(ParallelState));
-    s->irq = irq;
-    s->chr = chr;
-    s->it_shift = it_shift;
-    qemu_register_reset(parallel_reset, s);
+    rc4030_init_irq(dev, &s->state.irq, s->irq);
+
+    io_sw = cpu_register_io_memory(parallel_mm_read_sw, parallel_mm_write_sw, &s->state);
+    cpu_register_physical_memory(s->iobase, 8, io_sw);
+
+    return 0;
+}
 
-    io_sw = cpu_register_io_memory(parallel_mm_read_sw, parallel_mm_write_sw, s);
-    cpu_register_physical_memory(base, 8 << it_shift, io_sw);
-    return s;
+ParallelState *parallel_rc4030_init(CharDriverState *chr)
+{
+    RC4030Device *dev;
+
+    dev = rc4030_create("rc4030-parallel");
+    qdev_prop_set_chr(&dev->qdev, "chardev", chr);
+    if (qdev_init(&dev->qdev) < 0)
+        return NULL;
+    return &DO_UPCAST(RC4030ParallelState, dev, dev)->state;
 }
 
 static ISADeviceInfo parallel_isa_info = {
@@ -595,9 +617,23 @@ static ISADeviceInfo parallel_isa_info = {
     },
 };
 
+static RC4030DeviceInfo parallel_rc4030_info = {
+    .qdev.name  = "rc4030-parallel",
+    .qdev.size  = sizeof(RC4030ParallelState),
+    .qdev.reset = parallel_rc4030_reset,
+    .init       = parallel_rc4030_initfn,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", RC4030ParallelState, iobase, 0x80008000),
+        DEFINE_PROP_UINT32("irq", RC4030ParallelState, irq, 0),
+        DEFINE_PROP_CHR("chardev", RC4030ParallelState, state.chr),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
 static void parallel_register_devices(void)
 {
     isa_qdev_register(&parallel_isa_info);
+    rc4030_qdev_register(&parallel_rc4030_info);
 }
 
 device_init(parallel_register_devices)
diff --git a/hw/pc.h b/hw/pc.h
index e078fd9..61b5fbb 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -23,7 +23,7 @@ void serial_set_frequency(SerialState *s, uint32_t frequency);
 
 typedef struct ParallelState ParallelState;
 ParallelState *parallel_init(int index, CharDriverState *chr);
-ParallelState *parallel_mm_init(target_phys_addr_t base, int it_shift, qemu_irq irq, CharDriverState *chr);
+ParallelState *parallel_rc4030_init(CharDriverState *chr);
 
 /* i8259.c */
 
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 08/20] [MIPS] qdev: convert serial port to rc4030 device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (6 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 07/20] [MIPS] qdev: convert parallel port " Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 09/20] [MIPS] qdev: convert jazz-led to sysbus device Hervé Poussineau
                   ` (12 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips_jazz.c |   12 +-------
 hw/pc.h        |    1 +
 hw/serial.c    |   78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 81 insertions(+), 10 deletions(-)

diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index a027559..1298bc1 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -256,18 +256,10 @@ void mips_jazz_init (ram_addr_t ram_size,
 
     /* Serial ports */
     if (serial_hds[0]) {
-#ifdef TARGET_WORDS_BIGENDIAN
-        serial_mm_init(0x80006000, 0, rc4030[8], 8000000/16, serial_hds[0], 1, 1);
-#else
-        serial_mm_init(0x80006000, 0, rc4030[8], 8000000/16, serial_hds[0], 1, 0);
-#endif
+        serial_rc4030_init(0, serial_hds[0]);
     }
     if (serial_hds[1]) {
-#ifdef TARGET_WORDS_BIGENDIAN
-        serial_mm_init(0x80007000, 0, rc4030[9], 8000000/16, serial_hds[1], 1, 1);
-#else
-        serial_mm_init(0x80007000, 0, rc4030[9], 8000000/16, serial_hds[1], 1, 0);
-#endif
+        serial_rc4030_init(1, serial_hds[1]);
     }
 
     /* Parallel port */
diff --git a/hw/pc.h b/hw/pc.h
index 61b5fbb..f5a479a 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -17,6 +17,7 @@ SerialState *serial_mm_init (target_phys_addr_t base, int it_shift,
                              CharDriverState *chr, int ioregister,
                              int be);
 SerialState *serial_isa_init(int index, CharDriverState *chr);
+SerialState *serial_rc4030_init(int index, CharDriverState *chr);
 void serial_set_frequency(SerialState *s, uint32_t frequency);
 
 /* parallel.c */
diff --git a/hw/serial.c b/hw/serial.c
index b66d13a..0c13cbb 100644
--- a/hw/serial.c
+++ b/hw/serial.c
@@ -28,6 +28,8 @@
 #include "pc.h"
 #include "qemu-timer.h"
 #include "sysemu.h"
+#include "rc4030.h"
+#include "qdev-addr.h"
 
 //#define DEBUG_SERIAL
 
@@ -155,6 +157,14 @@ typedef struct ISASerialState {
     SerialState state;
 } ISASerialState;
 
+typedef struct RC4030SerialState {
+    RC4030Device dev;
+    uint32_t index;
+    target_phys_addr_t iobase;
+    uint32_t irq;
+    SerialState state;
+} RC4030SerialState;
+
 static void serial_receive1(void *opaque, const uint8_t *buf, int size);
 
 static void fifo_clear(SerialState *s, int fifo)
@@ -964,6 +974,59 @@ SerialState *serial_mm_init (target_phys_addr_t base, int it_shift,
     return s;
 }
 
+static const target_phys_addr_t rc4030_serial_io[] = { 0x80006000, 0x80007000 };
+static const uint32_t rc4030_serial_irq[] = { 8, 9 };
+
+static int serial_rc4030_initfn(RC4030Device *dev)
+{
+    static int index;
+    RC4030SerialState *rc4030 = DO_UPCAST(RC4030SerialState, dev, dev);
+    SerialState *s = &rc4030->state;
+    int s_io;
+
+    if (rc4030->index == -1)
+        rc4030->index = index;
+    if (rc4030->index >= ARRAY_SIZE(rc4030_serial_io))
+        return -1;
+    if (rc4030->iobase == -1)
+        rc4030->iobase = rc4030_serial_io[rc4030->index];
+    if (rc4030->irq == -1)
+        rc4030->irq = rc4030_serial_irq[rc4030->index];
+    index++;
+
+    s->baudbase = 8000000 / 16;
+    rc4030_init_irq(dev, &s->irq, rc4030->irq);
+    serial_init_core(s);
+
+    s_io = cpu_register_io_memory(serial_mm_read_le,
+                                  serial_mm_write_le, s);
+    cpu_register_physical_memory(rc4030->iobase, 8, s_io);
+
+    return 0;
+}
+
+SerialState *serial_rc4030_init(int index, CharDriverState *chr)
+{
+    RC4030Device *dev;
+
+    dev = rc4030_create("rc4030-serial");
+    qdev_prop_set_uint32(&dev->qdev, "index", index);
+    qdev_prop_set_chr(&dev->qdev, "chardev", chr);
+    if (qdev_init(&dev->qdev) < 0)
+        return NULL;
+    return &DO_UPCAST(RC4030SerialState, dev, dev)->state;
+}
+
+static const VMStateDescription vmstate_rc4030_serial = {
+    .name = "serial",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields      = (VMStateField []) {
+        VMSTATE_STRUCT(state, RC4030SerialState, 0, vmstate_serial, SerialState),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static ISADeviceInfo serial_isa_info = {
     .qdev.name  = "isa-serial",
     .qdev.size  = sizeof(ISASerialState),
@@ -978,9 +1041,24 @@ static ISADeviceInfo serial_isa_info = {
     },
 };
 
+static RC4030DeviceInfo serial_rc4030_info = {
+    .qdev.name  = "rc4030-serial",
+    .qdev.size  = sizeof(RC4030SerialState),
+    .qdev.vmsd  = &vmstate_rc4030_serial,
+    .init       = serial_rc4030_initfn,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_UINT32("index", RC4030SerialState, index,  -1),
+        DEFINE_PROP_TADDR("iobase", RC4030SerialState, iobase, -1),
+        DEFINE_PROP_UINT32("irq",   RC4030SerialState, irq,    -1),
+        DEFINE_PROP_CHR("chardev",  RC4030SerialState, state.chr),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
 static void serial_register_devices(void)
 {
     isa_qdev_register(&serial_isa_info);
+    rc4030_qdev_register(&serial_rc4030_info);
 }
 
 device_init(serial_register_devices)
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 09/20] [MIPS] qdev: convert jazz-led to sysbus device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (7 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 08/20] [MIPS] qdev: convert serial " Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 10/20] [MIPS] Jazz emulation: make video card optional Hervé Poussineau
                   ` (11 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation
Remove jazz_led_init() function, which is not used anymore
Compile jazz_led.c file only once

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 Makefile.objs                        |    1 +
 Makefile.target                      |    2 +-
 default-configs/mips-softmmu.mak     |    1 +
 default-configs/mips64-softmmu.mak   |    1 +
 default-configs/mips64el-softmmu.mak |    1 +
 default-configs/mipsel-softmmu.mak   |    1 +
 hw/jazz_led.c                        |   58 +++++++++++++++++-----------------
 hw/mips.h                            |    3 --
 hw/mips_jazz.c                       |    4 ++-
 9 files changed, 38 insertions(+), 34 deletions(-)

diff --git a/Makefile.objs b/Makefile.objs
index 4a1eaa1..fb25c66 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -231,6 +231,7 @@ hw-obj-$(CONFIG_RC4030) += rc4030.o
 hw-obj-$(CONFIG_DP8393X) += dp8393x.o
 hw-obj-$(CONFIG_DS1225Y) += ds1225y.o
 hw-obj-$(CONFIG_MIPSNET) += mipsnet.o
+hw-obj-$(CONFIG_JAZZ_LED) += jazz_led.o
 
 # Sound
 sound-obj-y =
diff --git a/Makefile.target b/Makefile.target
index 8a9c427..6c902b3 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -220,7 +220,7 @@ obj-ppc-$(CONFIG_FDT) += device_tree.o
 obj-mips-y = mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o
 obj-mips-y += mips_addr.o mips_timer.o mips_int.o
 obj-mips-y += vga.o i8259.o
-obj-mips-y += g364fb.o jazz_led.o
+obj-mips-y += g364fb.o
 obj-mips-y += gt64xxx.o mc146818rtc.o
 obj-mips-y += cirrus_vga.o
 obj-mips-$(CONFIG_FULONG) += bonito.o vt82c686.o mips_fulong2e.o
diff --git a/default-configs/mips-softmmu.mak b/default-configs/mips-softmmu.mak
index 3d0af83..69bb235 100644
--- a/default-configs/mips-softmmu.mak
+++ b/default-configs/mips-softmmu.mak
@@ -30,3 +30,4 @@ CONFIG_DP8393X=y
 CONFIG_DS1225Y=y
 CONFIG_MIPSNET=y
 CONFIG_PFLASH_CFI01=y
+CONFIG_JAZZ_LED=y
diff --git a/default-configs/mips64-softmmu.mak b/default-configs/mips64-softmmu.mak
index 0030de4..0421bb6 100644
--- a/default-configs/mips64-softmmu.mak
+++ b/default-configs/mips64-softmmu.mak
@@ -30,3 +30,4 @@ CONFIG_DP8393X=y
 CONFIG_DS1225Y=y
 CONFIG_MIPSNET=y
 CONFIG_PFLASH_CFI01=y
+CONFIG_JAZZ_LED=y
diff --git a/default-configs/mips64el-softmmu.mak b/default-configs/mips64el-softmmu.mak
index fa2a3ff..b5d4406 100644
--- a/default-configs/mips64el-softmmu.mak
+++ b/default-configs/mips64el-softmmu.mak
@@ -32,3 +32,4 @@ CONFIG_DS1225Y=y
 CONFIG_MIPSNET=y
 CONFIG_PFLASH_CFI01=y
 CONFIG_FULONG=y
+CONFIG_JAZZ_LED=y
diff --git a/default-configs/mipsel-softmmu.mak b/default-configs/mipsel-softmmu.mak
index 238b73a..0d9a093 100644
--- a/default-configs/mipsel-softmmu.mak
+++ b/default-configs/mipsel-softmmu.mak
@@ -30,3 +30,4 @@ CONFIG_DP8393X=y
 CONFIG_DS1225Y=y
 CONFIG_MIPSNET=y
 CONFIG_PFLASH_CFI01=y
+CONFIG_JAZZ_LED=y
diff --git a/hw/jazz_led.c b/hw/jazz_led.c
index 4cb680c..76af572 100644
--- a/hw/jazz_led.c
+++ b/hw/jazz_led.c
@@ -26,6 +26,8 @@
 #include "mips.h"
 #include "console.h"
 #include "pixel_ops.h"
+#include "sysbus.h"
+#include "qdev-addr.h"
 
 //#define DEBUG_LED
 
@@ -43,6 +45,10 @@ typedef enum {
 } screen_state_t;
 
 typedef struct LedState {
+    SysBusDevice busdev;
+
+    target_phys_addr_t addr;
+    uint32_t size;
     uint8_t segments;
     DisplayState *ds;
     screen_state_t state;
@@ -70,30 +76,18 @@ static uint32_t led_readb(void *opaque, target_phys_addr_t addr)
 static uint32_t led_readw(void *opaque, target_phys_addr_t addr)
 {
     uint32_t v;
-#ifdef TARGET_WORDS_BIGENDIAN
-    v = led_readb(opaque, addr) << 8;
-    v |= led_readb(opaque, addr + 1);
-#else
     v = led_readb(opaque, addr);
     v |= led_readb(opaque, addr + 1) << 8;
-#endif
     return v;
 }
 
 static uint32_t led_readl(void *opaque, target_phys_addr_t addr)
 {
     uint32_t v;
-#ifdef TARGET_WORDS_BIGENDIAN
-    v = led_readb(opaque, addr) << 24;
-    v |= led_readb(opaque, addr + 1) << 16;
-    v |= led_readb(opaque, addr + 2) << 8;
-    v |= led_readb(opaque, addr + 3);
-#else
     v = led_readb(opaque, addr);
     v |= led_readb(opaque, addr + 1) << 8;
     v |= led_readb(opaque, addr + 2) << 16;
     v |= led_readb(opaque, addr + 3) << 24;
-#endif
     return v;
 }
 
@@ -116,28 +110,16 @@ static void led_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
 
 static void led_writew(void *opaque, target_phys_addr_t addr, uint32_t val)
 {
-#ifdef TARGET_WORDS_BIGENDIAN
-    led_writeb(opaque, addr, (val >> 8) & 0xff);
-    led_writeb(opaque, addr + 1, val & 0xff);
-#else
     led_writeb(opaque, addr, val & 0xff);
     led_writeb(opaque, addr + 1, (val >> 8) & 0xff);
-#endif
 }
 
 static void led_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
 {
-#ifdef TARGET_WORDS_BIGENDIAN
-    led_writeb(opaque, addr, (val >> 24) & 0xff);
-    led_writeb(opaque, addr + 1, (val >> 16) & 0xff);
-    led_writeb(opaque, addr + 2, (val >> 8) & 0xff);
-    led_writeb(opaque, addr + 3, val & 0xff);
-#else
     led_writeb(opaque, addr, val & 0xff);
     led_writeb(opaque, addr + 1, (val >> 8) & 0xff);
     led_writeb(opaque, addr + 2, (val >> 16) & 0xff);
     led_writeb(opaque, addr + 3, (val >> 24) & 0xff);
-#endif
 }
 
 static CPUReadMemoryFunc * const led_read[3] = {
@@ -307,21 +289,39 @@ static void jazz_led_text_update(void *opaque, console_ch_t *chardata)
     dpy_update(s->ds, 0, 0, 2, 1);
 }
 
-void jazz_led_init(target_phys_addr_t base)
+static int jazz_led_init(SysBusDevice *dev)
 {
-    LedState *s;
+    LedState *s = FROM_SYSBUS(LedState, dev);
     int io;
 
-    s = qemu_mallocz(sizeof(LedState));
-
     s->state = REDRAW_SEGMENTS | REDRAW_BACKGROUND;
 
     io = cpu_register_io_memory(led_read, led_write, s);
-    cpu_register_physical_memory(base, 1, io);
+    cpu_register_physical_memory(s->addr, s->size, io);
 
     s->ds = graphic_console_init(jazz_led_update_display,
                                  jazz_led_invalidate_display,
                                  jazz_led_screen_dump,
                                  jazz_led_text_update, s);
     qemu_console_resize(s->ds, 60, 80);
+
+    return 0;
+}
+
+static SysBusDeviceInfo jazz_led_device_info = {
+    .qdev.name  = "jazz-led",
+    .qdev.size  = sizeof(LedState),
+    .init       = jazz_led_init,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", LedState, addr, 0x8000f000),
+        DEFINE_PROP_HEX32("size", LedState, size, 0x1000),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
+static void jazz_led_register_devices(void)
+{
+    sysbus_register_withprop(&jazz_led_device_info);
 }
+
+device_init(jazz_led_register_devices)
diff --git a/hw/mips.h b/hw/mips.h
index 55fb701..023d85c 100644
--- a/hw/mips.h
+++ b/hw/mips.h
@@ -20,9 +20,6 @@ int g364fb_mm_init(target_phys_addr_t vram_base,
 /* mipsnet.c */
 void mipsnet_init(int base, qemu_irq irq, NICInfo *nd);
 
-/* jazz_led.c */
-extern void jazz_led_init(target_phys_addr_t base);
-
 /* dp8393x.c */
 void dp83932_init(NICInfo *nd, target_phys_addr_t base, int it_shift,
                   qemu_irq irq, void* mem_opaque,
diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index 1298bc1..8c3c956 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -124,6 +124,7 @@ void mips_jazz_init (ram_addr_t ram_size,
     char *filename;
     int bios_size, n;
     BusState *cpu;
+    DeviceState *dev;
     qemu_irq *rc4030, *i8259;
     rc4030_dma *dmas;
     void* rc4030_opaque;
@@ -275,7 +276,8 @@ void mips_jazz_init (ram_addr_t ram_size,
     ds1225y_init(0x80009000, "nvram");
 
     /* LED indicator */
-    jazz_led_init(0x8000f000);
+    dev = qdev_create(NULL, "jazz-led");
+    qdev_init_nofail(dev);
 }
 
 static
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 10/20] [MIPS] Jazz emulation: make video card optional
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (8 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 09/20] [MIPS] qdev: convert jazz-led to sysbus device Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 11/20] [MIPS] qdev: convert vga-isa-mm to ISA device Hervé Poussineau
                   ` (10 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau


Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips_jazz.c |   22 ++++++++++++----------
 1 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index 8c3c956..b737cf3 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -202,16 +202,18 @@ void mips_jazz_init (ram_addr_t ram_size,
 
     isa_mem_base = 0x11000000;
 
-    /* Video card */
-    switch (jazz_model) {
-    case JAZZ_MAGNUM:
-        g364fb_mm_init(0x40000000, 0x60000000, 0, rc4030[3]);
-        break;
-    case JAZZ_PICA61:
-        isa_vga_mm_init(0x40000000, 0x60000000, 0);
-        break;
-    default:
-        break;
+    /* Optional video card */
+    if (vga_interface_type != VGA_NONE) {
+        switch (jazz_model) {
+        case JAZZ_MAGNUM:
+            g364fb_mm_init(0x40000000, 0x60000000, 0, rc4030[3]);
+            break;
+        case JAZZ_PICA61:
+            isa_vga_mm_init(0x40000000, 0x60000000, 0);
+            break;
+        default:
+            break;
+        }
     }
 
     /* Network controller */
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 11/20] [MIPS] qdev: convert vga-isa-mm to ISA device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (9 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 10/20] [MIPS] Jazz emulation: make video card optional Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 12/20] [MIPS] qdev: convert g364fb to rc4030 device Hervé Poussineau
                   ` (9 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation
Remove isa_vga_mm_init() function, which is not used anymore

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips_jazz.c  |    2 +-
 hw/pc.h         |    2 -
 hw/vga-isa-mm.c |   66 ++++++++++++++++++++++++++++++++----------------------
 vl.c            |    1 +
 4 files changed, 41 insertions(+), 30 deletions(-)

diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index b737cf3..96946e8 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -209,7 +209,7 @@ void mips_jazz_init (ram_addr_t ram_size,
             g364fb_mm_init(0x40000000, 0x60000000, 0, rc4030[3]);
             break;
         case JAZZ_PICA61:
-            isa_vga_mm_init(0x40000000, 0x60000000, 0);
+            isa_create_simple("isa-vga-mm");
             break;
         default:
             break;
diff --git a/hw/pc.h b/hw/pc.h
index f5a479a..acfed83 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -154,8 +154,6 @@ extern enum vga_retrace_method vga_retrace_method;
 int isa_vga_init(void);
 int pci_vga_init(PCIBus *bus,
                  unsigned long vga_bios_offset, int vga_bios_size);
-int isa_vga_mm_init(target_phys_addr_t vram_base,
-                    target_phys_addr_t ctrl_base, int it_shift);
 
 /* cirrus_vga.c */
 void pci_cirrus_vga_init(PCIBus *bus);
diff --git a/hw/vga-isa-mm.c b/hw/vga-isa-mm.c
index 680b557..82d2e81 100644
--- a/hw/vga-isa-mm.c
+++ b/hw/vga-isa-mm.c
@@ -23,14 +23,17 @@
  */
 #include "hw.h"
 #include "console.h"
-#include "pc.h"
 #include "vga_int.h"
 #include "pixel_ops.h"
 #include "qemu-timer.h"
+#include "isa.h"
+#include "qdev-addr.h"
 
 typedef struct ISAVGAMMState {
+    ISADevice dev;
+    target_phys_addr_t iobase;
+    target_phys_addr_t vram;
     VGACommonState vga;
-    int it_shift;
 } ISAVGAMMState;
 
 /* Memory mapped interface */
@@ -38,7 +41,7 @@ static uint32_t vga_mm_readb (void *opaque, target_phys_addr_t addr)
 {
     ISAVGAMMState *s = opaque;
 
-    return vga_ioport_read(&s->vga, addr >> s->it_shift) & 0xff;
+    return vga_ioport_read(&s->vga, addr) & 0xff;
 }
 
 static void vga_mm_writeb (void *opaque,
@@ -46,14 +49,14 @@ static void vga_mm_writeb (void *opaque,
 {
     ISAVGAMMState *s = opaque;
 
-    vga_ioport_write(&s->vga, addr >> s->it_shift, value & 0xff);
+    vga_ioport_write(&s->vga, addr, value & 0xff);
 }
 
 static uint32_t vga_mm_readw (void *opaque, target_phys_addr_t addr)
 {
     ISAVGAMMState *s = opaque;
 
-    return vga_ioport_read(&s->vga, addr >> s->it_shift) & 0xffff;
+    return vga_ioport_read(&s->vga, addr) & 0xffff;
 }
 
 static void vga_mm_writew (void *opaque,
@@ -61,14 +64,14 @@ static void vga_mm_writew (void *opaque,
 {
     ISAVGAMMState *s = opaque;
 
-    vga_ioport_write(&s->vga, addr >> s->it_shift, value & 0xffff);
+    vga_ioport_write(&s->vga, addr, value & 0xffff);
 }
 
 static uint32_t vga_mm_readl (void *opaque, target_phys_addr_t addr)
 {
     ISAVGAMMState *s = opaque;
 
-    return vga_ioport_read(&s->vga, addr >> s->it_shift);
+    return vga_ioport_read(&s->vga, addr);
 }
 
 static void vga_mm_writel (void *opaque,
@@ -76,7 +79,7 @@ static void vga_mm_writel (void *opaque,
 {
     ISAVGAMMState *s = opaque;
 
-    vga_ioport_write(&s->vga, addr >> s->it_shift, value);
+    vga_ioport_write(&s->vga, addr, value);
 }
 
 static CPUReadMemoryFunc * const vga_mm_read_ctrl[] = {
@@ -91,36 +94,45 @@ static CPUWriteMemoryFunc * const vga_mm_write_ctrl[] = {
     &vga_mm_writel,
 };
 
-static void vga_mm_init(ISAVGAMMState *s, target_phys_addr_t vram_base,
-                        target_phys_addr_t ctrl_base, int it_shift)
+static int isa_vga_mm_init(ISADevice *dev)
 {
+    ISAVGAMMState *s = DO_UPCAST(ISAVGAMMState, dev, dev);
     int s_ioport_ctrl, vga_io_memory;
 
-    s->it_shift = it_shift;
+    vga_common_init(&s->vga, VGA_RAM_SIZE);
+
     s_ioport_ctrl = cpu_register_io_memory(vga_mm_read_ctrl, vga_mm_write_ctrl, s);
-    vga_io_memory = cpu_register_io_memory(vga_mem_read, vga_mem_write, s);
+    vga_io_memory = cpu_register_io_memory(vga_mem_read, vga_mem_write, &s->vga);
 
     vmstate_register(NULL, 0, &vmstate_vga_common, s);
 
-    cpu_register_physical_memory(ctrl_base, 0x100000, s_ioport_ctrl);
+    cpu_register_physical_memory(s->iobase, 0x100000, s_ioport_ctrl);
     s->vga.bank_offset = 0;
-    cpu_register_physical_memory(vram_base + 0x000a0000, 0x20000, vga_io_memory);
-    qemu_register_coalesced_mmio(vram_base + 0x000a0000, 0x20000);
-}
-
-int isa_vga_mm_init(target_phys_addr_t vram_base,
-                    target_phys_addr_t ctrl_base, int it_shift)
-{
-    ISAVGAMMState *s;
-
-    s = qemu_mallocz(sizeof(*s));
-
-    vga_common_init(&s->vga, VGA_RAM_SIZE);
-    vga_mm_init(s, vram_base, ctrl_base, it_shift);
+    cpu_register_physical_memory(s->vram + 0x000a0000, 0x20000, vga_io_memory);
+    qemu_register_coalesced_mmio(s->vram + 0x000a0000, 0x20000);
 
     s->vga.ds = graphic_console_init(s->vga.update, s->vga.invalidate,
-                                     s->vga.screen_dump, s->vga.text_update, s);
+                                     s->vga.screen_dump, s->vga.text_update, &s->vga);
 
     vga_init_vbe(&s->vga);
     return 0;
 }
+
+static ISADeviceInfo isa_vga_mm_device_info = {
+    .qdev.name  = "isa-vga-mm",
+    .qdev.size  = sizeof(ISAVGAMMState),
+    .qdev.vmsd  = &vmstate_vga_common,
+    .init       = isa_vga_mm_init,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", ISAVGAMMState, iobase, 0x60000000),
+        DEFINE_PROP_TADDR("vram", ISAVGAMMState, vram, 0x40000000),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
+static void isa_vga_mm_register_device(void)
+{
+    isa_qdev_register(&isa_vga_mm_device_info);
+}
+
+device_init(isa_vga_mm_register_device)
diff --git a/vl.c b/vl.c
index b3e3676..9815f8d 100644
--- a/vl.c
+++ b/vl.c
@@ -265,6 +265,7 @@ static struct {
     { .driver = "VGA",                  .flag = &default_vga       },
     { .driver = "cirrus-vga",           .flag = &default_vga       },
     { .driver = "vmware-svga",          .flag = &default_vga       },
+    { .driver = "isa-vga-mm",           .flag = &default_vga       },
 };
 
 static int default_driver_check(QemuOpts *opts, void *opaque)
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 12/20] [MIPS] qdev: convert g364fb to rc4030 device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (10 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 11/20] [MIPS] qdev: convert vga-isa-mm to ISA device Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 13/20] [MIPS] qdev: add a rtc forwarder device Hervé Poussineau
                   ` (8 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/g364fb.c    |   62 +++++++++++++++++++++++++++++++++++++++++--------------
 hw/mips.h      |    5 ----
 hw/mips_jazz.c |    2 +-
 vl.c           |    1 +
 4 files changed, 48 insertions(+), 22 deletions(-)

diff --git a/hw/g364fb.c b/hw/g364fb.c
index 3c8fb98..4b5e6ef 100644
--- a/hw/g364fb.c
+++ b/hw/g364fb.c
@@ -21,6 +21,8 @@
 #include "mips.h"
 #include "console.h"
 #include "pixel_ops.h"
+#include "rc4030.h"
+#include "qdev-addr.h"
 
 //#define DEBUG_G364
 
@@ -37,7 +39,7 @@ typedef struct G364State {
     /* hardware */
     uint8_t *vram;
     ram_addr_t vram_offset;
-    int vram_size;
+    uint32_t vram_size;
     qemu_irq irq;
     /* registers */
     uint8_t color_palette[256][3];
@@ -53,6 +55,14 @@ typedef struct G364State {
     int blanked;
 } G364State;
 
+typedef struct RC4030G364State {
+    RC4030Device dev;
+    target_phys_addr_t iobase;
+    target_phys_addr_t vram;
+    uint32_t irq;
+    G364State state;
+} RC4030G364State;
+
 #define REG_ID       0x000000
 #define REG_BOOT     0x080000
 #define REG_DISPLAY  0x080118
@@ -279,9 +289,8 @@ static inline void g364fb_invalidate_display(void *opaque)
     }
 }
 
-static void g364fb_reset(void *opaque)
+static void g364fb_reset(G364State *s)
 {
-    G364State *s = opaque;
     qemu_irq_lower(s->irq);
 
     memset(s->color_palette, 0, sizeof(s->color_palette));
@@ -292,7 +301,13 @@ static void g364fb_reset(void *opaque)
     s->top_of_screen = 0;
     s->width = s->height = 0;
     memset(s->vram, 0, s->vram_size);
-    g364fb_invalidate_display(opaque);
+    g364fb_invalidate_display(s);
+}
+
+static void g364fb_reset1(DeviceState *d)
+{
+    G364State *s = &container_of(d, RC4030G364State, dev.qdev)->state;
+    g364fb_reset(s);
 }
 
 static void g364fb_screen_dump(void *opaque, const char *filename)
@@ -583,32 +598,47 @@ static void g364fb_save(QEMUFile *f, void *opaque)
     qemu_put_be32(f, s->height);
 }
 
-int g364fb_mm_init(target_phys_addr_t vram_base,
-                   target_phys_addr_t ctrl_base, int it_shift,
-                   qemu_irq irq)
+static int g364fb_init(RC4030Device *dev)
 {
-    G364State *s;
+    RC4030G364State *rc4030 = container_of(dev, RC4030G364State, dev);
+    G364State *s = &rc4030->state;
     int io_ctrl;
 
-    s = qemu_mallocz(sizeof(G364State));
-
-    s->vram_size = 8 * 1024 * 1024;
     s->vram_offset = qemu_ram_alloc(NULL, "g364fb.vram", s->vram_size);
     s->vram = qemu_get_ram_ptr(s->vram_offset);
-    s->irq = irq;
+    rc4030_init_irq(dev, &s->irq, rc4030->irq);
 
-    qemu_register_reset(g364fb_reset, s);
     register_savevm(NULL, "g364fb", 0, 1, g364fb_save, g364fb_load, s);
-    g364fb_reset(s);
 
     s->ds = graphic_console_init(g364fb_update_display,
                                  g364fb_invalidate_display,
                                  g364fb_screen_dump, NULL, s);
 
-    cpu_register_physical_memory(vram_base, s->vram_size, s->vram_offset);
+    cpu_register_physical_memory(rc4030->vram, s->vram_size, s->vram_offset);
 
     io_ctrl = cpu_register_io_memory(g364fb_ctrl_read, g364fb_ctrl_write, s);
-    cpu_register_physical_memory(ctrl_base, 0x200000, io_ctrl);
+    cpu_register_physical_memory(rc4030->iobase, 0x200000, io_ctrl);
 
     return 0;
 }
+
+static RC4030DeviceInfo g364fb_device_info = {
+    .qdev.name  = "rc4030-g364fb",
+    .qdev.size  = sizeof(RC4030G364State),
+    .qdev.reset = g364fb_reset1,
+    .init       = g364fb_init,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", RC4030G364State, iobase, 0x60000000),
+        DEFINE_PROP_TADDR("vram", RC4030G364State, vram, 0x40000000),
+        DEFINE_PROP_HEX32("vram_size", RC4030G364State, state.vram_size, 8 * 1024 * 1024),
+        DEFINE_PROP_UINT32("irq", RC4030G364State, irq, 3),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
+static void g364fb_register_devices(void)
+{
+    rc4030_qdev_register(&g364fb_device_info);
+}
+
+device_init(g364fb_register_devices)
diff --git a/hw/mips.h b/hw/mips.h
index 023d85c..aa790d8 100644
--- a/hw/mips.h
+++ b/hw/mips.h
@@ -12,11 +12,6 @@ PCIBus *bonito_init(qemu_irq *pic);
 void *ds1225y_init(target_phys_addr_t mem_base, const char *filename);
 void ds1225y_set_protection(void *opaque, int protection);
 
-/* g364fb.c */
-int g364fb_mm_init(target_phys_addr_t vram_base,
-                   target_phys_addr_t ctrl_base, int it_shift,
-                   qemu_irq irq);
-
 /* mipsnet.c */
 void mipsnet_init(int base, qemu_irq irq, NICInfo *nd);
 
diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index 96946e8..c4f3721 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -206,7 +206,7 @@ void mips_jazz_init (ram_addr_t ram_size,
     if (vga_interface_type != VGA_NONE) {
         switch (jazz_model) {
         case JAZZ_MAGNUM:
-            g364fb_mm_init(0x40000000, 0x60000000, 0, rc4030[3]);
+            rc4030_create_simple("rc4030-g364fb");
             break;
         case JAZZ_PICA61:
             isa_create_simple("isa-vga-mm");
diff --git a/vl.c b/vl.c
index 9815f8d..eb4c212 100644
--- a/vl.c
+++ b/vl.c
@@ -266,6 +266,7 @@ static struct {
     { .driver = "cirrus-vga",           .flag = &default_vga       },
     { .driver = "vmware-svga",          .flag = &default_vga       },
     { .driver = "isa-vga-mm",           .flag = &default_vga       },
+    { .driver = "rc4030-g364fb",        .flag = &default_vga       },
 };
 
 static int default_driver_check(QemuOpts *opts, void *opaque)
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 13/20] [MIPS] qdev: add a rtc forwarder device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (11 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 12/20] [MIPS] qdev: convert g364fb to rc4030 device Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 14/20] [MIPS] qdev: add an isa bus device Hervé Poussineau
                   ` (7 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mc146818rtc.c |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 hw/mips_jazz.c   |   28 +++-------------------------
 2 files changed, 56 insertions(+), 26 deletions(-)

diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c
index 2b91fa8..674d24f 100644
--- a/hw/mc146818rtc.c
+++ b/hw/mc146818rtc.c
@@ -28,6 +28,8 @@
 #include "apic.h"
 #include "isa.h"
 #include "mc146818rtc.h"
+#include "sysbus.h"
+#include "qdev-addr.h"
 
 //#define DEBUG_CMOS
 //#define DEBUG_COALESCED
@@ -631,7 +633,6 @@ ISADevice *rtc_init(int base_year, qemu_irq intercept_irq)
 static ISADeviceInfo mc146818rtc_info = {
     .qdev.name     = "mc146818rtc",
     .qdev.size     = sizeof(RTCState),
-    .qdev.no_user  = 1,
     .qdev.vmsd     = &vmstate_rtc,
     .init          = rtc_initfn,
     .qdev.props    = (Property[]) {
@@ -640,8 +641,59 @@ static ISADeviceInfo mc146818rtc_info = {
     }
 };
 
+static uint32_t rtc_forward_readb(void *opaque, target_phys_addr_t addr)
+{
+    return cpu_inw(0x71);
+}
+
+static void rtc_forward_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
+{
+    cpu_outw(0x71, val & 0xff);
+}
+
+static CPUReadMemoryFunc * const rtc_forward_read[3] = {
+    rtc_forward_readb,
+    rtc_forward_readb,
+    rtc_forward_readb,
+};
+
+static CPUWriteMemoryFunc * const rtc_forward_write[3] = {
+    rtc_forward_writeb,
+    rtc_forward_writeb,
+    rtc_forward_writeb,
+};
+
+typedef struct RtcForwardState {
+    SysBusDevice busdev;
+    target_phys_addr_t iobase;
+    uint32_t size;
+} RtcForwardState;
+
+static int rtc_forward_init(SysBusDevice *dev)
+{
+    RtcForwardState *s = FROM_SYSBUS(RtcForwardState, dev);
+    int io;
+
+    io = cpu_register_io_memory(rtc_forward_read, rtc_forward_write, s);
+    cpu_register_physical_memory(s->iobase, s->size, io);
+
+    return 0;
+}
+
+static SysBusDeviceInfo rtc_forward_info = {
+    .qdev.name  = "rtc-forward",
+    .qdev.size  = sizeof(RtcForwardState),
+    .init       = rtc_forward_init,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", RtcForwardState, iobase, 0x80004000),
+        DEFINE_PROP_HEX32("size", RtcForwardState, size, 0x1000),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
 static void mc146818rtc_register(void)
 {
     isa_qdev_register(&mc146818rtc_info);
+    sysbus_register_withprop(&rtc_forward_info);
 }
 device_init(mc146818rtc_register)
diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index c4f3721..b9c6b62 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -44,28 +44,6 @@ enum jazz_model_e
     JAZZ_PICA61,
 };
 
-static uint32_t rtc_readb(void *opaque, target_phys_addr_t addr)
-{
-    return cpu_inw(0x71);
-}
-
-static void rtc_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
-{
-    cpu_outw(0x71, val & 0xff);
-}
-
-static CPUReadMemoryFunc * const rtc_read[3] = {
-    rtc_readb,
-    rtc_readb,
-    rtc_readb,
-};
-
-static CPUWriteMemoryFunc * const rtc_write[3] = {
-    rtc_writeb,
-    rtc_writeb,
-    rtc_writeb,
-};
-
 static void dma_dummy_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
 {
     /* Nothing to do. That is only to ensure that
@@ -128,7 +106,7 @@ void mips_jazz_init (ram_addr_t ram_size,
     qemu_irq *rc4030, *i8259;
     rc4030_dma *dmas;
     void* rc4030_opaque;
-    int s_rtc, s_dma_dummy;
+    int s_dma_dummy;
     NICInfo *nd;
     PITState *pit;
     DriveInfo *fds[MAX_FD];
@@ -251,8 +229,8 @@ void mips_jazz_init (ram_addr_t ram_size,
 
     /* Real time clock */
     rtc_init(1980, NULL);
-    s_rtc = cpu_register_io_memory(rtc_read, rtc_write, NULL);
-    cpu_register_physical_memory(0x80004000, 0x00001000, s_rtc);
+    dev = qdev_create(NULL, "rtc-forward");
+    qdev_init_nofail(dev);
 
     /* Keyboard (i8042) */
     rc4030_create_simple("rc4030-i8042");
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 14/20] [MIPS] qdev: add an isa bus device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (12 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 13/20] [MIPS] qdev: add a rtc forwarder device Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 15/20] [MIPS] qdev: convert dp83932 network card to rc4030 device Hervé Poussineau
                   ` (6 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/isa-bus.c   |   29 +++++++++++++++++++++++++++++
 hw/mips_jazz.c |   12 ++----------
 2 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/hw/isa-bus.c b/hw/isa-bus.c
index 4e306de..c245151 100644
--- a/hw/isa-bus.c
+++ b/hw/isa-bus.c
@@ -21,6 +21,7 @@
 #include "monitor.h"
 #include "sysbus.h"
 #include "isa.h"
+#include "qdev-addr.h"
 
 struct ISABus {
     BusState qbus;
@@ -53,6 +54,22 @@ ISABus *isa_bus_new(DeviceState *dev)
     return isabus;
 }
 
+typedef struct IsaBusState {
+    SysBusDevice dev;
+    target_phys_addr_t iobase;
+    uint32_t size;
+} IsaBusState;
+
+static int isabus_init(SysBusDevice *dev)
+{
+    IsaBusState *bus = DO_UPCAST(IsaBusState, dev, dev);
+
+    if (isa_bus_new(NULL) == NULL)
+        return -1;
+    isa_mmio_init(bus->iobase, bus->size, 0);
+    return 0;
+}
+
 void isa_bus_irqs(qemu_irq *irqs)
 {
     isabus->irqs = irqs;
@@ -157,9 +174,21 @@ static SysBusDeviceInfo isabus_bridge_info = {
     .qdev.no_user = 1,
 };
 
+static SysBusDeviceInfo isabus_info = {
+    .init = isabus_init,
+    .qdev.name  = "isabus",
+    .qdev.size  = sizeof(IsaBusState),
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", IsaBusState, iobase, 0x90000000),
+        DEFINE_PROP_HEX32("size", IsaBusState, size, 0x1000000),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
 static void isabus_register_devices(void)
 {
     sysbus_register_withprop(&isabus_bridge_info);
+    sysbus_register_withprop(&isabus_info);
 }
 
 device_init(isabus_register_devices)
diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index b9c6b62..cf0001e 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -163,23 +163,15 @@ void mips_jazz_init (ram_addr_t ram_size,
     cpu_register_physical_memory(0x8000d000, 0x00001000, s_dma_dummy);
 
     /* ISA devices */
+    dev = qdev_create(NULL, "isabus");
+    qdev_init_nofail(dev);
     i8259 = i8259_init(qdev_get_gpio_in(cpu->parent, 4));
-    isa_bus_new(NULL);
     isa_bus_irqs(i8259);
     cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
     DMA_init(0, cpu_exit_irq);
     pit = pit_init(0x40, i8259[0]);
     pcspk_init(pit);
 
-    /* ISA IO space at 0x90000000 */
-#ifdef TARGET_WORDS_BIGENDIAN
-    isa_mmio_init(0x90000000, 0x01000000, 1);
-#else
-    isa_mmio_init(0x90000000, 0x01000000, 0);
-#endif
-
-    isa_mem_base = 0x11000000;
-
     /* Optional video card */
     if (vga_interface_type != VGA_NONE) {
         switch (jazz_model) {
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 15/20] [MIPS] qdev: convert dp83932 network card to rc4030 device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (13 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 14/20] [MIPS] qdev: add an isa bus device Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 16/20] [MIPS] qdev: convert floppy disk controller " Hervé Poussineau
                   ` (5 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation
Remove dp83932_init() function, which is not used anymore

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/dp8393x.c   |   64 ++++++++++++++++++++++++++++++++++++-------------------
 hw/mips.h      |    5 ----
 hw/mips_jazz.c |    6 +++-
 3 files changed, 46 insertions(+), 29 deletions(-)

diff --git a/hw/dp8393x.c b/hw/dp8393x.c
index e65e4d1..f8fd9f5 100644
--- a/hw/dp8393x.c
+++ b/hw/dp8393x.c
@@ -21,6 +21,8 @@
 #include "qemu-timer.h"
 #include "net.h"
 #include "mips.h"
+#include "rc4030.h"
+#include "qdev-addr.h"
 
 //#define DEBUG_SONIC
 
@@ -147,7 +149,7 @@ do { printf("sonic ERROR: %s: " fmt, __func__ , ## __VA_ARGS__); } while (0)
 
 typedef struct dp8393xState {
     /* Hardware */
-    int it_shift;
+    uint32_t it_shift;
     qemu_irq irq;
 #ifdef DEBUG_SONIC
     int irq_level;
@@ -869,8 +871,6 @@ static void nic_cleanup(VLANClientState *nc)
 
     qemu_del_timer(s->watchdog);
     qemu_free_timer(s->watchdog);
-
-    qemu_free(s);
 }
 
 static NetClientInfo net_dp83932_info = {
@@ -881,33 +881,53 @@ static NetClientInfo net_dp83932_info = {
     .cleanup = nic_cleanup,
 };
 
-void dp83932_init(NICInfo *nd, target_phys_addr_t base, int it_shift,
-                  qemu_irq irq, void* mem_opaque,
-                  void (*memory_rw)(void *opaque, target_phys_addr_t addr, uint8_t *buf, int len, int is_write))
-{
-    dp8393xState *s;
-
-    qemu_check_nic_model(nd, "dp83932");
+typedef struct RC4030dp83932State {
+    RC4030Device dev;
+    target_phys_addr_t iobase;
+    uint32_t irq;
+    dp8393xState state;
+} RC4030dp83932State;
 
-    s = qemu_mallocz(sizeof(dp8393xState));
+static int dp83932_rc4030_init(RC4030Device *dev)
+{
+    RC4030dp83932State *rc4030 = DO_UPCAST(RC4030dp83932State, dev, dev);
+    dp8393xState *s = &rc4030->state;
 
-    s->mem_opaque = mem_opaque;
-    s->memory_rw = memory_rw;
-    s->it_shift = it_shift;
-    s->irq = irq;
+    s->mem_opaque = rc4030_get_opaque();
+    s->memory_rw = rc4030_dma_memory_rw;
+    rc4030_init_irq(dev, &s->irq, rc4030->irq);
     s->watchdog = qemu_new_timer(vm_clock, dp8393x_watchdog, s);
     s->regs[SONIC_SR] = 0x0004; /* only revision recognized by Linux */
 
-    memcpy(s->conf.macaddr.a, nd->macaddr, sizeof(s->conf.macaddr));
-    s->conf.vlan = nd->vlan;
-    s->conf.peer = nd->netdev;
-
-    s->nic = qemu_new_nic(&net_dp83932_info, &s->conf, nd->model, nd->name, s);
-
+    qemu_macaddr_default_if_unset(&s->conf.macaddr);
+    s->nic = qemu_new_nic(&net_dp83932_info, &s->conf, dev->qdev.info->name, dev->qdev.id, s);
     qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a);
+
     qemu_register_reset(nic_reset, s);
     nic_reset(s);
 
     s->mmio_index = cpu_register_io_memory(dp8393x_read, dp8393x_write, s);
-    cpu_register_physical_memory(base, 0x40 << it_shift, s->mmio_index);
+    cpu_register_physical_memory(rc4030->iobase, 0x40 << s->it_shift, s->mmio_index);
+
+    return 0;
 }
+
+static RC4030DeviceInfo dp83932_rc4030_info = {
+    .qdev.name  = "rc4030-dp83932",
+    .qdev.size  = sizeof(RC4030dp83932State),
+    .init       = dp83932_rc4030_init,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase",   RC4030dp83932State, iobase,         0x80001000),
+        DEFINE_PROP_UINT32("itshift", RC4030dp83932State, state.it_shift, 2),
+        DEFINE_PROP_UINT32("irq",     RC4030dp83932State, irq,            4),
+        DEFINE_NIC_PROPERTIES(        RC4030dp83932State, state.conf),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
+static void dp8393x_register_devices(void)
+{
+    rc4030_qdev_register(&dp83932_rc4030_info);
+}
+
+device_init(dp8393x_register_devices)
diff --git a/hw/mips.h b/hw/mips.h
index aa790d8..d8e4954 100644
--- a/hw/mips.h
+++ b/hw/mips.h
@@ -15,9 +15,4 @@ void ds1225y_set_protection(void *opaque, int protection);
 /* mipsnet.c */
 void mipsnet_init(int base, qemu_irq irq, NICInfo *nd);
 
-/* dp8393x.c */
-void dp83932_init(NICInfo *nd, target_phys_addr_t base, int it_shift,
-                  qemu_irq irq, void* mem_opaque,
-                  void (*memory_rw)(void *opaque, target_phys_addr_t addr, uint8_t *buf, int len, int is_write));
-
 #endif
diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index cf0001e..c0a27b2 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -192,8 +192,10 @@ void mips_jazz_init (ram_addr_t ram_size,
         if (!nd->model)
             nd->model = qemu_strdup("dp83932");
         if (strcmp(nd->model, "dp83932") == 0) {
-            dp83932_init(nd, 0x80001000, 2, rc4030[4],
-                         rc4030_opaque, rc4030_dma_memory_rw);
+            qemu_check_nic_model(nd, nd->model);
+            dev = qdev_create(NULL, nd->model);
+            qdev_set_nic_properties(dev, nd);
+            qdev_init_nofail(dev);
             break;
         } else if (strcmp(nd->model, "?") == 0) {
             fprintf(stderr, "qemu: Supported NICs: dp83932\n");
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 16/20] [MIPS] qdev: convert floppy disk controller to rc4030 device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (14 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 15/20] [MIPS] qdev: convert dp83932 network card to rc4030 device Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter " Hervé Poussineau
                   ` (4 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation
Remove fdctrl_init_sysbus() function, which is not used anymore

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/fdc.c       |   84 ++++++++++++++++++++++++++++++++++++++++----------------
 hw/fdc.h       |    2 -
 hw/mips_jazz.c |   12 +++++--
 3 files changed, 68 insertions(+), 30 deletions(-)

diff --git a/hw/fdc.c b/hw/fdc.c
index 2d50bd6..d51a29c 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -33,6 +33,7 @@
 #include "qemu-timer.h"
 #include "isa.h"
 #include "sysbus.h"
+#include "rc4030.h"
 #include "qdev-addr.h"
 
 /********************************************************/
@@ -524,6 +525,14 @@ typedef struct FDCtrlISABus {
     struct FDCtrl state;
 } FDCtrlISABus;
 
+typedef struct FDCtrlRC4030 {
+    RC4030Device busdev;
+    target_phys_addr_t iobase;
+    uint32_t irq;
+    uint32_t dma;
+    struct FDCtrl state;
+} FDCtrlRC4030;
+
 static uint32_t fdctrl_read (void *opaque, uint32_t reg)
 {
     FDCtrl *fdctrl = opaque;
@@ -714,6 +723,14 @@ static void fdctrl_external_reset_isa(DeviceState *d)
     fdctrl_reset(s, 0);
 }
 
+static void fdctrl_external_reset_rc4030(DeviceState *d)
+{
+    FDCtrlRC4030 *rc4030 = container_of(d, FDCtrlRC4030, busdev.qdev);
+    FDCtrl *s = &rc4030->state;
+
+    fdctrl_reset(s, 0);
+}
+
 static void fdctrl_handle_tc(void *opaque, int irq, int level)
 {
     //FDCtrl *s = opaque;
@@ -1888,30 +1905,6 @@ FDCtrl *fdctrl_init_isa(DriveInfo **fds)
     return &(DO_UPCAST(FDCtrlISABus, busdev, dev)->state);
 }
 
-FDCtrl *fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
-                           target_phys_addr_t mmio_base, DriveInfo **fds)
-{
-    FDCtrl *fdctrl;
-    DeviceState *dev;
-    FDCtrlSysBus *sys;
-
-    dev = qdev_create(NULL, "sysbus-fdc");
-    sys = DO_UPCAST(FDCtrlSysBus, busdev.qdev, dev);
-    fdctrl = &sys->state;
-    fdctrl->dma_chann = dma_chann; /* FIXME */
-    if (fds[0]) {
-        qdev_prop_set_drive_nofail(dev, "driveA", fds[0]->bdrv);
-    }
-    if (fds[1]) {
-        qdev_prop_set_drive_nofail(dev, "driveB", fds[1]->bdrv);
-    }
-    qdev_init_nofail(dev);
-    sysbus_connect_irq(&sys->busdev, 0, irq);
-    sysbus_mmio_map(&sys->busdev, 0, mmio_base);
-
-    return fdctrl;
-}
-
 FDCtrl *sun4m_fdctrl_init(qemu_irq irq, target_phys_addr_t io_base,
                           DriveInfo **fds, qemu_irq *fdc_tc)
 {
@@ -2026,6 +2019,22 @@ static int sun4m_fdc_init1(SysBusDevice *dev)
     return fdctrl_init_common(fdctrl);
 }
 
+static int rc4030_fdc_init1(RC4030Device *dev)
+{
+    FDCtrlRC4030 *rc4030 = DO_UPCAST(FDCtrlRC4030, busdev, dev);
+    FDCtrl *fdctrl = &rc4030->state;
+    int io;
+
+    io = cpu_register_io_memory(fdctrl_mem_read, fdctrl_mem_write, fdctrl);
+    cpu_register_physical_memory(rc4030->iobase, 8, io);
+
+    rc4030_init_irq(dev, &fdctrl->irq, rc4030->irq);
+    qdev_init_gpio_in(&dev->qdev, fdctrl_handle_tc, 1);
+    fdctrl->dma_chann = rc4030->dma;
+
+    return fdctrl_init_common(fdctrl);
+}
+
 static const VMStateDescription vmstate_isa_fdc ={
     .name = "fdc",
     .version_id = 2,
@@ -2085,11 +2094,38 @@ static SysBusDeviceInfo sun4m_fdc_info = {
     },
 };
 
+static const VMStateDescription vmstate_rc4030_fdc = {
+    .name = "rc4030-fdc",
+    .version_id = 2,
+    .minimum_version_id = 2,
+    .fields = (VMStateField []) {
+        VMSTATE_STRUCT(state, FDCtrlRC4030, 0, vmstate_fdc, FDCtrl),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static RC4030DeviceInfo rc4030_fdc_info = {
+    .init = rc4030_fdc_init1,
+    .qdev.name = "rc4030-fdc",
+    .qdev.size = sizeof(FDCtrlRC4030),
+    .qdev.vmsd = &vmstate_rc4030_fdc,
+    .qdev.reset = fdctrl_external_reset_rc4030,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", FDCtrlRC4030, iobase, 0x80003000),
+        DEFINE_PROP_UINT32("irq",   FDCtrlRC4030, irq, 1),
+        DEFINE_PROP_UINT32("dma",   FDCtrlRC4030, dma, 0),
+        DEFINE_PROP_DRIVE("driveA", FDCtrlRC4030, state.drives[0].bs),
+        DEFINE_PROP_DRIVE("driveB", FDCtrlRC4030, state.drives[1].bs),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
 static void fdc_register_devices(void)
 {
     isa_qdev_register(&isa_fdc_info);
     sysbus_register_withprop(&sysbus_fdc_info);
     sysbus_register_withprop(&sun4m_fdc_info);
+    rc4030_qdev_register(&rc4030_fdc_info);
 }
 
 device_init(fdc_register_devices)
diff --git a/hw/fdc.h b/hw/fdc.h
index b6b3772..6f28dc0 100644
--- a/hw/fdc.h
+++ b/hw/fdc.h
@@ -8,8 +8,6 @@
 typedef struct FDCtrl FDCtrl;
 
 FDCtrl *fdctrl_init_isa(DriveInfo **fds);
-FDCtrl *fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
-                           target_phys_addr_t mmio_base, DriveInfo **fds);
 FDCtrl *sun4m_fdctrl_init(qemu_irq irq, target_phys_addr_t io_base,
                           DriveInfo **fds, qemu_irq *fdc_tc);
 int fdctrl_get_drive_type(FDCtrl *fdctrl, int drive_num);
diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index c0a27b2..3c6a495 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -109,7 +109,7 @@ void mips_jazz_init (ram_addr_t ram_size,
     int s_dma_dummy;
     NICInfo *nd;
     PITState *pit;
-    DriveInfo *fds[MAX_FD];
+    DriveInfo *fd;
     qemu_irq esp_reset;
     qemu_irq *cpu_exit_irq;
     ram_addr_t ram_offset;
@@ -216,10 +216,14 @@ void mips_jazz_init (ram_addr_t ram_size,
         fprintf(stderr, "qemu: too many floppy drives\n");
         exit(1);
     }
-    for (n = 0; n < MAX_FD; n++) {
-        fds[n] = drive_get(IF_FLOPPY, 0, n);
+    dev = qdev_create(NULL, "rc4030-fdc");
+    if ((fd = drive_get(IF_FLOPPY, 0, 0)) != NULL) {
+        qdev_prop_set_drive_nofail(dev, "driveA", fd->bdrv);
     }
-    fdctrl_init_sysbus(rc4030[1], 0, 0x80003000, fds);
+    if ((fd = drive_get(IF_FLOPPY, 0, 1)) != NULL) {
+        qdev_prop_set_drive_nofail(dev, "driveB", fd->bdrv);
+    }
+    qdev_init_nofail(dev);
 
     /* Real time clock */
     rtc_init(1980, NULL);
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter to rc4030 device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (15 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 16/20] [MIPS] qdev: convert floppy disk controller " Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-02 14:51   ` Artyom Tarasenko
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 18/20] [MIPS] qdev: convert ds1225y nvram to sysbus device Hervé Poussineau
                   ` (3 subsequent siblings)
  20 siblings, 1 reply; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/esp.c       |   83 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 hw/mips_jazz.c |    5 +---
 2 files changed, 80 insertions(+), 8 deletions(-)

diff --git a/hw/esp.c b/hw/esp.c
index 349052a..d6a9824 100644
--- a/hw/esp.c
+++ b/hw/esp.c
@@ -24,6 +24,8 @@
 
 #include "sysbus.h"
 #include "scsi.h"
+#include "rc4030.h"
+#include "qdev-addr.h"
 #include "esp.h"
 
 /* debug ESP card */
@@ -82,6 +84,15 @@ struct ESPState {
     void *dma_opaque;
 };
 
+typedef struct RC4030ESPState
+{
+    RC4030Device dev;
+    target_phys_addr_t iobase;
+    uint32_t irq;
+    uint32_t dma;
+    ESPState state;
+} RC4030ESPState;
+
 #define ESP_TCLO   0x0
 #define ESP_TCMID  0x1
 #define ESP_FIFO   0x2
@@ -356,11 +367,9 @@ static void esp_do_dma(ESPState *s)
     }
 }
 
-static void esp_command_complete(SCSIBus *bus, int reason, uint32_t tag,
-                                 uint32_t arg)
+static void esp_command_complete1(ESPState *s, int reason, uint32_t tag,
+                                  uint32_t arg)
 {
-    ESPState *s = DO_UPCAST(ESPState, busdev.qdev, bus->qbus.parent);
-
     if (reason == SCSI_REASON_DONE) {
         DPRINTF("SCSI Command complete\n");
         if (s->ti_size != 0)
@@ -388,6 +397,20 @@ static void esp_command_complete(SCSIBus *bus, int reason, uint32_t tag,
     }
 }
 
+static void esp_command_complete(SCSIBus *bus, int reason, uint32_t tag,
+                                 uint32_t arg)
+{
+    ESPState *s = DO_UPCAST(ESPState, busdev.qdev, bus->qbus.parent);
+    esp_command_complete1(s, reason, tag, arg);
+}
+
+static void esp_rc4030_command_complete(SCSIBus *bus, int reason,
+                                        uint32_t tag, uint32_t arg)
+{
+    RC4030ESPState *rc4030 = container_of(bus->qbus.parent, RC4030ESPState, dev.qdev);
+    esp_command_complete1(&rc4030->state, reason, tag, arg);
+}
+
 static void handle_ti(ESPState *s)
 {
     uint32_t dmalen, minlen;
@@ -435,6 +458,12 @@ static void esp_hard_reset(DeviceState *d)
     s->rregs[ESP_CFG1] = 7;
 }
 
+static void esp_rc4030_hard_reset(DeviceState *d)
+{
+    RC4030ESPState *s = container_of(d, RC4030ESPState, dev.qdev);
+    esp_hard_reset(&s->state.busdev.qdev);
+}
+
 static void esp_soft_reset(DeviceState *d)
 {
     ESPState *s = container_of(d, ESPState, busdev.qdev);
@@ -682,6 +711,27 @@ static int esp_init1(SysBusDevice *dev)
     return scsi_bus_legacy_handle_cmdline(&s->bus);
 }
 
+static int esp_rc4030_init1(RC4030Device *dev)
+{
+    RC4030ESPState *rc4030 = container_of(dev, RC4030ESPState, dev);
+    ESPState *s = &rc4030->state;
+    int io;
+
+    rc4030_init_irq(&rc4030->dev, &s->irq, rc4030->irq);
+
+    io = cpu_register_io_memory(esp_mem_read, esp_mem_write, s);
+    cpu_register_physical_memory(rc4030->iobase, ESP_REGS << s->it_shift, io);
+
+    qdev_init_gpio_in(&dev->qdev, parent_esp_reset, 1);
+
+    s->dma_memory_read = rc4030_dma_read;
+    s->dma_memory_write = rc4030_dma_write;
+    s->dma_opaque = rc4030_get_dma(rc4030->dma);
+
+    scsi_bus_new(&s->bus, &dev->qdev, 0, ESP_MAX_DEVS, esp_rc4030_command_complete);
+    return scsi_bus_legacy_handle_cmdline(&s->bus);
+}
+
 static SysBusDeviceInfo esp_info = {
     .init = esp_init1,
     .qdev.name  = "esp",
@@ -693,9 +743,34 @@ static SysBusDeviceInfo esp_info = {
     }
 };
 
+static const VMStateDescription vmstate_rc4030_esp = {
+    .name = "rc4030-esp",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields      = (VMStateField []) {
+        VMSTATE_STRUCT(state, RC4030ESPState, 0, vmstate_esp, ESPState),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static RC4030DeviceInfo esp_rc4030_info = {
+    .qdev.name  = "rc4030-esp",
+    .qdev.size  = sizeof(RC4030ESPState),
+    .qdev.vmsd  = &vmstate_rc4030_esp,
+    .qdev.reset = esp_rc4030_hard_reset,
+    .init       = esp_rc4030_init1,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", RC4030ESPState, iobase, 0x80002000),
+        DEFINE_PROP_UINT32("irq",   RC4030ESPState, irq,    5),
+        DEFINE_PROP_UINT32("dma",   RC4030ESPState, dma,    0),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
 static void esp_register_devices(void)
 {
     sysbus_register_withprop(&esp_info);
+    rc4030_qdev_register(&esp_rc4030_info);
 }
 
 device_init(esp_register_devices)
diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index 3c6a495..08175ab 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -110,7 +110,6 @@ void mips_jazz_init (ram_addr_t ram_size,
     NICInfo *nd;
     PITState *pit;
     DriveInfo *fd;
-    qemu_irq esp_reset;
     qemu_irq *cpu_exit_irq;
     ram_addr_t ram_offset;
     ram_addr_t bios_offset;
@@ -207,9 +206,7 @@ void mips_jazz_init (ram_addr_t ram_size,
     }
 
     /* SCSI adapter */
-    esp_init(0x80002000, 0,
-             rc4030_dma_read, rc4030_dma_write, dmas[0],
-             rc4030[5], &esp_reset);
+    rc4030_create_simple("rc4030-esp");
 
     /* Floppy */
     if (drive_get_max_bus(IF_FLOPPY) >= MAX_FD) {
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 18/20] [MIPS] qdev: convert ds1225y nvram to sysbus device
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (16 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter " Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 19/20] [MIPS] qdev: add a mips board device, which initializes the ram and the rom Hervé Poussineau
                   ` (2 subsequent siblings)
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Use it in Jazz emulation
Remove protection stuff, which doesn't belong to this device
Remove ds1225y_init() and ds1225y_set_protection() functions, which are not used anymore

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/ds1225y.c   |  137 ++++++++++++++++++++++++++++++--------------------------
 hw/mips.h      |    4 --
 hw/mips_jazz.c |    5 +-
 3 files changed, 76 insertions(+), 70 deletions(-)

diff --git a/hw/ds1225y.c b/hw/ds1225y.c
index 009d127..afbfcb0 100644
--- a/hw/ds1225y.c
+++ b/hw/ds1225y.c
@@ -25,15 +25,20 @@
 #include "hw.h"
 #include "mips.h"
 #include "nvram.h"
+#include "sysbus.h"
+#include "qdev-addr.h"
 
 //#define DEBUG_NVRAM
 
 typedef struct ds1225y_t
 {
-    uint32_t chip_size;
+    SysBusDevice busdev;
+
+    target_phys_addr_t iobase;
+    uint32_t size;
+    char *filename;
     QEMUFile *file;
     uint8_t *contents;
-    uint8_t protection;
 } ds1225y_t;
 
 
@@ -98,34 +103,6 @@ static void nvram_writel (void *opaque, target_phys_addr_t addr, uint32_t val)
     nvram_writeb(opaque, addr + 3, (val >> 24) & 0xff);
 }
 
-static void nvram_writeb_protected (void *opaque, target_phys_addr_t addr, uint32_t val)
-{
-    ds1225y_t *s = opaque;
-
-    if (s->protection != 7) {
-#ifdef DEBUG_NVRAM
-    printf("nvram: prevent write of 0x%x at " TARGET_FMT_lx "\n", val, addr);
-#endif
-        return;
-    }
-
-    nvram_writeb(opaque, addr, val);
-}
-
-static void nvram_writew_protected (void *opaque, target_phys_addr_t addr, uint32_t val)
-{
-    nvram_writeb_protected(opaque, addr, val & 0xff);
-    nvram_writeb_protected(opaque, addr + 1, (val >> 8) & 0xff);
-}
-
-static void nvram_writel_protected (void *opaque, target_phys_addr_t addr, uint32_t val)
-{
-    nvram_writeb_protected(opaque, addr, val & 0xff);
-    nvram_writeb_protected(opaque, addr + 1, (val >> 8) & 0xff);
-    nvram_writeb_protected(opaque, addr + 2, (val >> 16) & 0xff);
-    nvram_writeb_protected(opaque, addr + 3, (val >> 24) & 0xff);
-}
-
 static CPUReadMemoryFunc * const nvram_read[] = {
     &nvram_readb,
     &nvram_readw,
@@ -138,43 +115,75 @@ static CPUWriteMemoryFunc * const nvram_write[] = {
     &nvram_writel,
 };
 
-static CPUWriteMemoryFunc * const nvram_write_protected[] = {
-    &nvram_writeb_protected,
-    &nvram_writew_protected,
-    &nvram_writel_protected,
-};
-
-/* Initialisation routine */
-void *ds1225y_init(target_phys_addr_t mem_base, const char *filename)
+static int ds1225y_init(SysBusDevice *dev)
 {
-    ds1225y_t *s;
-    int mem_indexRW, mem_indexRP;
+    ds1225y_t *s = FROM_SYSBUS(ds1225y_t, dev);
+    int mem_index;
     QEMUFile *file;
 
-    s = qemu_mallocz(sizeof(ds1225y_t));
-    s->chip_size = 0x2000; /* Fixed for ds1225y chip: 8 KiB */
-    s->contents = qemu_mallocz(s->chip_size);
-    s->protection = 7;
-
-    /* Read current file */
-    file = qemu_fopen(filename, "rb");
-    if (file) {
-        /* Read nvram contents */
-        qemu_get_buffer(file, s->contents, s->chip_size);
-        qemu_fclose(file);
-    }
-    s->file = qemu_fopen(filename, "wb");
-    if (s->file) {
-        /* Write back contents, as 'wb' mode cleaned the file */
-        qemu_put_buffer(s->file, s->contents, s->chip_size);
-        qemu_fflush(s->file);
+    if (s->iobase == -1)
+      return -1;
+
+    s->contents = qemu_mallocz(s->size);
+
+    if (s->filename) {
+        /* Read current file */
+        file = qemu_fopen(s->filename, "rb");
+        if (file) {
+            /* Read nvram contents */
+            qemu_get_buffer(file, s->contents, s->size);
+            qemu_fclose(file);
+        }
+        s->file = qemu_fopen(s->filename, "wb");
+        if (s->file) {
+            /* Write back contents, as 'wb' mode cleaned the file */
+            qemu_put_buffer(s->file, s->contents, s->size);
+            qemu_fflush(s->file);
+        }
     }
 
-    /* Read/write memory */
-    mem_indexRW = cpu_register_io_memory(nvram_read, nvram_write, s);
-    cpu_register_physical_memory(mem_base, s->chip_size, mem_indexRW);
-    /* Read/write protected memory */
-    mem_indexRP = cpu_register_io_memory(nvram_read, nvram_write_protected, s);
-    cpu_register_physical_memory(mem_base + s->chip_size, s->chip_size, mem_indexRP);
-    return s;
+    mem_index = cpu_register_io_memory(nvram_read, nvram_write, s);
+    cpu_register_physical_memory(s->iobase, s->size, mem_index);
+
+    return 0;
+}
+
+static int ds1225y_init_nvram(SysBusDevice *dev)
+{
+  ds1225y_t *s = FROM_SYSBUS(ds1225y_t, dev);
+  s->filename = (char*)"nvram";
+  return ds1225y_init(dev);
+}
+
+static SysBusDeviceInfo ds1225y_device_info = {
+    .qdev.name  = "ds1225y",
+    .qdev.size  = sizeof(ds1225y_t),
+    .init       = ds1225y_init,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", ds1225y_t, iobase, -1),
+        DEFINE_PROP_HEX32("size", ds1225y_t, size, 0x2000),
+        DEFINE_PROP_STRING("filename", ds1225y_t, filename),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
+static SysBusDeviceInfo ds1225y_device_info_nvram = {
+    .qdev.name    =   "ds1225y,filename=nvram",
+    .qdev.size    = sizeof(ds1225y_t),
+    .qdev.no_user = 1,
+    .init         = ds1225y_init_nvram,
+    .qdev.props   = (Property[]) {
+        DEFINE_PROP_TADDR("iobase", ds1225y_t, iobase, 0x80009000),
+        DEFINE_PROP_HEX32("size", ds1225y_t, size, 0x2000),
+        DEFINE_PROP_STRING("filename", ds1225y_t, filename),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
+static void ds1225y_register_devices(void)
+{
+    sysbus_register_withprop(&ds1225y_device_info);
+    sysbus_register_withprop(&ds1225y_device_info_nvram);
 }
+
+device_init(ds1225y_register_devices)
diff --git a/hw/mips.h b/hw/mips.h
index d8e4954..5d59b1e 100644
--- a/hw/mips.h
+++ b/hw/mips.h
@@ -8,10 +8,6 @@ PCIBus *pci_gt64120_init(qemu_irq *pic);
 /* bonito.c */
 PCIBus *bonito_init(qemu_irq *pic);
 
-/* ds1225y.c */
-void *ds1225y_init(target_phys_addr_t mem_base, const char *filename);
-void ds1225y_set_protection(void *opaque, int protection);
-
 /* mipsnet.c */
 void mipsnet_init(int base, qemu_irq irq, NICInfo *nd);
 
diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index 08175ab..6daf76e 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -247,8 +247,9 @@ void mips_jazz_init (ram_addr_t ram_size,
     /* FIXME: missing Jazz sound at 0x8000c000, rc4030[2] */
     audio_init(i8259);
 
-    /* NVRAM: Unprotected at 0x9000, Protected at 0xa000, Read only at 0xb000 */
-    ds1225y_init(0x80009000, "nvram");
+    /* NVRAM */
+    dev = qdev_create(NULL, "ds1225y,filename=nvram");
+    qdev_init_nofail(dev);
 
     /* LED indicator */
     dev = qdev_create(NULL, "jazz-led");
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 19/20] [MIPS] qdev: add a mips board device, which initializes the ram and the rom
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (17 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 18/20] [MIPS] qdev: convert ds1225y nvram to sysbus device Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 20/20] [MIPS] qdev: Complete rc4030 conversion, by removing legacy stuff Hervé Poussineau
  2010-08-02 16:06 ` [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Blue Swirl
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Also add an empty machine (to be used with the mips board device)
Finally, add a workaround to be able to create the initial system bus

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips_jazz.c |   78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 hw/qdev.c      |    6 ++++
 2 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index 6daf76e..b4c95c9 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -37,6 +37,7 @@
 #include "loader.h"
 #include "mc146818rtc.h"
 #include "rc4030.h"
+#include "sysbus.h"
 
 enum jazz_model_e
 {
@@ -274,6 +275,14 @@ void mips_pica61_init (ram_addr_t ram_size,
     mips_jazz_init(ram_size, cpu_model, JAZZ_PICA61);
 }
 
+static
+void empty_init (ram_addr_t ram_size,
+                 const char *boot_device,
+                 const char *kernel_filename, const char *kernel_cmdline,
+                 const char *initrd_filename, const char *cpu_model)
+{
+}
+
 static QEMUMachine mips_magnum_machine = {
     .name = "magnum",
     .desc = "MIPS Magnum",
@@ -288,10 +297,79 @@ static QEMUMachine mips_pica61_machine = {
     .use_scsi = 1,
 };
 
+static QEMUMachine empty_machine = {
+    .name = "empty",
+    .desc = "Empty machine",
+    .init = empty_init,
+};
+
 static void mips_jazz_machine_init(void)
 {
     qemu_register_machine(&mips_magnum_machine);
     qemu_register_machine(&mips_pica61_machine);
+    qemu_register_machine(&empty_machine);
 }
 
 machine_init(mips_jazz_machine_init);
+
+typedef struct MipsBoardState {
+    SysBusDevice busdev;
+
+    char *romfile;
+    uint32_t romsize;
+    uint32_t ramsize;
+} MipsBoardState;
+
+static int mips_board_device_init(SysBusDevice *dev)
+{
+    MipsBoardState *s = FROM_SYSBUS(MipsBoardState, dev);
+    int bios_size;
+    ram_addr_t ram_size;
+    ram_addr_t ram_offset;
+    ram_addr_t bios_offset;
+
+    /* allocate RAM */
+    ram_size = s->ramsize * 1024 * 1024;
+    ram_offset = qemu_ram_alloc(NULL, "mips_jazz.ram", ram_size);
+    cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM);
+
+    /* load the BIOS image */
+    if (s->romfile) {
+        bios_offset = qemu_ram_alloc(NULL, "mips_jazz.bios", s->romsize);
+        cpu_register_physical_memory(0x1fc00000LL,
+                                     s->romsize, bios_offset | IO_MEM_ROM);
+        cpu_register_physical_memory(0xfff00000LL,
+                                     s->romsize, bios_offset | IO_MEM_ROM);
+
+        bios_size = load_image_targphys(s->romfile,
+                                        0x1fc00000LL,
+                                        s->romsize);
+
+        bios_size = load_image_targphys(s->romfile,
+                                        0xfff00000LL,
+                                        s->romsize);
+        if (bios_size != s->romsize) {
+            return -1;
+        }
+    }
+    return 0;
+}
+
+static SysBusDeviceInfo board_device_info = {
+    .qdev.name = "mips-board",
+    .qdev.size = sizeof(MipsBoardState),
+    .init      = mips_board_device_init,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_STRING("romfile", MipsBoardState, romfile),
+        DEFINE_PROP_HEX32("romsize", MipsBoardState, romsize, 0x40000),
+        DEFINE_PROP_UINT32("ramsize", MipsBoardState, ramsize, 64),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
+static void mips_register_devices(void)
+{
+    sysbus_register_withprop(&board_device_info);
+}
+
+device_init(mips_register_devices)
diff --git a/hw/qdev.c b/hw/qdev.c
index e99c73f..f907385 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -455,6 +455,12 @@ static BusState *qbus_find_recursive(BusState *bus, const char *name,
     BusState *child, *ret;
     int match = 1;
 
+    if (!bus) {
+        if (!main_system_bus) {
+            main_system_bus = qbus_create(&system_bus_info, NULL, "main-system-bus");
+        }
+        return main_system_bus;
+    }
     if (name && (strcmp(bus->name, name) != 0)) {
         match = 0;
     }
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [Qemu-devel] [PATCH 20/20] [MIPS] qdev: Complete rc4030 conversion, by removing legacy stuff
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (18 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 19/20] [MIPS] qdev: add a mips board device, which initializes the ram and the rom Hervé Poussineau
@ 2010-08-01 17:37 ` Hervé Poussineau
  2010-08-02 16:06 ` [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Blue Swirl
  20 siblings, 0 replies; 23+ messages in thread
From: Hervé Poussineau @ 2010-08-01 17:37 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau


Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips_jazz.c |    7 +++----
 hw/rc4030.c    |   17 -----------------
 hw/rc4030.h    |    4 ----
 3 files changed, 3 insertions(+), 25 deletions(-)

diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
index b4c95c9..04d80ee 100644
--- a/hw/mips_jazz.c
+++ b/hw/mips_jazz.c
@@ -104,9 +104,7 @@ void mips_jazz_init (ram_addr_t ram_size,
     int bios_size, n;
     BusState *cpu;
     DeviceState *dev;
-    qemu_irq *rc4030, *i8259;
-    rc4030_dma *dmas;
-    void* rc4030_opaque;
+    qemu_irq *i8259;
     int s_dma_dummy;
     NICInfo *nd;
     PITState *pit;
@@ -158,7 +156,8 @@ void mips_jazz_init (ram_addr_t ram_size,
     }
 
     /* Chipset */
-    rc4030_opaque = rc4030_init(cpu, &rc4030, &dmas);
+    dev = qdev_create(cpu, "rc4030");
+    qdev_init_nofail(dev);
     s_dma_dummy = cpu_register_io_memory(dma_dummy_read, dma_dummy_write, NULL);
     cpu_register_physical_memory(0x8000d000, 0x00001000, s_dma_dummy);
 
diff --git a/hw/rc4030.c b/hw/rc4030.c
index 3c8cdfa..710085e 100644
--- a/hw/rc4030.c
+++ b/hw/rc4030.c
@@ -948,20 +948,3 @@ static void rc4030_register_devices(void)
 
 device_init(rc4030_register_devices)
 
-void *rc4030_init(BusState *bus,
-                  qemu_irq **irqs, rc4030_dma **dmas)
-{
-    DeviceState *dev;
-    rc4030State* rc4030;
-
-    dev = qdev_create(bus, "rc4030");
-    qdev_init_nofail(dev);
-
-    rc4030 = DO_UPCAST(rc4030State, busdev, dev);
-
-    *irqs = rc4030->busdev.gpio_in;
-    *dmas = rc4030->bus.dmas;
-
-    return rc4030;
-}
-
diff --git a/hw/rc4030.h b/hw/rc4030.h
index 58522f3..f15b459 100644
--- a/hw/rc4030.h
+++ b/hw/rc4030.h
@@ -34,8 +34,4 @@ void rc4030_dma_write(void *dma, uint8_t *buf, int len);
 void *rc4030_get_opaque(void);
 rc4030_dma rc4030_get_dma(int dma);
 
-/* Non-qdev compatibility stuff... */
-void *rc4030_init(BusState *parent,
-                  qemu_irq **irqs, rc4030_dma **dmas);
-
 #endif
-- 
1.7.1.GIT

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter to rc4030 device
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter " Hervé Poussineau
@ 2010-08-02 14:51   ` Artyom Tarasenko
  0 siblings, 0 replies; 23+ messages in thread
From: Artyom Tarasenko @ 2010-08-02 14:51 UTC (permalink / raw)
  To: Hervé Poussineau; +Cc: qemu-devel

2010/8/1 Hervé Poussineau <hpoussin@reactos.org>:
> Use it in Jazz emulation
>
> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
> ---
>  hw/esp.c       |   83 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
>  hw/mips_jazz.c |    5 +---
>  2 files changed, 80 insertions(+), 8 deletions(-)
>
> diff --git a/hw/esp.c b/hw/esp.c
> index 349052a..d6a9824 100644
> --- a/hw/esp.c
> +++ b/hw/esp.c
> @@ -24,6 +24,8 @@
>
>  #include "sysbus.h"
>  #include "scsi.h"
> +#include "rc4030.h"

Putting RC4030Device into esp doesn't look clean to me. E.g. Sun
machines don't use RC4030, I'd suggest to keep esp logic machine
independent.

> +#include "qdev-addr.h"
>  #include "esp.h"
>
>  /* debug ESP card */
> @@ -82,6 +84,15 @@ struct ESPState {
>     void *dma_opaque;
>  };
>
> +typedef struct RC4030ESPState
> +{
> +    RC4030Device dev;
> +    target_phys_addr_t iobase;
> +    uint32_t irq;
> +    uint32_t dma;
> +    ESPState state;
> +} RC4030ESPState;
> +
>  #define ESP_TCLO   0x0
>  #define ESP_TCMID  0x1
>  #define ESP_FIFO   0x2
> @@ -356,11 +367,9 @@ static void esp_do_dma(ESPState *s)
>     }
>  }
>
> -static void esp_command_complete(SCSIBus *bus, int reason, uint32_t tag,
> -                                 uint32_t arg)
> +static void esp_command_complete1(ESPState *s, int reason, uint32_t tag,
> +                                  uint32_t arg)
>  {
> -    ESPState *s = DO_UPCAST(ESPState, busdev.qdev, bus->qbus.parent);
> -
>     if (reason == SCSI_REASON_DONE) {
>         DPRINTF("SCSI Command complete\n");
>         if (s->ti_size != 0)
> @@ -388,6 +397,20 @@ static void esp_command_complete(SCSIBus *bus, int reason, uint32_t tag,
>     }
>  }
>
> +static void esp_command_complete(SCSIBus *bus, int reason, uint32_t tag,
> +                                 uint32_t arg)
> +{
> +    ESPState *s = DO_UPCAST(ESPState, busdev.qdev, bus->qbus.parent);
> +    esp_command_complete1(s, reason, tag, arg);
> +}
> +
> +static void esp_rc4030_command_complete(SCSIBus *bus, int reason,
> +                                        uint32_t tag, uint32_t arg)
> +{
> +    RC4030ESPState *rc4030 = container_of(bus->qbus.parent, RC4030ESPState, dev.qdev);
> +    esp_command_complete1(&rc4030->state, reason, tag, arg);
> +}
> +
>  static void handle_ti(ESPState *s)
>  {
>     uint32_t dmalen, minlen;
> @@ -435,6 +458,12 @@ static void esp_hard_reset(DeviceState *d)
>     s->rregs[ESP_CFG1] = 7;
>  }
>
> +static void esp_rc4030_hard_reset(DeviceState *d)
> +{
> +    RC4030ESPState *s = container_of(d, RC4030ESPState, dev.qdev);
> +    esp_hard_reset(&s->state.busdev.qdev);
> +}
> +
>  static void esp_soft_reset(DeviceState *d)
>  {
>     ESPState *s = container_of(d, ESPState, busdev.qdev);
> @@ -682,6 +711,27 @@ static int esp_init1(SysBusDevice *dev)
>     return scsi_bus_legacy_handle_cmdline(&s->bus);
>  }
>
> +static int esp_rc4030_init1(RC4030Device *dev)
> +{
> +    RC4030ESPState *rc4030 = container_of(dev, RC4030ESPState, dev);
> +    ESPState *s = &rc4030->state;
> +    int io;
> +
> +    rc4030_init_irq(&rc4030->dev, &s->irq, rc4030->irq);
> +
> +    io = cpu_register_io_memory(esp_mem_read, esp_mem_write, s);
> +    cpu_register_physical_memory(rc4030->iobase, ESP_REGS << s->it_shift, io);
> +
> +    qdev_init_gpio_in(&dev->qdev, parent_esp_reset, 1);
> +
> +    s->dma_memory_read = rc4030_dma_read;
> +    s->dma_memory_write = rc4030_dma_write;
> +    s->dma_opaque = rc4030_get_dma(rc4030->dma);
> +
> +    scsi_bus_new(&s->bus, &dev->qdev, 0, ESP_MAX_DEVS, esp_rc4030_command_complete);
> +    return scsi_bus_legacy_handle_cmdline(&s->bus);
> +}
> +
>  static SysBusDeviceInfo esp_info = {
>     .init = esp_init1,
>     .qdev.name  = "esp",
> @@ -693,9 +743,34 @@ static SysBusDeviceInfo esp_info = {
>     }
>  };
>
> +static const VMStateDescription vmstate_rc4030_esp = {
> +    .name = "rc4030-esp",
> +    .version_id = 1,
> +    .minimum_version_id = 1,
> +    .fields      = (VMStateField []) {
> +        VMSTATE_STRUCT(state, RC4030ESPState, 0, vmstate_esp, ESPState),
> +        VMSTATE_END_OF_LIST()
> +    }
> +};
> +
> +static RC4030DeviceInfo esp_rc4030_info = {
> +    .qdev.name  = "rc4030-esp",
> +    .qdev.size  = sizeof(RC4030ESPState),
> +    .qdev.vmsd  = &vmstate_rc4030_esp,
> +    .qdev.reset = esp_rc4030_hard_reset,
> +    .init       = esp_rc4030_init1,
> +    .qdev.props = (Property[]) {
> +        DEFINE_PROP_TADDR("iobase", RC4030ESPState, iobase, 0x80002000),
> +        DEFINE_PROP_UINT32("irq",   RC4030ESPState, irq,    5),
> +        DEFINE_PROP_UINT32("dma",   RC4030ESPState, dma,    0),
> +        DEFINE_PROP_END_OF_LIST(),
> +    },
> +};
> +
>  static void esp_register_devices(void)
>  {
>     sysbus_register_withprop(&esp_info);
> +    rc4030_qdev_register(&esp_rc4030_info);
>  }
>
>  device_init(esp_register_devices)
> diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
> index 3c6a495..08175ab 100644
> --- a/hw/mips_jazz.c
> +++ b/hw/mips_jazz.c
> @@ -110,7 +110,6 @@ void mips_jazz_init (ram_addr_t ram_size,
>     NICInfo *nd;
>     PITState *pit;
>     DriveInfo *fd;
> -    qemu_irq esp_reset;
>     qemu_irq *cpu_exit_irq;
>     ram_addr_t ram_offset;
>     ram_addr_t bios_offset;
> @@ -207,9 +206,7 @@ void mips_jazz_init (ram_addr_t ram_size,
>     }
>
>     /* SCSI adapter */
> -    esp_init(0x80002000, 0,
> -             rc4030_dma_read, rc4030_dma_write, dmas[0],
> -             rc4030[5], &esp_reset);
> +    rc4030_create_simple("rc4030-esp");
>
>     /* Floppy */
>     if (drive_get_max_bus(IF_FLOPPY) >= MAX_FD) {
> --
> 1.7.1.GIT
>
>
>



-- 
Regards,
Artyom Tarasenko

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

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev
  2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
                   ` (19 preceding siblings ...)
  2010-08-01 17:37 ` [Qemu-devel] [PATCH 20/20] [MIPS] qdev: Complete rc4030 conversion, by removing legacy stuff Hervé Poussineau
@ 2010-08-02 16:06 ` Blue Swirl
  20 siblings, 0 replies; 23+ messages in thread
From: Blue Swirl @ 2010-08-02 16:06 UTC (permalink / raw)
  To: Hervé Poussineau; +Cc: QEMU Developers

On Sun, Aug 1, 2010 at 1:42 PM, Hervé Poussineau <hpoussin@reactos.org> wrote:
> This series converts devices used by MIPS Magnum emulation to qdev devices.
> Once applied, Magnum emulation will be fully creatable by a configuration
> file (see attached file)
>
> usage:
> qemu-system-mips64el -M empty -nodefaults -readconfig magnum
> -netdev id=nic,type=user
> -drive id=disk,format=qcow2,if=none,file=1G.qcow2
> -drive id=cdrom,media=cdrom,format=raw,if=none,file=arccd.iso
> -chardev id=serial0,backend=vc
> -chardev id=serial1,backend=vc
> -chardev id=parallel0,backend=vc
>
> All feedback is very appreciated.

I appreciate very much your goal to make the devices qdevified.
However, the approach is not correct. Instead of adding 'iobase'
parameters and using cpu_register_physical_memory() in the device
code, you should just use sysbus_mmio_map() at board level. I also
don't see much need for a dedicated rc4030 bus. See for example
syborg.c for a mostly qdevified board.

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2010-08-02 16:10 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-01 13:42 [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 01/20] [MIPS] cpu: add a init inplace method Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 02/20] [MIPS] cpu: convert to qdev Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 03/20] [MIPS] Jazz emulation: create a qdev cpu Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 04/20] [MIPS] rc4030: convert to qdev Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 05/20] Add a stub for some rc4030 functions, if rc4030 support is not compiled in Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 06/20] [MIPS] qdev: convert i8042 to rc4030 device Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 07/20] [MIPS] qdev: convert parallel port " Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 08/20] [MIPS] qdev: convert serial " Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 09/20] [MIPS] qdev: convert jazz-led to sysbus device Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 10/20] [MIPS] Jazz emulation: make video card optional Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 11/20] [MIPS] qdev: convert vga-isa-mm to ISA device Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 12/20] [MIPS] qdev: convert g364fb to rc4030 device Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 13/20] [MIPS] qdev: add a rtc forwarder device Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 14/20] [MIPS] qdev: add an isa bus device Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 15/20] [MIPS] qdev: convert dp83932 network card to rc4030 device Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 16/20] [MIPS] qdev: convert floppy disk controller " Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter " Hervé Poussineau
2010-08-02 14:51   ` Artyom Tarasenko
2010-08-01 17:37 ` [Qemu-devel] [PATCH 18/20] [MIPS] qdev: convert ds1225y nvram to sysbus device Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 19/20] [MIPS] qdev: add a mips board device, which initializes the ram and the rom Hervé Poussineau
2010-08-01 17:37 ` [Qemu-devel] [PATCH 20/20] [MIPS] qdev: Complete rc4030 conversion, by removing legacy stuff Hervé Poussineau
2010-08-02 16:06 ` [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev Blue Swirl

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.