diff options
author | Thomas Bogendoerfer <tsbogend@alpha.franken.de> | 1998-05-12 19:30:33 +0000 |
---|---|---|
committer | Thomas Bogendoerfer <tsbogend@alpha.franken.de> | 1998-05-12 19:30:33 +0000 |
commit | b4930b0d404da1157965de172686b7dbf14b5e99 (patch) | |
tree | 635b2c9019cc315ef692bd237bd09fb44ad11ef0 | |
parent | 3b23e8acfab7fa5522ce96c58335607fe235562a (diff) |
now NCR53C9x is used for the FAS216 on jazz boards
-rw-r--r-- | drivers/scsi/NCR53C9x.c | 154 | ||||
-rw-r--r-- | drivers/scsi/NCR53C9x.h | 50 | ||||
-rw-r--r-- | drivers/scsi/jazz_esp.c | 74 | ||||
-rw-r--r-- | drivers/scsi/jazz_esp.h | 4 |
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, \ |