Commit 8b17de88e0dbe05a4ed2b6b7c9f402857a584930

Authored by blueswir1
1 parent e1ffb0f1

Let ESP SCSI adapter to be usable outside sun4m (Herv�oussineau)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4007 c046a42c-6fe2-441c-8c8c-71466251a162
Makefile.target
... ... @@ -514,7 +514,7 @@ LIBS += $(CONFIG_VNC_TLS_LIBS)
514 514 endif
515 515  
516 516 # SCSI layer
517   -OBJS+= lsi53c895a.o
  517 +OBJS+= lsi53c895a.o esp.o
518 518  
519 519 # USB layer
520 520 OBJS+= usb-ohci.o
... ... @@ -576,7 +576,7 @@ OBJS+= fdc.o mc146818rtc.o serial.o m48t59.o
576 576 OBJS+= cirrus_vga.o parallel.o ptimer.o
577 577 else
578 578 OBJS+= sun4m.o tcx.o pcnet.o iommu.o m48t59.o slavio_intctl.o
579   -OBJS+= slavio_timer.o slavio_serial.o slavio_misc.o fdc.o esp.o sparc32_dma.o
  579 +OBJS+= slavio_timer.o slavio_serial.o slavio_misc.o fdc.o sparc32_dma.o
580 580 OBJS+= cs4231.o ptimer.o eccmemctl.o sbi.o sun4c_intctl.o
581 581 endif
582 582 endif
... ...
hw/esp.c
... ... @@ -24,9 +24,7 @@
24 24 #include "hw.h"
25 25 #include "block.h"
26 26 #include "scsi-disk.h"
27   -#include "sun4m.h"
28   -/* FIXME: Only needed for MAX_DISKS, which is probably wrong. */
29   -#include "sysemu.h"
  27 +#include "scsi.h"
30 28  
31 29 /* debug ESP card */
32 30 //#define DEBUG_ESP
... ... @@ -75,6 +73,9 @@ struct ESPState {
75 73 uint32_t dma_counter;
76 74 uint8_t *async_buf;
77 75 uint32_t async_len;
  76 +
  77 + espdma_memory_read_write dma_memory_read;
  78 + espdma_memory_read_write dma_memory_write;
78 79 void *dma_opaque;
79 80 };
80 81  
... ... @@ -152,7 +153,7 @@ static int get_cmd(ESPState *s, uint8_t *buf)
152 153 target = s->wregs[ESP_WBUSID] & 7;
153 154 DPRINTF("get_cmd: len %d target %d\n", dmalen, target);
154 155 if (s->dma) {
155   - espdma_memory_read(s->dma_opaque, buf, dmalen);
  156 + s->dma_memory_read(s->dma_opaque, buf, dmalen);
156 157 } else {
157 158 buf[0] = 0;
158 159 memcpy(&buf[1], s->ti_buf, dmalen);
... ... @@ -236,7 +237,7 @@ static void write_response(ESPState *s)
236 237 s->ti_buf[0] = s->sense;
237 238 s->ti_buf[1] = 0;
238 239 if (s->dma) {
239   - espdma_memory_write(s->dma_opaque, s->ti_buf, 2);
  240 + s->dma_memory_write(s->dma_opaque, s->ti_buf, 2);
240 241 s->rregs[ESP_RSTAT] = STAT_IN | STAT_TC | STAT_ST;
241 242 s->rregs[ESP_RINTR] = INTR_BS | INTR_FC;
242 243 s->rregs[ESP_RSEQ] = SEQ_CD;
... ... @@ -269,7 +270,7 @@ static void esp_do_dma(ESPState *s)
269 270 len = s->dma_left;
270 271 if (s->do_cmd) {
271 272 DPRINTF("command len %d + %d\n", s->cmdlen, len);
272   - espdma_memory_read(s->dma_opaque, &s->cmdbuf[s->cmdlen], len);
  273 + s->dma_memory_read(s->dma_opaque, &s->cmdbuf[s->cmdlen], len);
273 274 s->ti_size = 0;
274 275 s->cmdlen = 0;
275 276 s->do_cmd = 0;
... ... @@ -284,9 +285,9 @@ static void esp_do_dma(ESPState *s)
284 285 len = s->async_len;
285 286 }
286 287 if (to_device) {
287   - espdma_memory_read(s->dma_opaque, s->async_buf, len);
  288 + s->dma_memory_read(s->dma_opaque, s->async_buf, len);
288 289 } else {
289   - espdma_memory_write(s->dma_opaque, s->async_buf, len);
  290 + s->dma_memory_write(s->dma_opaque, s->async_buf, len);
290 291 }
291 292 s->dma_left -= len;
292 293 s->async_buf += len;
... ... @@ -621,6 +622,8 @@ void esp_scsi_attach(void *opaque, BlockDriverState *bd, int id)
621 622 }
622 623  
623 624 void *esp_init(target_phys_addr_t espaddr,
  625 + espdma_memory_read_write dma_memory_read,
  626 + espdma_memory_read_write dma_memory_write,
624 627 void *dma_opaque, qemu_irq irq, qemu_irq *reset)
625 628 {
626 629 ESPState *s;
... ... @@ -631,6 +634,8 @@ void *esp_init(target_phys_addr_t espaddr,
631 634 return NULL;
632 635  
633 636 s->irq = irq;
  637 + s->dma_memory_read = dma_memory_read;
  638 + s->dma_memory_write = dma_memory_write;
634 639 s->dma_opaque = dma_opaque;
635 640  
636 641 esp_io_memory = cpu_register_io_memory(0, esp_mem_read, esp_mem_write, s);
... ...
hw/scsi.h 0 → 100644
  1 +/* esp.c */
  2 +#define ESP_MAX_DEVS 7
  3 +typedef void (*espdma_memory_read_write)(void *opaque, uint8_t *buf, int len);
  4 +void esp_scsi_attach(void *opaque, BlockDriverState *bd, int id);
  5 +void *esp_init(target_phys_addr_t espaddr,
  6 + espdma_memory_read_write dma_memory_read,
  7 + espdma_memory_read_write dma_memory_write,
  8 + void *dma_opaque, qemu_irq irq, qemu_irq *reset);
... ...
hw/sun4m.c
... ... @@ -31,6 +31,7 @@
31 31 #include "net.h"
32 32 #include "boards.h"
33 33 #include "firmware_abi.h"
  34 +#include "scsi.h"
34 35  
35 36 //#define DEBUG_IRQ
36 37  
... ... @@ -505,8 +506,9 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int RAM_size,
505 506 exit(1);
506 507 }
507 508  
508   - main_esp = esp_init(hwdef->esp_base, espdma, *espdma_irq,
509   - esp_reset);
  509 + main_esp = esp_init(hwdef->esp_base,
  510 + espdma_memory_read, espdma_memory_write,
  511 + espdma, *espdma_irq, esp_reset);
510 512  
511 513 for (i = 0; i < ESP_MAX_DEVS; i++) {
512 514 index = drive_get_index(IF_SCSI, 0, i);
... ... @@ -653,8 +655,9 @@ static void sun4c_hw_init(const struct hwdef *hwdef, int RAM_size,
653 655 exit(1);
654 656 }
655 657  
656   - main_esp = esp_init(hwdef->esp_base, espdma, *espdma_irq,
657   - esp_reset);
  658 + main_esp = esp_init(hwdef->esp_base,
  659 + espdma_memory_read, espdma_memory_write,
  660 + espdma, *espdma_irq, esp_reset);
658 661  
659 662 for (i = 0; i < ESP_MAX_DEVS; i++) {
660 663 index = drive_get_index(IF_SCSI, 0, i);
... ... @@ -1158,8 +1161,9 @@ static void sun4d_hw_init(const struct sun4d_hwdef *hwdef, int RAM_size,
1158 1161 exit(1);
1159 1162 }
1160 1163  
1161   - main_esp = esp_init(hwdef->esp_base, espdma, *espdma_irq,
1162   - esp_reset);
  1164 + main_esp = esp_init(hwdef->esp_base,
  1165 + espdma_memory_read, espdma_memory_write,
  1166 + espdma, *espdma_irq, esp_reset);
1163 1167  
1164 1168 for (i = 0; i < ESP_MAX_DEVS; i++) {
1165 1169 index = drive_get_index(IF_SCSI, 0, i);
... ...
hw/sun4m.h
... ... @@ -59,12 +59,6 @@ void *slavio_misc_init(target_phys_addr_t base, target_phys_addr_t power_base,
59 59 CPUState *env);
60 60 void slavio_set_power_fail(void *opaque, int power_failing);
61 61  
62   -/* esp.c */
63   -#define ESP_MAX_DEVS 7
64   -void esp_scsi_attach(void *opaque, BlockDriverState *bd, int id);
65   -void *esp_init(target_phys_addr_t espaddr,
66   - void *dma_opaque, qemu_irq irq, qemu_irq *reset);
67   -
68 62 /* cs4231.c */
69 63 void cs_init(target_phys_addr_t base, int irq, void *intctl);
70 64  
... ...