[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter to rc40
From: |
Hervé Poussineau |
Subject: |
[Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter to rc4030 device |
Date: |
Sun, 1 Aug 2010 19:37:19 +0200 |
Use it in Jazz emulation
Signed-off-by: Hervé Poussineau <address@hidden>
---
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
- [Qemu-devel] [PATCH 07/20] [MIPS] qdev: convert parallel port to rc4030 device, (continued)
- [Qemu-devel] [PATCH 07/20] [MIPS] qdev: convert parallel port to rc4030 device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 08/20] [MIPS] qdev: convert serial port to rc4030 device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 09/20] [MIPS] qdev: convert jazz-led to sysbus device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 10/20] [MIPS] Jazz emulation: make video card optional, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 11/20] [MIPS] qdev: convert vga-isa-mm to ISA device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 12/20] [MIPS] qdev: convert g364fb to rc4030 device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 13/20] [MIPS] qdev: add a rtc forwarder device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 14/20] [MIPS] qdev: add an isa bus device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 15/20] [MIPS] qdev: convert dp83932 network card to rc4030 device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 16/20] [MIPS] qdev: convert floppy disk controller to rc4030 device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 17/20] [MIPS] qdev: convert esp scsi adapter to rc4030 device,
Hervé Poussineau <=
- [Qemu-devel] [PATCH 18/20] [MIPS] qdev: convert ds1225y nvram to sysbus device, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 19/20] [MIPS] qdev: add a mips board device, which initializes the ram and the rom, Hervé Poussineau, 2010/08/01
- [Qemu-devel] [PATCH 20/20] [MIPS] qdev: Complete rc4030 conversion, by removing legacy stuff, Hervé Poussineau, 2010/08/01
- Re: [Qemu-devel] [PATCH 00/20] MIPS Magnum conversion to qdev, Blue Swirl, 2010/08/02