eata_dma.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:45k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /************************************************************
  2.  *     *
  3.  *     Linux EATA SCSI driver     *
  4.  *     *
  5.  *  based on the CAM document CAM/89-004 rev. 2.0c,     *
  6.  *  DPT's driver kit, some internal documents and source,   *
  7.  *  and several other Linux scsi drivers and kernel docs.   *
  8.  *     *
  9.  *  The driver currently:     *
  10.  * -supports all ISA based EATA-DMA boards     *
  11.  *       like PM2011, PM2021, PM2041, PM3021                *
  12.  * -supports all EISA based EATA-DMA boards     *
  13.  *       like PM2012B, PM2022, PM2122, PM2322, PM2042,      *
  14.  *            PM3122, PM3222, PM3332                        *
  15.  * -supports all PCI based EATA-DMA boards     *
  16.  *       like PM2024, PM2124, PM2044, PM2144, PM3224,       *
  17.  *            PM3334                                        *
  18.  *      -supports the Wide, Ultra Wide and Differential     *
  19.  *       versions of the boards                             *
  20.  * -supports multiple HBAs with & without IRQ sharing  *
  21.  * -supports all SCSI channels on multi channel boards *
  22.  *      -supports ix86 and MIPS, untested on ALPHA          *
  23.  * -needs identical IDs on all channels of a HBA     * 
  24.  * -can be loaded as module     *
  25.  * -displays statistical and hardware information     *
  26.  *  in /proc/scsi/eata_dma     *
  27.  *      -provides rudimentary latency measurement           * 
  28.  *       possibilities via /proc/scsi/eata_dma/<hostnum>    *
  29.  *     *
  30.  *  (c)1993-96 Michael Neuffer             *
  31.  *             mike@i-Connect.Net                           *
  32.  *        neuffer@mail.uni-mainz.de             *
  33.  *     *
  34.  *  This program is free software; you can redistribute it  *
  35.  *  and/or modify it under the terms of the GNU General     *
  36.  *  Public License as published by the Free Software     *
  37.  *  Foundation; either version 2 of the License, or     *
  38.  *  (at your option) any later version.     *
  39.  *     *
  40.  *  This program is distributed in the hope that it will be *
  41.  *  useful, but WITHOUT ANY WARRANTY; without even the     *
  42.  *  implied warranty of MERCHANTABILITY or FITNESS FOR A    *
  43.  *  PARTICULAR PURPOSE.  See the GNU General Public License *
  44.  *  for more details.     *
  45.  *     *
  46.  *  You should have received a copy of the GNU General     *
  47.  *  Public License along with this kernel; if not, write to *
  48.  *  the Free Software Foundation, Inc., 675 Mass Ave,     *
  49.  *  Cambridge, MA 02139, USA.     *
  50.  *     *
  51.  * I have to thank DPT for their excellent support. I took  *
  52.  * me almost a year and a stopover at their HQ, on my first *
  53.  * trip to the USA, to get it, but since then they've been  *
  54.  * very helpful and tried to give me all the infos and     *
  55.  * support I need.     *
  56.  *     *
  57.  * Thanks also to Simon Shapiro, Greg Hosler and Mike       *
  58.  * Jagdis who did a lot of testing and found quite a number *
  59.  * of bugs during the development.                          *
  60.  ************************************************************
  61.  *  last change: 96/10/21                 OS: Linux 2.0.23  *
  62.  ************************************************************/
  63. /* Look in eata_dma.h for configuration and revision information */
  64. #include <linux/module.h>
  65. #include <linux/kernel.h>
  66. #include <linux/sched.h>
  67. #include <linux/string.h>
  68. #include <linux/ioport.h>
  69. #include <linux/slab.h>
  70. #include <linux/in.h>
  71. #include <linux/pci.h>
  72. #include <linux/proc_fs.h>
  73. #include <linux/delay.h>
  74. #include <asm/byteorder.h>
  75. #include <asm/types.h>
  76. #include <asm/io.h>
  77. #include <asm/dma.h>
  78. #include <asm/pgtable.h>
  79. #ifdef __mips__
  80. #include <asm/cachectl.h>
  81. #include <linux/spinlock.h>
  82. #endif
  83. #include <linux/blk.h>
  84. #include "scsi.h"
  85. #include "sd.h"
  86. #include "hosts.h"
  87. #include "eata_dma.h"
  88. #include "eata_dma_proc.h" 
  89. #include <linux/stat.h>
  90. #include <linux/config.h> /* for CONFIG_PCI */
  91. static u32 ISAbases[] =
  92. {0x1F0, 0x170, 0x330, 0x230};
  93. static unchar EISAbases[] =
  94. {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
  95. static uint registered_HBAs = 0;
  96. static struct Scsi_Host *last_HBA = NULL;
  97. static struct Scsi_Host *first_HBA = NULL;
  98. static unchar reg_IRQ[] =
  99. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  100. static unchar reg_IRQL[] =
  101. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  102. static struct eata_sp *status = 0;   /* Statuspacket array   */
  103. static void *dma_scratch = 0;
  104. static struct eata_register *fake_int_base;
  105. static int fake_int_result;
  106. static int fake_int_happened;
  107. static ulong int_counter = 0;
  108. static ulong queue_counter = 0;
  109. void eata_fake_int_handler(s32 irq, void *dev_id, struct pt_regs * regs)
  110. {
  111.     fake_int_result = inb((ulong)fake_int_base + HA_RSTATUS);
  112.     fake_int_happened = TRUE;
  113.     DBG(DBG_INTR3, printk("eata_fake_int_handler called irq%d base %p"
  114.   " res %#xn", irq, fake_int_base, fake_int_result));
  115.     return;
  116. }
  117. #include "eata_dma_proc.c"
  118. #ifdef MODULE
  119. int eata_release(struct Scsi_Host *sh)
  120. {
  121.     uint i;
  122.     if (sh->irq && reg_IRQ[sh->irq] == 1) free_irq(sh->irq, NULL);
  123.     else reg_IRQ[sh->irq]--;
  124.     
  125.     kfree((void *)status);
  126.     kfree((void *)dma_scratch - 4);
  127.     for (i = 0; i < sh->can_queue; i++){ /* Free all SG arrays */
  128. if(SD(sh)->ccb[i].sg_list != NULL)
  129.     kfree((void *) SD(sh)->ccb[i].sg_list);
  130.     }
  131.     
  132.     if (SD(sh)->channel == 0) {
  133. if (sh->dma_channel != BUSMASTER) free_dma(sh->dma_channel);
  134. if (sh->io_port && sh->n_io_port)
  135.     release_region(sh->io_port, sh->n_io_port);
  136.     }
  137.     return(TRUE);
  138. }
  139. #endif
  140. inline void eata_latency_in(struct eata_ccb *cp, hostdata *hd)
  141. {
  142.     uint time;
  143.     time = jiffies - cp->timestamp;
  144.     if(hd->all_lat[1] > time)
  145.         hd->all_lat[1] = time;
  146.     if(hd->all_lat[2] < time)
  147.         hd->all_lat[2] = time;
  148.     hd->all_lat[3] += time;
  149.     hd->all_lat[0]++;
  150.     if((cp->rw_latency) == WRITE) { /* was WRITE */
  151.         if(hd->writes_lat[cp->sizeindex][1] > time)
  152.     hd->writes_lat[cp->sizeindex][1] = time;
  153. if(hd->writes_lat[cp->sizeindex][2] < time)
  154.     hd->writes_lat[cp->sizeindex][2] = time;
  155. hd->writes_lat[cp->sizeindex][3] += time;
  156. hd->writes_lat[cp->sizeindex][0]++;
  157.     } else if((cp->rw_latency) == READ) {
  158.         if(hd->reads_lat[cp->sizeindex][1] > time)
  159.     hd->reads_lat[cp->sizeindex][1] = time;
  160. if(hd->reads_lat[cp->sizeindex][2] < time)
  161.     hd->reads_lat[cp->sizeindex][2] = time;
  162. hd->reads_lat[cp->sizeindex][3] += time;
  163. hd->reads_lat[cp->sizeindex][0]++;
  164.     }
  165. inline void eata_latency_out(struct eata_ccb *cp, Scsi_Cmnd *cmd)
  166. {
  167.     int x, z;
  168.     short *sho;
  169.     long *lon;
  170.     x = 0;                         /* just to keep GCC quiet */ 
  171.     cp->timestamp = jiffies;         /* For latency measurements */
  172.     switch(cmd->cmnd[0]) {
  173.     case WRITE_6:   
  174.         x = cmd->cmnd[4]/2; 
  175. cp->rw_latency = WRITE;
  176. break;
  177.     case READ_6:    
  178.         x = cmd->cmnd[4]/2; 
  179. cp->rw_latency = READ;
  180. break;
  181.     case WRITE_10:   
  182.         sho = (short *) &cmd->cmnd[7];
  183. x = ntohs(*sho)/2;       
  184. cp->rw_latency = WRITE;
  185. break;
  186.     case READ_10:
  187.         sho = (short *) &cmd->cmnd[7];
  188. x = ntohs(*sho)/2;       
  189. cp->rw_latency = READ;
  190. break;
  191.     case WRITE_12:   
  192.         lon = (long *) &cmd->cmnd[6];
  193. x = ntohl(*lon)/2;       
  194. cp->rw_latency = WRITE;
  195. break;
  196.     case READ_12:
  197.         lon = (long *) &cmd->cmnd[6];
  198. x = ntohl(*lon)/2;       
  199. cp->rw_latency = READ;
  200. break;
  201.     default:
  202.         cp->rw_latency = OTHER;
  203. break;
  204.     }
  205.     if (cmd->cmnd[0] == WRITE_6 || cmd->cmnd[0] == WRITE_10 || 
  206. cmd->cmnd[0] == WRITE_12 || cmd->cmnd[0] == READ_6 || 
  207. cmd->cmnd[0] == READ_10 || cmd->cmnd[0] == READ_12) {
  208.         for(z = 0; (x > (1 << z)) && (z <= 11); z++) 
  209.     /* nothing */;
  210. cp->sizeindex = z;
  211.     } 
  212. }
  213. void eata_int_handler(int, void *, struct pt_regs *);
  214. void do_eata_int_handler(int irq, void *dev_id, struct pt_regs * regs)
  215. {
  216.     unsigned long flags;
  217.     spin_lock_irqsave(&io_request_lock, flags);
  218.     eata_int_handler(irq, dev_id, regs);
  219.     spin_unlock_irqrestore(&io_request_lock, flags);
  220. }
  221. void eata_int_handler(int irq, void *dev_id, struct pt_regs * regs)
  222. {
  223.     uint i, result = 0;
  224.     uint hba_stat, scsi_stat, eata_stat;
  225.     Scsi_Cmnd *cmd;
  226.     struct eata_ccb *ccb;
  227.     struct eata_sp *sp;
  228.     uint base;
  229.     uint x;
  230.     struct Scsi_Host *sh;
  231.     for (x = 1, sh = first_HBA; x <= registered_HBAs; x++, sh = SD(sh)->next) {
  232. if (sh->irq != irq)
  233.     continue;
  234. while(inb((uint)sh->base + HA_RAUXSTAT) & HA_AIRQ) {
  235.     
  236.     int_counter++;
  237.     
  238.     sp = &SD(sh)->sp;
  239. #ifdef __mips__
  240.             sys_cacheflush(sp, sizeof(struct eata_sp), 2);
  241. #endif
  242.     ccb = sp->ccb;
  243.     
  244.     if(ccb == NULL) {
  245. eata_stat = inb((uint)sh->base + HA_RSTATUS);
  246. printk("eata_dma: int_handler, Spurious IRQ %d "
  247.        "received. CCB pointer not set.n", irq);
  248. break;
  249.     }
  250.     cmd = ccb->cmd;
  251.     base = (uint) cmd->host->base;
  252.             hba_stat = sp->hba_stat;
  253.     
  254.     scsi_stat = (sp->scsi_stat >> 1) & 0x1f; 
  255.     
  256.     if (sp->EOC == FALSE) {
  257. eata_stat = inb(base + HA_RSTATUS);
  258. printk(KERN_WARNING "eata_dma: int_handler, board: %x cmd %lx "
  259.        "returned unfinished.n"
  260.        "EATA: %x HBA: %x SCSI: %x spadr %lx spadrirq %lx, "
  261.        "irq%dn", base, (long)ccb, eata_stat, hba_stat, 
  262.        scsi_stat,(long)&status, (long)&status[irq], irq);
  263. cmd->result = DID_ERROR << 16;
  264. ccb->status = FREE;
  265. cmd->scsi_done(cmd);
  266. break;
  267.     } 
  268.     
  269.            sp->EOC = FALSE; /* Clean out this flag */
  270.            if (ccb->status == LOCKED || ccb->status == RESET) {
  271.                printk("eata_dma: int_handler, reseted command pid %ld returned"
  272.       "n", cmd->pid);
  273.        DBG(DBG_INTR && DBG_DELAY, DELAY(1));
  274.     }
  275.     
  276.     eata_stat = inb(base + HA_RSTATUS); 
  277.     DBG(DBG_INTR, printk("IRQ %d received, base %#.4x, pid %ld, "
  278.  "target: %x, lun: %x, ea_s: %#.2x, hba_s: "
  279.  "%#.2x n", irq, base, cmd->pid, cmd->target,
  280.  cmd->lun, eata_stat, hba_stat));
  281.     
  282.     switch (hba_stat) {
  283.     case HA_NO_ERROR: /* NO Error */
  284. if(HD(cmd)->do_latency == TRUE && ccb->timestamp) 
  285.     eata_latency_in(ccb, HD(cmd));
  286. result = DID_OK << 16;
  287. break;
  288.     case HA_ERR_SEL_TO:         /* Selection Timeout */
  289.     case HA_ERR_CMD_TO:         /* Command Timeout   */
  290. result = DID_TIME_OUT << 16;
  291. break;
  292.     case HA_BUS_RESET: /* SCSI Bus Reset Received */
  293. result = DID_RESET << 16;
  294. DBG(DBG_STATUS, printk(KERN_WARNING "scsi%d: BUS RESET "
  295.        "received on cmd %ldn", 
  296.        HD(cmd)->HBA_number, cmd->pid));
  297. break;
  298.     case HA_INIT_POWERUP: /* Initial Controller Power-up */
  299. if (cmd->device->type != TYPE_TAPE)
  300.     result = DID_BUS_BUSY << 16;
  301. else
  302.     result = DID_ERROR << 16;
  303. for (i = 0; i < MAXTARGET; i++)
  304. DBG(DBG_STATUS, printk(KERN_DEBUG "scsi%d: cmd pid %ld "
  305.        "returned with INIT_POWERUPn", 
  306.        HD(cmd)->HBA_number, cmd->pid));
  307. break;
  308.     case HA_CP_ABORT_NA:
  309.     case HA_CP_ABORTED:
  310. result = DID_ABORT << 16;
  311. DBG(DBG_STATUS, printk(KERN_WARNING "scsi%d: aborted cmd "
  312.        "returnedn", HD(cmd)->HBA_number));
  313.   break;
  314.     case HA_CP_RESET_NA:
  315.     case HA_CP_RESET:
  316.         HD(cmd)->resetlevel[cmd->channel] = 0; 
  317. result = DID_RESET << 16;
  318. DBG(DBG_STATUS, printk(KERN_WARNING "scsi%d: reseted cmd "
  319.        "pid %ldreturnedn", 
  320.        HD(cmd)->HBA_number, cmd->pid));
  321.     case HA_SCSI_HUNG:         /* SCSI Hung                 */
  322.         printk(KERN_ERR "scsi%d: SCSI hungn", HD(cmd)->HBA_number);
  323. result = DID_ERROR << 16;
  324. break;
  325.     case HA_RSENSE_FAIL:        /* Auto Request-Sense Failed */
  326.         DBG(DBG_STATUS, printk(KERN_ERR "scsi%d: Auto Request Sense "
  327.        "Failedn", HD(cmd)->HBA_number));
  328. result = DID_ERROR << 16;
  329. break;
  330.     case HA_UNX_BUSPHASE: /* Unexpected Bus Phase */
  331.     case HA_UNX_BUS_FREE: /* Unexpected Bus Free */
  332.     case HA_BUS_PARITY:         /* Bus Parity Error */
  333.     case HA_UNX_MSGRJCT: /* Unexpected Message Reject */
  334.     case HA_RESET_STUCK:        /* SCSI Bus Reset Stuck */
  335.     case HA_PARITY_ERR:         /* Controller Ram Parity */
  336.     default:
  337. result = DID_ERROR << 16;
  338. break;
  339.     }
  340.     cmd->result = result | (scsi_stat << 1); 
  341.     
  342. #if DBG_INTR2
  343.     if (scsi_stat || result || hba_stat || eata_stat != 0x50 
  344. || cmd->scsi_done == NULL || cmd->device->id == 7) 
  345. printk("HBA: %d, channel %d, id: %d, lun %d, pid %ld:n" 
  346.        "eata_stat %#x, hba_stat %#.2x, scsi_stat %#.2x, "
  347.        "sense_key: %#x, result: %#.8xn", x, 
  348.        cmd->device->channel, cmd->device->id, cmd->device->lun,
  349.        cmd->pid, eata_stat, hba_stat, scsi_stat, 
  350.        cmd->sense_buffer[2] & 0xf, cmd->result); 
  351.     DBG(DBG_INTR&&DBG_DELAY,DELAY(1));
  352. #endif
  353.     
  354.     ccb->status = FREE;     /* now we can release the slot  */
  355.     cmd->scsi_done(cmd);
  356. }
  357.     }
  358.     return;
  359. }
  360. inline int eata_send_command(u32 addr, u32 base, u8 command)
  361. {
  362.     long loop = R_LIMIT;
  363.     
  364.     while (inb(base + HA_RAUXSTAT) & HA_ABUSY)
  365. if (--loop == 0)
  366.     return(FALSE);
  367.     if(addr != (u32) NULL)
  368.         addr = virt_to_bus((void *)addr);
  369.     /*
  370.      * This is overkill.....but the MIPSen seem to need this
  371.      * and it will be optimized away for i86 and ALPHA machines.
  372.      */
  373.     flush_cache_all();
  374.     /* And now the address in nice little byte chunks */
  375. #ifdef __LITTLE_ENDIAN
  376.     outb(addr,       base + HA_WDMAADDR);
  377.     outb(addr >> 8,  base + HA_WDMAADDR + 1);
  378.     outb(addr >> 16, base + HA_WDMAADDR + 2);
  379.     outb(addr >> 24, base + HA_WDMAADDR + 3);
  380. #else
  381.     outb(addr >> 24, base + HA_WDMAADDR);
  382.     outb(addr >> 16, base + HA_WDMAADDR + 1);
  383.     outb(addr >> 8,  base + HA_WDMAADDR + 2);
  384.     outb(addr,       base + HA_WDMAADDR + 3);
  385. #endif
  386.     outb(command, base + HA_WCOMMAND);
  387.     return(TRUE);
  388. }
  389. inline int eata_send_immediate(u32 base, u32 addr, u8 ifc, u8 code, u8 code2)
  390. {
  391.     if(addr != (u32) NULL)
  392.         addr = virt_to_bus((void *)addr);
  393.     /*
  394.      * This is overkill.....but the MIPSen seem to need this
  395.      * and it will be optimized away for i86 and ALPHA machines.
  396.      */
  397.     flush_cache_all();
  398.     outb(0x0, base + HA_WDMAADDR - 1);
  399.     if(addr){
  400. #ifdef __LITTLE_ENDIAN
  401.         outb(addr,       base + HA_WDMAADDR);
  402. outb(addr >> 8,  base + HA_WDMAADDR + 1);
  403. outb(addr >> 16, base + HA_WDMAADDR + 2);
  404. outb(addr >> 24, base + HA_WDMAADDR + 3);
  405. #else
  406.         outb(addr >> 24, base + HA_WDMAADDR);
  407. outb(addr >> 16, base + HA_WDMAADDR + 1);
  408. outb(addr >> 8,  base + HA_WDMAADDR + 2);
  409. outb(addr,       base + HA_WDMAADDR + 3);
  410. #endif
  411.     } else {
  412.         outb(0x0, base + HA_WDMAADDR);
  413.         outb(0x0, base + HA_WDMAADDR + 1);
  414.   outb(code2, base + HA_WCODE2);
  415. outb(code,  base + HA_WCODE);
  416.     }
  417.     
  418.     outb(ifc, base + HA_WIFC);
  419.     outb(EATA_CMD_IMMEDIATE, base + HA_WCOMMAND);
  420.     return(TRUE);
  421. }
  422. int eata_queue(Scsi_Cmnd * cmd, void (* done) (Scsi_Cmnd *))
  423. {
  424.     unsigned int i, x, y;
  425.     ulong flags;
  426.     hostdata *hd;
  427.     struct Scsi_Host *sh;
  428.     struct eata_ccb *ccb;
  429.     struct scatterlist *sl;
  430.     
  431.     save_flags(flags);
  432.     cli();
  433. #if 0
  434.     for (x = 1, sh = first_HBA; x <= registered_HBAs; x++, sh = SD(sh)->next) {
  435.       if(inb((uint)sh->base + HA_RAUXSTAT) & HA_AIRQ) {
  436.             printk("eata_dma: scsi%d interrupt pending in eata_queue.n"
  437.    "          Calling interrupt handler.n", sh->host_no);
  438.             eata_int_handler(sh->irq, 0, 0);
  439.       }
  440.     }
  441. #endif
  442.     
  443.     queue_counter++;
  444.     hd = HD(cmd);
  445.     sh = cmd->host;
  446.     
  447.     if (cmd->cmnd[0] == REQUEST_SENSE && cmd->sense_buffer[0] != 0) {
  448.         DBG(DBG_REQSENSE, printk(KERN_DEBUG "Tried to REQUEST SENSEn"));
  449. cmd->result = DID_OK << 16;
  450. done(cmd);
  451. restore_flags(flags);
  452. return(0);
  453.     }
  454.     /* check for free slot */
  455.     for (y = hd->last_ccb + 1, x = 0; x < sh->can_queue; x++, y++) { 
  456. if (y >= sh->can_queue)
  457.     y = 0;
  458. if (hd->ccb[y].status == FREE)
  459.     break;
  460.     }
  461.     
  462.     hd->last_ccb = y;
  463.     if (x >= sh->can_queue) { 
  464. cmd->result = DID_BUS_BUSY << 16;
  465. DBG(DBG_QUEUE && DBG_ABNORM, 
  466.     printk(KERN_CRIT "eata_queue pid %ld, HBA QUEUE FULL..., "
  467.    "returning DID_BUS_BUSYn", cmd->pid));
  468. done(cmd);
  469. restore_flags(flags);
  470. return(0);
  471.     }
  472.     ccb = &hd->ccb[y];
  473.     
  474.     memset(ccb, 0, sizeof(struct eata_ccb) - sizeof(struct eata_sg_list *));
  475.     
  476.     ccb->status = USED; /* claim free slot */
  477.     restore_flags(flags);
  478.     
  479.     DBG(DBG_QUEUE, printk("eata_queue pid %ld, target: %x, lun: %x, y %dn",
  480.   cmd->pid, cmd->target, cmd->lun, y));
  481.     DBG(DBG_QUEUE && DBG_DELAY, DELAY(1));
  482.     
  483.     if(hd->do_latency == TRUE) 
  484.         eata_latency_out(ccb, cmd);
  485.     cmd->scsi_done = (void *)done;
  486.     
  487.     switch (cmd->cmnd[0]) {
  488.     case CHANGE_DEFINITION: case COMPARE:   case COPY:
  489.     case COPY_VERIFY:     case LOG_SELECT:   case MODE_SELECT:
  490.     case MODE_SELECT_10:    case SEND_DIAGNOSTIC: case WRITE_BUFFER:
  491.     case FORMAT_UNIT:     case REASSIGN_BLOCKS: case RESERVE:
  492.     case SEARCH_EQUAL:     case SEARCH_HIGH:   case SEARCH_LOW:
  493.     case WRITE_6:     case WRITE_10:   case WRITE_VERIFY:
  494.     case UPDATE_BLOCK:     case WRITE_LONG:   case WRITE_SAME:
  495.     case SEARCH_HIGH_12:    case SEARCH_EQUAL_12: case SEARCH_LOW_12:
  496.     case WRITE_12:     case WRITE_VERIFY_12: case SET_WINDOW: 
  497.     case MEDIUM_SCAN:     case SEND_VOLUME_TAG:      
  498.     case 0xea:     /* alternate number for WRITE LONG */
  499. ccb->DataOut = TRUE; /* Output mode */
  500. break;
  501.     case TEST_UNIT_READY:
  502.     default:
  503. ccb->DataIn = TRUE; /* Input mode  */
  504.     }
  505.     /* FIXME: This will will have to be changed once the midlevel driver 
  506.      *        allows different HBA IDs on every channel.
  507.      */
  508.     if (cmd->target == sh->this_id) 
  509. ccb->Interpret = TRUE; /* Interpret command */
  510.     if (cmd->use_sg) {
  511. ccb->scatter = TRUE; /* SG mode     */
  512. if (ccb->sg_list == NULL) {
  513.     ccb->sg_list = kmalloc(sh->sg_tablesize * sizeof(struct eata_sg_list),
  514.   GFP_ATOMIC | GFP_DMA);
  515. }
  516. if (ccb->sg_list == NULL)
  517. {
  518.     /*
  519.      * Claim the bus was busy. Actually we are the problem but this
  520.      *  will do a deferred retry for us ;)
  521.      */
  522.     printk(KERN_ERR "eata_dma: Run out of DMA memory for SG lists !n");
  523.     cmd->result = DID_BUS_BUSY << 16;
  524.     ccb->status = FREE;    
  525.     done(cmd);
  526.     return(0);
  527. }
  528. ccb->cp_dataDMA = htonl(virt_to_bus(ccb->sg_list)); 
  529. ccb->cp_datalen = htonl(cmd->use_sg * sizeof(struct eata_sg_list));
  530. sl=(struct scatterlist *)cmd->request_buffer;
  531. for(i = 0; i < cmd->use_sg; i++, sl++){
  532.     ccb->sg_list[i].data = htonl(virt_to_bus(sl->address));
  533.     ccb->sg_list[i].len = htonl((u32) sl->length);
  534. }
  535.     } else {
  536. ccb->scatter = FALSE;
  537. ccb->cp_datalen = htonl(cmd->request_bufflen);
  538. ccb->cp_dataDMA = htonl(virt_to_bus(cmd->request_buffer));
  539.     }
  540.     
  541.     ccb->Auto_Req_Sen = TRUE;
  542.     ccb->cp_reqDMA = htonl(virt_to_bus(cmd->sense_buffer));
  543.     ccb->reqlen = sizeof(cmd->sense_buffer);
  544.     
  545.     ccb->cp_id = cmd->target;
  546.     ccb->cp_channel = cmd->channel;
  547.     ccb->cp_lun = cmd->lun;
  548.     ccb->cp_dispri = TRUE;
  549.     ccb->cp_identify = TRUE;
  550.     memcpy(ccb->cp_cdb, cmd->cmnd, cmd->cmd_len);
  551.     
  552.     ccb->cp_statDMA = htonl(virt_to_bus(&(hd->sp)));
  553.     
  554.     ccb->cp_viraddr = ccb; /* This will be passed thru, so we don't need to 
  555.     * convert it */
  556.     ccb->cmd = cmd;
  557.     cmd->host_scribble = (char *)&hd->ccb[y];
  558.     
  559.     if(eata_send_command((u32) ccb, (u32) sh->base, EATA_CMD_DMA_SEND_CP) == FALSE) {
  560. cmd->result = DID_BUS_BUSY << 16;
  561. DBG(DBG_QUEUE && DBG_ABNORM, 
  562.     printk("eata_queue target %d, pid %ld, HBA busy, "
  563.    "returning DID_BUS_BUSYn",cmd->target, cmd->pid));
  564. ccb->status = FREE;    
  565. done(cmd);
  566. return(0);
  567.     }
  568.     DBG(DBG_QUEUE, printk("Queued base %#.4x pid: %ld target: %x lun: %x "
  569.  "slot %d irq %dn", (s32)sh->base, cmd->pid, 
  570.  cmd->target, cmd->lun, y, sh->irq));
  571.     DBG(DBG_QUEUE && DBG_DELAY, DELAY(1));
  572.     return(0);
  573. }
  574. int eata_abort(Scsi_Cmnd * cmd)
  575. {
  576.     ulong loop = HZ / 2;
  577.     ulong flags;
  578.     int x;
  579.     struct Scsi_Host *sh;
  580.  
  581.     save_flags(flags);
  582.     cli();
  583.     DBG(DBG_ABNORM, printk("eata_abort called pid: %ld target: %x lun: %x"
  584.    " reason %xn", cmd->pid, cmd->target, cmd->lun, 
  585.    cmd->abort_reason));
  586.     DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  587.     /* Some interrupt controllers seem to loose interrupts */
  588.     for (x = 1, sh = first_HBA; x <= registered_HBAs; x++, sh = SD(sh)->next) {
  589.         if(inb((uint)sh->base + HA_RAUXSTAT) & HA_AIRQ) {
  590.             printk("eata_dma: scsi%d interrupt pending in eata_abort.n"
  591.    "          Calling interrupt handler.n", sh->host_no);
  592.     eata_int_handler(sh->irq, 0, 0);
  593. }
  594.     }
  595.     while (inb((u32)(cmd->host->base) + HA_RAUXSTAT) & HA_ABUSY) {
  596. if (--loop == 0) {
  597.     printk("eata_dma: abort, timeout error.n");
  598.     DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  599.     restore_flags(flags);
  600.     return (SCSI_ABORT_ERROR);
  601. }
  602.     }
  603.     if (CD(cmd)->status == RESET) {
  604. printk("eata_dma: abort, command reset error.n");
  605. DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  606. restore_flags(flags);
  607. return (SCSI_ABORT_ERROR);
  608.     }
  609.     if (CD(cmd)->status == LOCKED) {
  610. DBG(DBG_ABNORM, printk("eata_dma: abort, queue slot locked.n"));
  611. DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  612. restore_flags(flags);
  613. return (SCSI_ABORT_NOT_RUNNING);
  614.     }
  615.     if (CD(cmd)->status == USED) {
  616. DBG(DBG_ABNORM, printk("Returning: SCSI_ABORT_BUSYn"));
  617. restore_flags(flags);
  618. return (SCSI_ABORT_BUSY);  /* SNOOZE */ 
  619.     }
  620.     if (CD(cmd)->status == FREE) {
  621. DBG(DBG_ABNORM, printk("Returning: SCSI_ABORT_NOT_RUNNINGn")); 
  622. restore_flags(flags);
  623. return (SCSI_ABORT_NOT_RUNNING);
  624.     }
  625.     restore_flags(flags);
  626.     panic("eata_dma: abort: invalid slot statusn");
  627. }
  628. int eata_reset(Scsi_Cmnd * cmd, unsigned int resetflags)
  629. {
  630.     uint x; 
  631.     /* 10 million PCI reads take at least one third of a second */
  632.     ulong loop = 10 * 1000 * 1000;
  633.     ulong flags;
  634.     unchar success = FALSE;
  635.     Scsi_Cmnd *sp; 
  636.     struct Scsi_Host *sh;
  637.     
  638.     save_flags(flags);
  639.     cli();
  640.     
  641.     DBG(DBG_ABNORM, printk("eata_reset called pid:%ld target: %x lun: %x"
  642.    " reason %xn", cmd->pid, cmd->target, cmd->lun, 
  643.    cmd->abort_reason));
  644.     for (x = 1, sh = first_HBA; x <= registered_HBAs; x++, sh = SD(sh)->next) {
  645.         if(inb((uint)sh->base + HA_RAUXSTAT) & HA_AIRQ) {
  646.             printk("eata_dma: scsi%d interrupt pending in eata_reset.n"
  647.    "          Calling interrupt handler.n", sh->host_no);
  648.             eata_int_handler(sh->irq, 0, 0);
  649.       }
  650.     }
  651.     if (HD(cmd)->state == RESET) {
  652. printk("eata_reset: exit, already in reset.n");
  653. restore_flags(flags);
  654. DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  655. return (SCSI_RESET_ERROR);
  656.     }
  657.     
  658.     while (inb((u32)(cmd->host->base) + HA_RAUXSTAT) & HA_ABUSY)
  659. if (--loop == 0) {
  660.     printk("eata_reset: exit, timeout error.n");
  661.     restore_flags(flags);
  662.     DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  663.     return (SCSI_RESET_ERROR);
  664. }
  665.  
  666.     for (x = 0; x < cmd->host->can_queue; x++) {
  667. if (HD(cmd)->ccb[x].status == FREE)
  668.     continue;
  669. if (HD(cmd)->ccb[x].status == LOCKED) {
  670.     HD(cmd)->ccb[x].status = FREE;
  671.     printk("eata_reset: locked slot %d forced free.n", x);
  672.     DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  673.     continue;
  674. }
  675. sp = HD(cmd)->ccb[x].cmd;
  676. HD(cmd)->ccb[x].status = RESET;
  677. if (sp == NULL)
  678.     panic("eata_reset: slot %d, sp==NULL.n", x);
  679. printk("eata_reset: slot %d in reset, pid %ld.n", x, sp->pid);
  680. DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  681. if (sp == cmd)
  682.     success = TRUE;
  683.     }
  684.     
  685.     /* hard reset the HBA  */
  686.     inb((u32) (cmd->host->base) + HA_RSTATUS); /* This might cause trouble */
  687.     eata_send_command(0, (u32) cmd->host->base, EATA_CMD_RESET);
  688.     
  689.     HD(cmd)->state = RESET;
  690.     DBG(DBG_ABNORM, printk("eata_reset: board reset done, enabling "
  691.    "interrupts.n"));
  692.     DELAY(2); /* In theorie we should get interrupts and set free all
  693.        * used queueslots */
  694.     
  695.     DBG(DBG_ABNORM, printk("eata_reset: interrupts disabled again.n"));
  696.     DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  697.     
  698.     for (x = 0; x < cmd->host->can_queue; x++) {
  699. /* Skip slots already set free by interrupt and those that 
  700.          * are still LOCKED from the last reset */
  701. if (HD(cmd)->ccb[x].status != RESET)
  702.     continue;
  703. sp = HD(cmd)->ccb[x].cmd;
  704. sp->result = DID_RESET << 16;
  705. /* This mailbox is still waiting for its interrupt */
  706. HD(cmd)->ccb[x].status = LOCKED;
  707. printk("eata_reset: slot %d locked, DID_RESET, pid %ld done.n",
  708.        x, sp->pid);
  709. DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  710. sp->scsi_done(sp);
  711.     }
  712.     
  713.     HD(cmd)->state = FALSE;
  714.     restore_flags(flags);
  715.     
  716.     if (success) {
  717. DBG(DBG_ABNORM, printk("eata_reset: exit, pending.n"));
  718. DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  719. return (SCSI_RESET_PENDING);
  720.     } else {
  721. DBG(DBG_ABNORM, printk("eata_reset: exit, wakeup.n"));
  722. DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
  723. return (SCSI_RESET_PUNT);
  724.     }
  725. }
  726. /* Here we try to determine the optimum queue depth for
  727.  * each attached device.
  728.  *
  729.  * At the moment the algorithm is rather simple
  730.  */
  731. static void eata_select_queue_depths(struct Scsi_Host *host, 
  732.      Scsi_Device *devicelist)
  733. {
  734.     Scsi_Device *device;
  735.     int devcount = 0; 
  736.     int factor = 0;
  737. #if CRIPPLE_QUEUE    
  738.     for(device = devicelist; device != NULL; device = device->next) {
  739.         if(device->host == host)
  740.     device->queue_depth = 2;
  741.     }
  742. #else
  743.     /* First we do a sample run go find out what we have */
  744.     for(device = devicelist; device != NULL; device = device->next) {
  745.         if (device->host == host) {
  746.     devcount++;
  747.     switch(device->type) {
  748.     case TYPE_DISK:
  749.     case TYPE_MOD:
  750.         factor += TYPE_DISK_QUEUE;
  751. break;
  752.     case TYPE_TAPE:
  753.         factor += TYPE_TAPE_QUEUE;
  754. break;
  755.     case TYPE_WORM:
  756.     case TYPE_ROM:
  757.         factor += TYPE_ROM_QUEUE;
  758. break;
  759.     case TYPE_PROCESSOR:
  760.     case TYPE_SCANNER:
  761.     default:
  762.         factor += TYPE_OTHER_QUEUE;
  763. break;
  764.     }
  765. }
  766.     }
  767.     DBG(DBG_REGISTER, printk(KERN_DEBUG "scsi%d: needed queueslots %dn", 
  768.      host->host_no, factor));
  769.     if(factor == 0)    /* We don't want to get a DIV BY ZERO error */
  770.         factor = 1;
  771.     factor = (SD(host)->queuesize * 10) / factor;
  772.     DBG(DBG_REGISTER, printk(KERN_DEBUG "scsi%d: using factor %dE-1n", 
  773.      host->host_no, factor));
  774.     /* Now that have the factor we can set the individual queuesizes */
  775.     for(device = devicelist; device != NULL; device = device->next) {
  776.         if(device->host == host) {
  777.     if(SD(device->host)->bustype != IS_ISA){
  778.         switch(device->type) {
  779. case TYPE_DISK:
  780. case TYPE_MOD:
  781.     device->queue_depth = (TYPE_DISK_QUEUE * factor) / 10;
  782.     break;
  783. case TYPE_TAPE:
  784.     device->queue_depth = (TYPE_TAPE_QUEUE * factor) / 10;
  785.     break;
  786. case TYPE_WORM:
  787. case TYPE_ROM:
  788.             device->queue_depth = (TYPE_ROM_QUEUE * factor) / 10;
  789.     break;
  790. case TYPE_PROCESSOR:
  791. case TYPE_SCANNER:
  792. default:
  793.     device->queue_depth = (TYPE_OTHER_QUEUE * factor) / 10;
  794.     break;
  795. }
  796.     } else /* ISA forces us to limit the queue depth because of the 
  797.     * bounce buffer memory overhead. I know this is cruel */
  798.         device->queue_depth = 2; 
  799.     /* 
  800.      * It showed that we need to set an upper limit of commands 
  801.              * we can allow to  queue for a single device on the bus. 
  802.      * If we get above that limit, the broken midlevel SCSI code 
  803.      * will produce bogus timeouts and aborts en masse. :-(
  804.      */
  805.     if(device->queue_depth > UPPER_DEVICE_QUEUE_LIMIT)
  806. device->queue_depth = UPPER_DEVICE_QUEUE_LIMIT;
  807.     if(device->queue_depth == 0) 
  808. device->queue_depth = 1;
  809.     printk(KERN_INFO "scsi%d: queue depth for target %d on channel %d "
  810.    "set to %dn", host->host_no, device->id, device->channel,
  811.    device->queue_depth);
  812. }
  813.     }
  814. #endif
  815. }
  816. #if CHECK_BLINK
  817. int check_blink_state(long base)
  818. {
  819.     ushort loops = 10;
  820.     u32 blinkindicator;
  821.     u32 state = 0x12345678;
  822.     u32 oldstate = 0;
  823.     blinkindicator = htonl(0x54504442);
  824.     while ((loops--) && (state != oldstate)) {
  825. oldstate = state;
  826. state = inl((uint) base + 1);
  827.     }
  828.     DBG(DBG_BLINK, printk("Did Blink check. Status: %dn",
  829.       (state == oldstate) && (state == blinkindicator)));
  830.     if ((state == oldstate) && (state == blinkindicator))
  831. return(TRUE);
  832.     else
  833. return (FALSE);
  834. }
  835. #endif
  836. char * get_board_data(u32 base, u32 irq, u32 id)
  837. {
  838.     struct eata_ccb *cp;
  839.     struct eata_sp  *sp;
  840.     static char *buff;
  841.     ulong i;
  842.     cp = (struct eata_ccb *) kmalloc(sizeof(struct eata_ccb),
  843.      GFP_ATOMIC | GFP_DMA);
  844.      
  845.     if(cp==NULL)
  846.      return NULL;
  847.     
  848.     sp = (struct eata_sp *) kmalloc(sizeof(struct eata_sp), 
  849.      GFP_ATOMIC | GFP_DMA);
  850.     if(sp==NULL)
  851.     {
  852.         kfree(cp);
  853.         return NULL;
  854.     }   
  855.     buff = dma_scratch;
  856.  
  857.     memset(cp, 0, sizeof(struct eata_ccb));
  858.     memset(sp, 0, sizeof(struct eata_sp));
  859.     memset(buff, 0, 256);
  860.     cp->DataIn = TRUE;    
  861.     cp->Interpret = TRUE;   /* Interpret command */
  862.     cp->cp_dispri = TRUE;
  863.     cp->cp_identify = TRUE;
  864.  
  865.     cp->cp_datalen = htonl(56);  
  866.     cp->cp_dataDMA = htonl(virt_to_bus(buff));
  867.     cp->cp_statDMA = htonl(virt_to_bus(sp));
  868.     cp->cp_viraddr = cp;
  869.     
  870.     cp->cp_id = id;
  871.     cp->cp_lun = 0;
  872.     cp->cp_cdb[0] = INQUIRY;
  873.     cp->cp_cdb[1] = 0;
  874.     cp->cp_cdb[2] = 0;
  875.     cp->cp_cdb[3] = 0;
  876.     cp->cp_cdb[4] = 56;
  877.     cp->cp_cdb[5] = 0;
  878.     fake_int_base = (struct eata_register *) base;
  879.     fake_int_result = FALSE;
  880.     fake_int_happened = FALSE;
  881.     eata_send_command((u32) cp, (u32) base, EATA_CMD_DMA_SEND_CP);
  882.     
  883.     i = jiffies + (3 * HZ);
  884.     while (fake_int_happened == FALSE && time_before_eq(jiffies, i)) 
  885. barrier();
  886.     
  887.     DBG(DBG_INTR3, printk(KERN_DEBUG "fake_int_result: %#x hbastat %#x "
  888.   "scsistat %#x, buff %p sp %pn",
  889.   fake_int_result, (u32) (sp->hba_stat /*& 0x7f*/), 
  890.   (u32) sp->scsi_stat, buff, sp));
  891.     kfree((void *)cp);
  892.     kfree((void *)sp);
  893.     
  894.     if ((fake_int_result & HA_SERROR) || time_after(jiffies, i)){
  895. printk(KERN_WARNING "eata_dma: trying to reset HBA at %x to clear "
  896.        "possible blink staten", base); 
  897. /* hard reset the HBA  */
  898. inb((u32) (base) + HA_RSTATUS);
  899. eata_send_command(0, base, EATA_CMD_RESET);
  900. DELAY(1);
  901. return (NULL);
  902.     } else
  903. return (buff);
  904. }
  905. int get_conf_PIO(u32 base, struct get_conf *buf)
  906. {
  907.     ulong loop = R_LIMIT;
  908.     u16 *p;
  909.     if(check_region(base, 9)) 
  910. return (FALSE);
  911.      
  912.     memset(buf, 0, sizeof(struct get_conf));
  913.     while (inb(base + HA_RSTATUS) & HA_SBUSY)
  914. if (--loop == 0) 
  915.     return (FALSE);
  916.     fake_int_base = (struct eata_register *) base;
  917.     fake_int_result = FALSE;
  918.     fake_int_happened = FALSE;
  919.        
  920.     DBG(DBG_PIO && DBG_PROBE,
  921. printk("Issuing PIO READ CONFIG to HBA at %#xn", base));
  922.     eata_send_command(0, base, EATA_CMD_PIO_READ_CONFIG);
  923.     loop = R_LIMIT;
  924.     for (p = (u16 *) buf; 
  925.  (long)p <= ((long)buf + (sizeof(struct get_conf) / 2)); p++) {
  926. while (!(inb(base + HA_RSTATUS) & HA_SDRQ))
  927.     if (--loop == 0)
  928. return (FALSE);
  929. loop = R_LIMIT;
  930. *p = inw(base + HA_RDATA);
  931.     }
  932.     if (!(inb(base + HA_RSTATUS) & HA_SERROR)) {     /* Error ? */
  933. if (htonl(EATA_SIGNATURE) == buf->signature) {
  934.     DBG(DBG_PIO&&DBG_PROBE, printk("EATA Controller found at %x "
  935.    "EATA Level: %xn", (uint) base, 
  936.    (uint) (buf->version)));
  937.     
  938.     while (inb(base + HA_RSTATUS) & HA_SDRQ) 
  939. inw(base + HA_RDATA);
  940.     return (TRUE);
  941.     } else {
  942. DBG(DBG_PROBE, printk("eata_dma: get_conf_PIO, error during transfer "
  943.   "for HBA at %lxn", (long)base));
  944.     }
  945.     return (FALSE);
  946. }
  947. void print_config(struct get_conf *gc)
  948. {
  949.     printk("LEN: %d ver:%d OCS:%d TAR:%d TRNXFR:%d MORES:%d DMAS:%dn",
  950.    (u32) ntohl(gc->len), gc->version,
  951.    gc->OCS_enabled, gc->TAR_support, gc->TRNXFR, gc->MORE_support,
  952.    gc->DMA_support);
  953.     printk("DMAV:%d HAAV:%d SCSIID0:%d ID1:%d ID2:%d QUEUE:%d SG:%d SEC:%dn",
  954.    gc->DMA_valid, gc->HAA_valid, gc->scsi_id[3], gc->scsi_id[2],
  955.    gc->scsi_id[1], ntohs(gc->queuesiz), ntohs(gc->SGsiz), gc->SECOND);
  956.     printk("IRQ:%d IRQT:%d DMAC:%d FORCADR:%d SG_64K:%d SG_UAE:%d MID:%d "
  957.    "MCH:%d MLUN:%dn",
  958.    gc->IRQ, gc->IRQ_TR, (8 - gc->DMA_channel) & 7, gc->FORCADR, 
  959.    gc->SG_64K, gc->SG_UAE, gc->MAX_ID, gc->MAX_CHAN, gc->MAX_LUN); 
  960.     printk("RIDQ:%d PCI:%d EISA:%dn",
  961.    gc->ID_qest, gc->is_PCI, gc->is_EISA);
  962.     DBG(DPT_DEBUG, DELAY(14));
  963. }
  964. short register_HBA(u32 base, struct get_conf *gc, Scsi_Host_Template * tpnt, 
  965.    u8 bustype)
  966. {
  967.     ulong size = 0;
  968.     unchar dma_channel = 0;
  969.     char *buff = 0;
  970.     unchar bugs = 0;
  971.     struct Scsi_Host *sh;
  972.     hostdata *hd;
  973.     int x;
  974.     
  975.     
  976.     DBG(DBG_REGISTER, print_config(gc));
  977.     if (gc->DMA_support == FALSE) {
  978. printk("The EATA HBA at %#.4x does not support DMA.n" 
  979.        "Please use the EATA-PIO driver.n", base);
  980. return (FALSE);
  981.     }
  982.     if(gc->HAA_valid == FALSE || ntohl(gc->len) < 0x22) 
  983. gc->MAX_CHAN = 0;
  984.     if (reg_IRQ[gc->IRQ] == FALSE) { /* Interrupt already registered ? */
  985. if (!request_irq(gc->IRQ, (void *) eata_fake_int_handler, SA_INTERRUPT,
  986.  "eata_dma", NULL)){
  987.     reg_IRQ[gc->IRQ]++;
  988.     if (!gc->IRQ_TR)
  989. reg_IRQL[gc->IRQ] = TRUE;   /* IRQ is edge triggered */
  990. } else {
  991.     printk("Couldn't allocate IRQ %d, Sorry.", gc->IRQ);
  992.     return (FALSE);
  993. }
  994.     } else { /* More than one HBA on this IRQ */
  995. if (reg_IRQL[gc->IRQ] == TRUE) {
  996.     printk("Can't support more than one HBA on this IRQ,n"
  997.    "  if the IRQ is edge triggered. Sorry.n");
  998.     return (FALSE);
  999. } else
  1000.     reg_IRQ[gc->IRQ]++;
  1001.     }
  1002.  
  1003.     /* If DMA is supported but DMA_valid isn't set to indicate that
  1004.      * the channel number is given we must have pre 2.0 firmware (1.7?)
  1005.      * which leaves us to guess since the "newer ones" also don't set the 
  1006.      * DMA_valid bit.
  1007.      */
  1008.     if (gc->DMA_support && !gc->DMA_valid && gc->DMA_channel) {
  1009.       printk(KERN_WARNING "eata_dma: If you are using a pre 2.0 firmware "
  1010.      "please update it !n"
  1011.      "          You can get new firmware releases from ftp.dpt.comn");
  1012. gc->DMA_channel = (base == 0x1f0 ? 3 /* DMA=5 */ : 2 /* DMA=6 */);
  1013. gc->DMA_valid = TRUE;
  1014.     }
  1015.     /* if gc->DMA_valid it must be an ISA HBA and we have to register it */
  1016.     dma_channel = BUSMASTER;
  1017.     if (gc->DMA_valid) {
  1018. if (request_dma(dma_channel = (8 - gc->DMA_channel) & 7, "eata_dma")) {
  1019.     printk(KERN_WARNING "Unable to allocate DMA channel %d for ISA HBA"
  1020.    " at %#.4x.n", dma_channel, base);
  1021.     reg_IRQ[gc->IRQ]--;
  1022.     if (reg_IRQ[gc->IRQ] == 0)
  1023. free_irq(gc->IRQ, NULL);
  1024.     if (gc->IRQ_TR == FALSE)
  1025. reg_IRQL[gc->IRQ] = FALSE; 
  1026.     return (FALSE);
  1027. }
  1028.     }
  1029.     if (dma_channel != BUSMASTER) {
  1030. disable_dma(dma_channel);
  1031. clear_dma_ff(dma_channel);
  1032. set_dma_mode(dma_channel, DMA_MODE_CASCADE);
  1033. enable_dma(dma_channel);
  1034.     }
  1035.     if (bustype != IS_EISA && bustype != IS_ISA)
  1036. buff = get_board_data(base, gc->IRQ, gc->scsi_id[3]);
  1037.     if (buff == NULL) {
  1038. if (bustype == IS_EISA || bustype == IS_ISA) {
  1039.     bugs = bugs || BROKEN_INQUIRY;
  1040. } else {
  1041.     if (gc->DMA_support == FALSE)
  1042. printk(KERN_WARNING "HBA at %#.4x doesn't support DMA. "
  1043.        "Sorryn", base);
  1044.     else
  1045. printk(KERN_WARNING "HBA at %#.4x does not react on INQUIRY. "
  1046.        "Sorry.n", base);
  1047.     if (gc->DMA_valid) 
  1048. free_dma(dma_channel);
  1049.     reg_IRQ[gc->IRQ]--;
  1050.     if (reg_IRQ[gc->IRQ] == 0)
  1051. free_irq(gc->IRQ, NULL);
  1052.     if (gc->IRQ_TR == FALSE)
  1053. reg_IRQL[gc->IRQ] = FALSE; 
  1054.     return (FALSE);
  1055. }
  1056.     }
  1057.  
  1058.     if (gc->DMA_support == FALSE && buff != NULL)  
  1059. printk(KERN_WARNING "HBA %.12sat %#.4x doesn't set the DMA_support "
  1060.        "flag correctly.n", &buff[16], base);
  1061.     
  1062.     request_region(base, 9, "eata_dma"); /* We already checked the 
  1063.   * availability, so this
  1064.   * should not fail.
  1065.   */
  1066.     
  1067.     if(ntohs(gc->queuesiz) == 0) {
  1068. gc->queuesiz = ntohs(64);
  1069. printk(KERN_WARNING "Warning: Queue size has to be corrected. Assuming"
  1070.        " 64 queueslotsn"
  1071.        "         This might be a PM2012B with a defective Firmwaren"
  1072.        "         Contact DPT support@dpt.com for an upgraden");
  1073.     }
  1074.     size = sizeof(hostdata) + ((sizeof(struct eata_ccb) + sizeof(long)) 
  1075.        * ntohs(gc->queuesiz));
  1076.     DBG(DBG_REGISTER, printk("scsi_register size: %ldn", size));
  1077.     sh = scsi_register(tpnt, size);
  1078.     
  1079.     if(sh != NULL) {
  1080.         hd = SD(sh);    
  1081. memset(hd->reads, 0, sizeof(u32) * 26); 
  1082. sh->select_queue_depths = eata_select_queue_depths;
  1083. hd->bustype = bustype;
  1084. /*
  1085.  * If we are using a ISA board, we can't use extended SG,
  1086.  * because we would need excessive amounts of memory for
  1087.  * bounce buffers.
  1088.  */
  1089. if (gc->SG_64K==TRUE && ntohs(gc->SGsiz)==64 && hd->bustype!=IS_ISA){
  1090.     sh->sg_tablesize = SG_SIZE_BIG;
  1091. } else {
  1092.     sh->sg_tablesize = ntohs(gc->SGsiz);
  1093.     if (sh->sg_tablesize > SG_SIZE || sh->sg_tablesize == 0) {
  1094.         if (sh->sg_tablesize == 0)
  1095.     printk(KERN_WARNING "Warning: SG size had to be fixed.n"
  1096.    "This might be a PM2012 with a defective Firmware"
  1097.    "nContact DPT support@dpt.com for an upgraden");
  1098. sh->sg_tablesize = SG_SIZE;
  1099.     }
  1100. }
  1101. hd->sgsize = sh->sg_tablesize;
  1102.     }
  1103.     if(sh != NULL) {
  1104.         sh->can_queue = hd->queuesize = ntohs(gc->queuesiz);
  1105.         sh->cmd_per_lun = 0;
  1106.     }
  1107.     if(sh == NULL) { 
  1108.         DBG(DBG_REGISTER, printk(KERN_NOTICE "eata_dma: couldn't register HBA"
  1109.  " at%x n", base));
  1110. scsi_unregister(sh);
  1111. if (gc->DMA_valid) 
  1112.     free_dma(dma_channel);
  1113. reg_IRQ[gc->IRQ]--;
  1114. if (reg_IRQ[gc->IRQ] == 0)
  1115.     free_irq(gc->IRQ, NULL);
  1116. if (gc->IRQ_TR == FALSE)
  1117.     reg_IRQL[gc->IRQ] = FALSE; 
  1118. return (FALSE);
  1119.     }
  1120.     
  1121.     hd->broken_INQUIRY = (bugs & BROKEN_INQUIRY);
  1122.     if(hd->broken_INQUIRY == TRUE) {
  1123. strcpy(hd->vendor, "DPT");
  1124. strcpy(hd->name, "??????????");
  1125. strcpy(hd->revision, "???.?");
  1126.         hd->firmware_revision = 0;
  1127.     } else {
  1128. strncpy(hd->vendor, &buff[8], 8);
  1129. hd->vendor[8] = 0;
  1130. strncpy(hd->name, &buff[16], 17);
  1131. hd->name[17] = 0;
  1132. hd->revision[0] = buff[32];
  1133. hd->revision[1] = buff[33];
  1134. hd->revision[2] = buff[34];
  1135. hd->revision[3] = '.';
  1136. hd->revision[4] = buff[35];
  1137. hd->revision[5] = 0;
  1138.         hd->firmware_revision = (buff[32] << 24) + (buff[33] << 16) 
  1139.                             + (buff[34] << 8) + buff[35]; 
  1140.     }
  1141.     if (hd->firmware_revision >= (('0'<<24) + ('7'<<16) + ('G'<< 8) + '0'))
  1142.         hd->immediate_support = 1;
  1143.     else 
  1144.         hd->immediate_support = 0;
  1145.     switch (ntohl(gc->len)) {
  1146.     case 0x1c:
  1147. hd->EATA_revision = 'a';
  1148. break;
  1149.     case 0x1e:
  1150. hd->EATA_revision = 'b';
  1151. break;
  1152.     case 0x22:
  1153. hd->EATA_revision = 'c';
  1154. break;
  1155.     case 0x24:
  1156. hd->EATA_revision = 'z';
  1157.     default:
  1158. hd->EATA_revision = '?';
  1159.     }
  1160.     if(ntohl(gc->len) >= 0x22) {
  1161. sh->max_id = gc->MAX_ID + 1;
  1162. sh->max_lun = gc->MAX_LUN + 1;
  1163.     } else {
  1164. sh->max_id = 8;
  1165. sh->max_lun = 8;
  1166.     }
  1167.     hd->HBA_number = sh->host_no;
  1168.     hd->channel = gc->MAX_CHAN;     
  1169.     sh->max_channel = gc->MAX_CHAN; 
  1170.     sh->unique_id = base;
  1171.     sh->base = base;
  1172.     sh->io_port = base;
  1173.     sh->n_io_port = 9;
  1174.     sh->irq = gc->IRQ;
  1175.     sh->dma_channel = dma_channel;
  1176.     
  1177.     /* FIXME:
  1178.      * SCSI midlevel code should support different HBA ids on every channel
  1179.      */
  1180.     sh->this_id = gc->scsi_id[3];
  1181.     
  1182.     if (gc->SECOND)
  1183. hd->primary = FALSE;
  1184.     else
  1185. hd->primary = TRUE;
  1186.     
  1187.     if (hd->bustype != IS_ISA) {
  1188. sh->unchecked_isa_dma = FALSE;
  1189.     } else {
  1190. sh->unchecked_isa_dma = TRUE; /* We're doing ISA DMA */
  1191.     }
  1192.     
  1193.     for(x = 0; x <= 11; x++){  /* Initialize min. latency */
  1194. hd->writes_lat[x][1] = 0xffffffff;
  1195. hd->reads_lat[x][1] = 0xffffffff;
  1196.     }
  1197.     hd->all_lat[1] = 0xffffffff;
  1198.     hd->next = NULL; /* build a linked list of all HBAs */
  1199.     hd->prev = last_HBA;
  1200.     if(hd->prev != NULL)
  1201. SD(hd->prev)->next = sh;
  1202.     last_HBA = sh;
  1203.     if (first_HBA == NULL)
  1204. first_HBA = sh;
  1205.     registered_HBAs++;
  1206.     
  1207.     return (TRUE);
  1208. }
  1209. void find_EISA(struct get_conf *buf, Scsi_Host_Template * tpnt)
  1210. {
  1211.     u32 base;
  1212.     int i;
  1213.     
  1214. #if CHECKPAL
  1215.     u8 pal1, pal2, pal3;
  1216. #endif
  1217.     
  1218.     for (i = 0; i < MAXEISA; i++) {
  1219. if (EISAbases[i] == TRUE) { /* Still a possibility ?       */
  1220.     
  1221.     base = 0x1c88 + (i * 0x1000);
  1222. #if CHECKPAL
  1223.     pal1 = inb((u16)base - 8);
  1224.     pal2 = inb((u16)base - 7);
  1225.     pal3 = inb((u16)base - 6);
  1226.     
  1227.     if (((pal1 == DPT_ID1) && (pal2 == DPT_ID2)) ||
  1228. ((pal1 == NEC_ID1) && (pal2 == NEC_ID2) && (pal3 == NEC_ID3))||
  1229. ((pal1 == ATT_ID1) && (pal2 == ATT_ID2) && (pal3 == ATT_ID3))){
  1230. DBG(DBG_PROBE, printk("EISA EATA id tags found: %x %x %x n",
  1231.       (int)pal1, (int)pal2, (int)pal3));
  1232. #endif
  1233. if (get_conf_PIO(base, buf) == TRUE) {
  1234.     if (buf->IRQ) {  
  1235. DBG(DBG_EISA, printk("Registering EISA HBAn"));
  1236. register_HBA(base, buf, tpnt, IS_EISA);
  1237.     } else
  1238. printk("eata_dma: No valid IRQ. HBA removed from listn");
  1239. }
  1240. #if CHECK_BLINK
  1241. else {
  1242.     if (check_blink_state(base)) 
  1243. printk("HBA is in BLINK state. Consult your HBAs "
  1244.        "Manual to correct this.n");
  1245. #endif
  1246. /* Nothing found here so we take it from the list */
  1247. EISAbases[i] = 0;  
  1248. #if CHECKPAL
  1249.     } 
  1250. #endif
  1251. }
  1252.     }
  1253.     return; 
  1254. }
  1255. void find_ISA(struct get_conf *buf, Scsi_Host_Template * tpnt)
  1256. {
  1257.     int i;
  1258.     
  1259.     for (i = 0; i < MAXISA; i++) {  
  1260. if (ISAbases[i]) {  
  1261.     if (get_conf_PIO(ISAbases[i],buf) == TRUE){
  1262. DBG(DBG_ISA, printk("Registering ISA HBAn"));
  1263. register_HBA(ISAbases[i], buf, tpnt, IS_ISA);
  1264.     } 
  1265. #if CHECK_BLINK
  1266.     else {
  1267. if (check_blink_state(ISAbases[i])) 
  1268.     printk("HBA is in BLINK state. Consult your HBAs "
  1269.    "Manual to correct this.n");
  1270.     }
  1271. #endif
  1272.     ISAbases[i] = 0;
  1273. }
  1274.     }
  1275.     return;
  1276. }
  1277. void find_PCI(struct get_conf *buf, Scsi_Host_Template * tpnt)
  1278. {
  1279. #ifndef CONFIG_PCI
  1280.     printk("eata_dma: kernel PCI support not enabled. Skipping scan for PCI HBAs.n");
  1281. #else
  1282.     struct pci_dev *dev = NULL; 
  1283.     u32 base, x;
  1284.     u8 pal1, pal2, pal3;
  1285.     while ((dev = pci_find_device(PCI_VENDOR_ID_DPT, PCI_DEVICE_ID_DPT, dev)) != NULL) {
  1286.     DBG(DBG_PROBE && DBG_PCI, 
  1287. printk("eata_dma: find_PCI, HBA at %sn", dev->name));
  1288.     if (pci_enable_device(dev))
  1289.      continue;
  1290.     pci_set_master(dev);
  1291.     base = pci_resource_flags(dev, 0);
  1292.     if (base & IORESOURCE_MEM) {
  1293. printk("eata_dma: invalid base address of device %sn", dev->name);
  1294. continue;
  1295.     }
  1296.     base = pci_resource_start(dev, 0);
  1297.             /* EISA tag there ? */
  1298.     pal1 = inb(base);
  1299.     pal2 = inb(base + 1);
  1300.     pal3 = inb(base + 2);
  1301.     if (((pal1 == DPT_ID1) && (pal2 == DPT_ID2)) ||
  1302. ((pal1 == NEC_ID1) && (pal2 == NEC_ID2) && 
  1303. (pal3 == NEC_ID3)) ||
  1304. ((pal1 == ATT_ID1) && (pal2 == ATT_ID2) && 
  1305. (pal3 == ATT_ID3)))
  1306. base += 0x08;
  1307.     else
  1308. base += 0x10;   /* Now, THIS is the real address */
  1309.     if (base != 0x1f8) {
  1310. /* We didn't find it in the primary search */
  1311. if (get_conf_PIO(base, buf) == TRUE) {
  1312.     /* OK. We made it till here, so we can go now  
  1313.      * and register it. We only have to check and 
  1314.      * eventually remove it from the EISA and ISA list 
  1315.      */
  1316.     DBG(DBG_PCI, printk("Registering PCI HBAn"));
  1317.     register_HBA(base, buf, tpnt, IS_PCI);
  1318.     
  1319.     if (base < 0x1000) {
  1320. for (x = 0; x < MAXISA; ++x) {
  1321.     if (ISAbases[x] == base) {
  1322. ISAbases[x] = 0;
  1323. break;
  1324.     }
  1325. }
  1326.     } else if ((base & 0x0fff) == 0x0c88) 
  1327. EISAbases[(base >> 12) & 0x0f] = 0;
  1328. #if CHECK_BLINK
  1329. else if (check_blink_state(base) == TRUE) {
  1330.     printk("eata_dma: HBA is in BLINK state.n"
  1331.    "Consult your HBAs manual to correct this.n");
  1332. }
  1333. #endif
  1334.     }
  1335. }
  1336. #endif /* #ifndef CONFIG_PCI */
  1337. }
  1338. int eata_detect(Scsi_Host_Template * tpnt)
  1339. {
  1340.     struct Scsi_Host *HBA_ptr;
  1341.     struct get_conf gc;
  1342.     int i;
  1343.     
  1344.     DBG((DBG_PROBE && DBG_DELAY) || DPT_DEBUG,
  1345. printk("Using lots of delays to let you read the debugging outputn"));
  1346.     tpnt->proc_name = "eata_dma";
  1347.     status = kmalloc(512, GFP_ATOMIC | GFP_DMA);
  1348.     dma_scratch = kmalloc(1024, GFP_ATOMIC | GFP_DMA);
  1349.     if(status == NULL || dma_scratch == NULL) {
  1350. printk("eata_dma: can't allocate enough memory to probe for hosts !n");
  1351. if(status)
  1352. kfree(status);
  1353. if(dma_scratch)
  1354. kfree(dma_scratch);
  1355. return(0);
  1356.     }
  1357.     dma_scratch += 4;
  1358.     find_PCI(&gc, tpnt);
  1359.     
  1360.     find_EISA(&gc, tpnt);
  1361.     
  1362.     find_ISA(&gc, tpnt);
  1363.     
  1364.     for (i = 0; i <= MAXIRQ; i++) { /* Now that we know what we have, we     */
  1365. if (reg_IRQ[i] >= 1){       /* exchange the interrupt handler which  */
  1366.     free_irq(i, NULL);      /* we used for probing with the real one */
  1367.     request_irq(i, (void *)(do_eata_int_handler), SA_INTERRUPT|SA_SHIRQ, 
  1368. "eata_dma", NULL);
  1369. }
  1370.     }
  1371.     HBA_ptr = first_HBA;
  1372.     if (registered_HBAs != 0) {
  1373.         printk("EATA (Extended Attachment) driver version: %d.%d%s"
  1374.                "ndeveloped in co-operation with DPTn"
  1375.                "(c) 1993-96 Michael Neuffer, mike@i-Connect.Netn",
  1376.                VER_MAJOR, VER_MINOR, VER_SUB);
  1377.         printk("Registered HBAs:");
  1378.         printk("nHBA no. Boardtype    Revis  EATA Bus  BaseIO IRQ"
  1379.                " DMA Ch ID Pr QS  S/G ISn");
  1380.         for (i = 1; i <= registered_HBAs; i++) {
  1381.          printk("scsi%-2d: %.12s v%s 2.0%c %s %#.4x  %2d",
  1382.    HBA_ptr->host_no, SD(HBA_ptr)->name, SD(HBA_ptr)->revision,
  1383.    SD(HBA_ptr)->EATA_revision, (SD(HBA_ptr)->bustype == 'P')? 
  1384.    "PCI ":(SD(HBA_ptr)->bustype == 'E')?"EISA":"ISA ",
  1385.    (u32) HBA_ptr->base, HBA_ptr->irq);
  1386.     if(HBA_ptr->dma_channel != BUSMASTER)
  1387. printk("  %2x ", HBA_ptr->dma_channel);
  1388.     else
  1389. printk(" %s", "BMST");
  1390.     printk(" %d  %d  %c %3d %3d %cn", 
  1391.    SD(HBA_ptr)->channel+1, HBA_ptr->this_id, 
  1392.    (SD(HBA_ptr)->primary == TRUE)?'Y':'N', 
  1393.    HBA_ptr->can_queue, HBA_ptr->sg_tablesize, 
  1394.    (SD(HBA_ptr)->immediate_support == TRUE)?'Y':'N'); 
  1395.     HBA_ptr = SD(HBA_ptr)->next;
  1396. }
  1397.     } else {
  1398. kfree((void *)status);
  1399.     }
  1400.     kfree((void *)dma_scratch - 4);
  1401.     DBG(DPT_DEBUG, DELAY(12));
  1402.     return(registered_HBAs);
  1403. }
  1404. MODULE_LICENSE("GPL");
  1405. /* Eventually this will go into an include file, but this will be later */
  1406. static Scsi_Host_Template driver_template = EATA_DMA;
  1407. #include "scsi_module.c"
  1408. /*
  1409.  * Overrides for Emacs so that we almost follow Linus's tabbing style.
  1410.  * Emacs will notice this stuff at the end of the file and automatically
  1411.  * adjust the settings for this buffer only.  This must remain at the end
  1412.  * of the file.
  1413.  * ---------------------------------------------------------------------------
  1414.  * Local variables:
  1415.  * c-indent-level: 4
  1416.  * c-brace-imaginary-offset: 0
  1417.  * c-brace-offset: -4
  1418.  * c-argdecl-indent: 4
  1419.  * c-label-offset: -4
  1420.  * c-continued-statement-offset: 4
  1421.  * c-continued-brace-offset: 0
  1422.  * tab-width: 8
  1423.  * End:
  1424.  */