linux/drivers/scsi/sun3_scsi_vme.c
<<
>>
Prefs
   1 /*
   2 * Sun3 SCSI stuff by Erik Verbruggen (erik@bigmama.xtdnet.nl)
   3 *
   4 * Sun3 DMA routines added by Sam Creasey (sammy@sammy.net)
   5 *
   6 * VME support added by Sam Creasey
   7 *
   8 * Adapted from sun3_scsi.c -- see there for other headers
   9 *
  10 * TODO: modify this driver to support multiple Sun3 SCSI VME boards
  11 *
  12 */
  13
  14#define AUTOSENSE
  15
  16#include <linux/types.h>
  17#include <linux/stddef.h>
  18#include <linux/ctype.h>
  19#include <linux/delay.h>
  20
  21#include <linux/module.h>
  22#include <linux/signal.h>
  23#include <linux/ioport.h>
  24#include <linux/init.h>
  25#include <linux/blkdev.h>
  26
  27#include <asm/io.h>
  28
  29#include <asm/sun3ints.h>
  30#include <asm/dvma.h>
  31#include <asm/idprom.h>
  32#include <asm/machines.h>
  33
  34#define SUN3_SCSI_VME
  35
  36#undef SUN3_SCSI_DEBUG
  37
  38/* dma on! */
  39#define REAL_DMA
  40
  41#define NDEBUG 0
  42
  43#define NDEBUG_ABORT            0x00100000
  44#define NDEBUG_TAGS             0x00200000
  45#define NDEBUG_MERGING          0x00400000
  46
  47#include "scsi.h"
  48#include "initio.h"
  49#include <scsi/scsi_host.h>
  50#include "sun3_scsi.h"
  51
  52extern int sun3_map_test(unsigned long, char *);
  53
  54#define USE_WRAPPER
  55/*#define RESET_BOOT */
  56#define DRIVER_SETUP
  57
  58/*
  59 * BUG can be used to trigger a strange code-size related hang on 2.1 kernels
  60 */
  61#ifdef BUG
  62#undef RESET_BOOT
  63#undef DRIVER_SETUP
  64#endif
  65
  66/* #define SUPPORT_TAGS */
  67
  68//#define       ENABLE_IRQ()    enable_irq( SUN3_VEC_VMESCSI0 ); 
  69#define ENABLE_IRQ()
  70
  71
  72static irqreturn_t scsi_sun3_intr(int irq, void *dummy);
  73static inline unsigned char sun3scsi_read(int reg);
  74static inline void sun3scsi_write(int reg, int value);
  75
  76static int setup_can_queue = -1;
  77module_param(setup_can_queue, int, 0);
  78static int setup_cmd_per_lun = -1;
  79module_param(setup_cmd_per_lun, int, 0);
  80static int setup_sg_tablesize = -1;
  81module_param(setup_sg_tablesize, int, 0);
  82#ifdef SUPPORT_TAGS
  83static int setup_use_tagged_queuing = -1;
  84module_param(setup_use_tagged_queuing, int, 0);
  85#endif
  86static int setup_hostid = -1;
  87module_param(setup_hostid, int, 0);
  88
  89static struct scsi_cmnd *sun3_dma_setup_done = NULL;
  90
  91#define AFTER_RESET_DELAY       (HZ/2)
  92
  93/* ms to wait after hitting dma regs */
  94#define SUN3_DMA_DELAY 10
  95
  96/* dvma buffer to allocate -- 32k should hopefully be more than sufficient */
  97#define SUN3_DVMA_BUFSIZE 0xe000
  98
  99/* minimum number of bytes to do dma on */
 100#define SUN3_DMA_MINSIZE 128
 101
 102static volatile unsigned char *sun3_scsi_regp;
 103static volatile struct sun3_dma_regs *dregs;
 104#ifdef OLDDMA
 105static unsigned char *dmabuf = NULL; /* dma memory buffer */
 106#endif
 107static unsigned char *sun3_dma_orig_addr = NULL;
 108static unsigned long sun3_dma_orig_count = 0;
 109static int sun3_dma_active = 0;
 110static unsigned long last_residual = 0;
 111
 112/*
 113 * NCR 5380 register access functions
 114 */
 115
 116static inline unsigned char sun3scsi_read(int reg)
 117{
 118        return( sun3_scsi_regp[reg] );
 119}
 120
 121static inline void sun3scsi_write(int reg, int value)
 122{
 123        sun3_scsi_regp[reg] = value;
 124}
 125
 126/*
 127 * XXX: status debug
 128 */
 129static struct Scsi_Host *default_instance;
 130
 131/*
 132 * Function : int sun3scsi_detect(struct scsi_host_template * tpnt)
 133 *
 134 * Purpose : initializes mac NCR5380 driver based on the
 135 *      command line / compile time port and irq definitions.
 136 *
 137 * Inputs : tpnt - template for this SCSI adapter.
 138 *
 139 * Returns : 1 if a host adapter was found, 0 if not.
 140 *
 141 */
 142 
 143static int __init sun3scsi_detect(struct scsi_host_template * tpnt)
 144{
 145        unsigned long ioaddr, irq = 0;
 146        static int called = 0;
 147        struct Scsi_Host *instance;
 148        int i;
 149        unsigned long addrs[3] = { IOBASE_SUN3_VMESCSI, 
 150                                   IOBASE_SUN3_VMESCSI + 0x4000,
 151                                   0 };
 152        unsigned long vecs[3] = { SUN3_VEC_VMESCSI0,
 153                                  SUN3_VEC_VMESCSI1,
 154                                  0 };
 155        /* check that this machine has an onboard 5380 */
 156        switch(idprom->id_machtype) {
 157        case SM_SUN3|SM_3_160:
 158        case SM_SUN3|SM_3_260:
 159                break;
 160
 161        default:
 162                return 0;
 163        }
 164
 165        if(called)
 166                return 0;
 167
 168        tpnt->proc_name = "Sun3 5380 VME SCSI";
 169
 170        /* setup variables */
 171        tpnt->can_queue =
 172                (setup_can_queue > 0) ? setup_can_queue : CAN_QUEUE;
 173        tpnt->cmd_per_lun =
 174                (setup_cmd_per_lun > 0) ? setup_cmd_per_lun : CMD_PER_LUN;
 175        tpnt->sg_tablesize = 
 176                (setup_sg_tablesize >= 0) ? setup_sg_tablesize : SG_TABLESIZE;
 177        
 178        if (setup_hostid >= 0)
 179                tpnt->this_id = setup_hostid;
 180        else {
 181                /* use 7 as default */
 182                tpnt->this_id = 7;
 183        }
 184        
 185        ioaddr = 0;
 186        for(i = 0; addrs[i] != 0; i++) {
 187                unsigned char x;
 188                
 189                ioaddr = (unsigned long)sun3_ioremap(addrs[i], PAGE_SIZE,
 190                                                     SUN3_PAGE_TYPE_VME16);
 191                irq = vecs[i];
 192                sun3_scsi_regp = (unsigned char *)ioaddr;
 193                
 194                dregs = (struct sun3_dma_regs *)(((unsigned char *)ioaddr) + 8);
 195                
 196                if(sun3_map_test((unsigned long)dregs, &x)) {
 197                        unsigned short oldcsr;
 198
 199                        oldcsr = dregs->csr;
 200                        dregs->csr = 0;
 201                        udelay(SUN3_DMA_DELAY);
 202                        if(dregs->csr == 0x1400)
 203                                break;
 204                        
 205                        dregs->csr = oldcsr;
 206                }
 207
 208                iounmap((void *)ioaddr);
 209                ioaddr = 0;
 210        }
 211
 212        if(!ioaddr)
 213                return 0;
 214        
 215#ifdef SUPPORT_TAGS
 216        if (setup_use_tagged_queuing < 0)
 217                setup_use_tagged_queuing = USE_TAGGED_QUEUING;
 218#endif
 219
 220        instance = scsi_register (tpnt, sizeof(struct NCR5380_hostdata));
 221        if(instance == NULL)
 222                return 0;
 223                
 224        default_instance = instance;
 225
 226        instance->io_port = (unsigned long) ioaddr;
 227        instance->irq = irq;
 228
 229        NCR5380_init(instance, 0);
 230
 231        instance->n_io_port = 32;
 232
 233        ((struct NCR5380_hostdata *)instance->hostdata)->ctrl = 0;
 234
 235        if (request_irq(instance->irq, scsi_sun3_intr,
 236                        0, "Sun3SCSI-5380VME", instance)) {
 237#ifndef REAL_DMA
 238                printk("scsi%d: IRQ%d not free, interrupts disabled\n",
 239                       instance->host_no, instance->irq);
 240                instance->irq = SCSI_IRQ_NONE;
 241#else
 242                printk("scsi%d: IRQ%d not free, bailing out\n",
 243                       instance->host_no, instance->irq);
 244                return 0;
 245#endif
 246        }
 247
 248        printk("scsi%d: Sun3 5380 VME at port %lX irq", instance->host_no, instance->io_port);
 249        if (instance->irq == SCSI_IRQ_NONE)
 250                printk ("s disabled");
 251        else
 252                printk (" %d", instance->irq);
 253        printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
 254               instance->can_queue, instance->cmd_per_lun,
 255               SUN3SCSI_PUBLIC_RELEASE);
 256        printk("\nscsi%d:", instance->host_no);
 257        NCR5380_print_options(instance);
 258        printk("\n");
 259
 260        dregs->csr = 0;
 261        udelay(SUN3_DMA_DELAY);
 262        dregs->csr = CSR_SCSI | CSR_FIFO | CSR_INTR;
 263        udelay(SUN3_DMA_DELAY);
 264        dregs->fifo_count = 0;
 265        dregs->fifo_count_hi = 0;
 266        dregs->dma_addr_hi = 0;
 267        dregs->dma_addr_lo = 0;
 268        dregs->dma_count_hi = 0;
 269        dregs->dma_count_lo = 0;
 270
 271        dregs->ivect = VME_DATA24 | (instance->irq & 0xff);
 272
 273        called = 1;
 274
 275#ifdef RESET_BOOT
 276        sun3_scsi_reset_boot(instance);
 277#endif
 278
 279        return 1;
 280}
 281
 282int sun3scsi_release (struct Scsi_Host *shpnt)
 283{
 284        if (shpnt->irq != SCSI_IRQ_NONE)
 285                free_irq(shpnt->irq, shpnt);
 286
 287        iounmap((void *)sun3_scsi_regp);
 288
 289        NCR5380_exit(shpnt);
 290        return 0;
 291}
 292
 293#ifdef RESET_BOOT
 294/*
 295 * Our 'bus reset on boot' function
 296 */
 297
 298static void sun3_scsi_reset_boot(struct Scsi_Host *instance)
 299{
 300        unsigned long end;
 301
 302        NCR5380_local_declare();
 303        NCR5380_setup(instance);
 304        
 305        /*
 306         * Do a SCSI reset to clean up the bus during initialization. No
 307         * messing with the queues, interrupts, or locks necessary here.
 308         */
 309
 310        printk( "Sun3 SCSI: resetting the SCSI bus..." );
 311
 312        /* switch off SCSI IRQ - catch an interrupt without IRQ bit set else */
 313//              sun3_disable_irq( IRQ_SUN3_SCSI );
 314
 315        /* get in phase */
 316        NCR5380_write( TARGET_COMMAND_REG,
 317                      PHASE_SR_TO_TCR( NCR5380_read(STATUS_REG) ));
 318
 319        /* assert RST */
 320        NCR5380_write( INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_RST );
 321
 322        /* The min. reset hold time is 25us, so 40us should be enough */
 323        udelay( 50 );
 324
 325        /* reset RST and interrupt */
 326        NCR5380_write( INITIATOR_COMMAND_REG, ICR_BASE );
 327        NCR5380_read( RESET_PARITY_INTERRUPT_REG );
 328
 329        for( end = jiffies" class="shref=++code=jiffies" A intrs#L310" id="L310" class="line" name="L310"> 3s'48x)) {
ioa0'48x)) {
(3"sref">ICn        for( CSR_FIFO"barriass="sref">tpnt 303        3nstan33 class="line" name="L322"> 322         326        
 314
 235        if 3 328
&quo3;Sun3Sss="line" name="L292"> 292
3EAL_D33"L278" class="line" name="L278"> 278
33 class="line" name="L329"> 329        for(         3 sun3const);
 (struct  *shpnt)
 237#ifndef instance<291" cls..." );
 169
 292
34 class="line" name="L293"> 293#ifdef  314
 278
 226        sun3pnt" class="sref">291" c_s="sref">VME_DATA">291" c_snstaners/scsi/sun3_sccsers/scsi/sun3_scsi_vme.c#L236" id="L236" cla(release (structf">shpnt);
 299{
 237#ifndef pr3ntk(;
CSR_SCSI | csr;
 200           3in3tance-> (structh.c#3_scsi_vme.c#L274"h.c#3_s  291}
35 class="line" name="L271"> 271        ivect = CSR_SCSI |  200           3    35 class="line" name="L293"> 293#ifdef pr3ntk( 293#ifdef 
 293#ifdef  |>instax" id="L243" clasrivers/scsi/sun3"sref">CSR_SCSI |  328
pr3ntk( 278
 298static void3ref="+cod3=printk" class="sref">pr3ntkICn        "sref">CSR_SCSI |  237#ifndef instance-&/a>ICn        "sref">CSR_SCSI |  237#ifndef dre3s36ref">dregs->, instance;
 257        ud3lay(
 293#ifdef dre3s36intk (, instax 0" id>instax " id>instap dma" id>instax" id="L243" clasrs="line" name="L293"> 293#ifdef ud3layivect =  317            ref="+cod3=dregs" class="sref">dre3s3>ivect = dma_count_hi = 0;
 317            rf="drive3=dregs" class="sref">dre3s36free_irq( 317            ref="+cod3=dregs" class="sref">dre3s36Sun3SCSI-5380VME"id="L20code=ivect" class="sref">ivect = dma_count_hi = 0;
 257        dre3s36"L278" class="line" name="L278"> 278
dre3s36intk( 292
dre3s36 class="line" name="L310"> 310        dregs->ICn        "sref">CSR_SCSI |  237#ifndef dre3s3>, instance;
 257         292
ca3led (structh.c#3_scsi_vme.c#L274"h.c#3_s  280}
 292
 226        set>ICn        "sref">CSR_SCSI |  237#ifndef setup_use_tagged_queance, sun3_scsi_vme.c#Lance, suref">ICn        f">shpnt);
 280}
"h.c#3_scsi_vme.c#L274"h.c#3_s  280}
 292
 271        ICn        h.c#3_scsi_vme.c#L274"h.c#3_s  280}
su33scsi_ss="line" name="L292"> 292
 293#ifdef  295
 295instancessi_veemsef="have ugly side effects=" class="line" name="L295"> 295i3unmap38es, interrupts, or locks nec326" class="line" name="L326"> 326         289        NC35380_eerrupt without IRQ bit sethis doesn#L296t_veemef="c#L3us"L claid= -- samc326" class="line" name="L326"> 326         326        (struccsi/sebugvme.c#L227" id=scsi/ccsi/sebugst_scsss="line" name="L299"> 299{
 237#ifndef dmafla c class="line" name="L200"> 200           3"comment"3/*
();
 303         226        
setup_use_tagged_queef="+code=instance" class="sref">instance;
 237#ifndef PHASE_SR_TO_TC"+code=fifo_countL303" hre_savece" class="srefL303" hre_saveref">ICn        fla class="sref">dmafla c claass="line" name="L303"> 303        (();
ssis/scsi/sun3_scsi_vme.c#tancessiref">ICn        ef="+code=instance" class="sref">instance;
 303        instance->)) {
ICn        fla class="sref">dmafla c claass="line" name="L303"> 303         211
 292
" class="line" name="L278"> 278
N40( 293#ifdef  235        if 4n class="4omment">/*
INc326" class="line" name="L326"> 326        sun3href="drivers/scsi/sun3_scsi_t);
);
i_regpase (structdass="sref">ctrl (structf">IN_fla n3_scsi_vme.c#Lf">IN_fla  class="line" name="L299"> 299{
 237#ifndef 
 227         310        pr4ntk( ICn        scsi/sL26orig_csi_vme.c#L227" id=scsi/sL26orig_csi_265"E)
 222           4ivers/scs4/sun3_scsi_vme.c#L312" i4="L3141gt;ICn        scsi/sL26orig_csi_vme.c#L227" id=scsi/sL26orig_csi_265"ass="line" name="L303"> 303        /* switch off SC4I IRQ41 class="line" name="L293"> 293#ifdef 
=/scsi/svL26page(/a>;
 314
);
/a>;
ctrl 303        /* get in phase 4/( 303        N4R5380_write( )
 227        )
 227         227        /* assert RST */4/span4

 293#ifdef N4R5380_write( instap 0" id>instax" id="L243" clasrivers/scsi/sun3csi_vme.c#L227" id=227" cla,3scsi/sun3_scsi_si/sun3_scsi_vme.c#Lid="L265"ass="line" name="L303"> 303        " class="line" name="L278"> 278
/* The min. rese4 hold42 class="line" name="L293"> 293#ifdef ud4lay
 314
 227        /* reset RST and4inter4upt */
 326        N4R5380_write( ivect = CSR_SCSI | CSR_INTR;
 303        NC45380_read( ivect = CSR_SCSI | CSR_INTR;
 303         227        4nd 326        ICn        f">IN_fla n3_scsi_vme.c#Lf">IN_fla  class="line" name="L299"> 299{
4nstan43gt;ivect = CSR_SCSI |  303         252           4ruct  (structss="sref">ivect = CSR_SCSI |  303         305        
 326         |>i"L27= ~TR;
s4" class="line" name="L314"> 314
4EAL_D43es, interrupts, or locks nea href="_counhref=> |>|reTR;
s4" class="line" name="L314"> 314
43 class="line" name="L329"> 329        for4         4 dma_count_lo = 0;
CSR_SCSI |  303         271        ivect = /a>;
 303        44gt;csr = /a>;
 272
 305        fifo_count = 0;
 269        fifo_count_hi = 0;
 270
( ivect =  266        ivect =  265        pr4ntk( 265        in44
 293#ifdef 455380_write( dma_count_lo = 0;
CSR_SCSI |  272
" class="line" name="L278"> 278
45gt; 227        pr4ntk( 293#ifdef  292
 226        pr4ntksun3pnt" class="srefnass="s_scsi_vme.c#Lfnass=t;instance)
 299{
 237#ifndef pr4ntk 227         292
dre4s46 class="line" name="L271"> 271        ud4lay(sun3pnt" class="srefnass="s_scsi_vme.c#Lfnass=t; 271        dre4s46intk (    cmid="4_clad8a)>    cmida href="drivers/scsi/cmscsi_vme.c#L274" ms cla,s="line" name="L271"> 271        ud4lay (structf">IN_fla n3_scsi_vme.c#Lf">IN_fla  class="line" name="L299"> 299{
dre4s4> 237#ifndef dre4s46free_irq(etup_use_tagged_quecmscsi_vme.c#L274" ms cla = 0;
instanrequeast_lo = 0;
 299{
dre4s46Sun3SCSI-5380VME"291" clsf="drivers/scswant_scsi_vme.c#L274"want_s class="line" name="L227"> 227        dre4s46380_read(class="line" name="L252"> 252           4ref="+cod4=dregs" class="sref">dre4s46intk( 291}
dre4s46"srefss="line" name="L292"> 292
 271        dre4s47(sun3release (struct tarun3_scsi_vme.c#Lscsihref=L267>tarut porhref="drivers/scsi/sun3_scsi_si/sun3_scsi_vme.c#Lid="L265"s;;
ctrl 299{
 237#ifndef ca4led 305        ;
CSR_SCSI |  291}
 226        sun3_scsi_reset_boot"sref">CSR_SCSI | csr;
 200           4ref="+cod4s/scsi/sun3_scsi_vme.c#L478" i4="L278"S
 293#ifdef , taru 0;
<>instap 0" id>instax > |>instaxi265"cinstax" id="L243" clasrivers/scsi/sun3lass="sref">ctrlCSR_SCSI | dma_count_lo = 0;
 272
 278
 305        ivect = ICn        scsi/sL26orig_si/sun3_scsi_vme.c#Lscsi/sL26orig_si/su265"E"+co"+col16)ss="line" name="L303"> 303        su48gt;csr = ICn        scsi/sL26orig_si/sun3_scsi_vme.c#Lscsi/sL26orig_si/su265"E""L272" clclass="line" name="L272"> 272
 293#ifdef fifo_count = 0;
ICn        scsi/sL26orig_si/sun3_scsi_vme.c#Lscsi/sL26orig_si/su265"E"+co"+col16)ss="line" name="L303"> 303        fifo_count_hi = 0;
ICn        scsi/sL26orig_si/sun3_scsi_vme.c#Lscsi/sL26orig_si/su265"E""L272" clclass="line" name="L272"> 272
 272
i4unmap48es, interrupts, or locks nea href="if(!(> |>i"L27 sun3 id=ENd="L))4" class="line" name="L314"> 314
 |>|reTR 314
NC48 class="line" name="L310"> 310         291}
 292
 293#ifdef 
 326        
sun3release (struct  (structf">IN_fla n3_scsi_vme.c#Lf">IN_fla  class="line" name="L299"> 299{
 237#ifndef 
sa>;
 200           4ivers/scs4/sun3_scsi_vme.c#L298" i4="L2949class="sref"> (struct291s="sref">instanreL265" class="line" name="L265"> 265        ( 227         265         271        ivect = CSR_SCSI |  200           5ref="+cod5=NCR5380_local_declare" 5lass=502ntk( 227        N50( 50 );
csr;
 200           5r4f="+cod5=*
IN_fla n3_scsi_vme.c#Lf">IN_fla  clasass="line" name="L237"> 237#ifndef /*
ICn        f65"n3_scsi_vme.c#L265" clah"" clICn        scsi/sL26orig_si/sun3_scsi_vme.c#Lscsi/sL26orig_si/su265")ss="line" name="L299"> 299{
ICn        f65"n3_scsi_vme.c#L265" cla++ss="line" name="L200"> 200           5r7omment"5 sun3_scsi_vme.c#L298" i5he qu50class="sref">ss="line" name="L292"> 292

 329        for5ivers/scs5/sun3_scsi_vme.c#L310" i5="L3150gt; 200           5ref="+cod5=printk" class="sref">pr5ntk
 293#ifdef , instax total>instax" id="L243" clasrivers/scsi/sun3265"n3_scsi_vme.c#L265" clasrivers/scsi/sun3scsi/sL26orig_si/sun3_scsi_vme.c#Lscsi/sL26orig_si/su265")ss="line" name="L200"> 200           5ref="+cod5omment">/* switch off SC5I IRQ51ref">" class="line" name="L278"> 278

 326        (!ICn        f">IN_fla n3_scsi_vme.c#Lf">IN_fla  clasa="L27="L27 >ICn        ss="sref">ivect = CSR_SCSI |  237#ifndef /* get in phase 5/(;
 227        N51/sun3s="line" name="L272"> 272

 293#ifdef "scsi%d: Sun3 5380 VME at port %lX irq",  200           5rvers/scs5omment">/* assert RST */5/span51c#L28" class="line" name="L278"> 278
N52 class="line" name="L271"> 271         (structvcsi_vme.c#L227" id=v227" cla cl>a>;
);
ivect =vL26   tovt portvers/scsi/sun3scsi/sL26orig_csi_vme.c#L227" id=scsi/sL26orig_csi_265"ass="line" name="L303"> 303        /* The min. rese5 hold52intk ( 303        ud5lay (structvcsi_vme.c#L227" id=v227" cla +cl>ICn        scsi/sL26orig_si/sun3_scsi_vme.c#Lscsi/sL26orig_si/su265"E-rivers/scsi/sun3265"n3_scsi_vme.c#L265" claass="line" name="L303"> 303         (structvcsi_vme.c#L227" id=v227" cla--ss="line" name="L303"> 303        /* reset RST and5inter52free_irq( 303        N52Sun3SCSI-5380VME"t else>ICn        ss="sref">ivect = CSR_SCSI |  237#ifndef NC52class="sref">PHASE_SRcasrf="drivers/scsi/sun3LEF2_3sun3_scsi_vme.csun3LEF2_s/scs:s="line" name="L237"> 237#ifndef ICn        ss="sref">ivect =  303        5ndinstance-> 303        dregs-> 303        5nstan53gt; 237#ifndef ICn        ss="sref">ivect =  272
 303         303        ( 237#ifndef &quo53Sun3SCSI-5380VME"hivers/scsi/sun3vcsi_vme.c#L227" id=v227" cla cl>ICn        ss="sref">ivect =  303        5EAL_D53class="sref">PHASE_SR_TO_TC"+breakss="line" name="L303"> 303        53intk( 292
instance-&s="line" name="L292"> 292
dregs-> 292
 292
54 class="line" name="L293"> 293#ifdef ICn        scsi/sL26orig_csi_vme.c#L227" id=scsi/sL26orig_csi_265"ass="line" name="L303"> 303         303         226        ivect =  265        ivect =  265        pr5ntk(( fifo_count = 0;
 269        in54gt;dma_count_lo = 0;
 270
55 class="line" name="L271"> 271        ivect =  265        55gt;csr =  266        pr5ntk( 293#ifdef fifo_count = 0;
CSR_SCSI |  303        (s="line" name="L303"> 303        pr5ntk |>|reTR 314
(s="line" name="L303"> 303        pr5ntk 326         326        dre5s565380_write( ivect = CSR_SCSI | CSR_INTR;
 303        ud5layivect = CSR_SCSI | CSR_INTR;
 303        dre5s56ref">" clas>(s="line" name="L303"> 303        ud5lay);
<_donNvme.c#L227" id=scsi/sL26>);
<_donN265"href="+code=CSR_FIi_vme.c#L222" id="L222" class="line" name="L303"> 303        dre5s56 class="line" name="L235"> 235        if 5rf="drive5=dregs" class="sref">dre5s56free_irq(291" clsf="drivers/scs291s="sref">instanreL265"ss="line" name="L303"> 303        dre5s56/sun3s="line" name="L272"> 272
dre5s56380_rss="line" name="L292"> 292
dre5s56 class="line" name="L329"> 329        for5ref="+cod5=dregs" class="sref">dre5s56 329 329        for5ivers/scs5/sun3_scsi_vme.c#L271" i5="L275" class="line" name="L271"> 271        dre5s57(sun3 * 237#ifndef PHASE_SR_TOref="+code=CSR_FI3/4" id="cNAMLvme.c#L290" id=3/4" id="cNAML class="line" name="L237"> 237#ifndef ca5ledinstandetec1lass="sref">PHASE_SR_ref="+code=CSR_FIscsihref=Letec1s="sref">instanscsihref=Letec1 class="line" name="L237"> 237#ifndef PHASE_SRref="+code=CSR_FIscsihref=releas3vme.c#L227" id=scsihref=releas3 class="line" name="L237"> 237#ifndef PHASE_SR_TOref="+code=CSR_FIscsihref=in5"n3_scsi_vme.c#Lscsihref=in5" class="line" name="L237"> 237#ifndef sun3_scsi.code=ivect" claqueue_scsaid="4_clad8a)queue_scsaidlass="sref">PHAref="+code=CSR_FIscsihref=queue__scsaid="4_clad8a)scsihref=queue__scsaid class="line" name="L237"> 237#ifndef sun3_scsi.code=ivect" claeh_abord=".c#3_ref">CSR_SCSIsun3_scsref="+code=CSR_FIscsihref=abord="4_clad8a)scsihref=abord class="line" name="L237"> 237#ifndef CSR_SCSIref="+code=CSR_FIscsihref=bus_3_scs="4_clad8a)scsihref=bus_3_scs class="line" name="L237"> 237#ifndef (CSR_SCSIan=queuelass="sref">PHASE_ref="+code=CSR_FIFAN_QUEULvme.c#L290" id=sAN_QUEUL class="line" name="L237"> 237#ifndef PHASE_SRre7ss="line" name="L237"> 237#ifndef PHAref="+code=CSR_FISG_Td="LSIZLvme.c#L290" id=3G_Td="LSIZL class="line" name="L237"> 237#ifndef su58intk (PHASref="+code=CSR_FIFMD_PER_LUNvme.c#L290" id=sMD_PER_LUN class="line" name="L237"> 237#ifndef Pref="+code=CSR_FIDISd="L_CLUSTERINun3_scsi_vme.c#LDISd="L_CLUSTERINuclass="line" name="L271"> 271         329        for5"f="drive5f="+code=free_irq" class5"sref58 class="line" name="L226"> 226         272
i5unmap587a hrGSnclude id="L24"line" name="L329"> 32
 329        for5ivers/scs5/sun3_scsi_vme.c#L289" i5="L2858 class="line" name="L329"> 329        for5ref="+cod5=NCR5380_exit" class="sr5f">NC58 clasf="+code=CSR_FIMODU"L_LICENSLvme.c#L290" id=MODU"L_LICENSLref">I %lX irq",GPLid="L243" cla)ss="line" name="L200"> 200           5rn 0;



The original LXR software by_scsi="line" nhttp://sourceforge.net/projec1s/lxu">LXR _scsunity clas this expedisi_val ="L2L29cby_="line" nmailto:lxu@s/sux.no">lxu@s/sux.no cla.
lxu.s/sux.no kic#3y h="Ledcby_="line" nhttp://www.redpill-s/spro.no">Redpill L/spro AS clas provider of L/sux3consultot; .c# opeda"L29s services sSnce 1995.