qemu-devel.nongnu.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).