aic7xxx_old.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:392k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1.         if((new_offset == 0) && (offset != 0))
  2.         {
  3.           /*
  4.            * Oops, the syncrate went to low for this card and we fell off
  5.            * to async (should never happen with a device that uses PPR
  6.            * messages, but have to be complete)
  7.            */
  8.           reply = TRUE;
  9.         }
  10.         if(reply)
  11.         {
  12.           scb->flags &= ~SCB_MSGOUT_BITS;
  13.           scb->flags |= SCB_MSGOUT_PPR;
  14.           aic_outb(p, HOST_MSG, MSG_OUT);
  15.           aic_outb(p, aic_inb(p, SCSISIGO) | ATNO, SCSISIGO);
  16.         }
  17.         else
  18.         {
  19.           p->needppr &= ~target_mask;
  20.         }
  21.         done = TRUE;
  22.         break;
  23.       }
  24.       default:
  25.       {
  26.         reject = TRUE;
  27.         break;
  28.       }
  29.     } /* end of switch(p->msg_type) */
  30.   } /* end of if (!reject && (p->msg_len > 2)) */
  31.   if (!reply && reject)
  32.   {
  33.     aic_outb(p, MSG_MESSAGE_REJECT, MSG_OUT);
  34.     aic_outb(p, aic_inb(p, SCSISIGO) | ATNO, SCSISIGO);
  35.     done = TRUE;
  36.   }
  37.   return(done);
  38. }
  39. /*+F*************************************************************************
  40.  * Function:
  41.  *   aic7xxx_handle_reqinit
  42.  *
  43.  * Description:
  44.  *   Interrupt handler for REQINIT interrupts (used to transfer messages to
  45.  *    and from devices).
  46.  *_F*************************************************************************/
  47. static void
  48. aic7xxx_handle_reqinit(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
  49. {
  50.   unsigned char lastbyte;
  51.   unsigned char phasemis;
  52.   int done = FALSE;
  53.   switch(p->msg_type)
  54.   {
  55.     case MSG_TYPE_INITIATOR_MSGOUT:
  56.       {
  57.         if (p->msg_len == 0)
  58.           panic("aic7xxx: REQINIT with no active message!n");
  59.         lastbyte = (p->msg_index == (p->msg_len - 1));
  60.         phasemis = ( aic_inb(p, SCSISIGI) & PHASE_MASK) != P_MESGOUT;
  61.         if (lastbyte || phasemis)
  62.         {
  63.           /* Time to end the message */
  64.           p->msg_len = 0;
  65.           p->msg_type = MSG_TYPE_NONE;
  66.           /*
  67.            * NOTE-TO-MYSELF: If you clear the REQINIT after you
  68.            * disable REQINITs, then cases of REJECT_MSG stop working
  69.            * and hang the bus
  70.            */
  71.           aic_outb(p, aic_inb(p, SIMODE1) & ~ENREQINIT, SIMODE1);
  72.           aic_outb(p, CLRSCSIINT, CLRINT);
  73.           p->flags &= ~AHC_HANDLING_REQINITS;
  74.           if (phasemis == 0)
  75.           {
  76.             aic_outb(p, p->msg_buf[p->msg_index], SINDEX);
  77.             aic_outb(p, 0, RETURN_1);
  78. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  79.             if (aic7xxx_verbose > 0xffff)
  80.               printk(INFO_LEAD "Completed sending of REQINIT message.n",
  81.                      p->host_no, CTL_OF_SCB(scb));
  82. #endif
  83.           }
  84.           else
  85.           {
  86.             aic_outb(p, MSGOUT_PHASEMIS, RETURN_1);
  87. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  88.             if (aic7xxx_verbose > 0xffff)
  89.               printk(INFO_LEAD "PHASEMIS while sending REQINIT message.n",
  90.                      p->host_no, CTL_OF_SCB(scb));
  91. #endif
  92.           }
  93.           unpause_sequencer(p, TRUE);
  94.         }
  95.         else
  96.         {
  97.           /*
  98.            * Present the byte on the bus (clearing REQINIT) but don't
  99.            * unpause the sequencer.
  100.            */
  101.           aic_outb(p, CLRREQINIT, CLRSINT1);
  102.           aic_outb(p, CLRSCSIINT, CLRINT);
  103.           aic_outb(p,  p->msg_buf[p->msg_index++], SCSIDATL);
  104.         }
  105.         break;
  106.       }
  107.     case MSG_TYPE_INITIATOR_MSGIN:
  108.       {
  109.         phasemis = ( aic_inb(p, SCSISIGI) & PHASE_MASK ) != P_MESGIN;
  110.         if (phasemis == 0)
  111.         {
  112.           p->msg_len++;
  113.           /* Pull the byte in without acking it */
  114.           p->msg_buf[p->msg_index] = aic_inb(p, SCSIBUSL);
  115.           done = aic7xxx_parse_msg(p, scb);
  116.           /* Ack the byte */
  117.           aic_outb(p, CLRREQINIT, CLRSINT1);
  118.           aic_outb(p, CLRSCSIINT, CLRINT);
  119.           aic_inb(p, SCSIDATL);
  120.           p->msg_index++;
  121.         }
  122.         if (phasemis || done)
  123.         {
  124. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  125.           if (aic7xxx_verbose > 0xffff)
  126.           {
  127.             if (phasemis)
  128.               printk(INFO_LEAD "PHASEMIS while receiving REQINIT message.n",
  129.                      p->host_no, CTL_OF_SCB(scb));
  130.             else
  131.               printk(INFO_LEAD "Completed receipt of REQINIT message.n",
  132.                      p->host_no, CTL_OF_SCB(scb));
  133.           }
  134. #endif
  135.           /* Time to end our message session */
  136.           p->msg_len = 0;
  137.           p->msg_type = MSG_TYPE_NONE;
  138.           aic_outb(p, aic_inb(p, SIMODE1) & ~ENREQINIT, SIMODE1);
  139.           aic_outb(p, CLRSCSIINT, CLRINT);
  140.           p->flags &= ~AHC_HANDLING_REQINITS;
  141.           unpause_sequencer(p, TRUE);
  142.         }
  143.         break;
  144.       }
  145.     default:
  146.       {
  147.         panic("aic7xxx: Unknown REQINIT message type.n");
  148.         break;
  149.       }
  150.   } /* End of switch(p->msg_type) */
  151. }
  152. /*+F*************************************************************************
  153.  * Function:
  154.  *   aic7xxx_handle_scsiint
  155.  *
  156.  * Description:
  157.  *   Interrupt handler for SCSI interrupts (SCSIINT).
  158.  *-F*************************************************************************/
  159. static void
  160. aic7xxx_handle_scsiint(struct aic7xxx_host *p, unsigned char intstat)
  161. {
  162.   unsigned char scb_index;
  163.   unsigned char status;
  164.   struct aic7xxx_scb *scb;
  165.   scb_index = aic_inb(p, SCB_TAG);
  166.   status = aic_inb(p, SSTAT1);
  167.   if (scb_index < p->scb_data->numscbs)
  168.   {
  169.     scb = p->scb_data->scb_array[scb_index];
  170.     if ((scb->flags & SCB_ACTIVE) == 0)
  171.     {
  172.       scb = NULL;
  173.     }
  174.   }
  175.   else
  176.   {
  177.     scb = NULL;
  178.   }
  179.   if ((status & SCSIRSTI) != 0)
  180.   {
  181.     int channel;
  182.     if ( (p->chip & AHC_CHIPID_MASK) == AHC_AIC7770 )
  183.       channel = (aic_inb(p, SBLKCTL) & SELBUSB) >> 3;
  184.     else
  185.       channel = 0;
  186.     if (aic7xxx_verbose & VERBOSE_RESET)
  187.       printk(WARN_LEAD "Someone else reset the channel!!n",
  188.            p->host_no, channel, -1, -1);
  189.     if (aic7xxx_panic_on_abort)
  190.       aic7xxx_panic_abort(p, NULL);
  191.     /*
  192.      * Go through and abort all commands for the channel, but do not
  193.      * reset the channel again.
  194.      */
  195.     aic7xxx_reset_channel(p, channel, /* Initiate Reset */ FALSE);
  196.     aic7xxx_run_done_queue(p, TRUE);
  197.     scb = NULL;
  198.   }
  199.   else if ( ((status & BUSFREE) != 0) && ((status & SELTO) == 0) )
  200.   {
  201.     /*
  202.      * First look at what phase we were last in.  If it's message-out,
  203.      * chances are pretty good that the bus free was in response to
  204.      * one of our abort requests.
  205.      */
  206.     unsigned char lastphase = aic_inb(p, LASTPHASE);
  207.     unsigned char saved_tcl = aic_inb(p, SAVED_TCL);
  208.     unsigned char target = (saved_tcl >> 4) & 0x0F;
  209.     int channel;
  210.     int printerror = TRUE;
  211.     if ( (p->chip & AHC_CHIPID_MASK) == AHC_AIC7770 )
  212.       channel = (aic_inb(p, SBLKCTL) & SELBUSB) >> 3;
  213.     else
  214.       channel = 0;
  215.     aic_outb(p, aic_inb(p, SCSISEQ) & (ENSELI|ENRSELI|ENAUTOATNP),
  216.              SCSISEQ);
  217.     if (lastphase == P_MESGOUT)
  218.     {
  219.       unsigned char message;
  220.       message = aic_inb(p, SINDEX);
  221.       if ((message == MSG_ABORT) || (message == MSG_ABORT_TAG))
  222.       {
  223.         if (aic7xxx_verbose & VERBOSE_ABORT_PROCESS)
  224.           printk(INFO_LEAD "SCB %d abort delivered.n", p->host_no,
  225.             CTL_OF_SCB(scb), scb->hscb->tag);
  226.         aic7xxx_reset_device(p, target, channel, ALL_LUNS,
  227.                 (message == MSG_ABORT) ? SCB_LIST_NULL : scb->hscb->tag );
  228.         aic7xxx_run_done_queue(p, TRUE);
  229.         scb = NULL;
  230.         printerror = 0;
  231.       }
  232.       else if (message == MSG_BUS_DEV_RESET)
  233.       {
  234.         aic7xxx_handle_device_reset(p, target, channel);
  235.         scb = NULL;
  236.         printerror = 0;
  237.       }
  238.     }
  239.     if ( (scb != NULL) && (scb->flags & SCB_DTR_SCB) ) 
  240.     {
  241.       /*
  242.        * Hmmm...error during a negotiation command.  Either we have a
  243.        * borken bus, or the device doesn't like our negotiation message.
  244.        * Since we check the INQUIRY data of a device before sending it
  245.        * negotiation messages, assume the bus is borken for whatever
  246.        * reason.  Complete the command.
  247.        */
  248.       printerror = 0;
  249.       aic7xxx_reset_device(p, target, channel, ALL_LUNS, scb->hscb->tag);
  250.       aic7xxx_run_done_queue(p, TRUE);
  251.       scb = NULL;
  252.     }
  253.     if (printerror != 0)
  254.     {
  255.       if (scb != NULL)
  256.       {
  257.         unsigned char tag;
  258.         if ((scb->hscb->control & TAG_ENB) != 0)
  259.         {
  260.           tag = scb->hscb->tag;
  261.         }
  262.         else
  263.         {
  264.           tag = SCB_LIST_NULL;
  265.         }
  266.         aic7xxx_reset_device(p, target, channel, ALL_LUNS, tag);
  267.         aic7xxx_run_done_queue(p, TRUE);
  268.       }
  269.       else
  270.       {
  271.         aic7xxx_reset_device(p, target, channel, ALL_LUNS, SCB_LIST_NULL);
  272.         aic7xxx_run_done_queue(p, TRUE);
  273.       }
  274.       printk(INFO_LEAD "Unexpected busfree, LASTPHASE = 0x%x, "
  275.              "SEQADDR = 0x%xn", p->host_no, channel, target, -1, lastphase,
  276.              (aic_inb(p, SEQADDR1) << 8) | aic_inb(p, SEQADDR0));
  277.       scb = NULL;
  278.     }
  279.     aic_outb(p, MSG_NOOP, MSG_OUT);
  280.     aic_outb(p, aic_inb(p, SIMODE1) & ~(ENBUSFREE|ENREQINIT),
  281.       SIMODE1);
  282.     p->flags &= ~AHC_HANDLING_REQINITS;
  283.     aic_outb(p, CLRBUSFREE, CLRSINT1);
  284.     aic_outb(p, CLRSCSIINT, CLRINT);
  285.     restart_sequencer(p);
  286.     unpause_sequencer(p, TRUE);
  287.   }
  288.   else if ((status & SELTO) != 0)
  289.   {
  290.     unsigned char scbptr;
  291.     unsigned char nextscb;
  292.     Scsi_Cmnd *cmd;
  293.     scbptr = aic_inb(p, WAITING_SCBH);
  294.     if (scbptr > p->scb_data->maxhscbs)
  295.     {
  296.       /*
  297.        * I'm still trying to track down exactly how this happens, but until
  298.        * I find it, this code will make sure we aren't passing bogus values
  299.        * into the SCBPTR register, even if that register will just wrap
  300.        * things around, we still don't like having out of range variables.
  301.        *
  302.        * NOTE: Don't check the aic7xxx_verbose variable, I want this message
  303.        * to always be displayed.
  304.        */
  305.       printk(INFO_LEAD "Invalid WAITING_SCBH value %d, improvising.n",
  306.              p->host_no, -1, -1, -1, scbptr);
  307.       if (p->scb_data->maxhscbs > 4)
  308.         scbptr &= (p->scb_data->maxhscbs - 1);
  309.       else
  310.         scbptr &= 0x03;
  311.     }
  312.     aic_outb(p, scbptr, SCBPTR);
  313.     scb_index = aic_inb(p, SCB_TAG);
  314.     scb = NULL;
  315.     if (scb_index < p->scb_data->numscbs)
  316.     {
  317.       scb = p->scb_data->scb_array[scb_index];
  318.       if ((scb->flags & SCB_ACTIVE) == 0)
  319.       {
  320.         scb = NULL;
  321.       }
  322.     }
  323.     if (scb == NULL)
  324.     {
  325.       printk(WARN_LEAD "Referenced SCB %d not valid during SELTO.n",
  326.              p->host_no, -1, -1, -1, scb_index);
  327.       printk(KERN_WARNING "        SCSISEQ = 0x%x SEQADDR = 0x%x SSTAT0 = 0x%x "
  328.              "SSTAT1 = 0x%xn", aic_inb(p, SCSISEQ),
  329.              aic_inb(p, SEQADDR0) | (aic_inb(p, SEQADDR1) << 8),
  330.              aic_inb(p, SSTAT0), aic_inb(p, SSTAT1));
  331.       if (aic7xxx_panic_on_abort)
  332.         aic7xxx_panic_abort(p, NULL);
  333.     }
  334.     else
  335.     {
  336.       cmd = scb->cmd;
  337.       cmd->result = (DID_TIME_OUT << 16);
  338.       /*
  339.        * Clear out this hardware SCB
  340.        */
  341.       aic_outb(p, 0, SCB_CONTROL);
  342.       /*
  343.        * Clear out a few values in the card that are in an undetermined
  344.        * state.
  345.        */
  346.       aic_outb(p, MSG_NOOP, MSG_OUT);
  347.       /*
  348.        * Shift the waiting for selection queue forward
  349.        */
  350.       nextscb = aic_inb(p, SCB_NEXT);
  351.       aic_outb(p, nextscb, WAITING_SCBH);
  352.       /*
  353.        * Put this SCB back on the free list.
  354.        */
  355.       aic7xxx_add_curscb_to_free_list(p);
  356. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  357.       if (aic7xxx_verbose > 0xffff)
  358.         printk(INFO_LEAD "Selection Timeout.n", p->host_no, CTL_OF_SCB(scb));
  359. #endif
  360.       if (scb->flags & SCB_QUEUED_ABORT)
  361.       {
  362.         /*
  363.          * We know that this particular SCB had to be the queued abort since
  364.          * the disconnected SCB would have gotten a reconnect instead.
  365.          * What we need to do then is to let the command timeout again so
  366.          * we get a reset since this abort just failed.
  367.          */
  368.         cmd->result = 0;
  369.         scb = NULL;
  370.       }
  371.     }
  372.     /*
  373.      * Keep the sequencer from trying to restart any selections
  374.      */
  375.     aic_outb(p, aic_inb(p, SCSISEQ) & ~ENSELO, SCSISEQ);
  376.     /*
  377.      * Make sure the data bits on the bus are released
  378.      * Don't do this on 7770 chipsets, it makes them give us
  379.      * a BRKADDRINT and kills the card.
  380.      */
  381.     if( (p->chip & ~AHC_CHIPID_MASK) == AHC_PCI )
  382.       aic_outb(p, 0, SCSIBUSL);
  383.     /*
  384.      * Delay for the selection timeout delay period then stop the selection
  385.      */
  386.     udelay(301);
  387.     aic_outb(p, CLRSELINGO, CLRSINT0);
  388.     /*
  389.      * Clear out all the interrupt status bits
  390.      */
  391.     aic_outb(p, aic_inb(p, SIMODE1) & ~(ENREQINIT|ENBUSFREE), SIMODE1);
  392.     p->flags &= ~AHC_HANDLING_REQINITS;
  393.     aic_outb(p, CLRSELTIMEO | CLRBUSFREE, CLRSINT1);
  394.     aic_outb(p, CLRSCSIINT, CLRINT);
  395.     /*
  396.      * Restarting the sequencer will stop the selection and make sure devices
  397.      * are allowed to reselect in.
  398.      */
  399.     restart_sequencer(p);
  400.     unpause_sequencer(p, TRUE);
  401.   }
  402.   else if (scb == NULL)
  403.   {
  404.     printk(WARN_LEAD "aic7xxx_isr - referenced scb not valid "
  405.            "during scsiint 0x%x scb(%d)n"
  406.            "      SIMODE0 0x%x, SIMODE1 0x%x, SSTAT0 0x%x, SEQADDR 0x%xn",
  407.            p->host_no, -1, -1, -1, status, scb_index, aic_inb(p, SIMODE0),
  408.            aic_inb(p, SIMODE1), aic_inb(p, SSTAT0),
  409.            (aic_inb(p, SEQADDR1) << 8) | aic_inb(p, SEQADDR0));
  410.     /*
  411.      * Turn off the interrupt and set status to zero, so that it
  412.      * falls through the rest of the SCSIINT code.
  413.      */
  414.     aic_outb(p, status, CLRSINT1);
  415.     aic_outb(p, CLRSCSIINT, CLRINT);
  416.     unpause_sequencer(p, /* unpause always */ TRUE);
  417.     scb = NULL;
  418.   }
  419.   else if (status & SCSIPERR)
  420.   {
  421.     /*
  422.      * Determine the bus phase and queue an appropriate message.
  423.      */
  424.     char  *phase;
  425.     Scsi_Cmnd *cmd;
  426.     unsigned char mesg_out = MSG_NOOP;
  427.     unsigned char lastphase = aic_inb(p, LASTPHASE);
  428.     unsigned char sstat2 = aic_inb(p, SSTAT2);
  429.     unsigned char tindex = TARGET_INDEX(scb->cmd);
  430.     cmd = scb->cmd;
  431.     switch (lastphase)
  432.     {
  433.       case P_DATAOUT:
  434.         phase = "Data-Out";
  435.         break;
  436.       case P_DATAIN:
  437.         phase = "Data-In";
  438.         mesg_out = MSG_INITIATOR_DET_ERR;
  439.         break;
  440.       case P_COMMAND:
  441.         phase = "Command";
  442.         break;
  443.       case P_MESGOUT:
  444.         phase = "Message-Out";
  445.         break;
  446.       case P_STATUS:
  447.         phase = "Status";
  448.         mesg_out = MSG_INITIATOR_DET_ERR;
  449.         break;
  450.       case P_MESGIN:
  451.         phase = "Message-In";
  452.         mesg_out = MSG_PARITY_ERROR;
  453.         break;
  454.       default:
  455.         phase = "unknown";
  456.         break;
  457.     }
  458.     /*
  459.      * A parity error has occurred during a data
  460.      * transfer phase. Flag it and continue.
  461.      */
  462.     if( (p->features & AHC_ULTRA3) && 
  463.         (aic_inb(p, SCSIRATE) & AHC_SYNCRATE_CRC) &&
  464.         (lastphase == P_DATAIN) )
  465.     {
  466.       printk(WARN_LEAD "CRC error during %s phase.n",
  467.              p->host_no, CTL_OF_SCB(scb), phase);
  468.       if(sstat2 & CRCVALERR)
  469.       {
  470.         printk(WARN_LEAD "  CRC error in intermediate CRC packet.n",
  471.                p->host_no, CTL_OF_SCB(scb));
  472.       }
  473.       if(sstat2 & CRCENDERR)
  474.       {
  475.         printk(WARN_LEAD "  CRC error in ending CRC packet.n",
  476.                p->host_no, CTL_OF_SCB(scb));
  477.       }
  478.       if(sstat2 & CRCREQERR)
  479.       {
  480.         printk(WARN_LEAD "  Target incorrectly requested a CRC packet.n",
  481.                p->host_no, CTL_OF_SCB(scb));
  482.       }
  483.       if(sstat2 & DUAL_EDGE_ERROR)
  484.       {
  485.         printk(WARN_LEAD "  Dual Edge transmission error.n",
  486.                p->host_no, CTL_OF_SCB(scb));
  487.       }
  488.     }
  489.     else if( (lastphase == P_MESGOUT) &&
  490.              (scb->flags & SCB_MSGOUT_PPR) )
  491.     {
  492.       /*
  493.        * As per the draft specs, any device capable of supporting any of
  494.        * the option values other than 0 are not allowed to reject the
  495.        * PPR message.  Instead, they must negotiate out what they do
  496.        * support instead of rejecting our offering or else they cause
  497.        * a parity error during msg_out phase to signal that they don't
  498.        * like our settings.
  499.        */
  500.       p->needppr &= ~(1 << tindex);
  501.       p->needppr_copy &= ~(1 << tindex);
  502.       aic7xxx_set_width(p, scb->cmd->target, scb->cmd->channel, scb->cmd->lun,
  503.                         MSG_EXT_WDTR_BUS_8_BIT,
  504.                         (AHC_TRANS_ACTIVE|AHC_TRANS_CUR|AHC_TRANS_QUITE));
  505.       aic7xxx_set_syncrate(p, NULL, scb->cmd->target, scb->cmd->channel, 0, 0,
  506.                            0, AHC_TRANS_ACTIVE|AHC_TRANS_CUR|AHC_TRANS_QUITE);
  507.       p->transinfo[tindex].goal_options = 0;
  508.       scb->flags &= ~SCB_MSGOUT_BITS;
  509.       if(aic7xxx_verbose & VERBOSE_NEGOTIATION2)
  510.       {
  511.         printk(INFO_LEAD "parity error during PPR message, reverting "
  512.                "to WDTR/SDTRn", p->host_no, CTL_OF_SCB(scb));
  513.       }
  514.       if ( p->transinfo[tindex].goal_width )
  515.       {
  516.         p->needwdtr |= (1 << tindex);
  517.         p->needwdtr_copy |= (1 << tindex);
  518.       }
  519.       if ( p->transinfo[tindex].goal_offset )
  520.       {
  521.         if( p->transinfo[tindex].goal_period <= 9 )
  522.         {
  523.           p->transinfo[tindex].goal_period = 10;
  524.         }
  525.         p->needsdtr |= (1 << tindex);
  526.         p->needsdtr_copy |= (1 << tindex);
  527.       }
  528.       scb = NULL;
  529.     }
  530.     /*
  531.      * We've set the hardware to assert ATN if we get a parity
  532.      * error on "in" phases, so all we need to do is stuff the
  533.      * message buffer with the appropriate message.  "In" phases
  534.      * have set mesg_out to something other than MSG_NOP.
  535.      */
  536.     if (mesg_out != MSG_NOOP)
  537.     {
  538.       aic_outb(p, mesg_out, MSG_OUT);
  539.       aic_outb(p, aic_inb(p, SCSISIGI) | ATNO, SCSISIGO);
  540.       scb = NULL;
  541.     }
  542.     aic_outb(p, CLRSCSIPERR, CLRSINT1);
  543.     aic_outb(p, CLRSCSIINT, CLRINT);
  544.     unpause_sequencer(p, /* unpause_always */ TRUE);
  545.   }
  546.   else if ( (status & REQINIT) &&
  547.             (p->flags & AHC_HANDLING_REQINITS) )
  548.   {
  549. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  550.     if (aic7xxx_verbose > 0xffff)
  551.       printk(INFO_LEAD "Handling REQINIT, SSTAT1=0x%x.n", p->host_no,
  552.              CTL_OF_SCB(scb), aic_inb(p, SSTAT1));
  553. #endif
  554.     aic7xxx_handle_reqinit(p, scb);
  555.     return;
  556.   }
  557.   else
  558.   {
  559.     /*
  560.      * We don't know what's going on. Turn off the
  561.      * interrupt source and try to continue.
  562.      */
  563.     if (aic7xxx_verbose & VERBOSE_SCSIINT)
  564.       printk(INFO_LEAD "Unknown SCSIINT status, SSTAT1(0x%x).n",
  565.         p->host_no, -1, -1, -1, status);
  566.     aic_outb(p, status, CLRSINT1);
  567.     aic_outb(p, CLRSCSIINT, CLRINT);
  568.     unpause_sequencer(p, /* unpause always */ TRUE);
  569.     scb = NULL;
  570.   }
  571.   if (scb != NULL)
  572.   {
  573.     aic7xxx_done(p, scb);
  574.   }
  575. }
  576. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  577. static void
  578. aic7xxx_check_scbs(struct aic7xxx_host *p, char *buffer)
  579. {
  580.   unsigned char saved_scbptr, free_scbh, dis_scbh, wait_scbh, temp;
  581.   int i, bogus, lost;
  582.   static unsigned char scb_status[AIC7XXX_MAXSCB];
  583. #define SCB_NO_LIST 0
  584. #define SCB_FREE_LIST 1
  585. #define SCB_WAITING_LIST 2
  586. #define SCB_DISCONNECTED_LIST 4
  587. #define SCB_CURRENTLY_ACTIVE 8
  588.   /*
  589.    * Note, these checks will fail on a regular basis once the machine moves
  590.    * beyond the bus scan phase.  The problem is race conditions concerning
  591.    * the scbs and where they are linked in.  When you have 30 or so commands
  592.    * outstanding on the bus, and run this twice with every interrupt, the
  593.    * chances get pretty good that you'll catch the sequencer with an SCB
  594.    * only partially linked in.  Therefore, once we pass the scan phase
  595.    * of the bus, we really should disable this function.
  596.    */
  597.   bogus = FALSE;
  598.   memset(&scb_status[0], 0, sizeof(scb_status));
  599.   pause_sequencer(p);
  600.   saved_scbptr = aic_inb(p, SCBPTR);
  601.   if (saved_scbptr >= p->scb_data->maxhscbs)
  602.   {
  603.     printk("Bogus SCBPTR %dn", saved_scbptr);
  604.     bogus = TRUE;
  605.   }
  606.   scb_status[saved_scbptr] = SCB_CURRENTLY_ACTIVE;
  607.   free_scbh = aic_inb(p, FREE_SCBH);
  608.   if ( (free_scbh != SCB_LIST_NULL) &&
  609.        (free_scbh >= p->scb_data->maxhscbs) )
  610.   {
  611.     printk("Bogus FREE_SCBH %dn", free_scbh);
  612.     bogus = TRUE;
  613.   }
  614.   else
  615.   {
  616.     temp = free_scbh;
  617.     while( (temp != SCB_LIST_NULL) && (temp < p->scb_data->maxhscbs) )
  618.     {
  619.       if(scb_status[temp] & 0x07)
  620.       {
  621.         printk("HSCB %d on multiple lists, status 0x%02x", temp,
  622.                scb_status[temp] | SCB_FREE_LIST);
  623.         bogus = TRUE;
  624.       }
  625.       scb_status[temp] |= SCB_FREE_LIST;
  626.       aic_outb(p, temp, SCBPTR);
  627.       temp = aic_inb(p, SCB_NEXT);
  628.     }
  629.   }
  630.   dis_scbh = aic_inb(p, DISCONNECTED_SCBH);
  631.   if ( (dis_scbh != SCB_LIST_NULL) &&
  632.        (dis_scbh >= p->scb_data->maxhscbs) )
  633.   {
  634.     printk("Bogus DISCONNECTED_SCBH %dn", dis_scbh);
  635.     bogus = TRUE;
  636.   }
  637.   else
  638.   {
  639.     temp = dis_scbh;
  640.     while( (temp != SCB_LIST_NULL) && (temp < p->scb_data->maxhscbs) )
  641.     {
  642.       if(scb_status[temp] & 0x07)
  643.       {
  644.         printk("HSCB %d on multiple lists, status 0x%02x", temp,
  645.                scb_status[temp] | SCB_DISCONNECTED_LIST);
  646.         bogus = TRUE;
  647.       }
  648.       scb_status[temp] |= SCB_DISCONNECTED_LIST;
  649.       aic_outb(p, temp, SCBPTR);
  650.       temp = aic_inb(p, SCB_NEXT);
  651.     }
  652.   }
  653.   
  654.   wait_scbh = aic_inb(p, WAITING_SCBH);
  655.   if ( (wait_scbh != SCB_LIST_NULL) &&
  656.        (wait_scbh >= p->scb_data->maxhscbs) )
  657.   {
  658.     printk("Bogus WAITING_SCBH %dn", wait_scbh);
  659.     bogus = TRUE;
  660.   }
  661.   else
  662.   {
  663.     temp = wait_scbh;
  664.     while( (temp != SCB_LIST_NULL) && (temp < p->scb_data->maxhscbs) )
  665.     {
  666.       if(scb_status[temp] & 0x07)
  667.       {
  668.         printk("HSCB %d on multiple lists, status 0x%02x", temp,
  669.                scb_status[temp] | SCB_WAITING_LIST);
  670.         bogus = TRUE;
  671.       }
  672.       scb_status[temp] |= SCB_WAITING_LIST;
  673.       aic_outb(p, temp, SCBPTR);
  674.       temp = aic_inb(p, SCB_NEXT);
  675.     }
  676.   }
  677.   lost=0;
  678.   for(i=0; i < p->scb_data->maxhscbs; i++)
  679.   {
  680.     aic_outb(p, i, SCBPTR);
  681.     temp = aic_inb(p, SCB_NEXT);
  682.     if ( ((temp != SCB_LIST_NULL) &&
  683.           (temp >= p->scb_data->maxhscbs)) )
  684.     {
  685.       printk("HSCB %d bad, SCB_NEXT invalid(%d).n", i, temp);
  686.       bogus = TRUE;
  687.     }
  688.     if ( temp == i )
  689.     {
  690.       printk("HSCB %d bad, SCB_NEXT points to self.n", i);
  691.       bogus = TRUE;
  692.     }
  693.     if (scb_status[i] == 0)
  694.       lost++;
  695.     if (lost > 1)
  696.     {
  697.       printk("Too many lost scbs.n");
  698.       bogus=TRUE;
  699.     }
  700.   }
  701.   aic_outb(p, saved_scbptr, SCBPTR);
  702.   unpause_sequencer(p, FALSE);
  703.   if (bogus)
  704.   {
  705.     printk("Bogus parameters found in card SCB array structures.n");
  706.     printk("%sn", buffer);
  707.     aic7xxx_panic_abort(p, NULL);
  708.   }
  709.   return;
  710. }
  711. #endif
  712. /*+F*************************************************************************
  713.  * Function:
  714.  *   aic7xxx_handle_command_completion_intr
  715.  *
  716.  * Description:
  717.  *   SCSI command completion interrupt handler.
  718.  *-F*************************************************************************/
  719. static void
  720. aic7xxx_handle_command_completion_intr(struct aic7xxx_host *p)
  721. {
  722.   struct aic7xxx_scb *scb = NULL;
  723.   Scsi_Cmnd *cmd;
  724.   unsigned char scb_index, tindex;
  725. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  726.   if( (p->isr_count < 16) && (aic7xxx_verbose > 0xffff) )
  727.     printk(INFO_LEAD "Command Complete Int.n", p->host_no, -1, -1, -1);
  728. #endif
  729.     
  730.   /*
  731.    * Read the INTSTAT location after clearing the CMDINT bit.  This forces
  732.    * any posted PCI writes to flush to memory.  Gerard Roudier suggested
  733.    * this fix to the possible race of clearing the CMDINT bit but not
  734.    * having all command bytes flushed onto the qoutfifo.
  735.    */
  736.   aic_outb(p, CLRCMDINT, CLRINT);
  737.   aic_inb(p, INTSTAT);
  738.   /*
  739.    * The sequencer will continue running when it
  740.    * issues this interrupt. There may be >1 commands
  741.    * finished, so loop until we've processed them all.
  742.    */
  743.   while (p->qoutfifo[p->qoutfifonext] != SCB_LIST_NULL)
  744.   {
  745.     scb_index = p->qoutfifo[p->qoutfifonext];
  746.     p->qoutfifo[p->qoutfifonext++] = SCB_LIST_NULL;
  747.     if ( scb_index >= p->scb_data->numscbs )
  748.     {
  749.       printk(WARN_LEAD "CMDCMPLT with invalid SCB index %dn", p->host_no,
  750.         -1, -1, -1, scb_index);
  751.       continue;
  752.     }
  753.     scb = p->scb_data->scb_array[scb_index];
  754.     if (!(scb->flags & SCB_ACTIVE) || (scb->cmd == NULL))
  755.     {
  756.       printk(WARN_LEAD "CMDCMPLT without command for SCB %d, SCB flags "
  757.         "0x%x, cmd 0x%lxn", p->host_no, -1, -1, -1, scb_index, scb->flags,
  758.         (unsigned long) scb->cmd);
  759.       continue;
  760.     }
  761.     tindex = TARGET_INDEX(scb->cmd);
  762.     if (scb->flags & SCB_QUEUED_ABORT)
  763.     {
  764.       pause_sequencer(p);
  765.       if ( ((aic_inb(p, LASTPHASE) & PHASE_MASK) != P_BUSFREE) &&
  766.            (aic_inb(p, SCB_TAG) == scb->hscb->tag) )
  767.       {
  768.         unpause_sequencer(p, FALSE);
  769.         continue;
  770.       }
  771.       aic7xxx_reset_device(p, scb->cmd->target, scb->cmd->channel,
  772.         scb->cmd->lun, scb->hscb->tag);
  773.       scb->flags &= ~(SCB_QUEUED_FOR_DONE | SCB_RESET | SCB_ABORT |
  774.         SCB_QUEUED_ABORT);
  775.       unpause_sequencer(p, FALSE);
  776.     }
  777.     else if (scb->flags & SCB_ABORT)
  778.     {
  779.       /*
  780.        * We started to abort this, but it completed on us, let it
  781.        * through as successful
  782.        */
  783.       scb->flags &= ~(SCB_ABORT|SCB_RESET);
  784.     }
  785.     else if (scb->flags & SCB_SENSE)
  786.     {
  787.       char *buffer = &scb->cmd->sense_buffer[0];
  788.       if (buffer[12] == 0x47 || buffer[12] == 0x54)
  789.       {
  790.         /*
  791.          * Signal that we need to re-negotiate things.
  792.          */
  793.         p->needppr |= (p->needppr_copy & (1<<tindex));
  794.         p->needsdtr |= (p->needsdtr_copy & (1<<tindex));
  795.         p->needwdtr |= (p->needwdtr_copy & (1<<tindex));
  796.       }
  797.     }
  798.     switch (status_byte(scb->hscb->target_status))
  799.     {
  800.       case QUEUE_FULL:
  801.       case BUSY:
  802.         scb->hscb->target_status = 0;
  803.         scb->cmd->result = 0;
  804.         scb->hscb->residual_SG_segment_count = 0;
  805.         scb->hscb->residual_data_count[0] = 0;
  806.         scb->hscb->residual_data_count[1] = 0;
  807.         scb->hscb->residual_data_count[2] = 0;
  808.         aic7xxx_error(scb->cmd) = DID_OK;
  809.         aic7xxx_status(scb->cmd) = 0;
  810.         /*
  811.          * The QUEUE_FULL/BUSY handler in aic7xxx_seqint takes care of putting
  812.          * this command on a timer and allowing us to retry it.  Here, we
  813.          * just 0 out a few values so that they don't carry through to when
  814.          * the command finally does complete.
  815.          */
  816.         break;
  817.       default:
  818.         cmd = scb->cmd;
  819.         if (scb->hscb->residual_SG_segment_count != 0)
  820.         {
  821.           aic7xxx_calculate_residual(p, scb);
  822.         }
  823.         cmd->result |= (aic7xxx_error(cmd) << 16);
  824.         aic7xxx_done(p, scb);
  825.         break;
  826.     }      
  827.   }
  828. }
  829. /*+F*************************************************************************
  830.  * Function:
  831.  *   aic7xxx_isr
  832.  *
  833.  * Description:
  834.  *   SCSI controller interrupt handler.
  835.  *-F*************************************************************************/
  836. static void
  837. aic7xxx_isr(int irq, void *dev_id, struct pt_regs *regs)
  838. {
  839.   struct aic7xxx_host *p;
  840.   unsigned char intstat;
  841.   p = (struct aic7xxx_host *)dev_id;
  842.   /*
  843.    * Just a few sanity checks.  Make sure that we have an int pending.
  844.    * Also, if PCI, then we are going to check for a PCI bus error status
  845.    * should we get too many spurious interrupts.
  846.    */
  847.   if (!((intstat = aic_inb(p, INTSTAT)) & INT_PEND))
  848.   {
  849. #ifdef CONFIG_PCI
  850.     if ( (p->chip & AHC_PCI) && (p->spurious_int > 500) &&
  851.         !(p->flags & AHC_HANDLING_REQINITS) )
  852.     {
  853.       if ( aic_inb(p, ERROR) & PCIERRSTAT )
  854.       {
  855.         aic7xxx_pci_intr(p);
  856.       }
  857.       p->spurious_int = 0;
  858.     }
  859.     else if ( !(p->flags & AHC_HANDLING_REQINITS) )
  860.     {
  861.       p->spurious_int++;
  862.     }
  863. #endif
  864.     return;
  865.   }
  866.   p->spurious_int = 0;
  867.   /*
  868.    * Keep track of interrupts for /proc/scsi
  869.    */
  870.   p->isr_count++;
  871. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  872.   if ( (p->isr_count < 16) && (aic7xxx_verbose > 0xffff) &&
  873.        (aic7xxx_panic_on_abort) && (p->flags & AHC_PAGESCBS) )
  874.     aic7xxx_check_scbs(p, "Bogus settings at start of interrupt.");
  875. #endif
  876.   /*
  877.    * Handle all the interrupt sources - especially for SCSI
  878.    * interrupts, we won't get a second chance at them.
  879.    */
  880.   if (intstat & CMDCMPLT)
  881.   {
  882.     aic7xxx_handle_command_completion_intr(p);
  883.   }
  884.   if (intstat & BRKADRINT)
  885.   {
  886.     int i;
  887.     unsigned char errno = aic_inb(p, ERROR);
  888.     printk(KERN_ERR "(scsi%d) BRKADRINT error(0x%x):n", p->host_no, errno);
  889.     for (i = 0; i < NUMBER(hard_error); i++)
  890.     {
  891.       if (errno & hard_error[i].errno)
  892.       {
  893.         printk(KERN_ERR "  %sn", hard_error[i].errmesg);
  894.       }
  895.     }
  896.     printk(KERN_ERR "(scsi%d)   SEQADDR=0x%xn", p->host_no,
  897.       (((aic_inb(p, SEQADDR1) << 8) & 0x100) | aic_inb(p, SEQADDR0)));
  898.     if (aic7xxx_panic_on_abort)
  899.       aic7xxx_panic_abort(p, NULL);
  900. #ifdef CONFIG_PCI
  901.     if (errno & PCIERRSTAT)
  902.       aic7xxx_pci_intr(p);
  903. #endif
  904.     if (errno & (SQPARERR | ILLOPCODE | ILLSADDR))
  905.     {
  906.       sti();
  907.       panic("aic7xxx: unrecoverable BRKADRINT.n");
  908.     }
  909.     if (errno & ILLHADDR)
  910.     {
  911.       printk(KERN_ERR "(scsi%d) BUG! Driver accessed chip without first "
  912.              "pausing controller!n", p->host_no);
  913.     }
  914. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  915.     if (errno & DPARERR)
  916.     {
  917.       if (aic_inb(p, DMAPARAMS) & DIRECTION)
  918.         printk("(scsi%d) while DMAing SCB from host to card.n", p->host_no);
  919.       else
  920.         printk("(scsi%d) while DMAing SCB from card to host.n", p->host_no);
  921.     }
  922. #endif
  923.     aic_outb(p, CLRPARERR | CLRBRKADRINT, CLRINT);
  924.     unpause_sequencer(p, FALSE);
  925.   }
  926.   if (intstat & SEQINT)
  927.   {
  928.     /*
  929.      * Read the CCSCBCTL register to work around a bug in the Ultra2 cards
  930.      */
  931.     if(p->features & AHC_ULTRA2)
  932.     {
  933.       aic_inb(p, CCSCBCTL);
  934.     }
  935.     aic7xxx_handle_seqint(p, intstat);
  936.   }
  937.   if (intstat & SCSIINT)
  938.   {
  939.     aic7xxx_handle_scsiint(p, intstat);
  940.   }
  941. #ifdef AIC7XXX_VERBOSE_DEBUGGING
  942.   if ( (p->isr_count < 16) && (aic7xxx_verbose > 0xffff) &&
  943.        (aic7xxx_panic_on_abort) && (p->flags & AHC_PAGESCBS) )
  944.     aic7xxx_check_scbs(p, "Bogus settings at end of interrupt.");
  945. #endif
  946. }
  947. /*+F*************************************************************************
  948.  * Function:
  949.  *   do_aic7xxx_isr
  950.  *
  951.  * Description:
  952.  *   This is a gross hack to solve a problem in linux kernels 2.1.85 and
  953.  *   above.  Please, children, do not try this at home, and if you ever see
  954.  *   anything like it, please inform the Gross Hack Police immediately
  955.  *-F*************************************************************************/
  956. static void
  957. do_aic7xxx_isr(int irq, void *dev_id, struct pt_regs *regs)
  958. {
  959.   unsigned long cpu_flags;
  960.   struct aic7xxx_host *p;
  961.   
  962.   p = (struct aic7xxx_host *)dev_id;
  963.   if(!p)
  964.     return;
  965.   spin_lock_irqsave(&io_request_lock, cpu_flags);
  966.   p->flags |= AHC_IN_ISR;
  967.   do
  968.   {
  969.     aic7xxx_isr(irq, dev_id, regs);
  970.   } while ( (aic_inb(p, INTSTAT) & INT_PEND) );
  971.   aic7xxx_done_cmds_complete(p);
  972.   aic7xxx_run_waiting_queues(p);
  973.   p->flags &= ~AHC_IN_ISR;
  974.   spin_unlock_irqrestore(&io_request_lock, cpu_flags);
  975. }
  976. /*+F*************************************************************************
  977.  * Function:
  978.  *   aic7xxx_device_queue_depth
  979.  *
  980.  * Description:
  981.  *   Determines the queue depth for a given device.  There are two ways
  982.  *   a queue depth can be obtained for a tagged queueing device.  One
  983.  *   way is the default queue depth which is determined by whether
  984.  *   AIC7XXX_CMDS_PER_DEVICE is defined.  If it is defined, then it is used
  985.  *   as the default queue depth.  Otherwise, we use either 4 or 8 as the
  986.  *   default queue depth (dependent on the number of hardware SCBs).
  987.  *   The other way we determine queue depth is through the use of the
  988.  *   aic7xxx_tag_info array which is enabled by defining
  989.  *   AIC7XXX_TAGGED_QUEUEING_BY_DEVICE.  This array can be initialized
  990.  *   with queue depths for individual devices.  It also allows tagged
  991.  *   queueing to be [en|dis]abled for a specific adapter.
  992.  *-F*************************************************************************/
  993. static int
  994. aic7xxx_device_queue_depth(struct aic7xxx_host *p, Scsi_Device *device)
  995. {
  996.   int default_depth = 3;
  997.   unsigned char tindex;
  998.   unsigned short target_mask;
  999.   tindex = device->id | (device->channel << 3);
  1000.   target_mask = (1 << tindex);
  1001.   if (p->dev_max_queue_depth[tindex] > 1)
  1002.   {
  1003.     /*
  1004.      * We've already scanned this device, leave it alone
  1005.      */
  1006.     return(p->dev_max_queue_depth[tindex]);
  1007.   }
  1008.   device->queue_depth = default_depth;
  1009.   p->dev_temp_queue_depth[tindex] = 1;
  1010.   p->dev_max_queue_depth[tindex] = 1;
  1011.   p->tagenable &= ~target_mask;
  1012.   if (device->tagged_supported)
  1013.   {
  1014.     int tag_enabled = TRUE;
  1015.     default_depth = AIC7XXX_CMDS_PER_DEVICE;
  1016.  
  1017.     if (!(p->discenable & target_mask))
  1018.     {
  1019.       if (aic7xxx_verbose & VERBOSE_NEGOTIATION2)
  1020.         printk(INFO_LEAD "Disconnection disabled, unable to "
  1021.              "enable tagged queueing.n",
  1022.              p->host_no, device->channel, device->id, device->lun);
  1023.     }
  1024.     else
  1025.     {
  1026.       if (p->instance >= NUMBER(aic7xxx_tag_info))
  1027.       {
  1028.         static int print_warning = TRUE;
  1029.         if(print_warning)
  1030.         {
  1031.           printk(KERN_INFO "aic7xxx: WARNING, insufficient tag_info instances for"
  1032.                            " installed controllers.n");
  1033.           printk(KERN_INFO "aic7xxx: Please update the aic7xxx_tag_info array in"
  1034.                            " the aic7xxx.c source file.n");
  1035.           print_warning = FALSE;
  1036.         }
  1037.         device->queue_depth = default_depth;
  1038.       }
  1039.       else
  1040.       {
  1041.         if (aic7xxx_tag_info[p->instance].tag_commands[tindex] == 255)
  1042.         {
  1043.           tag_enabled = FALSE;
  1044.           device->queue_depth = 3;  /* Tagged queueing is disabled. */
  1045.         }
  1046.         else if (aic7xxx_tag_info[p->instance].tag_commands[tindex] == 0)
  1047.         {
  1048.           device->queue_depth = default_depth;
  1049.         }
  1050.         else
  1051.         {
  1052.           device->queue_depth =
  1053.             aic7xxx_tag_info[p->instance].tag_commands[tindex];
  1054.         }
  1055.       }
  1056.       if ((device->tagged_queue == 0) && tag_enabled)
  1057.       {
  1058.         if (aic7xxx_verbose & VERBOSE_NEGOTIATION2)
  1059.         {
  1060.               printk(INFO_LEAD "Enabled tagged queuing, queue depth %d.n",
  1061.                 p->host_no, device->channel, device->id,
  1062.                 device->lun, device->queue_depth);
  1063.         }
  1064.         p->dev_max_queue_depth[tindex] = device->queue_depth;
  1065.         p->dev_temp_queue_depth[tindex] = device->queue_depth;
  1066.         p->tagenable |= target_mask;
  1067.         p->orderedtag |= target_mask;
  1068.         device->tagged_queue = 1;
  1069.         device->current_tag = SCB_LIST_NULL;
  1070.       }
  1071.     }
  1072.   }
  1073.   return(p->dev_max_queue_depth[tindex]);
  1074. }
  1075. /*+F*************************************************************************
  1076.  * Function:
  1077.  *   aic7xxx_select_queue_depth
  1078.  *
  1079.  * Description:
  1080.  *   Sets the queue depth for each SCSI device hanging off the input
  1081.  *   host adapter.  We use a queue depth of 2 for devices that do not
  1082.  *   support tagged queueing.  If AIC7XXX_CMDS_PER_LUN is defined, we
  1083.  *   use that for tagged queueing devices; otherwise we use our own
  1084.  *   algorithm for determining the queue depth based on the maximum
  1085.  *   SCBs for the controller.
  1086.  *-F*************************************************************************/
  1087. static void
  1088. aic7xxx_select_queue_depth(struct Scsi_Host *host,
  1089.     Scsi_Device *scsi_devs)
  1090. {
  1091.   Scsi_Device *device;
  1092.   struct aic7xxx_host *p = (struct aic7xxx_host *) host->hostdata;
  1093.   int scbnum;
  1094.   scbnum = 0;
  1095.   for (device = scsi_devs; device != NULL; device = device->next)
  1096.   {
  1097.     if (device->host == host)
  1098.     {
  1099.       scbnum += aic7xxx_device_queue_depth(p, device);
  1100.     }
  1101.   }
  1102.   while (scbnum > p->scb_data->numscbs)
  1103.   {
  1104.     /*
  1105.      * Pre-allocate the needed SCBs to get around the possibility of having
  1106.      * to allocate some when memory is more or less exhausted and we need
  1107.      * the SCB in order to perform a swap operation (possible deadlock)
  1108.      */
  1109.     if ( aic7xxx_allocate_scb(p) == 0 )
  1110.       return;
  1111.   }
  1112. }
  1113. /*+F*************************************************************************
  1114.  * Function:
  1115.  *   aic7xxx_probe
  1116.  *
  1117.  * Description:
  1118.  *   Probing for EISA boards: it looks like the first two bytes
  1119.  *   are a manufacturer code - three characters, five bits each:
  1120.  *
  1121.  *               BYTE 0   BYTE 1   BYTE 2   BYTE 3
  1122.  *              ?1111122 22233333 PPPPPPPP RRRRRRRR
  1123.  *
  1124.  *   The characters are baselined off ASCII '@', so add that value
  1125.  *   to each to get the real ASCII code for it. The next two bytes
  1126.  *   appear to be a product and revision number, probably vendor-
  1127.  *   specific. This is what is being searched for at each port,
  1128.  *   and what should probably correspond to the ID= field in the
  1129.  *   ECU's .cfg file for the card - if your card is not detected,
  1130.  *   make sure your signature is listed in the array.
  1131.  *
  1132.  *   The fourth byte's lowest bit seems to be an enabled/disabled
  1133.  *   flag (rest of the bits are reserved?).
  1134.  *
  1135.  * NOTE:  This function is only needed on Intel and Alpha platforms,
  1136.  *   the other platforms we support don't have EISA/VLB busses.  So,
  1137.  *   we #ifdef this entire function to avoid compiler warnings about
  1138.  *   an unused function.
  1139.  *-F*************************************************************************/
  1140. #if defined(__i386__) || defined(__alpha__)
  1141. static int
  1142. aic7xxx_probe(int slot, int base, ahc_flag_type *flags)
  1143. {
  1144.   int i;
  1145.   unsigned char buf[4];
  1146.   static struct {
  1147.     int n;
  1148.     unsigned char signature[sizeof(buf)];
  1149.     ahc_chip type;
  1150.     int bios_disabled;
  1151.   } AIC7xxx[] = {
  1152.     { 4, { 0x04, 0x90, 0x77, 0x70 },
  1153.       AHC_AIC7770|AHC_EISA, FALSE },  /* mb 7770  */
  1154.     { 4, { 0x04, 0x90, 0x77, 0x71 },
  1155.       AHC_AIC7770|AHC_EISA, FALSE }, /* host adapter 274x */
  1156.     { 4, { 0x04, 0x90, 0x77, 0x56 },
  1157.       AHC_AIC7770|AHC_VL, FALSE }, /* 284x BIOS enabled */
  1158.     { 4, { 0x04, 0x90, 0x77, 0x57 },
  1159.       AHC_AIC7770|AHC_VL, TRUE }   /* 284x BIOS disabled */
  1160.   };
  1161.   /*
  1162.    * The VL-bus cards need to be primed by
  1163.    * writing before a signature check.
  1164.    */
  1165.   for (i = 0; i < sizeof(buf); i++)
  1166.   {
  1167.     outb(0x80 + i, base);
  1168.     buf[i] = inb(base + i);
  1169.   }
  1170.   for (i = 0; i < NUMBER(AIC7xxx); i++)
  1171.   {
  1172.     /*
  1173.      * Signature match on enabled card?
  1174.      */
  1175.     if (!memcmp(buf, AIC7xxx[i].signature, AIC7xxx[i].n))
  1176.     {
  1177.       if (inb(base + 4) & 1)
  1178.       {
  1179.         if (AIC7xxx[i].bios_disabled)
  1180.         {
  1181.           *flags |= AHC_USEDEFAULTS;
  1182.         }
  1183.         else
  1184.         {
  1185.           *flags |= AHC_BIOS_ENABLED;
  1186.         }
  1187.         return (i);
  1188.       }
  1189.       printk("aic7xxx: <Adaptec 7770 SCSI Host Adapter> "
  1190.              "disabled at slot %d, ignored.n", slot);
  1191.     }
  1192.   }
  1193.   return (-1);
  1194. }
  1195. #endif /* (__i386__) || (__alpha__) */
  1196. /*+F*************************************************************************
  1197.  * Function:
  1198.  *   read_2840_seeprom
  1199.  *
  1200.  * Description:
  1201.  *   Reads the 2840 serial EEPROM and returns 1 if successful and 0 if
  1202.  *   not successful.
  1203.  *
  1204.  *   See read_seeprom (for the 2940) for the instruction set of the 93C46
  1205.  *   chip.
  1206.  *
  1207.  *   The 2840 interface to the 93C46 serial EEPROM is through the
  1208.  *   STATUS_2840 and SEECTL_2840 registers.  The CS_2840, CK_2840, and
  1209.  *   DO_2840 bits of the SEECTL_2840 register are connected to the chip
  1210.  *   select, clock, and data out lines respectively of the serial EEPROM.
  1211.  *   The DI_2840 bit of the STATUS_2840 is connected to the data in line
  1212.  *   of the serial EEPROM.  The EEPROM_TF bit of STATUS_2840 register is
  1213.  *   useful in that it gives us an 800 nsec timer.  After a read from the
  1214.  *   SEECTL_2840 register the timing flag is cleared and goes high 800 nsec
  1215.  *   later.
  1216.  *-F*************************************************************************/
  1217. static int
  1218. read_284x_seeprom(struct aic7xxx_host *p, struct seeprom_config *sc)
  1219. {
  1220.   int i = 0, k = 0;
  1221.   unsigned char temp;
  1222.   unsigned short checksum = 0;
  1223.   unsigned short *seeprom = (unsigned short *) sc;
  1224.   struct seeprom_cmd {
  1225.     unsigned char len;
  1226.     unsigned char bits[3];
  1227.   };
  1228.   struct seeprom_cmd seeprom_read = {3, {1, 1, 0}};
  1229. #define CLOCK_PULSE(p) 
  1230.   while ((aic_inb(p, STATUS_2840) & EEPROM_TF) == 0)        
  1231.   {                                                
  1232.     ;  /* Do nothing */                                
  1233.   }                                                
  1234.   (void) aic_inb(p, SEECTL_2840);
  1235.   /*
  1236.    * Read the first 32 registers of the seeprom.  For the 2840,
  1237.    * the 93C46 SEEPROM is a 1024-bit device with 64 16-bit registers
  1238.    * but only the first 32 are used by Adaptec BIOS.  The loop
  1239.    * will range from 0 to 31.
  1240.    */
  1241.   for (k = 0; k < (sizeof(*sc) / 2); k++)
  1242.   {
  1243.     /*
  1244.      * Send chip select for one clock cycle.
  1245.      */
  1246.     aic_outb(p, CK_2840 | CS_2840, SEECTL_2840);
  1247.     CLOCK_PULSE(p);
  1248.     /*
  1249.      * Now we're ready to send the read command followed by the
  1250.      * address of the 16-bit register we want to read.
  1251.      */
  1252.     for (i = 0; i < seeprom_read.len; i++)
  1253.     {
  1254.       temp = CS_2840 | seeprom_read.bits[i];
  1255.       aic_outb(p, temp, SEECTL_2840);
  1256.       CLOCK_PULSE(p);
  1257.       temp = temp ^ CK_2840;
  1258.       aic_outb(p, temp, SEECTL_2840);
  1259.       CLOCK_PULSE(p);
  1260.     }
  1261.     /*
  1262.      * Send the 6 bit address (MSB first, LSB last).
  1263.      */
  1264.     for (i = 5; i >= 0; i--)
  1265.     {
  1266.       temp = k;
  1267.       temp = (temp >> i) & 1;  /* Mask out all but lower bit. */
  1268.       temp = CS_2840 | temp;
  1269.       aic_outb(p, temp, SEECTL_2840);
  1270.       CLOCK_PULSE(p);
  1271.       temp = temp ^ CK_2840;
  1272.       aic_outb(p, temp, SEECTL_2840);
  1273.       CLOCK_PULSE(p);
  1274.     }
  1275.     /*
  1276.      * Now read the 16 bit register.  An initial 0 precedes the
  1277.      * register contents which begins with bit 15 (MSB) and ends
  1278.      * with bit 0 (LSB).  The initial 0 will be shifted off the
  1279.      * top of our word as we let the loop run from 0 to 16.
  1280.      */
  1281.     for (i = 0; i <= 16; i++)
  1282.     {
  1283.       temp = CS_2840;
  1284.       aic_outb(p, temp, SEECTL_2840);
  1285.       CLOCK_PULSE(p);
  1286.       temp = temp ^ CK_2840;
  1287.       seeprom[k] = (seeprom[k] << 1) | (aic_inb(p, STATUS_2840) & DI_2840);
  1288.       aic_outb(p, temp, SEECTL_2840);
  1289.       CLOCK_PULSE(p);
  1290.     }
  1291.     /*
  1292.      * The serial EEPROM has a checksum in the last word.  Keep a
  1293.      * running checksum for all words read except for the last
  1294.      * word.  We'll verify the checksum after all words have been
  1295.      * read.
  1296.      */
  1297.     if (k < (sizeof(*sc) / 2) - 1)
  1298.     {
  1299.       checksum = checksum + seeprom[k];
  1300.     }
  1301.     /*
  1302.      * Reset the chip select for the next command cycle.
  1303.      */
  1304.     aic_outb(p, 0, SEECTL_2840);
  1305.     CLOCK_PULSE(p);
  1306.     aic_outb(p, CK_2840, SEECTL_2840);
  1307.     CLOCK_PULSE(p);
  1308.     aic_outb(p, 0, SEECTL_2840);
  1309.     CLOCK_PULSE(p);
  1310.   }
  1311. #if 0
  1312.   printk("Computed checksum 0x%x, checksum read 0x%xn", checksum, sc->checksum);
  1313.   printk("Serial EEPROM:");
  1314.   for (k = 0; k < (sizeof(*sc) / 2); k++)
  1315.   {
  1316.     if (((k % 8) == 0) && (k != 0))
  1317.     {
  1318.       printk("n              ");
  1319.     }
  1320.     printk(" 0x%x", seeprom[k]);
  1321.   }
  1322.   printk("n");
  1323. #endif
  1324.   if (checksum != sc->checksum)
  1325.   {
  1326.     printk("aic7xxx: SEEPROM checksum error, ignoring SEEPROM settings.n");
  1327.     return (0);
  1328.   }
  1329.   return (1);
  1330. #undef CLOCK_PULSE
  1331. }
  1332. #define CLOCK_PULSE(p)                                               
  1333.   do {                                                               
  1334.     int limit = 0;                                                   
  1335.     do {                                                             
  1336.       mb();                                                          
  1337.       pause_sequencer(p);  /* This is just to generate some PCI */   
  1338.                            /* traffic so the PCI read is flushed */  
  1339.                            /* it shouldn't be needed, but some */    
  1340.                            /* chipsets do indeed appear to need */   
  1341.                            /* something to force PCI reads to get */ 
  1342.                            /* flushed */                             
  1343.       udelay(1);           /* Do nothing */                          
  1344.     } while (((aic_inb(p, SEECTL) & SEERDY) == 0) && (++limit < 1000)); 
  1345.   } while(0)
  1346. /*+F*************************************************************************
  1347.  * Function:
  1348.  *   acquire_seeprom
  1349.  *
  1350.  * Description:
  1351.  *   Acquires access to the memory port on PCI controllers.
  1352.  *-F*************************************************************************/
  1353. static int
  1354. acquire_seeprom(struct aic7xxx_host *p)
  1355. {
  1356.   /*
  1357.    * Request access of the memory port.  When access is
  1358.    * granted, SEERDY will go high.  We use a 1 second
  1359.    * timeout which should be near 1 second more than
  1360.    * is needed.  Reason: after the 7870 chip reset, there
  1361.    * should be no contention.
  1362.    */
  1363.   aic_outb(p, SEEMS, SEECTL);
  1364.   CLOCK_PULSE(p);
  1365.   if ((aic_inb(p, SEECTL) & SEERDY) == 0)
  1366.   {
  1367.     aic_outb(p, 0, SEECTL);
  1368.     return (0);
  1369.   }
  1370.   return (1);
  1371. }
  1372. /*+F*************************************************************************
  1373.  * Function:
  1374.  *   release_seeprom
  1375.  *
  1376.  * Description:
  1377.  *   Releases access to the memory port on PCI controllers.
  1378.  *-F*************************************************************************/
  1379. static void
  1380. release_seeprom(struct aic7xxx_host *p)
  1381. {
  1382.   /*
  1383.    * Make sure the SEEPROM is ready before we release it.
  1384.    */
  1385.   CLOCK_PULSE(p);
  1386.   aic_outb(p, 0, SEECTL);
  1387. }
  1388. /*+F*************************************************************************
  1389.  * Function:
  1390.  *   read_seeprom
  1391.  *
  1392.  * Description:
  1393.  *   Reads the serial EEPROM and returns 1 if successful and 0 if
  1394.  *   not successful.
  1395.  *
  1396.  *   The instruction set of the 93C46/56/66 chips is as follows:
  1397.  *
  1398.  *               Start  OP
  1399.  *     Function   Bit  Code  Address    Data     Description
  1400.  *     -------------------------------------------------------------------
  1401.  *     READ        1    10   A5 - A0             Reads data stored in memory,
  1402.  *                                               starting at specified address
  1403.  *     EWEN        1    00   11XXXX              Write enable must precede
  1404.  *                                               all programming modes
  1405.  *     ERASE       1    11   A5 - A0             Erase register A5A4A3A2A1A0
  1406.  *     WRITE       1    01   A5 - A0   D15 - D0  Writes register
  1407.  *     ERAL        1    00   10XXXX              Erase all registers
  1408.  *     WRAL        1    00   01XXXX    D15 - D0  Writes to all registers
  1409.  *     EWDS        1    00   00XXXX              Disables all programming
  1410.  *                                               instructions
  1411.  *     *Note: A value of X for address is a don't care condition.
  1412.  *     *Note: The 93C56 and 93C66 have 8 address bits.
  1413.  * 
  1414.  *
  1415.  *   The 93C46 has a four wire interface: clock, chip select, data in, and
  1416.  *   data out.  In order to perform one of the above functions, you need
  1417.  *   to enable the chip select for a clock period (typically a minimum of
  1418.  *   1 usec, with the clock high and low a minimum of 750 and 250 nsec
  1419.  *   respectively.  While the chip select remains high, you can clock in
  1420.  *   the instructions (above) starting with the start bit, followed by the
  1421.  *   OP code, Address, and Data (if needed).  For the READ instruction, the
  1422.  *   requested 16-bit register contents is read from the data out line but
  1423.  *   is preceded by an initial zero (leading 0, followed by 16-bits, MSB
  1424.  *   first).  The clock cycling from low to high initiates the next data
  1425.  *   bit to be sent from the chip.
  1426.  *
  1427.  *   The 78xx interface to the 93C46 serial EEPROM is through the SEECTL
  1428.  *   register.  After successful arbitration for the memory port, the
  1429.  *   SEECS bit of the SEECTL register is connected to the chip select.
  1430.  *   The SEECK, SEEDO, and SEEDI are connected to the clock, data out,
  1431.  *   and data in lines respectively.  The SEERDY bit of SEECTL is useful
  1432.  *   in that it gives us an 800 nsec timer.  After a write to the SEECTL
  1433.  *   register, the SEERDY goes high 800 nsec later.  The one exception
  1434.  *   to this is when we first request access to the memory port.  The
  1435.  *   SEERDY goes high to signify that access has been granted and, for
  1436.  *   this case, has no implied timing.
  1437.  *-F*************************************************************************/
  1438. static int
  1439. read_seeprom(struct aic7xxx_host *p, int offset, 
  1440.     unsigned short *scarray, unsigned int len, seeprom_chip_type chip)
  1441. {
  1442.   int i = 0, k;
  1443.   unsigned char temp;
  1444.   unsigned short checksum = 0;
  1445.   struct seeprom_cmd {
  1446.     unsigned char len;
  1447.     unsigned char bits[3];
  1448.   };
  1449.   struct seeprom_cmd seeprom_read = {3, {1, 1, 0}};
  1450.   /*
  1451.    * Request access of the memory port.
  1452.    */
  1453.   if (acquire_seeprom(p) == 0)
  1454.   {
  1455.     return (0);
  1456.   }
  1457.   /*
  1458.    * Read 'len' registers of the seeprom.  For the 7870, the 93C46
  1459.    * SEEPROM is a 1024-bit device with 64 16-bit registers but only
  1460.    * the first 32 are used by Adaptec BIOS.  Some adapters use the
  1461.    * 93C56 SEEPROM which is a 2048-bit device.  The loop will range
  1462.    * from 0 to 'len' - 1.
  1463.    */
  1464.   for (k = 0; k < len; k++)
  1465.   {
  1466.     /*
  1467.      * Send chip select for one clock cycle.
  1468.      */
  1469.     aic_outb(p, SEEMS | SEECK | SEECS, SEECTL);
  1470.     CLOCK_PULSE(p);
  1471.     /*
  1472.      * Now we're ready to send the read command followed by the
  1473.      * address of the 16-bit register we want to read.
  1474.      */
  1475.     for (i = 0; i < seeprom_read.len; i++)
  1476.     {
  1477.       temp = SEEMS | SEECS | (seeprom_read.bits[i] << 1);
  1478.       aic_outb(p, temp, SEECTL);
  1479.       CLOCK_PULSE(p);
  1480.       temp = temp ^ SEECK;
  1481.       aic_outb(p, temp, SEECTL);
  1482.       CLOCK_PULSE(p);
  1483.     }
  1484.     /*
  1485.      * Send the 6 or 8 bit address (MSB first, LSB last).
  1486.      */
  1487.     for (i = ((int) chip - 1); i >= 0; i--)
  1488.     {
  1489.       temp = k + offset;
  1490.       temp = (temp >> i) & 1;  /* Mask out all but lower bit. */
  1491.       temp = SEEMS | SEECS | (temp << 1);
  1492.       aic_outb(p, temp, SEECTL);
  1493.       CLOCK_PULSE(p);
  1494.       temp = temp ^ SEECK;
  1495.       aic_outb(p, temp, SEECTL);
  1496.       CLOCK_PULSE(p);
  1497.     }
  1498.     /*
  1499.      * Now read the 16 bit register.  An initial 0 precedes the
  1500.      * register contents which begins with bit 15 (MSB) and ends
  1501.      * with bit 0 (LSB).  The initial 0 will be shifted off the
  1502.      * top of our word as we let the loop run from 0 to 16.
  1503.      */
  1504.     for (i = 0; i <= 16; i++)
  1505.     {
  1506.       temp = SEEMS | SEECS;
  1507.       aic_outb(p, temp, SEECTL);
  1508.       CLOCK_PULSE(p);
  1509.       temp = temp ^ SEECK;
  1510.       scarray[k] = (scarray[k] << 1) | (aic_inb(p, SEECTL) & SEEDI);
  1511.       aic_outb(p, temp, SEECTL);
  1512.       CLOCK_PULSE(p);
  1513.     }
  1514.     /*
  1515.      * The serial EEPROM should have a checksum in the last word.
  1516.      * Keep a running checksum for all words read except for the
  1517.      * last word.  We'll verify the checksum after all words have
  1518.      * been read.
  1519.      */
  1520.     if (k < (len - 1))
  1521.     {
  1522.       checksum = checksum + scarray[k];
  1523.     }
  1524.     /*
  1525.      * Reset the chip select for the next command cycle.
  1526.      */
  1527.     aic_outb(p, SEEMS, SEECTL);
  1528.     CLOCK_PULSE(p);
  1529.     aic_outb(p, SEEMS | SEECK, SEECTL);
  1530.     CLOCK_PULSE(p);
  1531.     aic_outb(p, SEEMS, SEECTL);
  1532.     CLOCK_PULSE(p);
  1533.   }
  1534.   /*
  1535.    * Release access to the memory port and the serial EEPROM.
  1536.    */
  1537.   release_seeprom(p);
  1538. #if 0
  1539.   printk("Computed checksum 0x%x, checksum read 0x%xn",
  1540.          checksum, scarray[len - 1]);
  1541.   printk("Serial EEPROM:");
  1542.   for (k = 0; k < len; k++)
  1543.   {
  1544.     if (((k % 8) == 0) && (k != 0))
  1545.     {
  1546.       printk("n              ");
  1547.     }
  1548.     printk(" 0x%x", scarray[k]);
  1549.   }
  1550.   printk("n");
  1551. #endif
  1552.   if ( (checksum != scarray[len - 1]) || (checksum == 0) )
  1553.   {
  1554.     return (0);
  1555.   }
  1556.   return (1);
  1557. }
  1558. /*+F*************************************************************************
  1559.  * Function:
  1560.  *   read_brdctl
  1561.  *
  1562.  * Description:
  1563.  *   Reads the BRDCTL register.
  1564.  *-F*************************************************************************/
  1565. static unsigned char
  1566. read_brdctl(struct aic7xxx_host *p)
  1567. {
  1568.   unsigned char brdctl, value;
  1569.   /*
  1570.    * Make sure the SEEPROM is ready before we access it
  1571.    */
  1572.   CLOCK_PULSE(p);
  1573.   if (p->features & AHC_ULTRA2)
  1574.   {
  1575.     brdctl = BRDRW_ULTRA2;
  1576.     aic_outb(p, brdctl, BRDCTL);
  1577.     CLOCK_PULSE(p);
  1578.     value = aic_inb(p, BRDCTL);
  1579.     CLOCK_PULSE(p);
  1580.     return(value);
  1581.   }
  1582.   brdctl = BRDRW;
  1583.   if ( !((p->chip & AHC_CHIPID_MASK) == AHC_AIC7895) ||
  1584.         (p->flags & AHC_CHNLB) )
  1585.   {
  1586.     brdctl |= BRDCS;
  1587.   }
  1588.   aic_outb(p, brdctl, BRDCTL);
  1589.   CLOCK_PULSE(p);
  1590.   value = aic_inb(p, BRDCTL);
  1591.   CLOCK_PULSE(p);
  1592.   aic_outb(p, 0, BRDCTL);
  1593.   CLOCK_PULSE(p);
  1594.   return (value);
  1595. }
  1596. /*+F*************************************************************************
  1597.  * Function:
  1598.  *   write_brdctl
  1599.  *
  1600.  * Description:
  1601.  *   Writes a value to the BRDCTL register.
  1602.  *-F*************************************************************************/
  1603. static void
  1604. write_brdctl(struct aic7xxx_host *p, unsigned char value)
  1605. {
  1606.   unsigned char brdctl;
  1607.   /*
  1608.    * Make sure the SEEPROM is ready before we access it
  1609.    */
  1610.   CLOCK_PULSE(p);
  1611.   if (p->features & AHC_ULTRA2)
  1612.   {
  1613.     brdctl = value;
  1614.     aic_outb(p, brdctl, BRDCTL);
  1615.     CLOCK_PULSE(p);
  1616.     brdctl |= BRDSTB_ULTRA2;
  1617.     aic_outb(p, brdctl, BRDCTL);
  1618.     CLOCK_PULSE(p);
  1619.     brdctl &= ~BRDSTB_ULTRA2;
  1620.     aic_outb(p, brdctl, BRDCTL);
  1621.     CLOCK_PULSE(p);
  1622.     read_brdctl(p);
  1623.     CLOCK_PULSE(p);
  1624.   }
  1625.   else
  1626.   {
  1627.     brdctl = BRDSTB;
  1628.     if ( !((p->chip & AHC_CHIPID_MASK) == AHC_AIC7895) ||
  1629.           (p->flags & AHC_CHNLB) )
  1630.     {
  1631.       brdctl |= BRDCS;
  1632.     }
  1633.     brdctl = BRDSTB | BRDCS;
  1634.     aic_outb(p, brdctl, BRDCTL);
  1635.     CLOCK_PULSE(p);
  1636.     brdctl |= value;
  1637.     aic_outb(p, brdctl, BRDCTL);
  1638.     CLOCK_PULSE(p);
  1639.     brdctl &= ~BRDSTB;
  1640.     aic_outb(p, brdctl, BRDCTL);
  1641.     CLOCK_PULSE(p);
  1642.     brdctl &= ~BRDCS;
  1643.     aic_outb(p, brdctl, BRDCTL);
  1644.     CLOCK_PULSE(p);
  1645.   }
  1646. }
  1647. /*+F*************************************************************************
  1648.  * Function:
  1649.  *   aic785x_cable_detect
  1650.  *
  1651.  * Description:
  1652.  *   Detect the cables that are present on aic785x class controller chips
  1653.  *-F*************************************************************************/
  1654. static void
  1655. aic785x_cable_detect(struct aic7xxx_host *p, int *int_50,
  1656.     int *ext_present, int *eeprom)
  1657. {
  1658.   unsigned char brdctl;
  1659.   aic_outb(p, BRDRW | BRDCS, BRDCTL);
  1660.   CLOCK_PULSE(p);
  1661.   aic_outb(p, 0, BRDCTL);
  1662.   CLOCK_PULSE(p);
  1663.   brdctl = aic_inb(p, BRDCTL);
  1664.   CLOCK_PULSE(p);
  1665.   *int_50 = !(brdctl & BRDDAT5);
  1666.   *ext_present = !(brdctl & BRDDAT6);
  1667.   *eeprom = (aic_inb(p, SPIOCAP) & EEPROM);
  1668. }
  1669. #undef CLOCK_PULSE
  1670. /*+F*************************************************************************
  1671.  * Function:
  1672.  *   aic2940_uwpro_cable_detect
  1673.  *
  1674.  * Description:
  1675.  *   Detect the cables that are present on the 2940-UWPro cards
  1676.  *
  1677.  * NOTE: This function assumes the SEEPROM will have already been acquired
  1678.  *       prior to invocation of this function.
  1679.  *-F*************************************************************************/
  1680. static void
  1681. aic2940_uwpro_wide_cable_detect(struct aic7xxx_host *p, int *int_68,
  1682.     int *ext_68, int *eeprom)
  1683. {
  1684.   unsigned char brdctl;
  1685.   /*
  1686.    * First read the status of our cables.  Set the rom bank to
  1687.    * 0 since the bank setting serves as a multiplexor for the
  1688.    * cable detection logic.  BRDDAT5 controls the bank switch.
  1689.    */
  1690.   write_brdctl(p, 0);
  1691.   /*
  1692.    * Now we read the state of the internal 68 connector.  BRDDAT6
  1693.    * is don't care, BRDDAT7 is internal 68.  The cable is
  1694.    * present if the bit is 0
  1695.    */
  1696.   brdctl = read_brdctl(p);
  1697.   *int_68 = !(brdctl & BRDDAT7);
  1698.   /*
  1699.    * Set the bank bit in brdctl and then read the external cable state
  1700.    * and the EEPROM status
  1701.    */
  1702.   write_brdctl(p, BRDDAT5);
  1703.   brdctl = read_brdctl(p);
  1704.   *ext_68 = !(brdctl & BRDDAT6);
  1705.   *eeprom = !(brdctl & BRDDAT7);
  1706.   /*
  1707.    * We're done, the calling function will release the SEEPROM for us
  1708.    */
  1709. }
  1710. /*+F*************************************************************************
  1711.  * Function:
  1712.  *   aic787x_cable_detect
  1713.  *
  1714.  * Description:
  1715.  *   Detect the cables that are present on aic787x class controller chips
  1716.  *
  1717.  * NOTE: This function assumes the SEEPROM will have already been acquired
  1718.  *       prior to invocation of this function.
  1719.  *-F*************************************************************************/
  1720. static void
  1721. aic787x_cable_detect(struct aic7xxx_host *p, int *int_50, int *int_68,
  1722.     int *ext_present, int *eeprom)
  1723. {
  1724.   unsigned char brdctl;
  1725.   /*
  1726.    * First read the status of our cables.  Set the rom bank to
  1727.    * 0 since the bank setting serves as a multiplexor for the
  1728.    * cable detection logic.  BRDDAT5 controls the bank switch.
  1729.    */
  1730.   write_brdctl(p, 0);
  1731.   /*
  1732.    * Now we read the state of the two internal connectors.  BRDDAT6
  1733.    * is internal 50, BRDDAT7 is internal 68.  For each, the cable is
  1734.    * present if the bit is 0
  1735.    */
  1736.   brdctl = read_brdctl(p);
  1737.   *int_50 = !(brdctl & BRDDAT6);
  1738.   *int_68 = !(brdctl & BRDDAT7);
  1739.   /*
  1740.    * Set the bank bit in brdctl and then read the external cable state
  1741.    * and the EEPROM status
  1742.    */
  1743.   write_brdctl(p, BRDDAT5);
  1744.   brdctl = read_brdctl(p);
  1745.   *ext_present = !(brdctl & BRDDAT6);
  1746.   *eeprom = !(brdctl & BRDDAT7);
  1747.   /*
  1748.    * We're done, the calling function will release the SEEPROM for us
  1749.    */
  1750. }
  1751. /*+F*************************************************************************
  1752.  * Function:
  1753.  *   aic787x_ultra2_term_detect
  1754.  *
  1755.  * Description:
  1756.  *   Detect the termination settings present on ultra2 class controllers
  1757.  *
  1758.  * NOTE: This function assumes the SEEPROM will have already been acquired
  1759.  *       prior to invocation of this function.
  1760.  *-F*************************************************************************/
  1761. static void
  1762. aic7xxx_ultra2_term_detect(struct aic7xxx_host *p, int *enableSE_low,
  1763.                            int *enableSE_high, int *enableLVD_low,
  1764.                            int *enableLVD_high, int *eprom_present)
  1765. {
  1766.   unsigned char brdctl;
  1767.   brdctl = read_brdctl(p);
  1768.   *eprom_present  = (brdctl & BRDDAT7);
  1769.   *enableSE_high  = (brdctl & BRDDAT6);
  1770.   *enableSE_low   = (brdctl & BRDDAT5);
  1771.   *enableLVD_high = (brdctl & BRDDAT4);
  1772.   *enableLVD_low  = (brdctl & BRDDAT3);
  1773. }
  1774. /*+F*************************************************************************
  1775.  * Function:
  1776.  *   configure_termination
  1777.  *
  1778.  * Description:
  1779.  *   Configures the termination settings on PCI adapters that have
  1780.  *   SEEPROMs available.
  1781.  *-F*************************************************************************/
  1782. static void
  1783. configure_termination(struct aic7xxx_host *p)
  1784. {
  1785.   int internal50_present = 0;
  1786.   int internal68_present = 0;
  1787.   int external_present = 0;
  1788.   int eprom_present = 0;
  1789.   int enableSE_low = 0;
  1790.   int enableSE_high = 0;
  1791.   int enableLVD_low = 0;
  1792.   int enableLVD_high = 0;
  1793.   unsigned char brddat = 0;
  1794.   unsigned char max_target = 0;
  1795.   unsigned char sxfrctl1 = aic_inb(p, SXFRCTL1);
  1796.   if (acquire_seeprom(p))
  1797.   {
  1798.     if (p->features & (AHC_WIDE|AHC_TWIN))
  1799.       max_target = 16;
  1800.     else
  1801.       max_target = 8;
  1802.     aic_outb(p, SEEMS | SEECS, SEECTL);
  1803.     sxfrctl1 &= ~STPWEN;
  1804.     /*
  1805.      * The termination/cable detection logic is split into three distinct
  1806.      * groups.  Ultra2 and later controllers, 2940UW-Pro controllers, and
  1807.      * older 7850, 7860, 7870, 7880, and 7895 controllers.  Each has its
  1808.      * own unique way of detecting their cables and writing the results
  1809.      * back to the card.
  1810.      */
  1811.     if (p->features & AHC_ULTRA2)
  1812.     {
  1813.       /*
  1814.        * As long as user hasn't overridden term settings, always check the
  1815.        * cable detection logic
  1816.        */
  1817.       if (aic7xxx_override_term == -1)
  1818.       {
  1819.         aic7xxx_ultra2_term_detect(p, &enableSE_low, &enableSE_high,
  1820.                                    &enableLVD_low, &enableLVD_high,
  1821.                                    &eprom_present);
  1822.       }
  1823.       
  1824.       /*
  1825.        * If the user is overriding settings, then they have been preserved
  1826.        * to here as fake adapter_control entries.  Parse them and allow
  1827.        * them to override the detected settings (if we even did detection).
  1828.        */
  1829.       if (!(p->adapter_control & CFSEAUTOTERM))
  1830.       {
  1831.         enableSE_low = (p->adapter_control & CFSTERM);
  1832.         enableSE_high = (p->adapter_control & CFWSTERM);
  1833.       }
  1834.       if (!(p->adapter_control & CFAUTOTERM))
  1835.       {
  1836.         enableLVD_low = enableLVD_high = (p->adapter_control & CFLVDSTERM);
  1837.       }
  1838.       /*
  1839.        * Now take those settings that we have and translate them into the
  1840.        * values that must be written into the registers.
  1841.        *
  1842.        * Flash Enable = BRDDAT7
  1843.        * Secondary High Term Enable = BRDDAT6
  1844.        * Secondary Low Term Enable = BRDDAT5
  1845.        * LVD/Primary High Term Enable = BRDDAT4
  1846.        * LVD/Primary Low Term Enable = STPWEN bit in SXFRCTL1
  1847.        */
  1848.       if (enableLVD_low != 0)
  1849.       {
  1850.         sxfrctl1 |= STPWEN;
  1851.         p->flags |= AHC_TERM_ENB_LVD;
  1852.         if (aic7xxx_verbose & VERBOSE_PROBE2)
  1853.           printk(KERN_INFO "(scsi%d) LVD/Primary Low byte termination "
  1854.                  "Enabledn", p->host_no);
  1855.       }
  1856.           
  1857.       if (enableLVD_high != 0)
  1858.       {
  1859.         brddat |= BRDDAT4;
  1860.         if (aic7xxx_verbose & VERBOSE_PROBE2)
  1861.           printk(KERN_INFO "(scsi%d) LVD/Primary High byte termination "
  1862.                  "Enabledn", p->host_no);
  1863.       }
  1864.       if (enableSE_low != 0)
  1865.       {
  1866.         brddat |= BRDDAT5;
  1867.         if (aic7xxx_verbose & VERBOSE_PROBE2)
  1868.           printk(KERN_INFO "(scsi%d) Secondary Low byte termination "
  1869.                  "Enabledn", p->host_no);
  1870.       }
  1871.       if (enableSE_high != 0)
  1872.       {
  1873.         brddat |= BRDDAT6;
  1874.         if (aic7xxx_verbose & VERBOSE_PROBE2)
  1875.           printk(KERN_INFO "(scsi%d) Secondary High byte termination "
  1876.                  "Enabledn", p->host_no);
  1877.       }
  1878.     }
  1879.     else if (p->features & AHC_NEW_AUTOTERM)
  1880.     {
  1881.       /*
  1882.        * The 50 pin connector termination is controlled by STPWEN in the
  1883.        * SXFRCTL1 register.  Since the Adaptec docs typically say the
  1884.        * controller is not allowed to be in the middle of a cable and
  1885.        * this is the only connection on that stub of the bus, there is
  1886.        * no need to even check for narrow termination, it's simply
  1887.        * always on.
  1888.        */
  1889.       sxfrctl1 |= STPWEN;
  1890.       if (aic7xxx_verbose & VERBOSE_PROBE2)
  1891.         printk(KERN_INFO "(scsi%d) Narrow channel termination Enabledn",
  1892.                p->host_no);
  1893.       if (p->adapter_control & CFAUTOTERM)
  1894.       {
  1895.         aic2940_uwpro_wide_cable_detect(p, &internal68_present,
  1896.                                         &external_present,
  1897.                                         &eprom_present);
  1898.         printk(KERN_INFO "(scsi%d) Cables present (Int-50 %s, Int-68 %s, "
  1899.                "Ext-68 %s)n", p->host_no,
  1900.                "Don't Care",
  1901.                internal68_present ? "YES" : "NO",
  1902.                external_present ? "YES" : "NO");
  1903.         if (aic7xxx_verbose & VERBOSE_PROBE2)
  1904.           printk(KERN_INFO "(scsi%d) EEPROM %s present.n", p->host_no,
  1905.                eprom_present ? "is" : "is not");
  1906.         if (internal68_present && external_present)
  1907.         {
  1908.           brddat = 0;
  1909.           p->flags &= ~AHC_TERM_ENB_SE_HIGH;
  1910.           if (aic7xxx_verbose & VERBOSE_PROBE2)
  1911.             printk(KERN_INFO "(scsi%d) Wide channel termination Disabledn",
  1912.                    p->host_no);
  1913.         }
  1914.         else
  1915.         {
  1916.           brddat = BRDDAT6;
  1917.           p->flags |= AHC_TERM_ENB_SE_HIGH;
  1918.           if (aic7xxx_verbose & VERBOSE_PROBE2)
  1919.             printk(KERN_INFO "(scsi%d) Wide channel termination Enabledn",
  1920.                    p->host_no);
  1921.         }
  1922.       }
  1923.       else
  1924.       {
  1925.         /*
  1926.          * The termination of the Wide channel is done more like normal
  1927.          * though, and the setting of this termination is done by writing
  1928.          * either a 0 or 1 to BRDDAT6 of the BRDDAT register
  1929.          */
  1930.         if (p->adapter_control & CFWSTERM)
  1931.         {
  1932.           brddat = BRDDAT6;
  1933.           p->flags |= AHC_TERM_ENB_SE_HIGH;
  1934.           if (aic7xxx_verbose & VERBOSE_PROBE2)
  1935.             printk(KERN_INFO "(scsi%d) Wide channel termination Enabledn",
  1936.                    p->host_no);
  1937.         }
  1938.         else
  1939.         {
  1940.           brddat = 0;
  1941.         }
  1942.       }
  1943.     }
  1944.     else
  1945.     {
  1946.       if (p->adapter_control & CFAUTOTERM)
  1947.       {
  1948.         if (p->flags & AHC_MOTHERBOARD)
  1949.         {
  1950.           printk(KERN_INFO "(scsi%d) Warning - detected auto-terminationn",
  1951.                  p->host_no);
  1952.           printk(KERN_INFO "(scsi%d) Please verify driver detected settings "
  1953.             "are correct.n", p->host_no);
  1954.           printk(KERN_INFO "(scsi%d) If not, then please properly set the "
  1955.             "device terminationn", p->host_no);
  1956.           printk(KERN_INFO "(scsi%d) in the Adaptec SCSI BIOS by hitting "
  1957.             "CTRL-A when promptedn", p->host_no);
  1958.           printk(KERN_INFO "(scsi%d) during machine bootup.n", p->host_no);
  1959.         }
  1960.         /* Configure auto termination. */
  1961.         if ( (p->chip & AHC_CHIPID_MASK) >= AHC_AIC7870 )
  1962.         {
  1963.           aic787x_cable_detect(p, &internal50_present, &internal68_present,
  1964.             &external_present, &eprom_present);
  1965.         }
  1966.         else
  1967.         {
  1968.           aic785x_cable_detect(p, &internal50_present, &external_present,
  1969.             &eprom_present);
  1970.         }
  1971.         if (max_target <= 8)
  1972.           internal68_present = 0;
  1973.         if (max_target > 8)
  1974.         {
  1975.           printk(KERN_INFO "(scsi%d) Cables present (Int-50 %s, Int-68 %s, "
  1976.                  "Ext-68 %s)n", p->host_no,
  1977.                  internal50_present ? "YES" : "NO",
  1978.                  internal68_present ? "YES" : "NO",
  1979.                  external_present ? "YES" : "NO");
  1980.         }
  1981.         else
  1982.         {
  1983.           printk(KERN_INFO "(scsi%d) Cables present (Int-50 %s, Ext-50 %s)n",
  1984.                  p->host_no,
  1985.                  internal50_present ? "YES" : "NO",
  1986.                  external_present ? "YES" : "NO");
  1987.         }
  1988.         if (aic7xxx_verbose & VERBOSE_PROBE2)
  1989.           printk(KERN_INFO "(scsi%d) EEPROM %s present.n", p->host_no,
  1990.                eprom_present ? "is" : "is not");
  1991.         /*
  1992.          * Now set the termination based on what we found.  BRDDAT6
  1993.          * controls wide termination enable.
  1994.          * Flash Enable = BRDDAT7
  1995.          * SE High Term Enable = BRDDAT6
  1996.          */
  1997.         if (internal50_present && internal68_present && external_present)
  1998.         {
  1999.           printk(KERN_INFO "(scsi%d) Illegal cable configuration!!  Only twon",
  2000.                  p->host_no);
  2001.           printk(KERN_INFO "(scsi%d) connectors on the SCSI controller may be "
  2002.                  "in use at a time!n", p->host_no);
  2003.           /*
  2004.            * Force termination (low and high byte) on.  This is safer than
  2005.            * leaving it completely off, especially since this message comes
  2006.            * most often from motherboard controllers that don't even have 3
  2007.            * connectors, but instead are failing the cable detection.
  2008.            */
  2009.           internal50_present = external_present = 0;
  2010.           enableSE_high = enableSE_low = 1;
  2011.         }
  2012.         if ((max_target > 8) &&
  2013.             ((external_present == 0) || (internal68_present == 0)) )
  2014.         {
  2015.           brddat |= BRDDAT6;
  2016.           p->flags |= AHC_TERM_ENB_SE_HIGH;
  2017.           if (aic7xxx_verbose & VERBOSE_PROBE2)
  2018.             printk(KERN_INFO "(scsi%d) SE High byte termination Enabledn",
  2019.                    p->host_no);
  2020.         }
  2021.         if ( ((internal50_present ? 1 : 0) +
  2022.               (internal68_present ? 1 : 0) +
  2023.               (external_present   ? 1 : 0)) <= 1 )
  2024.         {
  2025.           sxfrctl1 |= STPWEN;
  2026.           p->flags |= AHC_TERM_ENB_SE_LOW;
  2027.           if (aic7xxx_verbose & VERBOSE_PROBE2)
  2028.             printk(KERN_INFO "(scsi%d) SE Low byte termination Enabledn",
  2029.                    p->host_no);
  2030.         }
  2031.       }
  2032.       else /* p->adapter_control & CFAUTOTERM */
  2033.       {
  2034.         if (p->adapter_control & CFSTERM)
  2035.         {
  2036.           sxfrctl1 |= STPWEN;
  2037.           if (aic7xxx_verbose & VERBOSE_PROBE2)
  2038.             printk(KERN_INFO "(scsi%d) SE Low byte termination Enabledn",
  2039.                    p->host_no);
  2040.         }
  2041.         if (p->adapter_control & CFWSTERM)
  2042.         {
  2043.           brddat |= BRDDAT6;
  2044.           if (aic7xxx_verbose & VERBOSE_PROBE2)
  2045.             printk(KERN_INFO "(scsi%d) SE High byte termination Enabledn",
  2046.                    p->host_no);
  2047.         }
  2048.       }
  2049.     }
  2050.     aic_outb(p, sxfrctl1, SXFRCTL1);
  2051.     write_brdctl(p, brddat);
  2052.     release_seeprom(p);
  2053.   }
  2054. }
  2055. /*+F*************************************************************************
  2056.  * Function:
  2057.  *   detect_maxscb
  2058.  *
  2059.  * Description:
  2060.  *   Detects the maximum number of SCBs for the controller and returns
  2061.  *   the count and a mask in p (p->maxscbs, p->qcntmask).
  2062.  *-F*************************************************************************/
  2063. static void
  2064. detect_maxscb(struct aic7xxx_host *p)
  2065. {
  2066.   int i;
  2067.   /*
  2068.    * It's possible that we've already done this for multichannel
  2069.    * adapters.
  2070.    */
  2071.   if (p->scb_data->maxhscbs == 0)
  2072.   {
  2073.     /*
  2074.      * We haven't initialized the SCB settings yet.  Walk the SCBs to
  2075.      * determince how many there are.
  2076.      */
  2077.     aic_outb(p, 0, FREE_SCBH);
  2078.     for (i = 0; i < AIC7XXX_MAXSCB; i++)
  2079.     {
  2080.       aic_outb(p, i, SCBPTR);
  2081.       aic_outb(p, i, SCB_CONTROL);
  2082.       if (aic_inb(p, SCB_CONTROL) != i)
  2083.         break;
  2084.       aic_outb(p, 0, SCBPTR);
  2085.       if (aic_inb(p, SCB_CONTROL) != 0)
  2086.         break;
  2087.       aic_outb(p, i, SCBPTR);
  2088.       aic_outb(p, 0, SCB_CONTROL);   /* Clear the control byte. */
  2089.       aic_outb(p, i + 1, SCB_NEXT);  /* Set the next pointer. */
  2090.       aic_outb(p, SCB_LIST_NULL, SCB_TAG);  /* Make the tag invalid. */
  2091.       aic_outb(p, SCB_LIST_NULL, SCB_BUSYTARGETS);  /* no busy untagged */
  2092.       aic_outb(p, SCB_LIST_NULL, SCB_BUSYTARGETS+1);/* targets active yet */
  2093.       aic_outb(p, SCB_LIST_NULL, SCB_BUSYTARGETS+2);
  2094.       aic_outb(p, SCB_LIST_NULL, SCB_BUSYTARGETS+3);
  2095.     }
  2096.     /* Make sure the last SCB terminates the free list. */
  2097.     aic_outb(p, i - 1, SCBPTR);
  2098.     aic_outb(p, SCB_LIST_NULL, SCB_NEXT);
  2099.     /* Ensure we clear the first (0) SCBs control byte. */
  2100.     aic_outb(p, 0, SCBPTR);
  2101.     aic_outb(p, 0, SCB_CONTROL);
  2102.     p->scb_data->maxhscbs = i;
  2103.     /*
  2104.      * Use direct indexing instead for speed
  2105.      */
  2106.     if ( i == AIC7XXX_MAXSCB )
  2107.       p->flags &= ~AHC_PAGESCBS;
  2108.   }
  2109. }
  2110. /*+F*************************************************************************
  2111.  * Function:
  2112.  *   aic7xxx_register
  2113.  *
  2114.  * Description:
  2115.  *   Register a Adaptec aic7xxx chip SCSI controller with the kernel.
  2116.  *-F*************************************************************************/
  2117. static int
  2118. aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
  2119.   int reset_delay)
  2120. {
  2121.   int i, result;
  2122.   int max_targets;
  2123.   int found = 1;
  2124.   unsigned char term, scsi_conf;
  2125.   struct Scsi_Host *host;
  2126.   host = p->host;
  2127.   p->scb_data->maxscbs = AIC7XXX_MAXSCB;
  2128.   host->can_queue = AIC7XXX_MAXSCB;
  2129.   host->cmd_per_lun = 3;
  2130.   host->sg_tablesize = AIC7XXX_MAX_SG;
  2131.   host->select_queue_depths = aic7xxx_select_queue_depth;
  2132.   host->this_id = p->scsi_id;
  2133.   host->io_port = p->base;
  2134.   host->n_io_port = 0xFF;
  2135.   host->base = p->mbase;
  2136.   host->irq = p->irq;
  2137.   if (p->features & AHC_WIDE)
  2138.   {
  2139.     host->max_id = 16;
  2140.   }
  2141.   if (p->features & AHC_TWIN)
  2142.   {
  2143.     host->max_channel = 1;
  2144.   }
  2145.   p->host = host;
  2146.   p->host_no = host->host_no;
  2147.   host->unique_id = p->instance;
  2148.   p->isr_count = 0;
  2149.   p->next = NULL;
  2150.   p->completeq.head = NULL;
  2151.   p->completeq.tail = NULL;
  2152.   scbq_init(&p->scb_data->free_scbs);
  2153.   scbq_init(&p->waiting_scbs);
  2154.   init_timer(&p->dev_timer);
  2155.   p->dev_timer.data = (unsigned long)p;
  2156.   p->dev_timer.function = (void *)aic7xxx_timer;
  2157.   p->dev_timer_active = 0;
  2158.   /*
  2159.    * We currently have no commands of any type
  2160.    */
  2161.   p->qinfifonext = 0;
  2162.   p->qoutfifonext = 0;
  2163.   for (i = 0; i < MAX_TARGETS; i++)
  2164.   {
  2165.     p->dev_commands_sent[i] = 0;
  2166.     p->dev_flags[i] = 0;
  2167.     p->dev_active_cmds[i] = 0;
  2168.     p->dev_last_queue_full[i] = 0;
  2169.     p->dev_last_queue_full_count[i] = 0;
  2170.     p->dev_max_queue_depth[i] = 1;
  2171.     p->dev_temp_queue_depth[i] = 1;
  2172.     p->dev_expires[i] = 0;
  2173.     scbq_init(&p->delayed_scbs[i]);
  2174.   }
  2175.   printk(KERN_INFO "(scsi%d) <%s> found at ", p->host_no,
  2176.     board_names[p->board_name_index]);
  2177.   switch(p->chip)
  2178.   {
  2179.     case (AHC_AIC7770|AHC_EISA):
  2180.       printk("EISA slot %dn", p->pci_device_fn);
  2181.       break;
  2182.     case (AHC_AIC7770|AHC_VL):
  2183.       printk("VLB slot %dn", p->pci_device_fn);
  2184.       break;
  2185.     default:
  2186.       printk("PCI %d/%d/%dn", p->pci_bus, PCI_SLOT(p->pci_device_fn),
  2187.         PCI_FUNC(p->pci_device_fn));
  2188.       break;
  2189.   }
  2190.   if (p->features & AHC_TWIN)
  2191.   {
  2192.     printk(KERN_INFO "(scsi%d) Twin Channel, A SCSI ID %d, B SCSI ID %d, ",
  2193.            p->host_no, p->scsi_id, p->scsi_id_b);
  2194.   }
  2195.   else
  2196.   {
  2197.     char *channel;
  2198.     channel = "";
  2199.     if ((p->flags & AHC_MULTI_CHANNEL) != 0)
  2200.     {
  2201.       channel = " A";
  2202.       if ( (p->flags & (AHC_CHNLB|AHC_CHNLC)) != 0 )
  2203.       {
  2204.         channel = (p->flags & AHC_CHNLB) ? " B" : " C";
  2205.       }
  2206.     }
  2207.     if (p->features & AHC_WIDE)
  2208.     {
  2209.       printk(KERN_INFO "(scsi%d) Wide ", p->host_no);
  2210.     }
  2211.     else
  2212.     {
  2213.       printk(KERN_INFO "(scsi%d) Narrow ", p->host_no);
  2214.     }
  2215.     printk("Channel%s, SCSI ID=%d, ", channel, p->scsi_id);
  2216.   }
  2217.   aic_outb(p, 0, SEQ_FLAGS);
  2218.   detect_maxscb(p);
  2219.   printk("%d/%d SCBsn", p->scb_data->maxhscbs, p->scb_data->maxscbs);
  2220.   if (aic7xxx_verbose & VERBOSE_PROBE2)
  2221.   {
  2222.     printk(KERN_INFO "(scsi%d) BIOS %sabled, IO Port 0x%lx, IRQ %dn",
  2223.       p->host_no, (p->flags & AHC_BIOS_ENABLED) ? "en" : "dis",
  2224.       p->base, p->irq);
  2225.     printk(KERN_INFO "(scsi%d) IO Memory at 0x%lx, MMAP Memory at 0x%lxn",
  2226.       p->host_no, p->mbase, (unsigned long)p->maddr);
  2227.   }
  2228. #ifdef CONFIG_PCI
  2229.   /*
  2230.    * Now that we know our instance number, we can set the flags we need to
  2231.    * force termination if need be.
  2232.    */
  2233.   if (aic7xxx_stpwlev != -1)
  2234.   {
  2235.     /*
  2236.      * This option only applies to PCI controllers.
  2237.      */
  2238.     if ( (p->chip & ~AHC_CHIPID_MASK) == AHC_PCI)
  2239.     {
  2240.       unsigned char devconfig;
  2241.       pci_read_config_byte(p->pdev, DEVCONFIG, &devconfig);
  2242.       if ( (aic7xxx_stpwlev >> p->instance) & 0x01 )
  2243.       {
  2244.         devconfig |= STPWLEVEL;
  2245.         if (aic7xxx_verbose & VERBOSE_PROBE2)
  2246.           printk("(scsi%d) Force setting STPWLEVEL bitn", p->host_no);
  2247.       }
  2248.       else
  2249.       {
  2250.         devconfig &= ~STPWLEVEL;
  2251.         if (aic7xxx_verbose & VERBOSE_PROBE2)
  2252.           printk("(scsi%d) Force clearing STPWLEVEL bitn", p->host_no);
  2253.       }
  2254.       pci_write_config_byte(p->pdev, DEVCONFIG, devconfig);
  2255.     }
  2256.   }
  2257. #endif
  2258.   /*
  2259.    * That took care of devconfig and stpwlev, now for the actual termination
  2260.    * settings.
  2261.    */
  2262.   if (aic7xxx_override_term != -1)
  2263.   {
  2264.     /*
  2265.      * Again, this only applies to PCI controllers.  We don't have problems
  2266.      * with the termination on 274x controllers to the best of my knowledge.
  2267.      */
  2268.     if ( (p->chip & ~AHC_CHIPID_MASK) == AHC_PCI)
  2269.     {
  2270.       unsigned char term_override;
  2271.       term_override = ( (aic7xxx_override_term >> (p->instance * 4)) & 0x0f);
  2272.       p->adapter_control &= 
  2273.         ~(CFSTERM|CFWSTERM|CFLVDSTERM|CFAUTOTERM|CFSEAUTOTERM);
  2274.       if ( (p->features & AHC_ULTRA2) && (term_override & 0x0c) )
  2275.       {
  2276.         p->adapter_control |= CFLVDSTERM;
  2277.       }
  2278.       if (term_override & 0x02)
  2279.       {
  2280.         p->adapter_control |= CFWSTERM;
  2281.       }
  2282.       if (term_override & 0x01)
  2283.       {
  2284.         p->adapter_control |= CFSTERM;
  2285.       }
  2286.     }
  2287.   }
  2288.   if ( (p->flags & AHC_SEEPROM_FOUND) || (aic7xxx_override_term != -1) )
  2289.   {
  2290.     if (p->features & AHC_SPIOCAP)
  2291.     {
  2292.       if ( aic_inb(p, SPIOCAP) & SSPIOCPS )
  2293.       /*
  2294.        * Update the settings in sxfrctl1 to match the termination
  2295.        * settings.
  2296.        */
  2297.         configure_termination(p);
  2298.     }
  2299.     else if ((p->chip & AHC_CHIPID_MASK) >= AHC_AIC7870)
  2300.     {
  2301.       configure_termination(p);
  2302.     }
  2303.   }
  2304.   /*
  2305.    * Set the SCSI Id, SXFRCTL0, SXFRCTL1, and SIMODE1, for both channels
  2306.    */
  2307.   if (p->features & AHC_TWIN)
  2308.   {
  2309.     /* Select channel B */
  2310.     aic_outb(p, aic_inb(p, SBLKCTL) | SELBUSB, SBLKCTL);
  2311.     if ((p->flags & AHC_SEEPROM_FOUND) || (aic7xxx_override_term != -1))
  2312.       term = (aic_inb(p, SXFRCTL1) & STPWEN);
  2313.     else
  2314.       term = ((p->flags & AHC_TERM_ENB_B) ? STPWEN : 0);
  2315.     aic_outb(p, p->scsi_id_b, SCSIID);
  2316.     scsi_conf = aic_inb(p, SCSICONF + 1);
  2317.     aic_outb(p, DFON | SPIOEN, SXFRCTL0);
  2318.     aic_outb(p, (scsi_conf & ENSPCHK) | aic7xxx_seltime | term | 
  2319.          ENSTIMER | ACTNEGEN, SXFRCTL1);
  2320.     aic_outb(p, 0, SIMODE0);
  2321.     aic_outb(p, ENSELTIMO | ENSCSIRST | ENSCSIPERR, SIMODE1);
  2322.     aic_outb(p, 0, SCSIRATE);
  2323.     /* Select channel A */
  2324.     aic_outb(p, aic_inb(p, SBLKCTL) & ~SELBUSB, SBLKCTL);
  2325.   }
  2326.   if (p->features & AHC_ULTRA2)
  2327.   {
  2328.     aic_outb(p, p->scsi_id, SCSIID_ULTRA2);
  2329.   }
  2330.   else
  2331.   {
  2332.     aic_outb(p, p->scsi_id, SCSIID);
  2333.   }
  2334.   if ((p->flags & AHC_SEEPROM_FOUND) || (aic7xxx_override_term != -1))
  2335.     term = (aic_inb(p, SXFRCTL1) & STPWEN);
  2336.   else
  2337.     term = ((p->flags & (AHC_TERM_ENB_A|AHC_TERM_ENB_LVD)) ? STPWEN : 0);
  2338.   scsi_conf = aic_inb(p, SCSICONF);
  2339.   aic_outb(p, DFON | SPIOEN, SXFRCTL0);
  2340.   aic_outb(p, (scsi_conf & ENSPCHK) | aic7xxx_seltime | term | 
  2341.        ENSTIMER | ACTNEGEN, SXFRCTL1);
  2342.   aic_outb(p, 0, SIMODE0);
  2343.   /*
  2344.    * If we are a cardbus adapter then don't enable SCSI reset detection.
  2345.    * We shouldn't likely be sharing SCSI busses with someone else, and
  2346.    * if we don't have a cable currently plugged into the controller then
  2347.    * we won't have a power source for the SCSI termination, which means
  2348.    * we'll see infinite incoming bus resets.
  2349.    */
  2350.   if(p->flags & AHC_NO_STPWEN)
  2351.     aic_outb(p, ENSELTIMO | ENSCSIPERR, SIMODE1);
  2352.   else
  2353.     aic_outb(p, ENSELTIMO | ENSCSIRST | ENSCSIPERR, SIMODE1);
  2354.   aic_outb(p, 0, SCSIRATE);
  2355.   if ( p->features & AHC_ULTRA2)
  2356.     aic_outb(p, 0, SCSIOFFSET);
  2357.   /*
  2358.    * Look at the information that board initialization or the board
  2359.    * BIOS has left us. In the lower four bits of each target's
  2360.    * scratch space any value other than 0 indicates that we should
  2361.    * initiate synchronous transfers. If it's zero, the user or the
  2362.    * BIOS has decided to disable synchronous negotiation to that
  2363.    * target so we don't activate the needsdtr flag.
  2364.    */
  2365.   if ((p->features & (AHC_TWIN|AHC_WIDE)) == 0)
  2366.   {
  2367.     max_targets = 8;
  2368.   }
  2369.   else
  2370.   {
  2371.     max_targets = 16;
  2372.   }
  2373.   if (!(aic7xxx_no_reset))
  2374.   {
  2375.     /*
  2376.      * If we reset the bus, then clear the transfer settings, else leave
  2377.      * them be
  2378.      */
  2379.     for (i = 0; i < max_targets; i++)
  2380.     {
  2381.       aic_outb(p, 0, TARG_SCSIRATE + i);
  2382.       if (p->features & AHC_ULTRA2)
  2383.       {
  2384.         aic_outb(p, 0, TARG_OFFSET + i);
  2385.       }
  2386.       p->transinfo[i].cur_offset = 0;
  2387.       p->transinfo[i].cur_period = 0;
  2388.       p->transinfo[i].cur_width = MSG_EXT_WDTR_BUS_8_BIT;
  2389.     }
  2390.     /*
  2391.      * If we reset the bus, then clear the transfer settings, else leave
  2392.      * them be.
  2393.      */
  2394.     aic_outb(p, 0, ULTRA_ENB);
  2395.     aic_outb(p, 0, ULTRA_ENB + 1);
  2396.     p->ultraenb = 0;
  2397.   }
  2398.   /*
  2399.    * Allocate enough hardware scbs to handle the maximum number of
  2400.    * concurrent transactions we can have.  We have to make sure that
  2401.    * the allocated memory is contiguous memory.  The Linux kmalloc
  2402.    * routine should only allocate contiguous memory, but note that
  2403.    * this could be a problem if kmalloc() is changed.
  2404.    */
  2405.   {
  2406.     size_t array_size;
  2407.     unsigned int hscb_physaddr;
  2408.     array_size = p->scb_data->maxscbs * sizeof(struct aic7xxx_hwscb);
  2409.     if (p->scb_data->hscbs == NULL)
  2410.     {
  2411.       /* pci_alloc_consistent enforces the alignment already and
  2412.        * clears the area as well.
  2413.        */
  2414.       p->scb_data->hscbs = pci_alloc_consistent(p->pdev, array_size,
  2415. &p->scb_data->hscbs_dma);
  2416.       /* We have to use pci_free_consistent, not kfree */
  2417.       p->scb_data->hscb_kmalloc_ptr = NULL;
  2418.       p->scb_data->hscbs_dma_len = array_size;
  2419.     }
  2420.     if (p->scb_data->hscbs == NULL)
  2421.     {
  2422.       printk("(scsi%d) Unable to allocate hardware SCB array; "
  2423.              "failing detection.n", p->host_no);
  2424.       aic_outb(p, 0, SIMODE1);
  2425.       p->irq = 0;
  2426.       return(0);
  2427.     }
  2428.     hscb_physaddr = p->scb_data->hscbs_dma;
  2429.     aic_outb(p, hscb_physaddr & 0xFF, HSCB_ADDR);
  2430.     aic_outb(p, (hscb_physaddr >> 8) & 0xFF, HSCB_ADDR + 1);
  2431.     aic_outb(p, (hscb_physaddr >> 16) & 0xFF, HSCB_ADDR + 2);
  2432.     aic_outb(p, (hscb_physaddr >> 24) & 0xFF, HSCB_ADDR + 3);
  2433.     /* Set up the fifo areas at the same time */
  2434.     p->untagged_scbs = pci_alloc_consistent(p->pdev, 3*256, &p->fifo_dma);
  2435.     if (p->untagged_scbs == NULL)
  2436.     {
  2437.       printk("(scsi%d) Unable to allocate hardware FIFO arrays; "
  2438.              "failing detection.n", p->host_no);
  2439.       p->irq = 0;
  2440.       return(0);
  2441.     }
  2442.     p->qoutfifo = p->untagged_scbs + 256;
  2443.     p->qinfifo = p->qoutfifo + 256;
  2444.     for (i = 0; i < 256; i++)
  2445.     {
  2446.       p->untagged_scbs[i] = SCB_LIST_NULL;
  2447.       p->qinfifo[i] = SCB_LIST_NULL;
  2448.       p->qoutfifo[i] = SCB_LIST_NULL;
  2449.     }
  2450.     hscb_physaddr = p->fifo_dma;
  2451.     aic_outb(p, hscb_physaddr & 0xFF, SCBID_ADDR);
  2452.     aic_outb(p, (hscb_physaddr >> 8) & 0xFF, SCBID_ADDR + 1);
  2453.     aic_outb(p, (hscb_physaddr >> 16) & 0xFF, SCBID_ADDR + 2);
  2454.     aic_outb(p, (hscb_physaddr >> 24) & 0xFF, SCBID_ADDR + 3);
  2455.   }
  2456.   /* The Q-FIFOs we just set up are all empty */
  2457.   aic_outb(p, 0, QINPOS);
  2458.   aic_outb(p, 0, KERNEL_QINPOS);
  2459.   aic_outb(p, 0, QOUTPOS);
  2460.   if(p->features & AHC_QUEUE_REGS)
  2461.   {
  2462.     aic_outb(p, SCB_QSIZE_256, QOFF_CTLSTA);
  2463.     aic_outb(p, 0, SDSCB_QOFF);
  2464.     aic_outb(p, 0, SNSCB_QOFF);
  2465.     aic_outb(p, 0, HNSCB_QOFF);
  2466.   }
  2467.   /*
  2468.    * We don't have any waiting selections or disconnected SCBs.
  2469.    */
  2470.   aic_outb(p, SCB_LIST_NULL, WAITING_SCBH);
  2471.   aic_outb(p, SCB_LIST_NULL, DISCONNECTED_SCBH);
  2472.   /*
  2473.    * Message out buffer starts empty
  2474.    */
  2475.   aic_outb(p, MSG_NOOP, MSG_OUT);
  2476.   aic_outb(p, MSG_NOOP, LAST_MSG);
  2477.   /*
  2478.    * Set all the other asundry items that haven't been set yet.
  2479.    * This includes just dumping init values to a lot of registers simply
  2480.    * to make sure they've been touched and are ready for use parity wise
  2481.    * speaking.
  2482.    */
  2483.   aic_outb(p, 0, TMODE_CMDADDR);
  2484.   aic_outb(p, 0, TMODE_CMDADDR + 1);
  2485.   aic_outb(p, 0, TMODE_CMDADDR + 2);
  2486.   aic_outb(p, 0, TMODE_CMDADDR + 3);
  2487.   aic_outb(p, 0, TMODE_CMDADDR_NEXT);
  2488.   /*
  2489.    * Link us into the list of valid hosts
  2490.    */
  2491.   p->next = first_aic7xxx;
  2492.   first_aic7xxx = p;
  2493.   /*
  2494.    * Allocate the first set of scbs for this controller.  This is to stream-
  2495.    * line code elsewhere in the driver.  If we have to check for the existence
  2496.    * of scbs in certain code sections, it slows things down.  However, as
  2497.    * soon as we register the IRQ for this card, we could get an interrupt that
  2498.    * includes possibly the SCSI_RSTI interrupt.  If we catch that interrupt
  2499.    * then we are likely to segfault if we don't have at least one chunk of
  2500.    * SCBs allocated or add checks all through the reset code to make sure
  2501.    * that the SCBs have been allocated which is an invalid running condition
  2502.    * and therefore I think it's preferable to simply pre-allocate the first
  2503.    * chunk of SCBs.
  2504.    */
  2505.   aic7xxx_allocate_scb(p);
  2506.   /*
  2507.    * Load the sequencer program, then re-enable the board -
  2508.    * resetting the AIC-7770 disables it, leaving the lights
  2509.    * on with nobody home.
  2510.    */
  2511.   aic7xxx_loadseq(p);
  2512.   /*
  2513.    * Make sure the AUTOFLUSHDIS bit is *not* set in the SBLKCTL register
  2514.    */
  2515.   aic_outb(p, aic_inb(p, SBLKCTL) & ~AUTOFLUSHDIS, SBLKCTL);
  2516.   if ( (p->chip & AHC_CHIPID_MASK) == AHC_AIC7770 )
  2517.   {
  2518.     aic_outb(p, ENABLE, BCTL);  /* Enable the boards BUS drivers. */
  2519.   }
  2520.   if ( !(aic7xxx_no_reset) )
  2521.   {
  2522.     if (p->features & AHC_TWIN)
  2523.     {
  2524.       if (aic7xxx_verbose & VERBOSE_PROBE2)
  2525.         printk(KERN_INFO "(scsi%d) Resetting channel Bn", p->host_no);
  2526.       aic_outb(p, aic_inb(p, SBLKCTL) | SELBUSB, SBLKCTL);
  2527.       aic7xxx_reset_current_bus(p);
  2528.       aic_outb(p, aic_inb(p, SBLKCTL) & ~SELBUSB, SBLKCTL);
  2529.     }
  2530.     /* Reset SCSI bus A. */
  2531.     if (aic7xxx_verbose & VERBOSE_PROBE2)
  2532.     {  /* In case we are a 3940, 3985, or 7895, print the right channel */
  2533.       char *channel = "";
  2534.       if (p->flags & AHC_MULTI_CHANNEL)
  2535.       {
  2536.         channel = " A";
  2537.         if (p->flags & (AHC_CHNLB|AHC_CHNLC))
  2538.           channel = (p->flags & AHC_CHNLB) ? " B" : " C";
  2539.       }
  2540.       printk(KERN_INFO "(scsi%d) Resetting channel%sn", p->host_no, channel);
  2541.     }
  2542.     
  2543.     aic7xxx_reset_current_bus(p);
  2544.     /*
  2545.      * Delay for the reset delay by setting the timer, this will delay
  2546.      * future commands sent to any devices.
  2547.      */
  2548.     p->flags |= AHC_RESET_DELAY;
  2549.     for(i=0; i<MAX_TARGETS; i++)
  2550.     {
  2551.       p->dev_expires[i] = jiffies + (4 * HZ);
  2552.       p->dev_timer_active |= (0x01 << i);
  2553.     }
  2554.     p->dev_timer.expires = p->dev_expires[p->scsi_id];
  2555.     add_timer(&p->dev_timer);
  2556.     p->dev_timer_active |= (0x01 << MAX_TARGETS);
  2557.   }
  2558.   else
  2559.   {
  2560.     if (!reset_delay)
  2561.     {
  2562.       printk(KERN_INFO "(scsi%d) Not resetting SCSI bus.  Note: Don't use "
  2563.              "the no_resetn", p->host_no);
  2564.       printk(KERN_INFO "(scsi%d) option unless you have a verifiable need "
  2565.              "for it.n", p->host_no);
  2566.     }
  2567.   }
  2568.   
  2569.   /*
  2570.    * Register IRQ with the kernel.  Only allow sharing IRQs with
  2571.    * PCI devices.
  2572.    */
  2573.   if (!(p->chip & AHC_PCI))
  2574.   {
  2575.     result = (request_irq(p->irq, do_aic7xxx_isr, 0, "aic7xxx", p));
  2576.   }
  2577.   else
  2578.   {
  2579.     result = (request_irq(p->irq, do_aic7xxx_isr, SA_SHIRQ,
  2580.               "aic7xxx", p));
  2581.     if (result < 0)
  2582.     {
  2583.       result = (request_irq(p->irq, do_aic7xxx_isr, SA_INTERRUPT | SA_SHIRQ,
  2584.               "aic7xxx", p));
  2585.     }
  2586.   }
  2587.   if (result < 0)
  2588.   {
  2589.     printk(KERN_WARNING "(scsi%d) Couldn't register IRQ %d, ignoring "
  2590.            "controller.n", p->host_no, p->irq);
  2591.     aic_outb(p, 0, SIMODE1);
  2592.     p->irq = 0;
  2593.     return (0);
  2594.   }
  2595.   if(aic_inb(p, INTSTAT) & INT_PEND)
  2596.     printk(INFO_LEAD "spurious interrupt during configuration, cleared.n",
  2597.       p->host_no, -1, -1 , -1);
  2598.   aic7xxx_clear_intstat(p);
  2599.   unpause_sequencer(p, /* unpause_always */ TRUE);
  2600.   return (found);
  2601. }
  2602. /*+F*************************************************************************
  2603.  * Function:
  2604.  *   aic7xxx_chip_reset
  2605.  *
  2606.  * Description:
  2607.  *   Perform a chip reset on the aic7xxx SCSI controller.  The controller
  2608.  *   is paused upon return.
  2609.  *-F*************************************************************************/
  2610. int
  2611. aic7xxx_chip_reset(struct aic7xxx_host *p)
  2612. {
  2613.   unsigned char sblkctl;
  2614.   int wait;
  2615.   /*
  2616.    * For some 274x boards, we must clear the CHIPRST bit and pause
  2617.    * the sequencer. For some reason, this makes the driver work.
  2618.    */
  2619.   aic_outb(p, PAUSE | CHIPRST, HCNTRL);
  2620.   /*
  2621.    * In the future, we may call this function as a last resort for
  2622.    * error handling.  Let's be nice and not do any unnecessary delays.
  2623.    */
  2624.   wait = 1000;  /* 1 msec (1000 * 1 msec) */
  2625.   while (--wait && !(aic_inb(p, HCNTRL) & CHIPRSTACK))
  2626.   {
  2627.     udelay(1);  /* 1 usec */
  2628.   }
  2629.   pause_sequencer(p);
  2630.   sblkctl = aic_inb(p, SBLKCTL) & (SELBUSB|SELWIDE);
  2631.   if (p->chip & AHC_PCI)
  2632.     sblkctl &= ~SELBUSB;
  2633.   switch( sblkctl )
  2634.   {
  2635.     case 0:  /* normal narrow card */
  2636.       break;
  2637.     case 2:  /* Wide card */
  2638.       p->features |= AHC_WIDE;
  2639.       break;
  2640.     case 8:  /* Twin card */
  2641.       p->features |= AHC_TWIN;
  2642.       p->flags |= AHC_MULTI_CHANNEL;
  2643.       break;
  2644.     default: /* hmmm...we don't know what this is */
  2645.       printk(KERN_WARNING "aic7xxx: Unsupported adapter type %d, ignoring.n",
  2646.         aic_inb(p, SBLKCTL) & 0x0a);
  2647.       return(-1);
  2648.   }
  2649.   return(0);
  2650. }
  2651. /*+F*************************************************************************
  2652.  * Function:
  2653.  *   aic7xxx_alloc
  2654.  *
  2655.  * Description:
  2656.  *   Allocate and initialize a host structure.  Returns NULL upon error
  2657.  *   and a pointer to a aic7xxx_host struct upon success.
  2658.  *-F*************************************************************************/
  2659. static struct aic7xxx_host *
  2660. aic7xxx_alloc(Scsi_Host_Template *sht, struct aic7xxx_host *temp)
  2661. {
  2662.   struct aic7xxx_host *p = NULL;
  2663.   struct Scsi_Host *host;
  2664.   int i;
  2665.   /*
  2666.    * Allocate a storage area by registering us with the mid-level
  2667.    * SCSI layer.
  2668.    */
  2669.   host = scsi_register(sht, sizeof(struct aic7xxx_host));
  2670.   if (host != NULL)
  2671.   {
  2672.     p = (struct aic7xxx_host *) host->hostdata;
  2673.     memset(p, 0, sizeof(struct aic7xxx_host));
  2674.     *p = *temp;
  2675.     p->host = host;
  2676.     host->max_sectors = 512;
  2677.     p->scb_data = kmalloc(sizeof(scb_data_type), GFP_ATOMIC);
  2678.     if (p->scb_data != NULL)
  2679.     {
  2680.       memset(p->scb_data, 0, sizeof(scb_data_type));
  2681.       scbq_init (&p->scb_data->free_scbs);
  2682.     }
  2683.     else
  2684.     {
  2685.       /*
  2686.        * For some reason we don't have enough memory.  Free the
  2687.        * allocated memory for the aic7xxx_host struct, and return NULL.
  2688.        */
  2689.       release_region(p->base, MAXREG - MINREG);
  2690.       scsi_unregister(host);
  2691.       return(NULL);
  2692.     }
  2693.     p->host_no = host->host_no;
  2694.     p->tagenable = 0;
  2695.     p->orderedtag = 0;
  2696.     for (i=0; i<MAX_TARGETS; i++)
  2697.     {
  2698.       p->transinfo[i].goal_period = 255;
  2699.       p->transinfo[i].goal_offset = 0;
  2700.       p->transinfo[i].goal_options = 0;
  2701.       p->transinfo[i].goal_width = MSG_EXT_WDTR_BUS_8_BIT;
  2702.     }
  2703.     DRIVER_LOCK_INIT
  2704.   }
  2705.   scsi_set_pci_device(host, p->pdev);
  2706.   return (p);
  2707. }
  2708. /*+F*************************************************************************
  2709.  * Function:
  2710.  *   aic7xxx_free
  2711.  *
  2712.  * Description:
  2713.  *   Frees and releases all resources associated with an instance of
  2714.  *   the driver (struct aic7xxx_host *).
  2715.  *-F*************************************************************************/
  2716. static void
  2717. aic7xxx_free(struct aic7xxx_host *p)
  2718. {
  2719.   int i;
  2720.   /*
  2721.    * Free the allocated hardware SCB space.
  2722.    */
  2723.   if (p->scb_data != NULL)
  2724.   {
  2725.     struct aic7xxx_scb_dma *scb_dma = NULL;
  2726.     if (p->scb_data->hscbs != NULL)
  2727.     {
  2728.       pci_free_consistent(p->pdev, p->scb_data->hscbs_dma_len,
  2729.   p->scb_data->hscbs, p->scb_data->hscbs_dma);
  2730.       p->scb_data->hscbs = p->scb_data->hscb_kmalloc_ptr = NULL;
  2731.     }
  2732.     /*
  2733.      * Free the driver SCBs.  These were allocated on an as-need
  2734.      * basis.  We allocated these in groups depending on how many
  2735.      * we could fit into a given amount of RAM.  The tail SCB for
  2736.      * these allocations has a pointer to the alloced area.
  2737.      */
  2738.     for (i = 0; i < p->scb_data->numscbs; i++)
  2739.     {
  2740.       if (p->scb_data->scb_array[i]->scb_dma != scb_dma)
  2741.       {
  2742. scb_dma = p->scb_data->scb_array[i]->scb_dma;
  2743. pci_free_consistent(p->pdev, scb_dma->dma_len,
  2744.     (void *)((unsigned long)scb_dma->dma_address
  2745.                                      - scb_dma->dma_offset),
  2746.     scb_dma->dma_address);
  2747.       }
  2748.       if (p->scb_data->scb_array[i]->kmalloc_ptr != NULL)
  2749.         kfree(p->scb_data->scb_array[i]->kmalloc_ptr);
  2750.       p->scb_data->scb_array[i] = NULL;
  2751.     }
  2752.   
  2753.     /*
  2754.      * Free the SCB data area.
  2755.      */
  2756.     kfree(p->scb_data);
  2757.   }
  2758.   pci_free_consistent(p->pdev, 3*256, (void *)p->untagged_scbs, p->fifo_dma);
  2759. }
  2760. /*+F*************************************************************************
  2761.  * Function:
  2762.  *   aic7xxx_load_seeprom
  2763.  *
  2764.  * Description:
  2765.  *   Load the seeprom and configure adapter and target settings.
  2766.  *   Returns 1 if the load was successful and 0 otherwise.
  2767.  *-F*************************************************************************/
  2768. static void
  2769. aic7xxx_load_seeprom(struct aic7xxx_host *p, unsigned char *sxfrctl1)
  2770. {
  2771.   int have_seeprom = 0;
  2772.   int i, max_targets, mask;
  2773.   unsigned char scsirate, scsi_conf;
  2774.   unsigned short scarray[128];
  2775.   struct seeprom_config *sc = (struct seeprom_config *) scarray;
  2776.   if (aic7xxx_verbose & VERBOSE_PROBE2)
  2777.   {
  2778.     printk(KERN_INFO "aic7xxx: Loading serial EEPROM...");
  2779.   }
  2780.   switch (p->chip)
  2781.   {
  2782.     case (AHC_AIC7770|AHC_EISA):  /* None of these adapters have seeproms. */
  2783.       if (aic_inb(p, SCSICONF) & TERM_ENB)
  2784.         p->flags |= AHC_TERM_ENB_A;
  2785.       if ( (p->features & AHC_TWIN) && (aic_inb(p, SCSICONF + 1) & TERM_ENB) )
  2786.         p->flags |= AHC_TERM_ENB_B;
  2787.       break;
  2788.     case (AHC_AIC7770|AHC_VL):
  2789.       have_seeprom = read_284x_seeprom(p, (struct seeprom_config *) scarray);
  2790.       break;
  2791.     default:
  2792.       have_seeprom = read_seeprom(p, (p->flags & (AHC_CHNLB|AHC_CHNLC)),
  2793.                                   scarray, p->sc_size, p->sc_type);
  2794.       if (!have_seeprom)
  2795.       {
  2796.         if(p->sc_type == C46)
  2797.           have_seeprom = read_seeprom(p, (p->flags & (AHC_CHNLB|AHC_CHNLC)),