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
next prev 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).