linux/drivers/scsi/aha1542.c
<<
>>
Prefs
   1/* $Id: aha1542.c,v 1.1 1992/07/24 06:27:38 root Exp root $
   2 *  linux/kernel/aha1542.c
   3 *
   4 *  Copyright (C) 1992  Tommy Thorn
   5 *  Copyright (C) 1993, 1994, 1995 Eric Youngdale
   6 *
   7 *  Modified by Eric Youngdale
   8 *        Use request_irq and request_dma to help prevent unexpected conflicts
   9 *        Set up on-board DMA controller, such that we do not have to
  10 *        have the bios enabled to use the aha1542.
  11 *  Modified by David Gentzel
  12 *        Don't call request_dma if dma mask is 0 (for BusLogic BT-445S VL-Bus
  13 *        controller).
  14 *  Modified by Matti Aarnio
  15 *        Accept parameters from LILO cmd-line. -- 1-Oct-94
  16 *  Modified by Mike McLagan <mike.mclagan@linux.org>
  17 *        Recognise extended mode on AHA1542CP, different bit than 1542CF
  18 *        1-Jan-97
  19 *  Modified by Bjorn L. Thordarson and Einar Thor Einarsson
  20 *        Recognize that DMA0 is valid DMA channel -- 13-Jul-98
  21 *  Modified by Chris Faulhaber <jedgar@fxp.org>
  22 *        Added module command-line options
  23 *        19-Jul-99
  24 *  Modified by Adam Fritzler
  25 *        Added proper detection of the AHA-1640 (MCA, now deleted)
  26 */
  27
  28#include <linux/module.h>
  29#include <linux/interrupt.h>
  30#include <linux/kernel.h>
  31#include <linux/types.h>
  32#include <linux/string.h>
  33#include <linux/ioport.h>
  34#include <linux/delay.h>
  35#include <linux/proc_fs.h>
  36#include <linux/init.h>
  37#include <linux/spinlock.h>
  38#include <linux/isapnp.h>
  39#include <linux/blkdev.h>
  40#include <linux/slab.h>
  41
  42#include <asm/dma.h>
  43#include <asm/io.h>
  44
  45#include "scsi.h"
  46#include <scsi/scsi_host.h>
  47#include "aha1542.h"
  48
  49#define SCSI_BUF_PA(address)    isa_virt_to_bus(address)
  50#define SCSI_SG_PA(sgent)       (isa_page_to_bus(sg_page((sgent))) + (sgent)->offset)
  51
  52#include <linux/stat.h>
  53
  54#ifdef DEBUG
  55#define DEB(x) x
  56#else
  57#define DEB(x)
  58#endif
  59
  60/*
  61   static const char RCSid[] = "$Header: /usr/src/linux/kernel/blk_drv/scsi/RCS/aha1542.c,v 1.1 1992/07/24 06:27:38 root Exp root $";
  62 */
  63
  64/* The adaptec can be configured for quite a number of addresses, but
  65   I generally do not want the card poking around at random.  We allow
  66   two addresses - this allows people to use the Adaptec with a Midi
  67   card, which also used 0x330 -- can be overridden with LILO! */
  68
  69#define MAXBOARDS 4             /* Increase this and the sizes of the
  70                                   arrays below, if you need more.. */
  71
  72/* Boards 3,4 slots are reserved for ISAPnP scans */
  73
  74static unsigned int bases[MAXBOARDS] __initdata = {0x330, 0x334, 0, 0};
  75
  76/* set by aha1542_setup according to the command line; they also may
  77   be marked __initdata, but require zero initializers then */
  78
  79static int setup_called[MAXBOARDS];
  80static int setup_buson[MAXBOARDS];
  81static int setup_busoff[MAXBOARDS];
  82static int setup_dmaspeed[MAXBOARDS] __initdata = { -1, -1, -1, -1 };
  83
  84/*
  85 * LILO/Module params:  aha1542=<PORTBASE>[,<BUSON>,<BUSOFF>[,<DMASPEED>]]
  86 *
  87 * Where:  <PORTBASE> is any of the valid AHA addresses:
  88 *                      0x130, 0x134, 0x230, 0x234, 0x330, 0x334
  89 *         <BUSON>  is the time (in microsecs) that AHA spends on the AT-bus
  90 *                  when transferring data.  1542A power-on default is 11us,
  91 *                  valid values are in range: 2..15 (decimal)
  92 *         <BUSOFF> is the time that AHA spends OFF THE BUS after while
  93 *                  it is transferring data (not to monopolize the bus).
  94 *                  Power-on default is 4us, valid range: 1..64 microseconds.
  95 *         <DMASPEED> Default is jumper selected (1542A: on the J1),
  96 *                  but experimenter can alter it with this.
  97 *                  Valid values: 5, 6, 7, 8, 10 (MB/s)
  98 *                  Factory default is 5 MB/s.
  99 */
 100
 101#if defined(MODULE)
 102static bool isapnp = 0;
 103static int aha1542[] = {0x330, 11, 4, -1};
 104module_param_array(aha1542, int, NULL, 0);
 105module_param(isapnp, bool, 0);
 106
 107static struct isapnp_device_id id_table[] __initdata = {
 108        {
 109                ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 110                ISAPNP_VENDOR('A', 'D', 'P'), ISAPNP_FUNCTION(0x1542),
 111                0
 112        },
 113        {0}
 114};
 115
 116MODULE_DEVICE_TABLE(isapnp, id_table);
 117
 118#else
 119static int isapnp = 1;
 120#endif
 121
 122#define BIOS_TRANSLATION_1632 0 /* Used by some old 1542A boards */
 123#define BIOS_TRANSLATION_6432 1 /* Default case these days */
 124#define BIOS_TRANSLATION_25563 2        /* Big disk case */
 125
 126struct aha1542_hostdata {
 127        /* This will effectively start both of them at the first mailbox */
 128        int bios_translation;   /* Mapping bios uses - for compatibility */
 129        int aha1542_last_mbi_used;
 130        int aha1542_last_mbo_used;
 131        Scsi_Cmnd *SCint[AHA1542_MAILBOXES];
 132        struct mailbox mb[2 * AHA1542_MAILBOXES];
 133        struct ccb ccb[AHA1542_MAILBOXES];
 134};
 135
 136#define HOSTDATA(host) ((struct aha1542_hostdata *) &host->hostdata)
 137
 138static DEFINE_SPINLOCK(aha1542_lock);
 139
 140
 141
 142#define WAITnexttimeout 3000000
 143
 144static void setup_mailboxes(int base_io, struct Scsi_Host *shpnt);
 145static int aha1542_restart(struct Scsi_Host *shost);
 146static void aha1542_intr_handle(struct Scsi_Host *shost);
 147
 148#define aha1542_intr_reset(base)  outb(IRST, CONTROL(base))
 149
 150#define WAIT(port, mask, allof, noneof)                                 \
 151 { register int WAITbits;                                               \
 152   register int WAITtimeout = WAITnexttimeout;                          \
 153   while (1) {                                                          \
 154     WAITbits = inb(port) & (mask);                                     \
 155     if ((WAITbits & (allof)) == (allof) && ((WAITbits & (noneof)) == 0)) \
 156       break;                                                           \
 157     if (--WAITtimeout == 0) goto fail;                                 \
 158   }                                                                    \
 159 }
 160
 161/* Similar to WAIT, except we use the udelay call to regulate the
 162   amount of time we wait.  */
 163#define WAITd(port, mask, allof, noneof, timeout)                       \
 164 { register int WAITbits;                                               \
 165   register int WAITtimeout = timeout;                                  \
 166   while (1) {                                                          \
 167     WAITbits = inb(port) & (mask);                                     \
 168     if ((WAITbits & (allof)) == (allof) && ((WAITbits & (noneof)) == 0)) \
 169       break;                                                           \
 170     mdelay(1);                                                 \
 171     if (--WAITtimeout == 0) goto fail;                                 \
 172   }                                                                    \
 173 }
 174
 175static void aha1542_stat(void)
 176{
 177/*      int s = inb(STATUS), i = inb(INTRFLAGS);
 178        printk("status=%x intrflags=%x\n", s, i, WAITnexttimeout-WAITtimeout); */
 179}
 180
 181/* This is a bit complicated, but we need to make sure that an interrupt
 182   routine does not send something out while we are in the middle of this.
 183   Fortunately, it is only at boot time that multi-byte messages
 184   are ever sent. */
 185static int aha1542_out(unsigned int base, unchar * cmdp, int len)
 186{
 187        unsigned long flags = 0;
 188        int got_lock;
 189
 190        if (len == 1) {
 191                got_lock = 0;
 192                while (1 == 1) {
 193                        WAIT(STATUS(base), CDF, 0, CDF);
 194                        spin_lock_irqsave(&aha1542_lock, flags);
 195                        if (inb(STATUS(base)) & CDF) {
 196                                spin_unlock_irqrestore(&aha1542_lock, flags);
 197                                continue;
 198                        }
 199                        outb(*cmdp, DATA(base));
 200                        spin_unlock_irqrestore(&aha1542_lock, flags);
 201                        return 0;
 202                }
 203        } else {
 204                spin_lock_irqsave(&aha1542_lock, flags);
 205                got_lock = 1;
 206                while (len--) {
 207                        WAIT(STATUS(base), CDF, 0, CDF);
 208                        outb(*cmdp++, DATA(base));
 209                }
 210                spin_unlock_irqrestore(&aha1542_lock, flags);
 211        }
 212        return 0;
 213fail:
 214        if (got_lock)
 215                spin_unlock_irqrestore(&aha1542_lock, flags);
 216        printk(KERN_ERR "aha1542_out failed(%d): ", len + 1);
 217        aha1542_stat();
 218        return 1;
 219}
 220
 221/* Only used at boot time, so we do not need to worry about latency as much
 222   here */
 223
 224static int __init aha1542_in(unsigned int base, unchar * cmdp, int len)
 225{
 226        unsigned long flags;
 227
 228        spin_lock_irqsave(&aha1542_lock, flags);
 229        while (len--) {
 230                WAIT(STATUS(base), DF, DF, 0);
 231                *cmdp++ = inb(DATA(base));
 232        }
 233        spin_unlock_irqrestore(&aha1542_lock, flags);
 234        return 0;
 235fail:
 236        spin_unlock_irqrestore(&aha1542_lock, flags);
 237        printk(KERN_ERR "aha1542_in failed(%d): ", len + 1);
 238        aha1542_stat();
 239        return 1;
 240}
 241
 242/* Similar to aha1542_in, except that we wait a very short period of time.
 243   We use this if we know the board is alive and awake, but we are not sure
 244   if the board will respond to the command we are about to send or not */
 245static int __init aha1542_in1(unsigned int base, unchar * cmdp, int len)
 246{
 247        unsigned long flags;
 248
 249        spin_lock_irqsave(&aha1542_lock, flags);
 250        while (len--) {
 251                WAITd(STATUS(base), DF, DF, 0, 100);
 252                *cmdp++ = inb(DATA(base));
 253        }
 254        spin_unlock_irqrestore(&aha1542_lock, flags);
 255        return 0;
 256fail:
 257        spin_unlock_irqrestore(&aha1542_lock, flags);
 258        return 1;
 259}
 260
 261static int makecode(unsigned hosterr, unsigned scsierr)
 262{
 263        switch (hosterr) {
 264        case 0x0:
 265        case 0xa:               /* Linked command complete without error and linked normally */
 266        case 0xb:               /* Linked command complete without error, interrupt generated */
 267                hosterr = 0;
 268                break;
 269
 270        case 0x11:              /* Selection time out-The initiator selection or target
 271                                   reselection was not complete within the SCSI Time out period */
 272                hosterr = DID_TIME_OUT;
 273                break;
 274
 275        case 0x12:              /* Data overrun/underrun-The target attempted to transfer more data
 276                                   than was allocated by the Data Length field or the sum of the
 277                                   Scatter / Gather Data Length fields. */
 278
 279        case 0x13:              /* Unexpected bus free-The target dropped the SCSI BSY at an unexpected time. */
 280
 281        case 0x15:              /* MBO command was not 00, 01 or 02-The first byte of the CB was
 282                                   invalid. This usually indicates a software failure. */
 283
 284        case 0x16:              /* Invalid CCB Operation Code-The first byte of the CCB was invalid.
 285                                   This usually indicates a software failure. */
 286
 287        case 0x17:              /* Linked CCB does not have the same LUN-A subsequent CCB of a set
 288                                   of linked CCB's does not specify the same logical unit number as
 289                                   the first. */
 290        case 0x18:              /* Invalid Target Direction received from Host-The direction of a
 291                                   Target Mode CCB was invalid. */
 292
 293        case 0x19:              /* Duplicate CCB Received in Target Mode-More than once CCB was
 294                                   received to service data transfer between the same target LUN
 295                                   and initiator SCSI ID in the same direction. */
 296
 297        case 0x1a:              /* Invalid CCB or Segment List Parameter-A segment list with a zero
 298                                   length segment or invalid segment list boundaries was received.
 299                                   A CCB parameter was invalid. */
 300                DEB(printk("Aha1542: %x %x\n", hosterr, scsierr));
 301                hosterr = DID_ERROR;    /* Couldn't find any better */
 302                break;
 303
 304        case 0x14:              /* Target bus phase sequence failure-An invalid bus phase or bus
 305                                   phase sequence was requested by the target. The host adapter
 306                                   will generate a SCSI Reset Condition, notifying the host with
 307                                   a SCRD interrupt */
 308                hosterr = DID_RESET;
 309                break;
 310        default:
 311                printk(KERN_ERR "aha1542: makecode: unknown hoststatus %x\n", hosterr);
 312                break;
 313        }
 314        return scsierr | (hosterr << 16);
 315}
 316
 317static int __init aha1542_test_port(int bse, struct Scsi_Host *shpnt)
 318{
 319        unchar inquiry_cmd[] = {CMD_INQUIRY};
 320        unchar inquiry_result[4];
 321        unchar *cmdp;
 322        int len;
 323        volatile int debug = 0;
 324
 325        /* Quick and dirty test for presence of the card. */
 326        if (inb(STATUS(bse)) == 0xff)
 327                return 0;
 328
 329        /* Reset the adapter. I ought to make a hard reset, but it's not really necessary */
 330
 331        /*  DEB(printk("aha1542_test_port called \n")); */
 332
 333        /* In case some other card was probing here, reset interrupts */
 334        aha1542_intr_reset(bse);        /* reset interrupts, so they don't block */
 335
 336        outb(SRST | IRST /*|SCRST */ , CONTROL(bse));
 337
 338        mdelay(20);             /* Wait a little bit for things to settle down. */
 339
 340        debug = 1;
 341        /* Expect INIT and IDLE, any of the others are bad */
 342        WAIT(STATUS(bse), STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF);
 343
 344        debug = 2;
 345        /* Shouldn't have generated any interrupts during reset */
 346        if (inb(INTRFLAGS(bse)) & INTRMASK)
 347                goto fail;
 348
 349
 350        /* Perform a host adapter inquiry instead so we do not need to set
 351           up the mailboxes ahead of time */
 352
 353        aha1542_out(bse, inquiry_cmd, 1);
 354
 355        debug = 3;
 356        len = 4;
 357        cmdp = &inquiry_result[0];
 358
 359        while (len--) {
 360                WAIT(STATUS(bse), DF, DF, 0);
 361                *cmdp++ = inb(DATA(bse));
 362        }
 363
 364        debug = 8;
 365        /* Reading port should reset DF */
 366        if (inb(STATUS(bse)) & DF)
 367                goto fail;
 368
 369        debug = 9;
 370        /* When HACC, command is completed, and we're though testing */
 371        WAIT(INTRFLAGS(bse), HACC, HACC, 0);
 372        /* now initialize adapter */
 373
 374        debug = 10;
 375        /* Clear interrupts */
 376        outb(IRST, CONTROL(bse));
 377
 378        debug = 11;
 379
 380        return debug;           /* 1 = ok */
 381fail:
 382        return 0;               /* 0 = not ok */
 383}
 384
 385/* A quick wrapper for do_aha1542_intr_handle to grab the spin lock */
 386static irqreturn_t do_aha1542_intr_handle(int dummy, void *dev_id)
 387{
 388        unsigned long flags;
 389        struct Scsi_Host *shost = dev_id;
 390
 391        spin_lock_irqsave(shost->host_lock, flags);
 392        aha1542_intr_handle(shost);
 393        spin_unlock_irqrestore(shost->host_lock, flags);
 394        return IRQ_HANDLED;
 395}
 396
 397/* A "high" level interrupt handler */
 398static void aha1542_intr_handle(struct Scsi_Host *shost)
 399{
 400        void (*my_done) (Scsi_Cmnd *) = NULL;
 401        int errstatus, mbi, mbo, mbistatus;
 402        int number_serviced;
 403        unsigned long flags;
 404        Scsi_Cmnd *SCtmp;
 405        int flag;
 406        int needs_restart;
 407        struct mailbox *mb;
 408        struct ccb *ccb;
 409
 410        mb = HOSTDATA(shost)->mb;
 411        ccb = HOSTDATA(shost)->ccb;
 412
 413#ifdef DEBUG
 414        {
 415                flag = inb(INTRFLAGS(shost->io_port));
 416                printk(KERN_DEBUG "aha1542_intr_handle: ");
 417                if (!(flag & ANYINTR))
 418                        printk("no interrupt?");
 419                if (flag & MBIF)
 420                        printk("MBIF ");
 421                if (flag & MBOA)
 422                        printk("MBOF ");
 423                if (flag & HACC)
 424                        printk("HACC ");
 425                if (flag & SCRD)
 426                        printk("SCRD ");
 427                printk("status %02x\n", inb(STATUS(shost->io_port)));
 428        };
 429#endif
 430        number_serviced = 0;
 431        needs_restart = 0;
 432
 433        while (1 == 1) {
 434                flag = inb(INTRFLAGS(shost->io_port));
 435
 436                /* Check for unusual interrupts.  If any of these happen, we should
 437                   probably do something special, but for now just printing a message
 438                   is sufficient.  A SCSI reset detected is something that we really
 439                   need to deal with in some way. */
 440                if (flag & ~MBIF) {
 441                        if (flag & MBOA)
 442                                printk("MBOF ");
 443                        if (flag & HACC)
 444                                printk("HACC ");
 445                        if (flag & SCRD) {
 446                                needs_restart = 1;
 447                                printk("SCRD ");
 448                        }
 449                }
 450                aha1542_intr_reset(shost->io_port);
 451
 452                spin_lock_irqsave(&aha1542_lock, flags);
 453                mbi = HOSTDATA(shost)->aha1542_last_mbi_used + 1;
 454                if (mbi >= 2 * AHA1542_MAILBOXES)
 455                        mbi = AHA1542_MAILBOXES;
 456
 457                do {
 458                        if (mb[mbi].status != 0)
 459                                break;
 460                        mbi++;
 461                        if (mbi >= 2 * AHA1542_MAILBOXES)
 462                                mbi = AHA1542_MAILBOXES;
 463                } while (mbi != HOSTDATA(shost)->aha1542_last_mbi_used);
 464
 465                if (mb[mbi].status == 0) {
 466                        spin_unlock_irqrestore(&aha1542_lock, flags);
 467                        /* Hmm, no mail.  Must have read it the last time around */
 468                        if (!number_serviced && !needs_restart)
 469                                printk(KERN_WARNING "aha1542.c: interrupt received, but no mail.\n");
 470                        /* We detected a reset.  Restart all pending commands for
 471                           devices that use the hard reset option */
 472                        if (needs_restart)
 473                                aha1542_restart(shost);
 474                        return;
 475                };
 476
 477                mbo = (scsi2int(mb[mbi].ccbptr) - (SCSI_BUF_PA(&ccb[0]))) / sizeof(struct ccb);
 478                mbistatus = mb[mbi].status;
 479                mb[mbi].status = 0;
 480                HOSTDATA(shost)->aha1542_last_mbi_used = mbi;
 481                spin_unlock_irqrestore(&aha1542_lock, flags);
 482
 483#ifdef DEBUG
 484                {
 485                        if (ccb[mbo].tarstat | ccb[mbo].hastat)
 486                                printk(KERN_DEBUG "aha1542_command: returning %x (status %d)\n",
 487                                       ccb[mbo].tarstat + ((int) ccb[mbo].hastat << 16), mb[mbi].status);
 488                };
 489#endif
 490
 491                if (mbistatus == 3)
 492                        continue;       /* Aborted command not found */
 493
 494#ifdef DEBUG
 495                printk(KERN_DEBUG "...done %d %d\n", mbo, mbi);
 496#endif
 497
 498                SCtmp = HOSTDATA(shost)->SCint[mbo];
 499
 500                if (!SCtmp || !SCtmp->scsi_done) {
 501                        printk(KERN_WARNING "aha1542_intr_handle: Unexpected interrupt\n");
 502                        printk(KERN_WARNING "tarstat=%x, hastat=%x idlun=%x ccb#=%d \n", ccb[mbo].tarstat,
 503                               ccb[mbo].hastat, ccb[mbo].idlun, mbo);
 504                        return;
 505                }
 506                my_done = SCtmp->scsi_done;
 507                kfree(SCtmp->host_scribble);
 508                SCtmp->host_scribble = NULL;
 509                /* Fetch the sense data, and tuck it away, in the required slot.  The
 510                   Adaptec automatically fetches it, and there is no guarantee that
 511                   we will still have it in the cdb when we come back */
 512                if (ccb[mbo].tarstat == 2)
 513                        memcpy(SCtmp->sense_buffer, &ccb[mbo].cdb[ccb[mbo].cdblen],
 514                               SCSI_SENSE_BUFFERSIZE);
 515
 516
 517                /* is there mail :-) */
 518
 519                /* more error checking left out here */
 520                if (mbistatus != 1)
 521                        /* This is surely wrong, but I don't know what's right */
 522                        errstatus = makecode(ccb[mbo].hastat, ccb[mbo].tarstat);
 523                else
 524                        errstatus = 0;
 525
 526#ifdef DEBUG
 527                if (errstatus)
 528                        printk(KERN_DEBUG "(aha1542 error:%x %x %x) ", errstatus,
 529                               ccb[mbo].hastat, ccb[mbo].tarstat);
 530#endif
 531
 532                if (ccb[mbo].tarstat == 2) {
 533#ifdef DEBUG
 534                        int i;
 535#endif
 536                        DEB(printk("aha1542_intr_handle: sense:"));
 537#ifdef DEBUG
 538                        for (i = 0; i < 12; i++)
 539                                printk("%02x ", ccb[mbo].cdb[ccb[mbo].cdblen + i]);
 540                        printk("\n");
 541#endif
 542                        /*
 543                           DEB(printk("aha1542_intr_handle: buf:"));n="drivers/scsi/aha1542.c#L437" id="L1
printk("MBOF ");
printck_9BUF_PA(&fle: buf:"));n="drivers/scsi/aha1n>);de=pr" id=me="L4 sense:} while (
1" class="line" name="L541a href="drivers/scsef">i"> 448              5     54       is sufficient.  A SCSI reset detected iiiiiii=ccb" class="sref">ccb[                5a hre5="+code=aha1542_intr_rf">scsi_done;
s5ost->KERN_DEBUG ""line" name="L542"> 542                        /*aha1542.c#L423" id#L5="sref">mbo642.c#L428" id="L428" class="line"_DEBUG "="drivers/scsi/aha1542.c#L543" id="L5a href="d5ivers/scsi/aha1542.c#L455" id=5L451" class="line" name="L451"> 451ccb[ 534 resul"ef="+code=mbo" class="_DEBUG ""drivers/scsi/aha1542.c#L543" id="L5a3" class=k" class="sref">aha1542_5ock 499
 500                if (!SCtmp || !
errstatus = ccb[ccb[aha1542_las5_mbi_5sed + 1;
ccb[="drivers/scsi/aha1542.c#L543" id="L5ai/aha1542ne" name="L455"> 4555     5                 [printk(a href="drivers/scsi/aha1542.c#L462" 5ss="line"5name="L456"> 456
 491                i5         5          if (scsi_done;
mbi]._l"> 483#ifdef _l">"sre/a>[ 451errstatus, mbi,ass="sref">ccb[NULL;
mbi >5 2 * 560;
5462        while (1 == 1hredarcode=mbi" classhredar      ef="+code=DEB"direct/otring">"\n&direct/otquot"drivers/scsi/aha1542.c#L543" id="L5ds);
5="line" name="L463"> 4635/a>  5             }  while (1 == 1hredarcode=mbi" classhredar             int DEBU="+code=mbi" classc">mbia5a15425last_mbi_used<  while (1 == 1hredarcode=mbi" classhredar      ef="+code=DEB"targers/scsi/aha1542.targeref="+code=mbo" class="dep              if (!pnf="drUG" class="sref">DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEBi+code=mbi" classimbista5usflag;
 505+code=mbo" class="dep              if (!pnf="drUG" class="sref">DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEBass="line" name="L5"> 505"drivers/scsi/aha1542.c#L543" id="L5ds="line"5L466" class="line" name=5L466"5 466      f">SCtmp;
 405flags);
mb;
[mb;
SCtmp || "drivers/scsi/aha1542.c#L543" id="L5642.c#L455c#L469" id="L469" class=5line"56lass="line" name="L410"> 410   ass="sref">ccb;
 409
 410        mb = HOSTDATA(        5     5792"> 492                        con5         5     if (DEB="drivers/scsi/aha1542.c#L543" id="L5         5      474<5a>   57ast_mbi_used<  while (1 == 1c#L409" id="L409" class499" class="line" name="L499"> 499
DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEB#L500" id="L500" clss="line" name="L500"> 500 409
 476
flag;
 499
DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEB#L500" id="L500" clss="line" name="L500"> 500 = HOSTDATA(mb<57633        while (1 == 1href="+code=DEBUG" class="" class="sref">KERNtargers/scsi/aha1542.targeref="+nameGS(5cbptr) - (DEBresul"L534"> 534 resul"ef="+code=mbo" class="DID_TIME_OUTf="+code=DEBUG" ID_TIME_OUT"  };
HOSTDATA(5480                scsi_done;
;
fl5gs);
 484       5     58            }" cl        int a>(errstatus = makecdo=tarstUG
-ss="ref="s no guarantee al+cody<=ccb" class="sref">ccb[mbo].KE 0ss="sref">ccb[[mbo].errstatus = ccb[ccb[ccb[<5 href5"+code=mbo" class="sre" class="sref">KERNaha1542i/aha1542.c#L40aha1542 505+s="line" name="L46="drivers/scsi/aha1542.c#L517" id="L517" class="line" name="L5ss="sref">ccb[/*aha1542: Wde"  ode=cdr542gth suppliedde=cdblen" class="sref">ccb[mbo]./*="+crs/seiro guara("+code=tarstat" class="sref">mb;
mbo].5* Abo5ted command not found s/scsi/aha1542.dep              if (!pnf="drUG" class="sref">DEBresul"L534"> 534 resul"ef="+coscsi/aha1542.c#L527" id="L527" class=ef="drive5s/scsi/aha1542.c#L494" i5="L495" class="line" name="L       int  495       5     59ed + 1;
(<5 href="+code=KERN_DEBUG"5class59ref">flagf">scsi_done;
mboi++)
S5tmpccb[ 508            +code=printk" class="sre/a>            xSCint[mL525}" cl        int ccb[ 525
#ifdef  495       6class6"sref">mbo].ccb[mb;
mb;
mb;
 506          6     6a href="+code=L525"> 525
mboccb[mb;
mb;
mb;
S6="lin60633        while (1 == 1"+code=mme="L534"> 534 "+code=mme="L529"="drivers/s>
ccb[mb="dricms:span>
printk("%s/scsi/aha1542.dep              if (!pnf="drUG" class="sref">DEBcms_"string">"\n&qms_"stSTDATx ", ccb[    6     6        Adaptec automat      int mbo].cdblen      6     610;
 542                        /*
ccb[ 513            ="sref/schref="drf">errstatus = ].makehrwritme="L521"> 521                        ccb<6a>[mbo].
errstatus = mb href="="drnef="ef="-robrnefashion, beca2.c#L4iscb" class="sref">ccb[/* is there mail :-)6*/);de=pr" id=me="L4 sense:} while (]cr"     L47me="L521"> 521                         483#ifdef DEBUG
SCSI_BUF_P" class="line" name="L499"> 499
DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEB#L500" id="L500" clss="line" name="L500"> 500spin_unlock_irqrestore(&ombi6tatus != 1 what's right */SCSI_BUFnamee=HOSTDATA" class="sref">HOSTDATA(ccb[/* This is surel6 wron6, but I don't know       int SCSI_BUF_Pscsi/aha1542.c#L527" id="L527" class622"> 522<6a>                      6  == 2) {
mbo].]cr"     L47me="L521">hreft_scribble = NULL;
ccb[(&aha1542_locivers/scsi/aha1542.c#L541" id="L541" cla">flags);
DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEB#L500" id="L500" clss="line" name="L500"> 500spin_unlock_irqrestore(&oerrstatus = mb">DEBUG
)
 =  491            6528"> 5286/a>                     6  ccb[/* This is surel6 wron6, but I don't know       int "(6ha1546 error:%x %x &622"> 522<6a>                      6  == 2) {
ccf">ccb[DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEB#L500" id="L500" clss="line" name="L500"> 500spin_unlock_irqrestore(&ombi6tatus<="L50       int ta6stat);
 501                  6 href="+c6de=tarstat" class="sref"6tarst63="L527" class>(&aha1542_locivers/scsi/aha1542.c#L541" id="L541" cla">flags);
KERN_Dss="sref">DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEB#L500" id="L500" clss="line" name="L500"> 500spin_unlock_irqrestore(&oerrstatus = 63" id="L4556dlun=Ÿx ccb#=%d \hreic542.c#L543" id="reic      6 if ( 5a h_PA" class61rs/scsi/aha15" cl        int D6BUG

DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEB#L500" id="L500" clss="line" name="L500"> 500spin_unlock_irqrestore(&oerrstatus = , );
5a hrefprev"+c some498"rqrREfromDEB(fle: buf:::::::::::::::::::::::::::::::::screwcodewith61n>)ass=.a>
DEB6G63 href="drivers/scsi/a6 7" nass="sref">DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEB#L500" id="L500" clss="line" name="L500"> 500spin_unlock_irqrestore(&ombi6tatus);
 410   ass="sref6sref">i++)
 483 483#ifdef DEBUG
 484                {
pri6tk != 1)
ccb[S5tmp 542
mb="dricms:span>
 498                       6class6"sref">mbo
aha1542_locivers/scsi/aha1542.c#L541" id="L541" claccbptp              iccbptpf="+code=SCtmp" class1542.BUF_Pf">DEBs/scsiring1542.BUF_PfDEBUG
"\n");



"\n");
HOSTDATA( 451
1" c6ass="64ame="L50       int ccb[6a hre64" class="line" name="L483"> string">"\n");
 541#ed/scsi="drUG" class="sref">DEBass="line" name="L5"> 505"drivers/sc[KE6N_DEB6G  4635/a>  5          = 2) {
ccb[(&an ef="+||         int ccb[ 499
 4635/a>  5          = 28 {

ccb[ 513            ="sref/schref="drf">errs"+code=kf6ee" class="sre/a>[ccb[="drivers/e" name="L463"> 4635/a>  5          = 2 id="L479"       int print6(65" id=="drivers/scsi/aha1542.c#L5196 id="   i5    6    5          if (mbo]. 540                        printk 540                         541#ss="line" name="L451"> 451].(&aref="+code=prinp" class="sref">S6="lin60633  ">NULL;
_l"6 483#ifdef HOSscatterlimp" class="sref">Scatterlimp" nam_6e="L5ss="sref"sg" class="sref">Sg><6paL50       int mbi >5 2 6 560;65a>].HOSThaiine" name="L541">haii" nam_6e="L5ss="sref"cptp              icptpf="+aL50       int S5tmp
    #ed/scsi="drUG" claode=msg_couc#L527" id="L527" de=msg_couc#\n&d/scsi="drUG" class="sref">DEB#L500" id="L500"ss="line" name="L451"> 451 540                         5Css="sr5 w/Scatter-gaa hr">
DEBass="line" name="L5"> 505"drivers/sc10" id="L510" class="line" name="L510"> 510,
#].DEBs/scsiringGFP_DMf500"ss="line" name="L451"> 451HOSThaiine" name="L541">haii" nam_>mbi 510 451_l"6NULL;
mb 6 mb
/*
DEBs/scsiring">"\n&d/scsi="drUG" class="sref">DEB#L500" id="L500" clss="line" name="L500"> 500spin_unlock_irqrestore(&oerrstatus = ( 5de=SCtmp" class1542.MLQUEUE_">&q_BUSY">DEBs/scsiring1542.MLQUEUE_">&q_BUSYass="="drivers/scsi/aha1542.c#L5196 id=" /a>
 474<5a>  657ast67*ref">makehrwritme="L> < 12; ccb[="drivers de=mfor_each_sg" class="sref">Sde=mfor_each_sg\n&d/scsi="drUG" class="sref">DEB#L500" id="L500"a1542.c#L540" id=sg" class="sref">Sg><6pa1542.c#L540" id=sg_couc#L527" id="L527" g_couc#/a>#5="drivers/s>
NULL;
 467i/aha1542.c#L527" id=sref">ccb[="driversany2c#L442.c#L484" id="Lny2c#L4      =mqueueBUGeptp              icptpf="+class="comment">      6     610;
DEBs/scsiring1542.SG_Pf      =mqueueBUGsg" class="sref">Sg><6pass="line" name="L451"> 451mb65763367"             ccb[="driversany2c#L442.c#L484" id="Lny2c#L4      =mqueueBUGeptp              icptpf="+class="comment">      6     610;
S6="li"+colas500"a1542.c#L540" id=sg" class="sref">Sg><6pne"5L466" class="lineus" c" class="sref">eus" c500"ss="line" name="L451"> 451KERNtarger6/scsi67a href="drivers/scsi/scsi_done;
D6Bresu6"L534"> 534 re">ccb[="driversany2c#L442.c#L484" id="Lny2c#L4      =mqueueBUGeL540" class="line" name="L540"> 540                        S6="li"+colas500"a1542.c#L540" id=sg_couc#L527" id="L527" g_couc#/a>#e*n>,
HOSThaiine" name="L541">haii" naass="line" name="L451"> 451_l"6sref/a>[ccb[="driversany2c#L442.c#L484" id="Lny2c#L4      =mqueueBUGeL540" class="line" name="L540"> 540                        DEBs/scsiring1542.BUF_PfDEBUG6e="L5ss="sref"cptp              icptpf="+)ss="line" name="L451"> 451S5tmpfl5gs);
 522<6a>          i/aha1542.c#L543" id="L6         6 if ( 451 484       5    658   68" id="L4556dlun=Ÿx ccb#=%d \htp              iptpf="+f (! 405mbimakehrwritme="L37;02x ", ccb[    6     6        Adaptec automat      int mak6cdo=tarstUG
-ss="ref6"s no6guarantee al+cody<=ccb622"> 522<6a>          i/aha1542.c#L543" id="L6         6 if (      6     610;
 542      cs="line"6[);n="drivers/scsi/aha1542.c#L437" id="L6r clasrs/6eiredguar()is svides a o6e=cdr6f=sref 256,cb"}rrqrRE>NULL;
 540                         5Css="sr5>
DEBass="line" name="L5"> 505"drivers/sc10" id="L510" class="line" name="L510"> 510[="driversany2c#L442.c#L484" id="Lny2c#L4      =mqueueBUGeL540" class="line" name="L540"> 540                        S6="li"+colas500"a10ef="drivers/scsi/aha2"> 542      cf="+code6ment">/*="+crs/seiro gua6a("+c6de=tarstat" class="sreb[="driversany2c#L442.c#L484" id="Lny2c#L4      =mqueueBUGeL540" class="line" name="L540"> 540                         542       inue;   65  ;
DEB69DEB="drivers/scsi/aha154eL540" class="line" name="L540"> 540                        5cbpc: in7)45.c#L479"5RI.6e="L5ss="sref"/e" name="L463"> 4635/a>  5          =|(!ref="+code=prin">DEBs/scsiring">"\n&pc: in7)"sref">ccb[
[ 540                        S6="lirsolasf="+f ( id="L479"       int (<5 hre6="+co69a>
 540                         540                         540                        mb6 540                        sta5us#ed/0;{
++)
S5tmp            x            ccb[mb;
);7 5237;02x ", ccb[,
 540                        ccb[ccb[DEBU="+code=mbi" classc">m.c: in!pnf="drUG" claeL540" class="line" name="L540"> 540                              6     610;
 542     7kfree"ss=7sref"vers/scsi/aha1542.c7L455"7id="L4556d3un=scsi_done;
errstatus =  495       6class6"sref">mboNULL;

70a href="drivers/scsi/542.c#L540" id=([ccb[7""sre/a>            x[="driversae=6Lhref="+code=shost" clas6ass="6ine" name=aha15" cl        int 7"cmsef="+ccode=mbo" clas7ss="s70e" name="CRITf="+codeb[="driversss="sref">DEBass="line" name="L5"> 505"drivers/scSde=m/a>       6class6"sSde=m/a> 10mboha15" cl        int 7""sre/a>            mbo7/a>].aha1542_locivers/scsi/aha1542.c#L541" id="L541" cla">flags);
71="L527" class622"> 522<6a>          s6ass="6ou+code=shost" clas6ass="6ou+" claef/a>[DEB#L500" id="L500" clss="line" name="L500"> 500spin_unlock_irqrestore(&o
ccb[[7= ].makehrw}done" class="sre       int 
ccb[m7 href="="drnef="ef="-rob7nefas71" id=="drivers/scsi/aha1542.c#L5196 id=7L473"ost 7ome brbo]cr"     L477e="L571"            ef">flagf">scsi_done;
7P" class="line" name="L479"> 479
ine"ic6x ccb#=%d \([7BUFnamee=HOSTDATA" class7"sref71 name="L501"> 501                  7s="sref">7CSI_BUF_Pscsi/aha1542.c#7527" 7d="L52sref">ccb[
p_=m6ass="cs);
p_=m6ass="c" cla4    HOSSde=mHre(&oDEB#L500" sh="s>mbo< < 12; hreft7scribble = NULL;
m7">DEBUG
HOS=m6ass=vers/scsi/aha154m6ass=lassc"542.c#L540" id= href=5drive57ref">flag;
)
HOSTDATA( 5287/a>                     7  "(7ha15472" class="line" name="L483"> s="sref">DEBU="+code=mbi" classc6e="L5ss="sref"c name="L541611/* This is surel6 wron6, but I do, 0,n0,n0scsi_done;
ta7stat);
flagf (!pnf="drUG" class="sref">DEBs/scsiring">"\n&d/scsi="drUG" clash="sref">DEB#L500" sh="s>mbo<42status" class="sre href=5drive57ref">flag;

DEBs/scsiring">"\n&d/scsi="drUG" clash="sref">DEB#L500" sh="s>mbo<42status" class="sreco" clas5="sre57 if (73 name="L514ame="L518a>]cr"     L47me="L7="sref">D7BUG
makehrw37s/scsi/aha1542.dep              if (!pnf="drUG" class="sref">DEBcms_"string">"\n&qms_"stSTDATx &qm6n class="6omment">/* This is surel6 wron6, but I doss="sref">ccb[NULL;
aha1542_l      6     610;
flags);
aha1542_lm6n class="6omment">/* This is surel6 wron6, but I do +s="sref">ccb[flags);
scsi_done;
DEB(aha1542_l[DEBs/scsiring1542.BUF_PfDEBUG
"\n");
 5287=DEBUG" class="sref">DEB7G73 href="drivers/scsi/a6 7" nas6ass="64  r_res+code=printk" clas6ass="64  r_res+c      =mqueueBUGbs 500ccb<6 bass=o>
i++)
 any2c#L442.c#L484" id="Lny2c#L4     csi/6ha1542.c#L501" id="L501"6class6"line" namcode=SCtmp" class1542.BUF_Pf">DEBs/scsiring1542.BUF_PfDEBUG6e="L5ss="sref"de=aha1542_lock" class=eaha15" cl        int pri7tk
[ta7">ccb[ [/* This is sINTRFLAGn      =mqueueBUGbs 500/* This is sINTRMASKf="+cosi/6ha1542.c#L5HACC">DEBs/scsiring"ACCI do, 0aha15" cl        int  542
NULL;
DEBs/scsiringfm6auot;:NULL;
D7ef="drivers/scsi/aha15427c#L4574*ref">makehrwritme="L="+code=ccb" class="sref">ccb[ccb[);
 < 12; 
 < 12;  5287="line" nam(
1" c7ass="74ame="L50       int ccb[7a hre74" claine"ic64    s6ass="6getconfig" cla4    DEBs/scsiringirq_leveaI do,  405 4635/a> ma_ef==I do,  405sta5usmbo< < 12; ta7class="" class="sref">KE7N_DEB7G DEBU="+code=mbi" classc6e="L5ss="sref"inquiry_01" id="L501"6clasinquiry_01";
; < 12; ccb[
DEBU="+code=mbi" classc6e="L5ss="sref"inquiry_resul(&o

[/* This is ssTATUn      =mqueueBUGbase_iivers/scsi/aha15base_iiI doeaha15" cl        int  495<>DEBcms_"string">"c: in!pnf="drUG" claDFppliedde=cdblenDF>
NULL;
print7(75i/aha1542.c#L527" id=542.c#L540" id=              if (!pnf="6e="L5ss="sref"ine=aha1542_lock" ine" claef/a>[DEBs/scsiringuot;\n&d/scsi="drUG" clabase_iivers/scsi/aha15base_iiI doeaha15" cl        int ].[ a6ass="64 ode=printk" clas6ass="64 " claef/a>[(&o[/* This is sINTRFLAGn      =mqueueBUGbase_iivers/scsi/aha15base_iiI doecosi/6ha1542.c#L5INTRMASKt">/* This is sINTRMASKf="+cosi/6ha1542.c#L5HACC">DEBs/scsiring"ACCI do, 0aha15" cl        int mbi >5 2 7 560;75a>].DEBs/scsiringfm6auot;:NULL;
ccb[ccb[
makehrw}a15" cl        int 
 495<>nquiry_resul(&oNULL;
;
 4635/a> ma_ef==I dof="7ha15" cl        int _l"7mb 7  4635/a> ma_ef==I dof="id="L479"       int /*(case 0x20:NULL;
 474<5a>  757ast77*ref">makehrwritme="Lcef="drivers/scsdma_ef=="L463"> 4635/a> ma_ef==I dof="5 {
ccbreak {
 477i/aha1542.c#Lcase 0x01:NULL;
mb75763377"              4635/a> ma_ef==I dof="gf">scsi_done;
KERNtarger7/scsi77a href="drivers/scsi/break {
D7Bresu7"L534"> 534;
[ccb                    ccb<6 use a DMA ef=nnel. = <5 href="+code=mbi7 clas77ass=""L4href="+code=printk" class="o_potcef">fCurrintly only aware of=mbclBusLogic BT-445S VL-Busladapter"which3needs61n>).a>
fl5gs);
 52cef="drivers/scsdma_ef=="L463"> 4635/a> ma_ef==I dof="gxFF {
 484       5    758   78" id="L4556dlun=Ÿbreak {
makehrwdefaul<:NULL;
mak7cdo=tarstUG
-ss="ref7"s no7guarantee al+cody<=ccb="+code=ccb" class="sref">ccb[ccb[[fla- != 1 what's right */ 495<>nquiry_resul(&oNULL;
 534;
DEBs/scsiringirq_leveaI dosc> 5 {
/*="+crs/seiro gua7a("+c7de=tarstat" class="srebreak {
;
DEB79" id="L4556dlun=Ÿcef="drivers/scsirq_levea">DEBs/scsiringirq_leveaI dosc> 4 {
makehrwritme="Lbreak {
mak727" class=ntk(<5 hre7="+co79a>
mb7DEBs/scsiringirq_leveaI dosc> 2 {
++)
 534;
            xDEBs/scsiringirq_leveaI dosc>  != 1 what's right */            );8 52cef="drivers/scsirq_levea">DEBs/scsiringirq_leveaI dosc> gf">scsi_done;
;
DEBs/scsiringirq_leveaI dosc>9 {
mb8mbo;

80a href="drivers/scsi/542.c#L540" id=ass="sref">ccb[ccb[8""sre/a>            xfla- != 1 what's right */8""sre/a>            mbo8/a>].sta5usmbof="6e="L5ss="sref"inquiry_resul(&o81="L527" classef">flagf">scsi_done;
8= ]. 5id="C2boards - w8"car detectm8 href="="drnef="ef="-rob8nefas81" id="L4href="+code=printk" clmbclspecial firmware s+c clac "sr5unass=ombclboard >
]cr"     L478e="L581a>        while (1 == 1href="+code=DEBU8L5196 cla8s="line" name="L5196> 51861ne"8name="ine"ic64    NULL;
 481e" name="CRITine"ic6x ccb#=%d \s="sref">DEBU="+code=mbi" classc6e="L5ss="sref"mbenable_01" id="L501"6clasmbenable_01";8BUFnamee=HOSTDATA" class8"sref819" name="CRITine"ic6x ccb#=%d \s="sref">DEBU="+code=mbi" classc6e="L5ss="sref"mbenable_resul(&o8CSI_BUF_Pscsi/aha1542.c#8527" 82="L527" class>    DEBs/scsiringef"vaaa hr;{
mbo].]cr"     L47me="L821">hreft8scribble = DEBs/scsiringef"vaaa hrf="6e="L5ss="sref"BIOS_TRANSLATION_64BUG

m8">DEBUG
)
[ 5288/a>                     8   495["(8ha15482error:%x %x &ef">fla DEBs/scsiringef"vaaa hr;{
8542.c#L529" id="L529" cl8ss="l82
[/* This is sINTRFLAGn      =mqueueBUGbasevers/scsi/aha15base>mbo/* This is sINTRMASKf="+cosi/6ha1542.c#L5HACC">DEBs/scsiring"ACCI do, 0co100aha15" cl        int ta8stat);
831 href="drive%G6e="L5ss="sref"deenable_resul(&o(&oNULL;
D8BUG
makehrwritme="L="+code=ccb" clmbenable_01" id="L501"6clasmbenable_01";#end8f
DEB((&o 5288=DEBUG" class="sref">DEB8G83a href="drivers/scsi/%G6e="L5ss="sref"deenable_resul(&o(&oi++)
DEBs/scsiringef"vaaa hrf="6e="L5ss="sref"BIOS_TRANSLATION_255      ef="+siringBIOS_TRANSLATION_255  a hr;{
8printk" class="sref">pri8tk != 1)
ta8">ccb[].[ 542 522<6a>          WAsuppliedde=cdblenWAsu" claef/a>[/* This is sINTRFLAGn      =mqueueBUGbasevers/scsi/aha15base>mbo/* This is sINTRMASKf="+cosi/6ha1542.c#L5HACC">DEBs/scsiring"ACCI do, 0)"a15" cl        int D8ef="drivers/scsi/aha15428c#L4584*ref">makehrwwhile h0ax>NULL;

DEBs/scsiringfm6auot;:NULL;
ccb[ccb[ 5288="line" nam(
1" c8ass="84 href="drivers/scsi/a6 7" nas6ass="64  r_res+code=printk" clas6ass="64  r_res+c      =mqueueBUGbasevers/scsi/aha15base>mboccb[8a hre84error:%x ef">fla DEBs/scsiringef"vaaa hr;{
ta8class="" class="sref">KE8N_DEB84 name="L501"> 501                  8lass="sre8">ccb[ccb[.a>
DEBs/scsiringtransa>mbo< < 12; 
NULL;

DEBU="+code=mbi" classc6e="L5ss="sref"inquiry_01" id="L501"6clasinquiry_01"; !};{
print8(85a 5ref="+iDEBU="+code=mbi" classc6e="L5ss="sref"inquiry_resul(&o].[/* This is ssTATUn      =mqueueBUGbase_iivers/scsi/aha15base_iiI doeaha15" cl        int  495<>DEBcms_"string">"c: in!pnf="drUG" claDFppliedde=cdblenDF>
NULL;
#ifdef [="drivers              if (!pnf="6e="L5ss="sref"ine=aha1542_lock" ine" claef/a>[DEBs/scsiringuot;\n&d/scsi="drUG" clabase_iivers/scsi/aha15base_iiI doeaha15" cl        int mbi >5 2 8 560;85a>].
[="drivers/scsi/aha154a6ass="64 ode=printk" clas6ass="64 " claef/a>[(&o
[/* This is sINTRFLAGn      =mqueueBUGbase_iivers/scsi/aha15base_iiI doecosi/6ha1542.c#L5INTRMASKt">/* This is sINTRMASKf="+cosi/6ha1542.c#L5HACC">DEBs/scsiring"ACCI do, 0aha15" cl        int 
DEBs/scsiringfm6auot;:NULL;
ccb[ccb[ a6ass="64  r_res+code=printk" clas6ass="64  r_res+c      =mqueueBUGbase_iivers/scsi/aha15base_iiI doeha15" cl        int _l"8mb 8 ].DEBs/scsiringtransa>mbof="6e="L5ss="sref"BIOS_TRANSLATION_64BUG
ccb[("ref">ccb[ 474<5a>  857ast87*ref""L4href="+code=printk" class="o_p" cdware bug"which3car lead to wrola2bass=slbecla2ef">fledembclboard 487" id="L4href="+code=printk" clllllllllscsi/a, w8"simply"ignore mbclboard "sr5let=mbcll740 scsi/a pick3ic up.mb85763387"    "L4href="+code=printk" clllllll>
KERNtarger8/scsi87ame="L50       int D8Bresu87" class="lineŸx="L495"> 495<>nquiry_resul(&oNULL;
[ccb42.c#L540" id=ass="sref">ccb[ccb[].fla != 1 what's right */fl5gs);
 484       5    858   88 name="L514ame="L518a>]cr"     L47me="L8k_irqrcms8f="+ccode=mbo" class="RE8UEST 88*ref">makehrw"ref">ccb[) -2boards that=do not suppor< extendedebios transaa    mak8cdo=tarstUG
-ss="ref8"s no88"    b                    < class="o_pwill6ignore mbcl42.c#L5, "sr5w8"will6set=mbclproper defaul
[DEBs/scsiringtransa>mbof="6e="L5ss="sref"s6ass="6mbenableode=printk" clas6ass="6mbenable" cla =mqueueBUGbase_iivers/scsi/aha15base_iiI doeha15" cl        int fla) {
/*="+crs/seiro gua8a("+c88 name="L501"> 501                  8 inue;   85   501                  8  na5e="L8 (!pnf="drUG" class="sre8">DEB89 nameine"ic6ef="+cef="drivers/scsSf">p_stp              iSf">p_stp;/* This is sMAXBOARDn;p_id=vers/scsi/aha15Sf">p_id=>mbof=") {
mak827" class=ntk(<5 hre8="+co89ss="l{
mb8pode=printk" clas6ass="6Sf">p" claef="+cef="drivers/scsStp              iStpf="+co4   cef="drivers/scs4  gs);
mbo< < 12; ++)
NULL;
 534mbof="6/scsi/aha1542.c#L543" id="L6/scsi: usage: L6/scsi=;\n&PORTBASE2sta[,;\n&BUSON2sta,;\n&BUSOFF2sta[,;\n&DMASPEED2sta]]class61rs/scsi/ {
p_porp_por             495p_id=vers/scsi/aha15Sf">p_id=>mbof2sta="6e="L5ss="sref"MAXBOARDnt">/* This is sMAXBOARDn;NULL;
 52542.c#L540" id=ass="sref">ccb[ccb[p"called4too c#Ly times! Bad LILO params ?class61rs/scsi/aha15" cl        int ccb[ccb[p_stp              iSf">p_stp;[makehrwritme="L="+code=ccb" class="sref">ccb[ccb[p_stp              iSf">p_stp;(<5 hre9" nam90uarantee al+cody<=ccb="+code=ccb" class="sref">ccb[ccb[mb9mboflha15" cl        int  5349"+code=mme="L529"="drive9s/s>
90a href="driveŸx="L495"> 495<4  gs);
mbop0]&p\n&q1 |I.6e="L5ss="sref"4  gs);
mbop0]&psta 4ax>NULL;
            xccb[ccb[9"cmsef="+ccode=mbo" clas9ss="s90     if (!pnf="dr">ccb42.c#L540" id=ass="sref">ccb[mboaha15" cl        int 9""sre/a>            mbo90a>].ccb[ccb[91="L527" class}a15" cl        int p_called              iSf">p_called;p_id=vers/scsi/aha15Sf">p_id=>mbot/ah
);
mbop0]ha15" cl        int ].p_stp              iSf">p_stp;p_id=vers/scsi/aha15Sf">p_id=>mbot/ah
m9 href="="drnef="ef="-rob9nefas91a 5ref="+ip_porp_por);
mbop0]f2sta="1 ?h
);
mbop1] :"drU rw"ref">ccb[]cr"     L479e="L591"            s/scsi/a6 7" naSf">p_buso ode=printk" claSf">p_buso ;p_id=vers/scsi/aha15Sf">p_id=>mbot/ah
);
mbop0]f2sta="2 ?h
);
mbop2] :"7ha15" cl        int p_busoffode=printk" claSf">p_busoff;p_id=vers/scsi/aha15Sf">p_id=>mbot/ah
);
mbop0]f2sta="3 ?h
);
mbop3] :"5 {
 495<>n gs);
mbop0]f2sta="4ax{
9P" class="line" name="L499"> 491e" name="CRIT>NULL;
].9CSI_BUF_Pscsi/aha1542.c#9527" 92="L527" class622"> 52switch376x="L495"> 495<>n gs);
mbop4]ax>NULL;
hreft9scribble = makehrwritme="L="drivers/scsi/a6 7" naatbcode=printk" clastbca hr/ah0x0) {

m9">DEBUG
;
)
 5289/a>                     9  "(9ha15492error:%x %x &case 7:NULL;
cc="drivers/scsi/a6 7" naatbcode=printk" clastbca hr/ah0x0 != 1 what's right */]. 52case 8:NULL;
93" id="L4556dlun=Ÿ="drivers/scsi/a6 7" naatbcode=printk" clastbca hr/ah0x02 {
D9BUG
makehrwritme="Lbbbbbbbbbreak {

;
DEB( 5289=DEBUG" class="sref">DEB9G93a href="drivers/scsi/defaul<:NULL;
i++)
ccb[ccb[9printk" class="sref">pri9tkcc="drivers/scsi/a6 7" naass="sref">ccb[mboaha15" cl        int ta9">ccb[].ccb[ccb[ 542 52="driverbreak {
D9ef="drivers/scsi/aha15429c#L4594*ref">makehrwritme="L="+code=ccb" clSf">p_dmaspeed              iSf">p_dmaspeed;p_id=vers/scsi/aha15Sf">p_id=>mbot/ah

 495p_porp_por);
p_id=vers/scsi/aha15Sf">p_id=>mbot/ah
p_porp_por 528.ef"2ne" n94na hrWARNIN s8salit88ame="L50       int9 int ccb[++>);
p_id=vers/sc15Sf">p_porta8cla9s="" 9lass="sref">KE8N_DEB84 name="L501"> 501<9a>       9          8lass="sre8">c9b9p" claef="+cef="drivers/scsStp ">p_por
<9 href9"drive
mbop4]ax>NULL;

 495<>n gs);
mbop0]ha15" cl       ref="driv9rs/scssref8"+code=kf8ee"9class95/scsi/aha154296#L5191ss="l{
print8f="+585=sref 256,ccoun  );
p_id=vers/sc15Sf">p_por].9a href="+c5de=8t55>s85 href="get_op cauh376x="L495"> 49get_op cauhref">ccb[[ccb[p_porpode=printk" ccb[p_por#95ode=mbo" clas8="REA89/a> != 1)
m9i >5 2 8a hre84error:%x ecoun  );
p_id=vers/sc15Sf">p_por       5    858   88 name="L514ame="L59 int 
[p_porp_pormb85763387"    "/* 8a hre8non-zero o5id="C2bid=" mbcldefaul
podd="C2boak" ERRuccode89cb" class="sef=_host_templats up=tarS">p_porp_porNULL;
_l"8priunsigla2bclas6rintk" cla_64 id> 52cef="drivers/scsdma_ef=="L463"15Sf">p_pormb unsigla2bclas6rintk" cla_64 i<=ccbcef="drivers/scsirq_levea">DEBs/15Sf">p_pormb unsigla2bclas6rintk" cla_64 ista515Sf">p_porp_porp_porp_porprintERRuccode89cb" class="Se=mfHost p_porp_porp_id=>mbof=") {
p_porp_por[<97 id="L529" cl8ss="l82
[c[p_por9= <5 97ass="sref">KE8N_DEB84 name="L501"> 501<9 right */9A" class="8d="L5"sre8">f95gstpn  [       5    858   88 name="L514ame="L598a>]cr"  9  L47me="L8k_irqrcms8f="9ccode9mbo" c#ifent"85* Ab89="L52#ifndef"6e="L5ss="sref"MODULE id="L501"6clasMODULEname="L501"> 501<9/aha1542.9#L5196 id=8rDef">mak8cdo9tarst98sre/a>[ s="sref"s6ass="6Sf">pogsp_buso ode=printkclasmbenable_01"; s="sref"s6ass="6Sf">pogsp_busoffode=printk"clasmbenable_01"; s="sref"s6ass="6Sf">pogsNULL;
pri9tk 52swL501"> s="sref"s6ass="6Sf">pogs);
mbop4]ax>NULL;
/*=98a href="+code9mbo" 93" id="L4556dlun=Ÿcase 5:NULL;
       9          8 inue;   85  9span 99             9span 94="L527" 2.c#L527" id=="drivers/scsi/a6 7" naatbcode=prinaha15Sf">p_id=>mbof=") {
93" id="L4class622"> 52="driverbreak {
;
mak827"9class99de=mbo" clas1926" c92uarantee2.c#L527" id=="drivers/scsi/a6 7" naatbcode=printk" clastbca hr/ah0x04 {
( 52="driverbreak {
++9
;
 52="driverbreak {
pri9tk 52case 8:NULL;
 99a href="+code9mbo" 93a>].10re="drivers/sc9i/aha93error:&#class622/pre> clastbca hr/ah0x02 {
;
10r> = makehrwritme="L="drivers/scsi/a6 7" naatbcode=printk" clastbca hr/ah0x03 {
mak827"10rha>10rde=mbo" clas1926" c92uarantee al+cody<=ccbbbbbbbbbbreak {
10r/a>(++10ri">10r(me="L4 se="+9ode=c94"             p_dmaspeed             clasmbenable_01";p_por10rode=mbo" clas8="REA89/a> != 1)
10rmb85763387"    "/*bcldefaul
10msss="sre5">mb85763387"    "+9ode=c94*de=c94Hu>].6/scISA Plug'n'Pray Adaptecs (a>[<535)bcldefaul
mb85763387"    "+9ode=c94*mbcldefaul
10m2de=mbo" clas8="REA89/a> != 1)
10mscsi/aha1542.cf>ccb[p_porm9 hr10aha>10m/a>(10m(me="L4 se="+9ode=c94ERRuccode89cb" class="pns_devcsi/aha1542.depans_devode=p*rintk" cla_64 ipdevcsi/aha1542.depadevode=p15Sf">p_porp_por[ccb[mbop4]ax>NULL;
ccb[);
p_por9P" 10aha>10mss="sref">pri9tkp_por9BUF10rs/>10ma href="+code9mbo" 93a>].p_porccb[c[[[mbop0]f2sta="4ax{
9CSI10A" >10A"s="sref">pri9tk0xhref/scsi/aha15base_ii2devcsi/aha1542.depadevode=/15Sf">p_pormb10rs/>10A"line" name="9533">93" id="L4cf>ccb[);
p_porhreft9scr10rs/>10A> = maaaaaaaaa al+cody<=ccbbbbbbbbbbreak {

10Ade=mbo" clas1926" c92uarantee2re5">mb85763387"    "/*bcldefaul
m9">D10aha>10Aine" name="L489"> 487" id="L4href="+cooooooooooooooo*de=c94Activata>[
)10rs/>10Aass="sre5">mb85763387"    "L4href="+cooooooooooooooo*mbcldefaul
 5289/a>10aha>10Ana hrWARNIN s8salit88ame="L50       int10A7f="driv10aha156o" c9a="+code=9n c10aha>10Af="drivers/sc9i/aha93error:&#cf>ccb[[p_porpri9tkp_por10Aass="sref">KE8N_DEB84 name="L501"> 501<103ef="driv10aha156o" c9 href="+c9de=10aha>10ah="drivers/sc9i/aha93error:&#cf>ccb[[mbop4]ax>NULL;
93" id="L444444444ccb[[p_porD9BUG10aha>10a> = maaaaaaaaacontinue15Sf">p_por
10ade=mbo" clas1926" c92uarantee8s=" c86a href="drive}a15" cl      1034f="driv10rs/scssref9EB" class9"sr10rs/>10af="+code=mbo"8class88" id=="drivers/scs10a5f="driv10aha156o" c9 473"ost 9rs/10aha>10a1542.c#L537" 9d="L593"       cf>!ccb[[mbop4]ax>NULL;
 5289=DE10aha>10a             9  [p_pori++10rs/>10af="drivers/sc9i/aha93error:&#aaaaaaaacontinue15Sf">p_por9pri10msp>10ass="sref">pri9tkta9">c10msp>10aass="sref">KE8N_DEB84 name="L501"> 501<104ef="driv10mspin_unlo9"> 54210ms href="+code9mbo" 93a>].);
p_por[p_por10m>       5    858   88 name="L514ame="L510m2f="driv10mspin_unlo9E"sref">D9ef=10msp>10m> = makre5">mb85763387"    "/* Tass="sim_p" be" id=i     mritscsi:ntk" have bcldefaul


10mf="+code=mbo"8class88" id=="drivers/scs1045f="driv10=i" class=9pef="driv9="l10=i">10m="drivers/scs9/aha192"             ccb42.c#L540" id=ass="sref">ccb[ccb[[<535 calI/O 0xc#L5403X" id="L6/scsi: %cclass61rs/sa href542.c#L540" id=basegs);
p_por 528.ef"10ha1>10m             9  10mf="drivers/sc8s=" c86a href="drive}a15" cl      1048f="driv10aha156o" c8if="+code8/s 10aha>10mss="sref">pri  mr>ccb[[ccb[ta8cla10msp>10mSTDATA" class9"sref91a.c#L494i/aha1542.ca href542.c#L540" id=basegs);
DEBcmDEBcms_"string">"re idst_regicsi/a6 7" naSf">pre idst_regicsref">ccb[);
[mbop4]ax>NULL;
c10   >10  "drivers/scs9/aha192"             p_porccb[
<10#L5>10 "line" name="9533">93" id="L44444444444444444sizeof ERRuccode89cb" class="/aha1542host p_por
10 2de=mbo" clas8="REA89/a> != 1)
10 de=mbo" clas1926" c92uaranteecf>ccb[mbop4]ax>NULL;
prelese_iregicsref">ccb[);
p_porp_por10              9  10 f="drivers/sc9i/aha93error:&#cf >!ccb[ccb[);
[10 ss="sref">pri9tk[p_porKE8N_DEB84 name="L501"> 501<106ef="driv10aha156o" c8lasshreda8   10aha>10ah href="+code9mbo" 93a>].p_por);
p_por10a>       5    858   88 name="L514ame="L51062f="driv10mspin_unlo8l/a>
10a> = makre5">mb85763387"    "/* S2.c#L5,Bus on/off-f">p" as1n>) to ruin floppy per  mmascem*mbcldefaul
10ade=mbo" clas1926" c92uarantee
mbop4]ax>NULL;
10a/a>(ccb<     ccb<     10ana hrWARNIN s8salit88ame="L50       int1067f="driv10mspin_unlo8liiiiii=c8| "10msp>10af="drivers/sc9i/aha93error:&#aaaaaaaa9.c#L494i/aha1542.c#L%ers/scsi/aha154Sf">p_called              iSf">p_calleine="L5ss="sref"Sf"ine=ers/]"e
mbop4]ax>NULL;
10ass="sref">pri9tkp_id=>mbot/ahs/scsi/a6 7" naSf">p_buso ode=printk" claSf">p_busoine="L5ss="sref"Sf"ine=ers/]15Sf">p_por10aa href="+code9mbo" 93a>].p_id=>mbot/ahs/scsi/a6 7" naSf">p_busoffode=printk" claSf">p_busofine="L5ss="sref"Sf"ine=ers/]15Sf">p_por10#L href="+code9mbo" 93a>].93" id="L444444444ccb[(&e/href="+code_64 /aha1542intra>(&e/ref">ccb[base_iivers/scsi/aha15base_iiI doeha15" cl      10#2f="driv10#L5196 id=8 /a>
10#> = maaaaaaaaaccb[ccb[base_iivers/, ccb[[ccb[ccb[base_iivers/scsi/aha15base_iiI NTRMASK"L5ss="sref"MAXINTRMASKers/, ccb[p_por10#/a>((&e/ref">ccb[base_iivers/scsi/aha15base_iiI doeha15" cl      10#5f="driv10#L5196 id=8 ef="driv8cod10#L5>10#="drivers/scs9/aha192"                     ccb[base_iivers/, ccb[10#             9  ccb[ccb[base_iivers/scsi/aha15base_iiI NTRMASK"L5ss="sref"MAXINTRMASKers/, ccb[p_porp_dmaspeed              iSf">p_dmaspeeine="L5ss="sref"Sf"ine=ers/]p;
mbop4]ax>NULL;
10#ss="sref">pri9tkccb<     ].p_id=>mbot/ah="+code=ccb" clSf">p_dmaspeed              iSf">p_dmaspeeine="L5ss="sref"Sf"ine=ers/]iver588="L527" class};{
f10A" >10A" href="+code9mbo" 93a>].(&e/ref">ccb[base_iivers/scsi/aha15base_iiI doeha15" cl      1081f="driv10aha156o" c8" na5e="L884"10aha>10A"line" name="9533">93" id="L44444444444444444      ccb[base_iivers/, ccb[maaaaaaaaa44444444      ccb[ccb[base_iivers/scsi/aha15base_iiI NTRMASK"L5ss="sref"MAXINTRMASKers/, ccb[p_pormak8cdo10#L5>10Ade=mbo" clas1926" c92uaranteeaaaaaaaa8s=" c86a href="drive}a15" cl      1084f="driv10#L5196 id=8cs="line"810A/a>(mbop4]ax>NULL;
[;
ccb[ccb[p fai=edscla2jumper defaul10Ass="sref">pri9tk(&e/ref">ccb[base_iivers/scsi/aha15base_iiI doeha15" cl      1089f="driv10mspin_unlo8cf="+code8men10msp>10Aa href="+code9mbo" 93a>].      ccb[base_iivers/, DEBcmccb[10 "line" name="9533">93" id="L444444444goto ccb[p_por10 2de=mbo" clas8="REA89/a> != 1)
mak827"10aha>10 de=mbo" clas1926" c92uaranteecf >      ccb[base_iivers/, DEBcmccb[DEBs/, DEBcmccb[ 52cef="drivers/scsdma_ef=="L463", DEBcmccb["+cef="drivers/se=mf54ntk") ==pri)s=" c86a href="drive}a15" cl      1094f="driv10aha156o" c8 s="line"8ode10aha>10 /a>([p_por++10=i">10 1542.c#L537" 8d="L583a>        while (110 6f="driv10rs/scssref8 soscsi/a8f="10rs/>10              9  ccb42.c#L540" id=ass="sref">ccb[ccb["+cef="drivers/se=mf54ntk"%cclass61rs/sa hrla =mqueueBUGbase_iivers/, ccb[DEBs/scsi/aha15base_iiI doeha15" cl      1097f="driv10aha156o" c8 2i/aha158="s10aha>10 f="drivers/sc9i/aha93error:&#cf >ccb[ 52cef="drivers/scsdma_ef=="L463"p15SfxFF)s=" c86a href="drive}a15" cl      1098f="driv10aha156o" c8 scsi/aha8rcm10aha>10 ss="sref">pri9tkc[].c[11ra href="6clas9="lin92a>].[p_por11r> = makehrwritme="L="aspeedmai=boxref542.c#L540" idaspeedmai=boxreref">ccb[base_iivers/, ccb[p_pormak827"11rha>110/scsi/aha154296#L5191ss="l{
11r/a>([p_por++11ri">1101542.c#L537" 8d="L583a>        while (111r6f="driv11rs/scssref8 soscsi/a8f="11rs/>110             9  [c[]erruptbclannel.c#L54d" id="L6/scsi: %cclass61rs/s<=ccbcef="drivers/scsirq_levea">DEBs/s"15Sf">p_porDEBcmccb[p_por110ss="sref">pri9tkccb[[DEBs/, 37;cclass61rs/sdo_/aha1542intralandle 110a href="+code9mbo" 93a>].[[111"s="sref">pri9tkccb[ccb[IRQ.  mradaptec controllerUscla2jumper defaul111"line" name="9533">93" id="L444444444ccb[DEBcmccb[p_por111> = maaaaaaaaagoto ccb[p_por111de=mbo" clas1926" c92uarantee8s=" c86a href="drive}a15" cl      11m4f="driv11aha156o" c93outgo">m9 hr11aha>111/a>(mbop4]ax>NULL;
11m(me="L4 se="+9ode=c949code=93a>].ccb[ccb[ 52cef="drivers/scsdma_ef=="L463", 3[mbop4]ax>NULL;
11m             9  ccb[ccb[si:lclannel.  mrAdaptecUscla2jumper defaul[DEBs/, 37;cclass61rs/sp_por9P" 11aha>11mss="sref">pri9tkDEBcmccb[p_por9BUF11rs/>11ma href="+code9mbo" 93a>].[p_por9CSI11A" >11A"s="sref">pri9tk93" id="L444444444cf >ccb[ 52cef="drivers/scsdma_ef=="L463"p=5Sf>||#37;cclass61rs/sd> 52cef="drivers/scsdma_ef=="L463"p;
mbop4]ax>NULL;
hreft9scr11rs/>11A> = maaaaaaaaaaaaaaaaakehrwritme="L="asp_a_e_m"L=f542.c#L540" idasp_a_e_m"L=ref">ccb[ 52cef="drivers/scsdma_ef=="L463", 3.c#L527" id=="DMA_MODE_CASCAD"6e="L5ss="sref"DMA_MODE_CASCAD"sta5"15Sf">p_por
11Ade=mbo" clas1926" c92uaranteeaaaaaaaaaaaaaaaakehrwritme="L="enable_a_e cef="drivers/senable_a_eref">ccb[ 52cef="drivers/scsdma_ef=="L463""15Sf">p_porm9">D11aha>112/a>()11rs/>112(me="L4 se="+9ode=c949code=938s=" c86a href="drive}a15" cl      11A6f="driv11aha156o" c9528"> 5289/a>11aha>11Ana hrWARNIN s8salit88ame="L50       int11A7f="driv11aha156o" c9a="+code=9n c11aha>11Af="drivers/sc9i/aha93error:%cclass61rs/s"+cef="drivers/thisf">463"p=6rintk" cla_64 ista515Sf">p_por954211rs/>11Ass="sref">pri9tkp_por112a href="+code9mbo" 93a>].[p_por[mb85763387"    "/* Number of bytes of I/O re5ce usedm*mbcldefaul
11a"line" name="9533">93" id="L4ref="+code=cd62 52cef="drivers/scsdma_ef=="L463"15Sf">p_porD9BUG11aha>11a> = maref="+code=cd62DEBs/15Sf">p_por
11ade=mbo" clas1926" c92uaranteerintk" cla_64 iHOSTDATA"drivers/scsirqHOSTDATAref">ccb[pbios_translaticsntk"p=6rintk" cla_64 itrans p_por113/a>([p_por11a1542.c#L537" 9d="L593"       uaranteerintk" cla_64 idr">ccb42.c#L540" id=ass="sref">ccb[ccb[ 5289=DE11aha>11a             9  ccb[[[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"p- 1auli++11rs/>11af="drivers/sc9i/aha93error:&#rintk" cla_64 iHOSTDATA"drivers/scsirqHOSTDATAref">ccb[[[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"p- 1aulpri9tk[ccb[ccb[[ccb[p_porta9">c11msp>113a href="+code9mbo" 93a>].DEBcmccb[p_por 54211ms hre#cf 05Sf">p_por114a href="6clas9="lin92a>].[c[p_porD9ef=11msp>1142de=mbo" clas8="REA89/a> != 1)

mbop4]ax>NULL;
114/a>(ccb<     p_bui">cc[8]iver588="L527" class};{
11m="drivers/scs9/aha192"               5196ic       ccb<      528.ef"11ha1>11m             9  ].p_por11mf="dr5Sf">p_porpri9tkccb[[p_bui">cc); +++585=sref 256,ci"drivers/scsirq_ers/)5Sf">p_porta8cla11msp>11mSTDATA" class9"sref919code=93i/aha154"             p_bui">cc[+585=sref 256,ci"drivers/scsirq_ers/]e=pri8715Sf">p_porc11   >11  "drivers/scs9/aha192"                 mr>ccb[p_por
<11#L5>11 "line" name="9533">93" id="L44444444444444444cf >!ccb[[[p_bui">cc,4sizeof ccb[p_bui">cc)s";
mbop4]ax>NULL;

115> = maaaaaaaaaaaaaaaaa"             ccb42.c#L540" id=ass="sref">ccb[ccb[11 de=mbo" clas1926" c92uaranteeref">maaaaaaaaaaaaaaaaa"             [N2in  ccb[p_bui">cc + 4scsi/aha15base_iiIxax>N2in  ccb[p_bui">cca/15Sf">p_por115na hrWARNIN s8salit88ame="L50       int1157f="driv11mspin_unlo8siiiiii=c8"L411msp>11 f="drivers/sc9i/aha93error:&#ref="+code=cd62DEB"L5ss="sref"Sf"DEBntk" ccb[c[p_porccb[mbop4]ax>NULL;
11ah href="+code9mbo" 93a>].116"line" name="9533">93" id="L4444444445196ic       
1162de=mbo" clas8="REA89/a> != 1)
11ade=mbo" clas1926" c92uaranteeerror:&#ref="+code=cd62cm4csi/aha1542.depcm4gsp_id=>mREAD_mspin_unlo942.depREAD_1"s="siver588="L527" class};{
11a/a>([116             9  11af="drivers/sc9i/aha93error:&#aaaaaaaaccb[_l"811ass="sref">pri9tk[11aa href="+code9mbo" 93a>].[11#L href="+code9mbo" 93a>].[[11#"line" name="9533">93" id="L48s=" c86a href="drive}a15" cl      11#2f="driv11#L5196 id=8 /a>
11#> = <#endifs=" c86a href="drive}a15" cl      11#3f="driv11#L5196 id=8 +code=kf8 cl11#L5>11#de=mbo" clas1926" c92uaranteeccb[11#/a>(p_por[;
11#             9  prelese_iregicsref">ccb[);
p_por11#f="drivers/sc9i/aha93error:&#ref="+code=cd62ccb[p_por_l"8sre11rs/>11#ss="sref">pri9tkp_porKE8N_DEB84 name="L501"> 501<118ef="driv11A" class="8d="L5"sre8">f11A" >11A" href="+code9mbo" 938iver588="L527" class};{
118>       5    858   88 name="L514ame="L51182f="driv11  L47me="L8k_irqrcms8f="11  L>11A> = mak8cdo11#L5>11Ade=mb8s=" c86a href="drive}a15" cl      1184f="driv11#L5196 id=8cs="line"8118f="+code=mbo"8class88" id=="drivers/scs1185f="driv11#L5196 id=8r clasrs/8eir11#L5>11Aass="5196ic a>].ERRuccode89cb" class="Se=mfHos  p_por11A     
mbop4]ax>NULL;
p_por11Ass="sref">pri9tk[[p_por11  ="drivers/sc9i/aha93ccb[[["#hos  p_por119> = prelese_iregicsref">ccb[mak827"11aha>11 de=mbo" clas1ref="+code=cd62ccb[11 /a>(++11=i">11 1542.8s=" c86a href="drive}a15" cl      11 6f="driv11rs/scssref8 soscsi/a8f="11rs/>119na hrWARNIN s8salit88ame="L50       int1197f="driv11aha156o" c8 2i/aha158="s11aha>11 f="dr5196ic a>].ERRuccode89cb" class="Se=mfHos  p_por11 ss="s
mbop4]ax>NULL;
].p_por1200 href="+codea>].p_por12r> = ccb<     p_pormak827"12rha>120/scsi#endifs=" c86a href="drive}a15" cl      1204f="driv12rha156o" c8 s="line"8ode12rha>120f="+code=mbo"8class88" id=="drivers/scs12r5f="driv12ri" class=8  clasrs/8>++12ri">120="drivers/scs  mr>ccb[[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"h"+585=sref 256,ci"drivers/scsirq_ers/++)5Sf">p_porccb[p_porccb[[[(&e/href="+code_64 softa>(&e/ers/));
mbop4]ax>NULL;
120ss="s#cf 05Sf">p_por120a href="+code9mbo" 93a>].ccb[[mb85763387"    "/* Indicata>ready to re519s/...m*mbcldefaul
121"s="s#endifs=" c86a href="drive}a15" cl      1211f="driv12mspin_unlo9k_irqrcms9f="12msp>121"line" name="9533">93" id="L4ccb[121> = 121de=mbo" clas1ref="+code=cd62dr">ccb42.c#L540" id=ass="sref">ccb[ccb[m9 hr12aha>121/a>(<#cf 05Sf">p_por12m(me="L4 se="+Lre5">mb85763387"    "/* 519s/.r;{
 387"andm*mbcldefaul

ccb[[9P" 12aha>12mss="s#endifs=" c86a href="drive}a15" cl      1219f="driv12rs/scssref9f95349BUF12rs/>12ma href="+codereturneriver588="L527" class};{
9CSI12A" >12A"s="s8s=" c86a href="drive}a15" cl      12A1f="driv12rs/scssref9ass=6sref9>mb12rs/>122>       5    858   88 name="L514ame="L51222f="driv12rs/scssref921">hreft9scr12rs/>12A> = mb85763387"    "/*bcldefaul

12Ade=mbLre5">mb85763387"    " * This is a device >(&e/.  This is landled by sending a special 387"andntldefaul
m9">D12aha>122/a>(mb85763387"    " * to the device.ntldefaul
)12rs/>122(me="Lre5">mb85763387"    " *mbcldefaul
 5289/a>12aha>12Ana hr5196ic a>].(&e/ref">ccb[
mbop4]ax>NULL;
priunsignedllong ccb[122a href="+codeERRuccode89cb" class="mai=box [ccb<     [[sta515Sf">p_por12a"line" name="scb[ccb<     pluse=mbe=p<     [[pluse=mb15Sf">p_porD9BUG12aha>12a> = p_por
12ade=mbo" clas1ERRuccode89cb" class="ccb p_por123/a>(ccb<     p_por1231542.c#L537" 8d="L583a>        while (11236f="driv12aha156o" c9 28"> 5289=DE12aha>12a             de89cb" class="ccb ccb[[p_pori++12rs/>12af="drivers/scccb[ccb[[9pri12msp>123ode=mbo" clas8="REA89/a> != 1)
ta9">c12msp>123a href="+codeccb[DEBcmccb[p_por 542124h="drivers/scscb[ccb[[124"line" name="9.c#L494i/aha1542.cmb [<5542MAILBOXE=ntk")ul
D9ef=12msp>124> = 
124/a>(12m="drivers/scs9/aha1929.c#L494i/aha1542.cmb [DEBcmDEBcms_"string">"HOSTDATA"drivers/scsirqHOSTDATAref">ccb[[
 528.ef"12ha1>12m             9  124f="drivers/sc9i/aha93pri9tk[<5542MAILBOXE=ntk")ul
ta8cla12msp>12mSTDATA" class9"sref919code=93scb[c12   >12  "drivers/scs} whilec#L494i/aha1542.cmb ccb[[p_por
<12#L5>125>       5    858   88 name="L514ame="L51252f="driv12=i" class=8l/a>
125> = ccb[[12 de=mbo" clas1926" c92ref="+code=cd62danicb42.c#L540" id=aanicref">c[ccb[[mb85763387"    "/* This will effectss8lybcldefaul
125na hrLre5">mb85763387"    "                                                           prev    someone else frombcldefaul
12 f="drLre5">mb85763387"    "                                                           screwing with this cdb.m*mbcldefaul
[ccb[[p_por126h="drivers/scscb[DEBcmccb[p_por126>       5    858   88 name="L514ame="L51262f="driv12mspin_unlo8l/a>
126> = [[DEBcmccb[mb85763387"    "/* This gets trashed.  mrsome>reasonm*mbcldefaul
126/scsi/aha154296#L5191ss="l{
126/a>(DEBcmccb[p_por126             de89cb" class="ccb [mb85763387"    "/* BUS DEVICE RESETm*mbcldefaul
126f="dr5Sf">p_por_l"812ass="sref">pride89cb" class="ccb [pidluse=mba=p>ccb[pluse=mbeDEBcms7); href="a sre5">mb85763387"    "/*SCSI T9sge/ Idm*mbcldefaul
126ass="sref">KE8N_DEB84 name="L501"> 501<127ef="driv12#L5196 id=8    5    8if 12#L5>127h="drivers/scscb[[p_id=>mccb [p_id=>mccb [127"line" name="scb[[
1272de=mbo" clas8="REA89/a> != 1)
12#de=mbo" clas1sre5">mb85763387"    "/* bcldefaul
127/a>(mb85763387"    "         * Now tell the vers3to flush all pending 387"ands.  mrthis bcldefaul
mb85763387"    "         * 19sge/ bcldefaul
127na hrLre5">mb85763387"    "         *mbcldefaul
127f="drivers/scccb[ccb[[[127ode=mbo" clas8="REA89/a> != 1)
12msp>127a href="+codeccb[ccb42.c#L540" id=#cm4_dr">ccref">ccb[[f12A" >12A" href="+code9mbo" 93c[(&e/.  mrt9sge/scla2jumper defaul128>       5    858   88 name="L514ame="L51282f="driv12  L47me="L8k_irqrcms8f="12  L>12A> = p_pormak8cdo12#L5>128/scsi/aha154296#L5191ss="l{
128f="+code=mbo"8class88" id=="drivers/scs1285f="driv12#L5196 id=8r clasrs/8eir12#L5>12Aass="#ifdefeccb[1286e=mbo" clas1sre5">mb85763387"    "/* bcldefaul
128f="drLre5">mb85763387"    "         * With the vers3we appar   ly nes88 get 5">">cerrupt3tobcldefaul
12Ass="sLre5">mb85763387"    "         * acknowledge a device >(&e/ being s   .  Then again, Leonardntldefaul
mb85763387"    "         * says3we are doing this wrong in the first place...ntldefaul
12  ="drLre5">mb85763387"    "         *ntldefaul
mb85763387"    "         * Take a wait 5"d sLe attitude.  If3we get spurious>">cerrupts,ntldefaul
129> = mb85763387"    "         * 1hen the device >(&e/ is doing something sane 5"d useful, andntldefaul
mak827"12aha>129de=mbLre5">mb85763387"    "         * we will wait   mrthe>">cerrupt3to pos  387pletics.ntldefaul
129/a>(mb85763387"    "         *mbcldefaul
++12=i">129="drivers/scs37;cclass61rs/sdr">ccb42.c#L540" id=ass="sref">ccb[[129na hrWARNIN s8salit88ame="L50       int1297f="driv12aha156o" c8 2i/aha158="s12aha>1297e=mbo" clas1sre5">mb85763387"    "/*bcldefaul
129ss="sLre5">mb85763387"    "         * FrLe the>387"andmblock.  mrall 387"ands.running onrthis bcldefaul
129a hreLre5">mb85763387"    "         * 19sge/...mbcldefaul
130 ="drLre5">mb85763387"    "         *mbcldefaul
[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"h"+585=sref 256,ci"drivers/scsirq_ers/++);
mbop4]ax>NULL;
130> = ccb[[p_pormak827"13rha>130de=mbo" clas1926" c92uaraL494i/aha1542.cHOSTDATA"drivers/scsirqHOSTDATAref">ccb[[[[130/a>([p_por++13ri">130="drivers/scs9/aha192"       ccb[ccb[[p_por[ccb[[130ss="sref">pri9tkccb[[].ccb[[[131" href="+code9mbo" 938ver588="L527" class};{
131> = p_por131/scsi/aha154296#L5191ss="l{
m9 hr13aha>131/a>(p_por13m(me="#endiff="+code9mbo" 93a>].mb85763387"    "/* ERIC_nes88def *mbcldefaul
p_por9P" 13aha>13mss="s5196ic a>].(&e/ref">ccb[
9BUF13rs/>13ma hre
mbop4]ax>NULL;
9CSI13A" >1320 href="+codea>].p_pormb13rs/>132>       5    858   88 name="L514ame="L51322f="driv13rs/scssref921">hreft9scr13rs/>132> = mb85763387"    "/* bcldefaul

13Ade=mbLre5">mb85763387"    "         * This does a r;{
 >(&e/.  mrall devices onrthe bus.ntldefaul
m9">D13aha>132/a>(mb85763387"    "         * In ass=ciple, we couldralso >(&e/.the vers3- shouldntldefaul
)13rs/>132(me="Lre5">mb85763387"    "         * we dorthis?  Tryrthis first, and we c5">addrthat late=reldefaul
 5289/a>13aha>132na hrLre5">mb85763387"    "         *29.ci/.turns out3to be useful.ntldefaul
mb85763387"    "         *mbcldefaul
954213rs/>132ss="sref">pride89cb" class="outb ccb[ccb[[p_por132ass="sref">KE8N_DEB84 name="L501"> 501<133ef="driv13aha156o" c9 href="+c9de=13aha>13ah="drivers/scsre5">mb85763387"    "/*bcldefaul
133"lineLre5">mb85763387"    "         * Wait   mrthe>thing to &e/tle dow">a bi .  Un  mtunatelybcldefaul
D9BUG13aha>133> = mb85763387"    "         * 1his is going to basically lock.uprthe>machine whilecwebcldefaul

133de=mbLre5">mb85763387"    "         * wait   mrthis to 387plete.  To be 100c#L54 38rrect, we need3tobcldefaul
133/a>(mb85763387"    "         * check.  mrtimeout, and if3we are doing something like>thisbcldefaul
133(me="Lre5">mb85763387"    "         * we are pretty desperata>anyways.ntldefaul
 5289=DE13aha>133na hrLre5">mb85763387"    "         *mbcldefaul
i++13rs/>13af="drivers/scccb[4"15Sf">p_por9pri13msp>133ode=mbo" clas8="REA89/a> != 1)
ta9">c13msp>133a href="+codeccb[ccb[[ 542134h="drl134"line" name="scb[ccb[ccb[[mbop4]ax>NULL;
D9ef=13msp>134> = [[
134/a>(mb85763387"    "/*bcldefaul
134(me="Lre5">mb85763387"    "         * Now try to pick.uprthe>pieces.  F mrall pending 387"ands,ntldefaul
 528.ef"13ha1>134na hrLre5">mb85763387"    "         *2free>any>">cernal data1ERRuccures, and basically clear>thingsbcldefaul
134f="drLre5">mb85763387"    "         * out.  We dornot try and re519s/.any>387"ands. mranything - bcldefaul
mb85763387"    "         * the>ERRatagy landlemrt9kes care ofrthat crap.ntldefaul
ta8cla13msp>134a hreLre5">mb85763387"    "         *mbcldefaul
c13   >135h="drivers/scscb[ccb42.c#L540" id=ass="sref">ccb[[[
135> = [<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"h"+585=sref 256,ci"drivers/scsirq_ers/++);
mbop4]ax>NULL;
13 de=mbo" clas1926" c929.c#L494i/aha1542.cHOSTDATA"drivers/scsirqHOSTDATAref">ccb[[mbop4]ax>NULL;
[[p_por[ccb[[p_por135na hrWARNIN s8salit88ame="L50       int1357f="driv13mspin_unlo8siiiiii=c8"L413msp>135f="dr5Sf">p_porpri9tk[(&e/href="+code_64 softa>(&e/ers/);
mbop4]ax>NULL;
].mb85763387"    "/*bcldefaul
136 ="drLre5">mb85763387"    "                                 * If3this device i7ple"   s the>Eoft >(&e/.optics,ntldefaul
136"lineLre5">mb85763387"    "                                 * 1hen i/ is still holding onto the 387"and, andntldefaul

136> = mb85763387"    "                                 * may ye  387plete it.  Inrthis case, we donc#L9;tntldefaul
136de=mbLre5">mb85763387"    "                                 * flush the data.ntldefaul
136/a>(mb85763387"    "                                 *mbcldefaul
p_por136             9  136f="drivers/sc9i/aha93erro    ccb[ccb[136ss="sref">pri9tk[136a href="+code9mbo" 93a>].ccb[[].ccb[[[137"line" name=""       8ver588="L527" class};{

137> = 137/scsi/aha154296#L5191ss="l{
137/a>(ccb[[137="drivers/scsreturneccb[p_por137na hrWARNIN s8salit88ame="L50       int13#7f="driv13aha1542sav8 iiiiii=c8nf=13aha>137f="drccb[137ss="sref">pride89cb" class="ccb[[13msp>137a href="+codereturneccb[p_porf13A" >138"s="s8s=" c86a href="drive}a15" cl      1381f="driv13aha156o" c8" na5e="L884"13aha>138>       5    858   88 name="L514ame="L51382f="driv13  L47me="L8k_irqrcms8f="13  L>13A> = <5196ic a>].(&e/ref">ccb[
mak8cdo13#L5>138/scsi
mbop4]ax>NULL;
138/a>(p_por1381542.c#L537" 8d="L583a>        while (11386f="driv13mspin_unlo8+soscsi/a8a1513msp>1386e=mbo" clas1sre5">mb85763387"    "/* bcldefaul
138f="drLre5">mb85763387"    "         * This does a r;{
 >(&e/.  mrall devices onrthe bus.ntldefaul
13Ass="sLre5">mb85763387"    "         * In ass=ciple, we couldralso >(&e/.the vers3- shouldntldefaul
mb85763387"    "         * we dorthis?  Tryrthis first, and we c5">addrthat late=reldefaul
13  ="drLre5">mb85763387"    "         *29.ci/.turns out3to be useful.ntldefaul
mb85763387"    "         *mbcldefaul
139> = ccb[[ccb[[p_pormak827"13aha>139/scsi/aha154296#L5191ss="l{
139/a>(mb85763387"    "/*bcldefaul
++13=i">139(me="Lre5">mb85763387"    "         * Wait   mrthe>thing to &e/tle dow">a bi .  Un  mtunatelybcldefaul
mb85763387"    "         *21his is going to basically lock.uprthe>machine whilecwebcldefaul
mb85763387"    "         * wait   mrthis to 387plete.  To be 100c#L54 38rrect, we need3tobcldefaul
139ss="sLre5">mb85763387"    "         * check.  mrtimeout, and if3we are doing something like>thisbcldefaul
139a hreLre5">mb85763387"    "         * we are pretty desperata>anyways.ntldefaul
140 ="drLre5">mb85763387"    "         *mbcldefaul
4"15Sf">p_por140> = ccb[[mak827"14rha>140/scsi/aha154296#L5191ss="l{
140/a>(ccb[ccb[[mbop4]ax>NULL;
++14ri">140="drivers/scs9/ahaccb[[[140na hrWARNIN s8salit88ame="L50       int14r7f="driv14rha156o" c8 2i/aha158="s14rha>1407e=mbo" clas1sre5">mb85763387"    "/*bcldefaul
140ss="sLre5">mb85763387"    "         * We need3to dorthis3too be  me.the vers3c5">">ceract withbcldefaul
140a hreLre5">mb85763387"    "         * us again.ntldefaul
141 ="drLre5">mb85763387"    "         *mbcldefaul
ccb[[[[1412de=mbo" clas8="REA89/a> != 1)
141de=mbo" clas1sre5">mb85763387"    "/*bcldefaul
m9 hr14aha>141/a>(mb85763387"    "         * Now try to pick.uprthe>pieces.  F mrall pending 387"ands,ntldefaul
141(me="Lre5">mb85763387"    "         * free>any>">cernal data1ERRuccures, and basically clear>thingsbcldefaul
mb85763387"    "         *2out.  We dornot try and re519s/.any>387"ands. mranything - bcldefaul
mb85763387"    "         * the>ERRatagy landlemrt9kes care ofrthat crap.ntldefaul
9P" 14aha>141ss="sLre5">mb85763387"    "         *mbcldefaul
9BUF14rs/>141a href="+codeccb[ccb42.c#L540" id=ass="sref">ccb[[[9CSI14A" >142h="drl[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"h"+585=sref 256,ci"drivers/scsirq_ers/++);
mbop4]ax>NULL;
hreft9scr14rs/>142> = ccb[[mbop4]ax>NULL;

142de=mbo" clas1926" c92uara/ahaccb[[p_porm9">D14aha>142/a>(ccb[[p_por)14rs/>1421542.c#L537" 8d="L583a>        while (11426f="driv14aha156o" c9528"> 5289/a>14aha>142             9  [(&e/href="+code_64 softa>(&e/ers/);
mbop4]ax>NULL;
mb85763387"    "/*bcldefaul
954214rs/>142ss="sLre5">mb85763387"    "                                 * If3this device i7ple"   s the>Eoft >(&e/.optics,ntldefaul
142a hreLre5">mb85763387"    "                                 * 1hen i/ is still holding onto the 387"and, andntldefaul
mb85763387"    "                                 * may ye  387plete it.  Inrthis case, we donc#L9;tntldefaul
143"lineLre5">mb85763387"    "                                 * flush the data.ntldefaul
D9BUG14aha>143> = mb85763387"    "                                 *mbcldefaul

143de=mbo" clas1926" c92uara/ahaaaaaaaaacontinue15Sf">p_por143/a>(143="drivers/scs9/aha192"       ccb[ccb[ 5289=DE14aha>143             9  [i++14rs/>143f="drivers/sc9i/aha93erro    ccb[ccb[[pri9tkccb[[[ta9">c14msp>143a href="+code9mbo" 938s=" c86a href="drive}a15" cl      144ef="driv14mspin_unlo9"> 542144" href="+code8s=" c86a href="drive}a15" cl      1441f="driv14aha156o" c9"ss=6sref9&qu14aha>144>       5    858   88 name="L514ame="L51442f="driv14mspin_unlo9E"sref">D9ef=14msp>144> = ccb[[
[p_por144f="+code=mbo"8class88" id=="drivers/scs1445f="driv14=i" class=9pef="driv9="l14=i">144(me="Lcb[ 528.ef"14ha1>1446 = ccb[[1447e=mbo" clas1returneccb[p_porta8cla14msp>144ass="sref">KE8N_DEB84 name="L501"> 501<145ef="driv14          8lass="sre8">c14   >145h="dr#if 0sref">KE8N_DEB84 name="L501"> 501<1451f="driv14#L5196 id=8lB(printk8>
<14#L5>145"lineLre5">mb85763387"    "/*bcldefaul

145> = mb85763387"    " * These are the old error landling routines.  They are only temporarilybcldefaul
145de=mbLre5">mb85763387"    " * here whilecwe play with the new error landling  hre.ntldefaul
mb85763387"    " *mbcldefaul
].ccb[
145na hr
mbop4]ax>NULL;
145f="dr#if 0sref">KE8N_DEB84 name="L501"> 501<1458f="driv14rs/scssref8sf="+code8 4814rs/>145ss="sref">pride89cb" class="unchar p_por[p_por146" href="+codeERRucc Lcb[p_por146"line" name="a>].p_por
1462de=mbo" clas8="REA89/a> != 1)
1463s="sref">pride89cb" class="dr">ccb42.c#L540" id=ass="sref">ccb[[146/a>(ccb[ccb[[ccb[ccb[[146na hrWARNIN s8salit88ame="L50       int1467f="driv14mspin_unlo8liiiiii=c8| "14msp>146f="drivers/scccb[DEBcm146ss="sref">pride89cb" class="mb ccb[[p_por146a href="+codeccb[ccb[[p_por147" href="+code9.c#L494i/aha1542.cmbi"drivers/scsirqmbi463"a;
[<5542MAILBOXE=ntk")ul
147"line" name=""       ccb[[<5542MAILBOXE=ntk"hul

1472de=mbo" clas8="REA89/a> != 1)
1473s="sref">prido;
mbop4]ax>NULL;
147/a>([

147             9  
147f="drivers/sc9i/aha939.c#L494i/aha1542.cmbi"drivers/scsirqmbi463"a;
[<5542MAILBOXE=ntk")ul
_l"8sre14rs/>147ss="sref">pri9tk[<5542MAILBOXE=ntk"hul
ccb[[f14A" >148h="drivers/scscb[DEBcm148>       5    858   88 name="L514ame="L51482f="driv14  L47me="L8k_irqrcms8f="14  L>1482 href="+code9.c#L494i/aha1542.cmb [mbop4]ax>NULL;
mak8cdo14#L5>148de=mbo" clas1926" c92de89cb" class="dr">ccb42.c#L540" id=ass="sref">ccb[[cerrupt discoboped onr_le c#L54d - attempting to recobop" id="L6/scsi: &bo" clas8="REA89/a> != 1)
148/a>([cr_landlehref="+code_64 /aha1542">cr_landleref">ccb[148f="drivers/sc8s=" c86a href="drive}a15" cl      14A8f="driv14aha156o" c8/scsi/aha854214aha>148ss="sref">pridre5">mb85763387"    "/* OK, no los  ">cerrupt.  Tryrlooking to &ee how many>pending 387"andsbcldefaul
mb85763387"    "          cwe thinkcwe have. *mbcldefaul
149h="drl149"line" name="  mr>ccb[[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"h"+585=sref 256,ci"drivers/scsirq_ers/++)l149> = ccb[[mbop4]ax>NULL;
mak827"14aha>149de=mbo" clas1926" c92uara/aha9.c#L494i/aha1542.cHOSTDATA"drivers/scsirqHOSTDATAref">ccb[[mbop4]ax>NULL;
149/a>(ccb42.c#L540" id=ass="sref">ccb[[pending   mrc#L54s" id="L6/scsi: &bo" clas8="REA89/a> != 1)
++14=i">149="drivers/scs9/aha192"               /aha192[[[[149ss="sref">pri9tkccb[[[mbop4]ax>NULL;
].ccb42.c#L540" id=ass="sref">ccb[[150" href="+code9mbo" 93a>].ccb[[150"line" name=""                       }ul150> = mak827"15rha>150de=mbo" clas1926" c92uara/ahaaaaaaaaaccb42.c#L540" id=ass="sref">ccb[[pending 387"andrc#L54s" id="L6/scsi: &bo" clas8="REA89/a> != 1)
150/a>([++15ri">150="drivers/scs9/aha=9326" c92s9/aha192aaaaaaa[[[150ss="s#endifs=" c86a href="drive}a15" cl      15r9f="driv15ri/aha15428 f="+code8="s15ri/>150ass="sref">KE8N_DEB84 name="L501"> 501<151ef="driv15mspin_unlo9         9   15msp>151h="drivers/scscb[ccb[ccb42.c#L540" id=ass="sref">c[KE8N_DEB84 name="L501"> 501<1512f="driv15mspin_unlo9 2k" clas9= <15msp>151> = DEBcm151de=mbo" clas1  mr>ccb[[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"h"+585=sref 256,cmb mbop4]ax>NULL;
m9 hr15aha>151/a>(ccb[[mbop4]ax>NULL;
151="drivers/scs9/aha192"       ccb[[mb85763387"    "/* Abrs/ 387"andr*mbcldefaul
[ccb[[mb85763387"    "/* 519s/.r;{
 387"andr*mbcldefaul
[DEBcm9P" 15aha>151ss="sref">pri9tk
9BUF15rs/>151a href="+code9mbo" 938s=" c86a href="drive}a15" cl      152ef="driv15A" class="9s="sref">9CSI15A" >152" href="+code8s=" c86a href="drive}a15" cl      15A1f="driv15rs/scssref9ass=6sref9>mb15rs/>152"line" name="9.c#L494i/aha1542.cA>[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk" ==p<     hreft9scr15rs/>152> = DEBcm
152de=mb#endifs=" c86a href="drive}a15" cl      1524f="driv15aha156o" c9aoutgo">m9">D15aha>152/a>()15rs/>1521542.8s=" c86a href="drive}a15" cl      15A6f="driv15aha156o" c9528"> 5289/a>15aha>152na hrWARNIN s8salit88ame="L50       int1527f="driv15aha156o" c9a="+code=9n c15aha>152f="drLre5">mb85763387"    "/* We dornot i7ple"    a >(&e/. unctics here, bu/.the upper level  hrebcldefaul
954215rs/>152ss="sLre5">mb85763387"    "   857umesrthat it will ge/.some kindrof >(&ponse   mrthe>387"andrinbcldefaul
152a hreLre5">mb85763387"    "   SCpn .  We must oblige,  mrthe>387"andrwill hang the>E;{
 system.ntldefaul
mb85763387"    "   F mra first go, we 857umerthat the vers3notifiesrus with all ofrthebcldefaul
153"lineLre5">mb85763387"    "   pending 387"ands (it does i7ple"    Eoft >(&e/, aftemrall). *mbcldefaul
D9BUG15aha>1532de=mbo" clas8="REA89/a> != 1)

153de=mb5196ic a>].(&e/ref">ccb[].(&e/_flage463")l153/a>(<
mbop4]ax>NULL;
153="drivers/scsp_por 5289=DE15aha>153             a>].p_pori++15rs/>153f="dr5Sf">p_por9pri15msp>153ss="sref">pridre5">mb85763387"    "/*bcldefaul
ta9">c15msp>153a hreLre5">mb85763387"    "         * See"9.ca bus >(&e/.was sugge51ed.ntldefaul
 542154 ="drLre5">mb85763387"    "         *mbcldefaul
154"line" name="9.c#L494i/aha1542.c>(&e/_flagef542.c#L540" id>(&e/_flage463" DEBcmeccb[D9ef=15msp>154> = mb85763387"    "/* bcldefaul

mb85763387"    "                 * This does a r;{
 >(&e/.  mrall devices onrthe bus.ntldefaul
154/a>(mb85763387"    "                 * In ass=ciple, we couldralso >(&e/.the vers3- shouldntldefaul
154(me="Lre5">mb85763387"    "                 * we dorthis?  Tryrthis first, and we c5">addrthat late=reldefaul
 528.ef"15ha1>154na hrLre5">mb85763387"    "                 * 9.ci/.turns out3to be useful.ntldefaul
154f="drLre5">mb85763387"    "                 *mbcldefaul
pri9tk[ccb[[ccb[[p_porta8cla15msp>154ass="sref">KE8N_DEB84 name="L501"> 501<155ef="driv15          8lass="sre8">c15   >155" href="+code9mbo" 93dre5">mb85763387"    "/*bcldefaul

<15#L5>155"lineLre5">mb85763387"    "                 * Wait   mrthe>thing to &e/tle dow">a bi .  Un  mtunatelybcldefaul

155> = mb85763387"    "                 * 1his is going to basically lock.uprthe>machine whilecwebcldefaul
155de=mbLre5">mb85763387"    "                 * wait   mrthis to 387plete.  To be 100c#L54 38rrect, we need3tobcldefaul
mb85763387"    "                 * check.  mrtimeout, and if3we are doing something like>thisbcldefaul
mb85763387"    "                 * we are pretty desperata>anyways.ntldefaul
155na hrLre5">mb85763387"    "                 *mbcldefaul
155f="drivers/sc9i/aha93ccb[ccb[ccb[[mbop4]ax>NULL;
155ss="sref">pri9tk[[[KE8N_DEB84 name="L501"> 501<156ef="driv15aha156o" c8lasshreda8   15aha>156" href="+code9mbo" 93dre5">mb85763387"    "/*bcldefaul
156"lineLre5">mb85763387"    "                 * We need3to dorthis3too be  me.the vers3c5">">ceract withbcldefaul

156> = mb85763387"    "                 * us again.ntldefaul
156de=mbLre5">mb85763387"    "                 *mbcldefaul
156/a>([ccb[[[1561542.c#L537" 8d="L583a>        while (11566f="driv15mspin_unlo8ls="s5ef"8ha115msp>156             9  mb85763387"    "/*bcldefaul
156f="drLre5">mb85763387"    "                 * Now try to pick.uprthe>pieces.  Re519s/.all 387"andsbcldefaul
_l"8156ss="sLre5">mb85763387"    "                 *rthat are currently act>
< onrthe bus, and re5et all ofbcldefaul
156a hreLre5">mb85763387"    "                 * the dataERRuccures.  We have.some time to kill whilebcldefaul
157 ="drLre5">mb85763387"    "                 *>things &e/tle dow",.so ass=  a nice message.ntldefaul
157"lineLre5">mb85763387"    "                 *mbcldefaul

157> = ccb42.c#L540" id=ass="sref">ccb[[[157/a>([<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"h"+585=sref 256,ci"drivers/scsirq_ers/++)l157="drivers/scs9/aha192"       9.c#L494i/aha1542.cHOSTDATA"drivers/scsirqHOSTDATAref">ccb[[mbop4]ax>NULL;
157             9  [p_por157f="drivers/sc9i/aha93a href="9code=92ccb[ccb[[p_por_l"8sre15rs/>157ss="sref">pri9tk[p_por].ccb[f15A" >158" href="+code9mbo" 93a>].[158"line" name=""                       ccb[ccb42.c#L540" id=ass="sref">ccb[[[ccb[mak8cdo15#L5>1583s="sl158/a>([ccb[[[ccb[[[158             9  mb85763387"    "/*bcldefaul
158ss="sLre5">mb85763387"    "                 *rNow tellrthe>mid-level  hre what we did here.  Sincebcldefaul
mb85763387"    "          c      *rwe have re519s/ed all ofrthe out519nding 387"ands,bcldefaul
159 ="drLre5">mb85763387"    "                 *>then reers/ SUCCES=.ntldefaul
mb85763387"    "                 *mbcldefaul
159> = mak827"15aha>159de=mb37;cclass61rs/sfail"L5ss="sref"MAXfail="dr:WARNIN s8salit88ame="L50       int1594f="driv15aha156o" c8 s="line"8ode15aha>159/a>(ccb42.c#L540" id=ass="sref">ccb[++15=i">159="drivers/scs9/aha192ccb[ccb42.c#L540" id=ass="sref">ccb[machine to >(&e/" id="L6/scsi: )ul159             9  ccb[p_por159ss="s5Sf">p_por159a href="+code} else;
mbop4]ax>NULL;
mb85763387"    "/* This does a relect>
< re5et ofrjust the one device *mbcldefaul
mb85763387"    "/* First locata>the>3cb   mrthis 387"andr*mbcldefaul
160> = [<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"h"+585=sref 256,ci"drivers/scsirq_ers/++)lmak827"16rha>160de=mbo" clas1926" c92uara/aha9.c#L494i/aha1542.cHOSTDATA"drivers/scsirqHOSTDATAref">ccb[[mbop4]ax>NULL;
160/a>(ccb[[[mb85763387"    "/* BUS DEVICE RESETm*mbcldefaul
++16ri">160="drivers/scs9/aha=9326" c92s9/aha192cre5">mb85763387"    "/* Now tellrthe>vers3to flush all pending 387"ands   mrthis targe/.*mbcldefaul
[ccb[[
p_por160ss="sref">pri9tkmb85763387"    "/* Here is the>tricky par .  What to dornex .  Dorwe ge/.5">">cerruptbcldefaul
160a hreLre5">mb85763387"    "          c                          mrthe>387"andsrthat we abrs/ed with the>Epecified targe/,  mbcldefaul
161 ="drLre5">mb85763387"    "                                   dorwe generata>this on our own?  Tryrit without3first andrseebcldefaul
mb85763387"    "                                   what happens.*mbcldefaul
161> = [ccb42.c#L540" id=ass="sref">ccb[[1613s="slm9 hr16aha>161/a>(mb85763387"    "/* Ifrthe first does not work,>then try the>Eecond.  I thinkcthebcldefaul
161(me="Lre5">mb85763387"    "                                   first optics is m me.likely3to be 38rrect. Freerthe>387"andbcldefaul
mb85763387"    "                                   block.  mrall 387"andsrrunning onrthis targe/... *mbcldefaul
ccb[[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk"h"+585=sref 256,ci"drivers/scsirq_ers/++)l9P" 16aha>161ss="sref">pri9tkccb[[ccb[[[mbop4]ax>NULL;
9CSI16A" >162" href="+code9mbo" 93a>].[p_pormb16rs/>162"line" name=""                        /aha19233333333L494i/aha1542.cSCtmpccb[[p_porhreft9scr16rs/>162> = [p_por
162de=mbo" clas1926" c92uara/ahaaaaaaaaa /aha19233333333L494i/aha1542.ckfree"drivers/scsirqkfreeref">ccb[m9">D16aha>162/a>()16rs/>162="drivers/scs9/aha=9326" c92s9/aha192aaaaaaa233333333L494i/aha1542.cdr">ccb42.c#L540" id=ass="sref">ccb[[ 5289/a>16aha>162             9  ccb[p_por954216rs/>162ss="sref">pri9tkccb[[162a href="+code9mbo" 9333333333333333333333333333333333L494i/aha1542.cHOSTDATA"drivers/scsirqHOSTDATAref">ccb[[[].[D9BUG16aha>163> = 
163de=mbo" clas1}ver588="L527" class};{
163/a>(mb85763387"    "/* No act>
< 387"andrat this time,.so this meansrthat each time we gotbcldefaul
163(me="Lre5">mb85763387"    "           some kindrof >(&ponse the>b85t time through.  Tellrthe>mid-level  hrebcldefaul
 5289=DE16aha>163na hrLre5">mb85763387"    "           to >(ques  sense in  mmatics in order to decire what to dornex . *mbcldefaul
i++16rs/>163f="drivers/screturneccb[9pri16msp>163ss="s}ver588="L527" class};{
ta9">c16msp>163a hre#endifef="cre5">mb85763387"    "/* endrof big 387"    block.aroundrold2abrs/ + old_>(&e/ *mbcldefaul
 542164 ="drul
164"line5196ic a>].ERRucc"scb[[
D9ef=16msp>164> = [[[].*ccb[
164/a>(1645a>( 528.ef"16ha1>164na hrWARNIN s8salit88ame="L50       int1647f="driv16mspin_unlo8iiiiiii=c8b" 16msp>164f="drivers/scccb[[p_porta8cla16msp>164a href="+code9.c#>ccb[c16   >165" href="+code9mbo" 93dre5">mb85763387"    "/* Please bopifyrthat this is the>Ere8 as what DOScreturns.*mbcldefaul

<16#L5>165"line" name=""       ccb[
165> = 165de=mbo" clas1926" c92ccb[mbop4]ax>NULL;
[165             9  [165f="drivers/sc9i/aha93ccb[pri}ver588="L527" class};{
KE8N_DEB84 name="L501"> 501<166ef="driv16aha156o" c8lasshreda8   16aha>166" href="+codereturneriver588="L527" class};{
166"line}ver588="L527" class};{

166> = c[1663s="sl166/a>(1661542.5196ic ERRucc"scb[[mbop4]ax>NULL;
166             .ccb[[1667            .ccb[[_l"81668            .ccb[
1669            .ccb[
1670            .ccb[
1671            .ccb[(&e/_handler (&e/href="+code_64 /aha1542dev_>(&e/e=mb,ul

167> = (&e/_handler = (&e/e=mb,ul
1673 = (&e/_handler = (&e/e=mb,ul
167/a>(
[[[<5542MAILBOXE="L5ss="sref"MAXA>[<5542MAILBOXE=ntk", ul
167             .ccb[
1677            .ccb[[<5542SCATTERb42.c#L540" id=A>[<5542SCATTERref",ul
_l"8sre16rs/>1678            .ccb[[<5542CMDLUNb42.c#L540" id=A>[<5542CMDLUNref",ul

f16A" >1680            .ccb[
168"line}ulmak8cdo16#L5>1683s="s


The original LXR Eoftware by the>LXR 387"unitye=mb,"this expsci" al 88 ics by lxR@rDeux.noe=mb.
lxR.rDeux.no kindly hos ed by Redpill LDepro A=ntk", provider of LDeux 38nsul ing androperaticss &ervices since 1995.