qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Hervé Poussineau" <hpoussin@reactos.org>
To: qemu-devel@nongnu.org
Cc: "Hervé Poussineau" <hpoussin@reactos.org>
Subject: [Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter to rc4030 device
Date: Sun,  1 Aug 2010 19:37:19 +0200	[thread overview]
Message-ID: <1280684242-19611-17-git-send-email-hpoussin@reactos.org> (raw)
In-Reply-To: <4C5579DA.8050508@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"
+#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

  parent reply	other threads:[~2010-08-01 18:11 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 ` Hervé Poussineau [this message]
2010-08-02 14:51   ` [Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter " 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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1280684242-19611-17-git-send-email-hpoussin@reactos.org \
    --to=hpoussin@reactos.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).