From: Richard B. <rb...@us...> - 2002-06-04 07:20:33
|
Update of /cvsroot/linux-vax/kernel-2.4/drivers/scsi In directory usw-pr-cvs1:/tmp/cvs-serv7347/drivers/scsi Modified Files: vax_esp.c vax_esp.h Log Message: Added extra debugging statements, fixed syntax errors and changed to use new scsi error handling. Index: vax_esp.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/scsi/vax_esp.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- vax_esp.c 15 Dec 2001 12:28:25 -0000 1.1 +++ vax_esp.c 4 Jun 2002 07:20:28 -0000 1.2 @@ -1,8 +1,8 @@ /* - * vax_esp.c: Driver for SCSI chips on VAXStation 4000/200 + * vax_esp.c: Driver for SCSI chips on VAXStation 4000/200 and uVax3100/85 * * based on dec_esp.c: - * VAX support by David Airlie + * VAX support by David Airlie & Richard Banks * * TURBOchannel changes by Harald Koerfgen * PMAZ-A support by David Airlie @@ -77,22 +77,13 @@ struct NCR_ESP *esp; struct ConfigDev *esp_dev; unsigned long scsi_base; - - //#if INTERNAL_SCSI scsi_base = 0x200c0080; - //#endif + scsi_base = 0x26000080; /* hardcode for 3100/85 for now */ esp_dev = 0; esp = esp_allocate(tpnt, (void *) esp_dev); -#if 0 - scsi_dma_ptr = (unsigned long *) (system_base + IOCTL + SCSI_DMA_P); - scsi_next_ptr = (unsigned long *) (system_base + IOCTL + SCSI_DMA_BP); - scsi_scr = (unsigned long *) (system_base + IOCTL + SCSI_SCR); - ioasic_ssr = (unsigned long *) (system_base + IOCTL + SSR); - scsi_sdr0 = (unsigned long *) (system_base + IOCTL + SCSI_SDR0); - scsi_sdr1 = (unsigned long *) (system_base + IOCTL + SCSI_SDR1); -#endif + /* Do command transfer with programmed I/O */ esp->do_pio_cmds = 1; @@ -122,8 +113,8 @@ /* virtual DMA functions */ esp->dma_mmu_get_scsi_one = &dma_mmu_get_scsi_one; esp->dma_mmu_get_scsi_sgl = &dma_mmu_get_scsi_sgl; - esp->dma_mmu_release_scsi_one = 0; - esp->dma_mmu_release_scsi_sgl = 0; + esp->dma_mmu_release_scsi_one = 0; + esp->dma_mmu_release_scsi_sgl = 0; esp->dma_advance_sg = &dma_advance_sg; @@ -138,7 +129,7 @@ esp->dregs = 0; /* ESP register base */ - esp->eregs = (struct ESP_regs *) (scsi_base); + esp->eregs = (struct ESP_regs *) ioremap (scsi_base,sizeof(struct ESP_regs)); /* Set the command buffer */ esp->esp_command = (volatile unsigned char *) cmd_buffer; @@ -156,86 +147,13 @@ // request_irq(SCSI_DMA_INT, scsi_dma_int, SA_INTERRUPT, "JUNKIO SCSI DMA", // NULL); - esp->scsi_id = 7; + esp->scsi_id = 6; /* Check for differential SCSI-bus */ esp->diff = 0; esp_initialize(esp); - } - -#if 0 - if (TURBOCHANNEL) { - while ((slot = search_tc_card("PMAZ_AA")) >= 0) { - claim_tc_card(slot); - mem_start = get_tc_base_addr(slot); - - esp_dev = 0; - esp = esp_allocate(tpnt, (void *) esp_dev); - - esp->dregs = 0; - esp->eregs = (struct ESP_regs *) (mem_start + DEC_SCSI_SREG); - esp->do_pio_cmds = 1; - - /* Set the command buffer */ - esp->esp_command = (volatile unsigned char *) pmaz_cmd_buffer; - - /* get virtual dma address for command buffer */ - esp->esp_command_dvma = (__u32) KSEG0ADDR((volatile unsigned char *) pmaz_cmd_buffer); - - buffer = (volatile unsigned char *) (mem_start + DEC_SCSI_SRAM); - - scsi_pmaz_dma_ptr_tc = (volatile int *) (mem_start + DEC_SCSI_DMAREG); - - for (i = 0; i < ESP_NCMD; i++) { - scsi_pmaz_dma_ptrs_tc[i] = (volatile unsigned char *) (buffer + ESP_TGT_DMA_SIZE * i); - } - - scsi_pmaz_dma_buff_used[0] = 1; - - esp->cfreq = get_tc_speed(); - - esp->irq = get_tc_irq_nr(slot); - - /* Required functions */ - esp->dma_bytes_sent = &dma_bytes_sent; - esp->dma_can_transfer = &dma_can_transfer; - esp->dma_dump_state = &dma_dump_state; - esp->dma_init_read = &pmaz_dma_init_read; - esp->dma_init_write = &pmaz_dma_init_write; - esp->dma_ints_off = &pmaz_dma_ints_off; - esp->dma_ints_on = &pmaz_dma_ints_on; - esp->dma_irq_p = &dma_irq_p; - esp->dma_ports_p = &dma_ports_p; - esp->dma_setup = &pmaz_dma_setup; - - /* Optional functions */ - esp->dma_barrier = 0; - esp->dma_drain = &pmaz_dma_drain; - esp->dma_invalidate = 0; - esp->dma_irq_entry = 0; - esp->dma_irq_exit = 0; - esp->dma_poll = 0; - esp->dma_reset = 0; - esp->dma_led_off = 0; - esp->dma_led_on = 0; - - esp->dma_mmu_get_scsi_one = pmaz_dma_mmu_get_scsi_one; - esp->dma_mmu_get_scsi_sgl = 0; - esp->dma_mmu_release_scsi_one = 0; - esp->dma_mmu_release_scsi_sgl = 0; - esp->dma_advance_sg = 0; - - request_irq(esp->irq, esp_intr, SA_INTERRUPT, "PMAZ_AA", NULL); - esp->scsi_id = 7; - esp->diff = 0; - esp_initialize(esp); - } -#endif - } - - if(nesps) { printk("ESP: Total of %d ESP hosts found, %d actually in use.\n", nesps, esps_in_use); esps_running = esps_in_use; @@ -249,6 +167,8 @@ { extern volatile unsigned int *isr; unsigned int dummy; + + printk ("dma_int called\n"); #if 0 if (*isr & SCSI_PTR_LOADED) { /* next page */ @@ -277,6 +197,7 @@ static int dma_bytes_sent(struct NCR_ESP *esp, int fifo_count) { + printk ("dma_bytes_sent called\n"); return fifo_count; } @@ -284,11 +205,12 @@ { unsigned long nw = *scsi_scr; // unsigned short *p = KSEG1ADDR((unsigned short *) ((*scsi_dma_ptr) >> 3)); + printk ("dma_drain called\n"); /* * Is there something in the dma buffers left? */ - if (nw) { + /* if (nw) { switch (nw) { case 1: *p = (unsigned short) *scsi_sdr0; @@ -306,16 +228,19 @@ printk("Strange: %d words in dma buffer left\n", (int) nw); break; } - } + } */ } static int dma_can_transfer(struct NCR_ESP *esp, Scsi_Cmnd * sp) { + printk ("dma_can_transfer called\n"); return sp->SCp.this_residual;; } static void dma_dump_state(struct NCR_ESP *esp) { + printk ("dma_dump_state called\n"); + /* ESPLOG(("esp%d: dma -- enable <%08x> residue <%08x\n", esp->esp_id, vdma_get_enable((int)esp->dregs), vdma_get_resdiue((int)esp->dregs))); @@ -327,6 +252,8 @@ extern volatile unsigned int *isr; unsigned int dummy; + printk ("dma_init_read called\n"); + #if 0 if (vaddress & 3) panic("dec_efs.c: unable to handle partial word transfers, yet..."); @@ -351,6 +278,8 @@ static void dma_init_write(struct NCR_ESP *esp, __u32 vaddress, int length) { + printk ("dma_init_write called\n"); + #if 0 extern volatile unsigned int *isr; unsigned int dummy; @@ -378,16 +307,19 @@ static void dma_ints_off(struct NCR_ESP *esp) { + printk ("dma_ints_off called\n"); // disable_irq(SCSI_DMA_INT); } static void dma_ints_on(struct NCR_ESP *esp) { + printk ("dma_ints_on called\n"); // enable_irq(SCSI_DMA_INT); } static int dma_irq_p(struct NCR_ESP *esp) { + printk ("dma_irq_p called\n"); return (esp->eregs->esp_status & ESP_STAT_INTR); } @@ -396,6 +328,7 @@ /* * FIXME: what's this good for? */ + printk ("dma_ports_p called\n"); return 1; } @@ -405,6 +338,7 @@ * On the Sparc, DMA_ST_WRITE means "move data from device to memory" * so when (write) is true, it actually means READ! */ + printk ("dma_setup called\n"); #if 0 if (write) { dma_init_read(esp, addr, count); @@ -419,7 +353,7 @@ */ static void dma_mmu_get_scsi_one(struct NCR_ESP *esp, Scsi_Cmnd * sp) { - sp->SCp.have_data_in = PHYSADDR(sp->SCp.buffer); + sp->SCp.have_data_in = virt_to_phys(sp->SCp.buffer); sp->SCp.ptr = (char *) ((unsigned long) sp->SCp.have_data_in); } @@ -427,18 +361,22 @@ { int sz = sp->SCp.buffers_residual; struct mmu_sglist *sg = (struct mmu_sglist *) sp->SCp.buffer; + printk ("dma_mmu_get_scsi_sgl called\n"); + /* #if 0 while (sz >= 0) { - sg[sz].dvma_addr = PHYSADDR(sg[sz].addr); + sg[sz].dvma_addr = virt_to_phys(sg[sz].addr); sz--; } - sp->SCp.ptr = (char *) ((unsigned long) sp->SCp.buffer->dvma_address); + sp->SCp.ptr = (char *) ((unsigned long) sp->SCp.buffer->dvma_addr); #endif + */ } static void dma_advance_sg(Scsi_Cmnd * sp) { - sp->SCp.ptr = (char *) ((unsigned long) sp->SCp.buffer->dvma_address); + printk ("dma_adavnce_sg called\n"); + // sp->SCp.ptr = (char *) ((unsigned long) sp->SCp.buffer->dvma_addr); } #if 0 @@ -504,3 +442,8 @@ } #endif + + +static Scsi_Host_Template driver_template = SCSI_VAX_ESP; + +#include "scsi_module.c" Index: vax_esp.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/scsi/vax_esp.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- vax_esp.h 15 Dec 2001 12:28:25 -0000 1.1 +++ vax_esp.h 4 Jun 2002 07:20:28 -0000 1.2 @@ -40,9 +40,12 @@ abort: esp_abort, \ reset: esp_reset, \ can_queue: 7, \ - this_id: 7, \ + this_id: 6, \ sg_tablesize: SG_ALL, \ cmd_per_lun: 1, \ + use_new_eh_code: 1, \ use_clustering: DISABLE_CLUSTERING, } + +// controller id is 6 on the 3100/85 #endif /* VAX_ESP_H */ |