summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Bogendoerfer <tsbogend@alpha.franken.de>1998-05-12 19:30:33 +0000
committerThomas Bogendoerfer <tsbogend@alpha.franken.de>1998-05-12 19:30:33 +0000
commitb4930b0d404da1157965de172686b7dbf14b5e99 (patch)
tree635b2c9019cc315ef692bd237bd09fb44ad11ef0
parent3b23e8acfab7fa5522ce96c58335607fe235562a (diff)
now NCR53C9x is used for the FAS216 on jazz boards
-rw-r--r--drivers/scsi/NCR53C9x.c154
-rw-r--r--drivers/scsi/NCR53C9x.h50
-rw-r--r--drivers/scsi/jazz_esp.c74
-rw-r--r--drivers/scsi/jazz_esp.h4
4 files changed, 142 insertions, 140 deletions
diff --git a/drivers/scsi/NCR53C9x.c b/drivers/scsi/NCR53C9x.c
index 81a3fab54..a6e2e51dc 100644
--- a/drivers/scsi/NCR53C9x.c
+++ b/drivers/scsi/NCR53C9x.c
@@ -395,12 +395,6 @@ static inline void esp_reset_esp(struct NCR_ESP *esp, struct ESP_regs *eregs)
esp_cmd(esp, eregs, ESP_CMD_NULL | ESP_CMD_DMA);
esp_cmd(esp, eregs, ESP_CMD_NULL | ESP_CMD_DMA);
- /* Reload the configuration registers */
- eregs->esp_cfact = esp->cfact;
- eregs->esp_stp = 0;
- eregs->esp_soff = 0;
- eregs->esp_timeo = esp->neg_defp;
-
/* This is the only point at which it is reliable to read
* the ID-code for a fast ESP chip variant.
*/
@@ -417,7 +411,10 @@ static inline void esp_reset_esp(struct NCR_ESP *esp, struct ESP_regs *eregs)
}
#endif
if(family_code == 0x02)
- esp->erev = fas236;
+ if ((version & 7) == 2)
+ esp->erev = fas216;
+ else
+ esp->erev = fas236;
else if(family_code == 0x0a)
esp->erev = fashme; /* Version is usually '5'. */
else
@@ -425,13 +422,20 @@ static inline void esp_reset_esp(struct NCR_ESP *esp, struct ESP_regs *eregs)
printk("esp%d: FAST chip is %s (family=%d, version=%d)\n",
esp->esp_id,
(esp->erev == fas236) ? "fas236" :
- ((esp->erev == fas100a) ? "fas100a" :
- "fasHME"), family_code, (version & 7));
+ ((esp->erev == fas216) ? "fas216" :
+ (((esp->erev == fas100a) ? "fas100a" :
+ "fasHME"))), family_code, (version & 7));
esp->min_period = ((4 * esp->ccycle) / 1000);
} else {
esp->min_period = ((5 * esp->ccycle) / 1000);
}
+
+ /* Reload the configuration registers */
+ eregs->esp_cfact = esp->cfact;
+ eregs->esp_stp = 0;
+ eregs->esp_soff = 0;
+ eregs->esp_timeo = esp->neg_defp;
esp->max_period = (esp->max_period + 3)>>2;
esp->min_period = (esp->min_period + 3)>>2;
@@ -451,6 +455,7 @@ static inline void esp_reset_esp(struct NCR_ESP *esp, struct ESP_regs *eregs)
case fashme:
esp->config2 |= (ESP_CONFIG2_HME32 | ESP_CONFIG2_HMEFENAB);
/* fallthrough... */
+ case fas216:
case fas236:
/* Fast 236 or HME */
eregs->esp_cfg2 = esp->config2;
@@ -630,6 +635,9 @@ void esp_initialize(struct NCR_ESP *esp)
esp->neg_defp = ESP_NEG_DEFP(fmhz, ccf);
esp->sync_defp = SYNC_DEFP_SLOW;
+ printk("SCSI ID %d Clock %d MHz CCF=%d Time-Out %d ",
+ esp->scsi_id, (esp->cfreq / 1000000),
+ esp->ccf, (int) esp->neg_defp);
/* Fill in ehost data */
esp->ehost->base = (unsigned char *) eregs;
@@ -707,10 +715,6 @@ void esp_initialize(struct NCR_ESP *esp)
esp_bootup_reset(esp, eregs);
esps_in_use++;
-
- printk("SCSI ID %d Clock %d MHz CCF=%d Time-Out %d ",
- esp->scsi_id, (esp->cfreq / 1000000),
- esp->ccf, (int) esp->neg_defp);
}
/* The info function will return whatever useful
@@ -724,17 +728,19 @@ const char *esp_info(struct Scsi_Host *host)
esp = (struct NCR_ESP *) host->hostdata;
switch(esp->erev) {
case esp100:
- return "Sparc ESP100 (NCR53C90)";
+ return "ESP100 (NCR53C90)";
case esp100a:
- return "Sparc ESP100A (NCR53C90A)";
+ return "ESP100A (NCR53C90A)";
case esp236:
- return "Sparc ESP236";
+ return "ESP236";
+ case fas216:
+ return "ESP216-FAST";
case fas236:
- return "Sparc ESP236-FAST";
+ return "ESP236-FAST";
case fashme:
- return "Sparc ESP366-HME";
+ return "ESP366-HME";
case fas100a:
- return "Sparc ESP100A-FAST";
+ return "ESP100A-FAST";
default:
panic("Bogon ESP revision");
};
@@ -807,6 +813,9 @@ static int esp_host_info(struct NCR_ESP *esp, char *ptr, off_t offset, int len)
case esp236:
copy_info(&info, "ESP236\n");
break;
+ case fas216:
+ copy_info(&info, "FAS216\n");
+ break;
case fas236:
copy_info(&info, "FAS236\n");
break;
@@ -1252,20 +1261,11 @@ int esp_queue(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
SCpnt->SCp.buffer =
(struct scatterlist *) SCpnt->request_buffer;
SCpnt->SCp.buffers_residual = 0;
-#ifdef CONFIG_SCSI_SUNESP
- /* Sneaky. */
- SCpnt->SCp.have_data_in = mmu_get_scsi_one((char *)SCpnt->SCp.buffer,
- SCpnt->SCp.this_residual,
- ((struct linux_sbus_device*) (esp->edev))->my_bus);
- /* XXX The casts are extremely gross, but with 64-bit kernel
- * XXX and 32-bit SBUS what am I to do? -DaveM
- */
- SCpnt->SCp.ptr = (char *)((unsigned long)SCpnt->SCp.have_data_in);
-#else
- SCpnt->SCp.have_data_in = (int) SCpnt->SCp.ptr =
- (char *) VTOP((unsigned long) SCpnt->request_buffer);
-#endif
-
+ if (esp->dma_mmu_get_scsi_one)
+ esp->dma_mmu_get_scsi_one (esp, SCpnt);
+ else
+ SCpnt->SCp.have_data_in = (int) SCpnt->SCp.ptr =
+ (char *) virt_to_phys(SCpnt->request_buffer);
} else {
ESPQUEUE(("use_sg "));
#ifdef DEBUG_ESP_SG
@@ -1275,16 +1275,11 @@ int esp_queue(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
SCpnt->SCp.buffer = (struct scatterlist *) SCpnt->buffer;
SCpnt->SCp.buffers_residual = SCpnt->use_sg - 1;
SCpnt->SCp.this_residual = SCpnt->SCp.buffer->length;
-#ifdef CONFIG_SCSI_SUNESP
- mmu_get_scsi_sgl((struct mmu_sglist *) SCpnt->SCp.buffer,
- SCpnt->SCp.buffers_residual,
- ((struct linux_sbus_device *) (esp->edev))->my_bus);
- /* XXX Again these casts are sick... -DaveM */
- SCpnt->SCp.ptr=(char *)((unsigned long)SCpnt->SCp.buffer->dvma_address);
-#else
- SCpnt->SCp.ptr =
- (char *) VTOP((unsigned long) SCpnt->SCp.buffer->address);
-#endif
+ if (esp->dma_mmu_get_scsi_sgl)
+ esp->dma_mmu_get_scsi_sgl (esp, SCpnt);
+ else
+ SCpnt->SCp.ptr =
+ (char *) virt_to_phys(SCpnt->SCp.buffer->address);
}
SCpnt->SCp.Status = CHECK_CONDITION;
SCpnt->SCp.Message = 0xff;
@@ -1481,21 +1476,14 @@ static void esp_done(struct NCR_ESP *esp, int error)
/* Free dvma entry. */
if(!done_SC->use_sg) {
-#ifdef CONFIG_SCSI_SUNESP
- /* Sneaky. */
- mmu_release_scsi_one(done_SC->SCp.have_data_in,
- done_SC->request_bufflen,
- ((struct linux_sbus_device *) (esp->edev))->my_bus);
-#endif
+ if (esp->dma_mmu_release_scsi_one)
+ esp->dma_mmu_release_scsi_one (esp, done_SC);
} else {
#ifdef DEBUG_ESP_SG
printk("esp%d: unmapping sg ", esp->esp_id);
#endif
-#ifdef CONFIG_SCSI_SUNESP
- mmu_release_scsi_sgl((struct mmu_sglist *) done_SC->buffer,
- done_SC->use_sg - 1,
- ((struct linux_sbus_device *) (esp->edev))->my_bus);
-#endif
+ if (esp->dma_mmu_release_scsi_sgl)
+ esp->dma_mmu_release_scsi_sgl (esp, done_SC);
#ifdef DEBUG_ESP_SG
printk("done.\n");
#endif
@@ -1861,16 +1849,15 @@ static inline int esp_do_msgin(struct NCR_ESP *esp, struct ESP_regs *eregs)
return do_work_bus;
}
-static inline void advance_sg(Scsi_Cmnd *sp)
+static inline void advance_sg(struct NCR_ESP *esp, Scsi_Cmnd *sp)
{
++sp->SCp.buffer;
--sp->SCp.buffers_residual;
sp->SCp.this_residual = sp->SCp.buffer->length;
-#ifdef CONFIG_SCSI_SUNESP
- sp->SCp.ptr = (char *)((unsigned long)sp->SCp.buffer->dvma_address);
-#else
- sp->SCp.ptr = (char *)VTOP((unsigned long) sp->SCp.buffer->address);
-#endif
+ if (esp->dma_advance_sg)
+ esp->dma_advance_sg (sp);
+ else
+ sp->SCp.ptr = (char *)virt_to_phys(sp->SCp.buffer->address);
}
/* Please note that the way I've coded these routines is that I _always_
@@ -2067,7 +2054,7 @@ static inline int esp_do_data_finale(struct NCR_ESP *esp,
* figure this out.
*/
if(SCptr->use_sg && !SCptr->SCp.this_residual)
- advance_sg(SCptr);
+ advance_sg(esp, SCptr);
if(sreg_datainp(esp->sreg) || sreg_dataoutp(esp->sreg)) {
ESPDATA(("to more data\n"));
return esp_do_data(esp, eregs);
@@ -2922,6 +2909,7 @@ static inline int check_multibyte_msg(struct NCR_ESP *esp,
tmp = esp->ccycle / 1000;
regval = (((period << 2) + tmp - 1) / tmp);
if(regval && ((esp->erev == fas100a ||
+ esp->erev == fas216 ||
esp->erev == fas236 ||
esp->erev == fashme))) {
if(period >= 50)
@@ -2934,7 +2922,7 @@ static inline int check_multibyte_msg(struct NCR_ESP *esp,
SDptr->sync_min_period = (regval & 0x1f);
SDptr->sync_max_offset = (offset | esp->radelay);
- if((esp->erev == fas100a || esp->erev == fas236 || esp->erev == fashme)) {
+ if((esp->erev == fas100a || esp->erev == fas216 || esp->erev == fas236 || esp->erev == fashme)) {
if((esp->erev == fas100a) || (esp->erev == fashme))
bit = ESP_CONFIG3_FAST;
else
@@ -2963,7 +2951,7 @@ static inline int check_multibyte_msg(struct NCR_ESP *esp,
SDptr->sync_min_period = 0;
eregs->esp_soff = 0;
eregs->esp_stp = 0;
- if((esp->erev == fas100a || esp->erev == fas236 || esp->erev == fashme)) {
+ if((esp->erev == fas100a || esp->erev == fas216 || esp->erev == fas236 || esp->erev == fashme)) {
if((esp->erev == fas100a) || (esp->erev == fashme))
bit = ESP_CONFIG3_FAST;
else
@@ -3595,17 +3583,13 @@ again:
if(esp->current_SC) {
Scsi_Cmnd *SCptr = esp->current_SC;
-#ifdef CONFIG_SCSI_SUNESP
- if(!SCptr->use_sg)
- mmu_release_scsi_one(SCptr->SCp.have_data_in,
- SCptr->request_bufflen,
- ((struct linux_sbus_device *) (esp->edev))->my_bus);
- else
- mmu_release_scsi_sgl((struct mmu_sglist *)
- SCptr->buffer,
- SCptr->use_sg - 1,
- ((struct linux_sbus_device *) (esp->edev))->my_bus);
-#endif
+ if(!SCptr->use_sg) {
+ if (esp->dma_mmu_release_scsi_one)
+ esp->dma_mmu_release_scsi_one (esp, SCptr);
+ } else {
+ if (esp->dma_mmu_release_scsi_sgl)
+ esp->dma_mmu_release_scsi_sgl (esp, SCptr);
+ }
SCptr->result = (DID_RESET << 16);
SCptr->scsi_done(SCptr);
@@ -3614,17 +3598,13 @@ again:
if(esp->disconnected_SC) {
Scsi_Cmnd *SCptr;
while((SCptr = remove_first_SC(&esp->disconnected_SC))) {
- if(!SCptr->use_sg)
-#ifdef CONFIG_SCSI_SUNESP
- mmu_release_scsi_one(SCptr->SCp.have_data_in,
- SCptr->request_bufflen,
- ((struct linux_sbus_device *) (esp->edev))->my_bus);
- else
- mmu_release_scsi_sgl((struct mmu_sglist *)
- SCptr->buffer,
- SCptr->use_sg - 1,
- ((struct linux_sbus_device *) (esp->edev))->my_bus);
-#endif
+ if(!SCptr->use_sg) {
+ if (esp->dma_mmu_release_scsi_one)
+ esp->dma_mmu_release_scsi_one (esp, SCptr);
+ } else {
+ if (esp->dma_mmu_release_scsi_sgl)
+ esp->dma_mmu_release_scsi_sgl (esp, SCptr);
+ }
SCptr->result = (DID_RESET << 16);
SCptr->scsi_done(SCptr);
@@ -3671,7 +3651,9 @@ void esp_intr(int irq, void *dev_id, struct pt_regs *pregs)
repeat:
again = 0;
for_each_esp(esp) {
+#ifndef __mips__
if(((esp)->irq & 0xf) == irq) {
+#endif
if(esp->dma_irq_p(esp)) {
again = 1;
@@ -3683,7 +3665,9 @@ repeat:
esp->dma_ints_on(esp);
}
+#ifndef __mips__
}
+#endif
}
if(again)
goto repeat;
diff --git a/drivers/scsi/NCR53C9x.h b/drivers/scsi/NCR53C9x.h
index a7431ca87..2a5ff92a6 100644
--- a/drivers/scsi/NCR53C9x.h
+++ b/drivers/scsi/NCR53C9x.h
@@ -107,6 +107,15 @@
(printk ("Internal ESP driver error in file %s, line %d\n", \
__FILE__, __LINE__))
+/*
+ * padding for register structure
+ */
+#ifdef CONFIG_JAZZ_ESP
+#define EREGS_PAD(n)
+#else
+#define EREGS_PAD(n) unchar n[3];
+#endif
+
/* The ESP SCSI controllers have their register sets in three
* "classes":
*
@@ -124,44 +133,45 @@
struct ESP_regs {
/* Access Description Offset */
volatile unchar esp_tclow; /* rw Low bits of the transfer count 0x00 */
- unchar tlpad1[3];
+ EREGS_PAD(tlpad1);
volatile unchar esp_tcmed; /* rw Mid bits of the transfer count 0x04 */
- unchar fdpad[3];
+ EREGS_PAD(fdpad);
volatile unchar esp_fdata; /* rw FIFO data bits 0x08 */
- unchar cbpad[3];
+ EREGS_PAD(cbpad);
volatile unchar esp_cmd; /* rw SCSI command bits 0x0c */
- unchar stpad[3];
+ EREGS_PAD(stpad);
volatile unchar esp_status; /* ro ESP status register 0x10 */
#define esp_busid esp_status /* wo Bus ID for select/reselect 0x10 */
- unchar irqpd[3];
+ EREGS_PAD(irqpd);
volatile unchar esp_intrpt; /* ro Kind of interrupt 0x14 */
#define esp_timeo esp_intrpt /* wo Timeout value for select/resel 0x14 */
- unchar sspad[3];
+ EREGS_PAD(sspad);
volatile unchar esp_sstep; /* ro Sequence step register 0x18 */
#define esp_stp esp_sstep /* wo Transfer period per sync 0x18 */
- unchar ffpad[3];
+ EREGS_PAD(ffpad);
volatile unchar esp_fflags; /* ro Bits of current FIFO info 0x1c */
#define esp_soff esp_fflags /* wo Sync offset 0x1c */
- unchar cf1pd[3];
+ EREGS_PAD(cf1pd);
volatile unchar esp_cfg1; /* rw First configuration register 0x20 */
- unchar cfpad[3];
+ EREGS_PAD(cfpad);
volatile unchar esp_cfact; /* wo Clock conversion factor 0x24 */
#define esp_status2 esp_cfact /* ro HME status2 register 0x24 */
- unchar ctpad[3];
+ EREGS_PAD(ctpad);
volatile unchar esp_ctest; /* wo Chip test register 0x28 */
- unchar cf2pd[3];
+ EREGS_PAD(cf2pd);
volatile unchar esp_cfg2; /* rw Second configuration register 0x2c */
- unchar cf3pd[3];
+ EREGS_PAD(cf3pd);
/* The following is only found on the 53C9X series SCSI chips */
volatile unchar esp_cfg3; /* rw Third configuration register 0x30 */
- unchar thpd[7];
-
+ EREGS_PAD(holep);
+ volatile unchar esp_hole; /* hole in register map 0x34 */
+ EREGS_PAD(thpd);
/* The following is found on all chips except the NCR53C90 (ESP100) */
volatile unchar esp_tchi; /* rw High bits of transfer count 0x38 */
#define esp_uid esp_tchi /* ro Unique ID code 0x38 */
#define fas_rlo esp_tchi /* rw HME extended counter 0x38 */
- unchar fgpad[3];
+ EREGS_PAD(fgpad);
volatile unchar esp_fgrnd; /* rw Data base for fifo 0x3c */
#define fas_rhi esp_fgrnd /* rw HME extended counter 0x3c */
};
@@ -175,7 +185,8 @@ enum esp_rev {
fas100a = 0x04,
fast = 0x05,
fashme = 0x06,
- espunknown = 0x07
+ fas216 = 0x07,
+ espunknown = 0x08
};
/* We get one of these for each ESP probed. */
@@ -303,6 +314,13 @@ struct NCR_ESP {
void (*dma_led_on)(struct NCR_ESP *);
void (*dma_poll)(struct NCR_ESP *, unsigned char *);
void (*dma_reset)(struct NCR_ESP *);
+
+ /* Optional virtual DMA functions */
+ void (*dma_mmu_get_scsi_one)(struct NCR_ESP *, Scsi_Cmnd *);
+ void (*dma_mmu_get_scsi_sgl)(struct NCR_ESP *, Scsi_Cmnd *);
+ void (*dma_mmu_release_scsi_one)(struct NCR_ESP *, Scsi_Cmnd *);
+ void (*dma_mmu_release_scsi_sgl)(struct NCR_ESP *, Scsi_Cmnd *);
+ void (*dma_advance_sg)(Scsi_Cmnd *);
};
/* Bitfield meanings for the above registers. */
diff --git a/drivers/scsi/jazz_esp.c b/drivers/scsi/jazz_esp.c
index 9065ef3d3..2bcb92166 100644
--- a/drivers/scsi/jazz_esp.c
+++ b/drivers/scsi/jazz_esp.c
@@ -17,7 +17,7 @@
#include "scsi.h"
#include "hosts.h"
-#include "esp.h"
+#include "NCR53C9x.h"
#include "jazz_esp.h"
#include <asm/irq.h>
@@ -27,23 +27,23 @@
#include <asm/pgtable.h>
-static int dma_bytes_sent(struct Sparc_ESP *esp, int fifo_count);
-static int dma_can_transfer(struct Sparc_ESP *esp, Scsi_Cmnd *sp);
-static void dma_dump_state(struct Sparc_ESP *esp);
-static void dma_init_read(struct Sparc_ESP *esp, __u32 vaddress, int length);
-static void dma_init_write(struct Sparc_ESP *esp, __u32 vaddress, int length);
-static void dma_ints_off(struct Sparc_ESP *esp);
-static void dma_ints_on(struct Sparc_ESP *esp);
-static int dma_irq_p(struct Sparc_ESP *esp);
-static int dma_ports_p(struct Sparc_ESP *esp);
-static void dma_setup(struct Sparc_ESP *esp, __u32 addr, int count, int write);
-static void dma_mmu_get_scsi_one (struct Sparc_ESP *esp, Scsi_Cmnd *sp);
-static void dma_mmu_get_scsi_sgl (struct Sparc_ESP *esp, Scsi_Cmnd *sp);
-static void dma_mmu_release_scsi_one (struct Sparc_ESP *esp, Scsi_Cmnd *sp);
-static void dma_mmu_release_scsi_sgl (struct Sparc_ESP *esp, Scsi_Cmnd *sp);
+static int dma_bytes_sent(struct NCR_ESP *esp, int fifo_count);
+static int dma_can_transfer(struct NCR_ESP *esp, Scsi_Cmnd *sp);
+static void dma_dump_state(struct NCR_ESP *esp);
+static void dma_init_read(struct NCR_ESP *esp, __u32 vaddress, int length);
+static void dma_init_write(struct NCR_ESP *esp, __u32 vaddress, int length);
+static void dma_ints_off(struct NCR_ESP *esp);
+static void dma_ints_on(struct NCR_ESP *esp);
+static int dma_irq_p(struct NCR_ESP *esp);
+static int dma_ports_p(struct NCR_ESP *esp);
+static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write);
+static void dma_mmu_get_scsi_one (struct NCR_ESP *esp, Scsi_Cmnd *sp);
+static void dma_mmu_get_scsi_sgl (struct NCR_ESP *esp, Scsi_Cmnd *sp);
+static void dma_mmu_release_scsi_one (struct NCR_ESP *esp, Scsi_Cmnd *sp);
+static void dma_mmu_release_scsi_sgl (struct NCR_ESP *esp, Scsi_Cmnd *sp);
static void dma_advance_sg (Scsi_Cmnd *sp);
-static void dma_led_off(struct Sparc_ESP *);
-static void dma_led_on(struct Sparc_ESP *);
+static void dma_led_off(struct NCR_ESP *);
+static void dma_led_on(struct NCR_ESP *);
volatile unsigned char cmd_buffer[16];
@@ -55,7 +55,7 @@ volatile unsigned char cmd_buffer[16];
/***************************************************************** Detection */
int jazz_esp_detect(Scsi_Host_Template *tpnt)
{
- struct Sparc_ESP *esp;
+ struct NCR_ESP *esp;
struct ConfigDev *esp_dev;
/*
@@ -119,7 +119,7 @@ int jazz_esp_detect(Scsi_Host_Template *tpnt)
esp->esp_command_dvma = vdma_alloc(PHYSADDR(cmd_buffer), sizeof (cmd_buffer));
esp->irq = JAZZ_SCSI_IRQ;
- request_irq(JAZZ_SCSI_IRQ, do_esp_intr, SA_INTERRUPT, "JAZZ SCSI",
+ request_irq(JAZZ_SCSI_IRQ, esp_intr, SA_INTERRUPT, "JAZZ SCSI",
NULL);
/*
@@ -141,12 +141,12 @@ int jazz_esp_detect(Scsi_Host_Template *tpnt)
}
/************************************************************* DMA Functions */
-static int dma_bytes_sent(struct Sparc_ESP *esp, int fifo_count)
+static int dma_bytes_sent(struct NCR_ESP *esp, int fifo_count)
{
return fifo_count;
}
-static int dma_can_transfer(struct Sparc_ESP *esp, Scsi_Cmnd *sp)
+static int dma_can_transfer(struct NCR_ESP *esp, Scsi_Cmnd *sp)
{
/*
* maximum DMA size is 1MB
@@ -157,16 +157,16 @@ static int dma_can_transfer(struct Sparc_ESP *esp, Scsi_Cmnd *sp)
return sz;
}
-static void dma_dump_state(struct Sparc_ESP *esp)
+static void dma_dump_state(struct NCR_ESP *esp)
{
ESPLOG(("esp%d: dma -- enable <%08x> residue <%08x\n",
esp->esp_id, vdma_get_enable((int)esp->dregs), vdma_get_resdiue((int)esp->dregs)));
}
-static void dma_init_read(struct Sparc_ESP *esp, __u32 vaddress, int length)
+static void dma_init_read(struct NCR_ESP *esp, __u32 vaddress, int length)
{
- flush_cache_all();
+ dma_cache_wback_inv ((unsigned long)phys_to_virt(vdma_log2phys(vaddress)), length);
vdma_disable ((int)esp->dregs);
vdma_set_mode ((int)esp->dregs, DMA_MODE_READ);
vdma_set_addr ((int)esp->dregs, vaddress);
@@ -174,9 +174,9 @@ static void dma_init_read(struct Sparc_ESP *esp, __u32 vaddress, int length)
vdma_enable ((int)esp->dregs);
}
-static void dma_init_write(struct Sparc_ESP *esp, __u32 vaddress, int length)
+static void dma_init_write(struct NCR_ESP *esp, __u32 vaddress, int length)
{
- flush_cache_all();
+ dma_cache_wback_inv ((unsigned long)phys_to_virt(vdma_log2phys(vaddress)), length);
vdma_disable ((int)esp->dregs);
vdma_set_mode ((int)esp->dregs, DMA_MODE_WRITE);
vdma_set_addr ((int)esp->dregs, vaddress);
@@ -184,29 +184,29 @@ static void dma_init_write(struct Sparc_ESP *esp, __u32 vaddress, int length)
vdma_enable ((int)esp->dregs);
}
-static void dma_ints_off(struct Sparc_ESP *esp)
+static void dma_ints_off(struct NCR_ESP *esp)
{
disable_irq(esp->irq);
}
-static void dma_ints_on(struct Sparc_ESP *esp)
+static void dma_ints_on(struct NCR_ESP *esp)
{
enable_irq(esp->irq);
}
-static int dma_irq_p(struct Sparc_ESP *esp)
+static int dma_irq_p(struct NCR_ESP *esp)
{
return (esp->eregs->esp_status & ESP_STAT_INTR);
}
-static int dma_ports_p(struct Sparc_ESP *esp)
+static int dma_ports_p(struct NCR_ESP *esp)
{
int enable = vdma_get_enable((int)esp->dregs);
return (enable & R4030_CHNL_ENABLE);
}
-static void dma_setup(struct Sparc_ESP *esp, __u32 addr, int count, int write)
+static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write)
{
/*
* On the Sparc, DMA_ST_WRITE means "move data from device to memory"
@@ -219,13 +219,13 @@ static void dma_setup(struct Sparc_ESP *esp, __u32 addr, int count, int write)
}
}
-static void dma_mmu_get_scsi_one (struct Sparc_ESP *esp, Scsi_Cmnd *sp)
+static void dma_mmu_get_scsi_one (struct NCR_ESP *esp, Scsi_Cmnd *sp)
{
sp->SCp.have_data_in = vdma_alloc(PHYSADDR(sp->SCp.buffer), sp->SCp.this_residual);
sp->SCp.ptr = (char *)((unsigned long)sp->SCp.have_data_in);
}
-static void dma_mmu_get_scsi_sgl (struct Sparc_ESP *esp, Scsi_Cmnd *sp)
+static void dma_mmu_get_scsi_sgl (struct NCR_ESP *esp, Scsi_Cmnd *sp)
{
int sz = sp->SCp.buffers_residual;
struct mmu_sglist *sg = (struct mmu_sglist *) sp->SCp.buffer;
@@ -237,12 +237,12 @@ static void dma_mmu_get_scsi_sgl (struct Sparc_ESP *esp, Scsi_Cmnd *sp)
sp->SCp.ptr=(char *)((unsigned long)sp->SCp.buffer->dvma_address);
}
-static void dma_mmu_release_scsi_one (struct Sparc_ESP *esp, Scsi_Cmnd *sp)
+static void dma_mmu_release_scsi_one (struct NCR_ESP *esp, Scsi_Cmnd *sp)
{
vdma_free(sp->SCp.have_data_in);
}
-static void dma_mmu_release_scsi_sgl (struct Sparc_ESP *esp, Scsi_Cmnd *sp)
+static void dma_mmu_release_scsi_sgl (struct NCR_ESP *esp, Scsi_Cmnd *sp)
{
int sz = sp->use_sg - 1;
struct mmu_sglist *sg = (struct mmu_sglist *)sp->buffer;
@@ -260,14 +260,14 @@ static void dma_advance_sg (Scsi_Cmnd *sp)
#define JAZZ_HDC_LED 0xe000d100 /* FIXME, find correct address */
-static void dma_led_off(struct Sparc_ESP *esp)
+static void dma_led_off(struct NCR_ESP *esp)
{
#if 0
*(unsigned char *)JAZZ_HDC_LED = 0;
#endif
}
-static void dma_led_on(struct Sparc_ESP *esp)
+static void dma_led_on(struct NCR_ESP *esp)
{
#if 0
*(unsigned char *)JAZZ_HDC_LED = 1;
diff --git a/drivers/scsi/jazz_esp.h b/drivers/scsi/jazz_esp.h
index 4de4797c1..7fb2c54d3 100644
--- a/drivers/scsi/jazz_esp.h
+++ b/drivers/scsi/jazz_esp.h
@@ -8,7 +8,7 @@
#define EREGS_PAD(n)
-#include "esp.h"
+#include "NCR53C9x.h"
extern int jazz_esp_detect(struct SHT *);
@@ -23,7 +23,7 @@ extern int esp_proc_info(char *buffer, char **start, off_t offset, int length,
#define SCSI_JAZZ_ESP { \
proc_dir: &proc_scsi_esp, \
proc_info: &esp_proc_info, \
- name: "Sun ESP 100/100a/200", \
+ name: "ESP 100/100a/200", \
detect: jazz_esp_detect, \
info: esp_info, \
command: esp_command, \