linux/drivers/scsi/qlogicfas.c
<<
opti3.4/spalue 3.4/formue 3.4a opti3. href="../linux+v3opti3.4img src="../.static/gfx/right.png" alt=">>">op4/spalueop4spal class="lxr_search">optiopti3.4input typ v3hidden" nam v3navtarget" > v3">opti3.4input typ v3text" nam v3search" idv3search">opti3.4butt typ v3submit">Searchopti3.Prefse 3.4/a>op4/spalueti3. .4/divueti3. .4form ac val="ajax+*" method="post" onsubmit="return false;">op4input typ v3hidden" nam v3ajax_lookup" idv3ajax_lookup" > v3">oti3. .4/formueoti3. .4div class="headingbott m">e 4div idv3file_contents"u
. .14/a>4spal class="comment">/*4/spalue. .24/a>4spal class="comment"> * Qlogic FAS408 ISA card driver4/spalue. .34/a>4spal class="comment"> *4/spalue. .44/a>4spal class="comment"> * Copyright 1994, Tom Zerucha.i3.4/spalue. .54/a>4spal class="comment"> * tz@execpc.com4/spalue. .64/a>4spal class="comment"> * 4/spalue. .74/a>4spal class="comment"> * Redistributable under terms of the GNU General Public License4/spalue. .84/a>4spal class="comment"> *4/spalue. .94/a>4spal class="comment"> * For the avoidance of doubt the "preferred form" of this code is one which. optia>4spal class="comment"> * is in an open n
	 patent encumbered format. Where cryptographic key signing. 114/a>4spal class="comment"> * forms part of the process of creating an executable the informatval. 124/a>4spal class="comment"> * including keys needed to generate an equi >
ently func valal executable. 134/a>4spal class="comment"> * are deemed to be part of the source code.. 144/a>4spal class="comment"> *. 154/a>4spal class="comment"> * Check qlogicfas408.c for more credits and info.. 164/a>4spal class="comment"> */. 174/a>e. 184/a>#include <linux/module.h4/a>>e. 194/a>#include <linux/blkdev.h4/a>>               4spal class="comment">/* to get disk capacity */. 204/a>#include <linux/kernel.h4/a>>e. 214/a>#include <linux/string.h4/a>>e. 224/a>#include <linux/init.h4/a>>e. 234/a>#include <linux/interrupt.h4/a>>e. 244/a>#include <linux/ioport.h4/a>>e. 254/a>#include <linux/proc_fs.h4/a>>e. 264/a>#include <linux/unistd.h4/a>>e. 274/a>#include <linux/spinlock.h4/a>>e. 284/a>#include <linux/stat.h4/a>>e. 294/a>e. 304/a>#include <asm/io.h4/a>>e. 314/a>#include <asm/irq.h4/a>>e. 324/a>#include <asm/dma.h4/a>>e. 334/a>e. 344/a>#include "scsi.h4/a>"e. 354/a>#include <scsi/scsi_host.h4/a>>e. 364/a>#include "qlogicfas408.h4/a>"e. 374/a>e. 384/a>4spal class="comment">/* Set the following to 2 to use normal interrupt (ac vve high/totempole-4/spalue. 394/a>4spal class="comment"> * tristate), otherwise use 0 (REQUIRED FOR PCMCIA) for ac vve low, open4/spalue. 4ptia>4spal class="comment"> * drain4/spalue. 414/a>4spal class="comment"> */. 424/a>#define.4a href="+code=INT_TYPE" class="sref">INT_TYPE4/a>        2e. 434/a>e. 444/a>static char.4a href="+code=qlogicfas_nam " class="sref">qlogicfas_nam 4/a>[] = 4spal class="string">"qlogicfas". 454/a>e. 464/a>4spal class="comment">/*4/spalue. 474/a>4spal class="comment"> *      Look for qlogic card and init if found 4/spalue. 484/a>4spal class="comment"> */. 494/a> e. 504/a>static struct.4a href="+code=Scsi_Host" class="sref">Scsi_Host4/a> *4a href="+code=__qlogicfas_detect" class="sref">__qlogicfas_detect4/a>(struct.4a href="+code=scsi_host_template" class="sref">scsi_host_template4/a> *4a href="+code=host" class="sref">host4/a>,e. 514/a>                                                                int.4a href="+code=qbas " class="sref">qbas 4/a>,e. 524/a>                                                                int.4a href="+code=qlirq" class="sref">qlirq4/a>)e. 534/a>{e. 544/a>        int.4a href="+code=qltyp" class="sref">qltyp4/a>;              4spal class="comment">/* type of chip */. 554/a>        int.4a href="+code=qinitid" class="sref">qinitid4/a>;e. 564/a>        struct.4a href="+code=Scsi_Host" class="sref">Scsi_Host4/a> *4a href="+code=hreg" class="sref">hreg4/a>; 4spal class="comment">/* registered host structure */. 574/a>        struct.4a href="+code=qlogicfas408_priv" class="sref">qlogicfas408_priv4/a> *4a href="+code=priv" class="sref">priv4/a>;e. 584/a>e. 594/a>        4spal class="comment">/*      Qlogic Cards only exist at 0x230 or 0x330 (the chip itself4/spalue. 6ptia>4spal class="comment">         *      decodes the address - I check 230 first since MIDI cards are4/spalue. 614/a>4spal class="comment">         *      typically at 0x3304/spalue. 624/a>4spal class="comment">         *4/spalue. 634/a>4spal class="comment">         *      Theoretically, two Qlogic cards cal coexist in the sam  system.. 644/a>4spal class="comment">         *      This should work by simply using this as a loadable module for. 654/a>4spal class="comment">         *      the second card, but I haven't tested this.. 664/a>4spal class="comment">         */. 674/a>e. 684/a>        if (!4a href="+code=qbas " class="sref">qbas 4/a> ||.4a href="+code=qlirq" class="sref">qlirq4/a> == -1)e. 694/a>                goto.4a href="+code=err" class="sref">err4/a>;e. 704/a>e. 714/a>        if (!4a href="+code=request_region" class="sref">request_region4/a>(4a href="+code=qbas " class="sref">qbas 4/a>, 0x10,.4a href="+code=qlogicfas_nam " class="sref">qlogicfas_nam 4/a>)) {e. 724/a>                4a href="+code=printk" class="sref">printk4/a>(4a href="+code=KERN_INFO" class="sref">KERN_INFO4/a> 4spal class="string">"%s: address %#x is busy\n"qlogicfas_nam 4/a>,e. 734/a>                                                              4a href="+code=qbas " class="sref">qbas 4/a>);e. 744/a>                goto.4a href="+code=err" class="sref">err4/a>;e. 754/a>        }e. 764/a>e. 774/a>        if (!4a href="+code=qlogicfas408_detect" class="sref">qlogicfas408_detect4/a>(4a href="+code=qbas " class="sref">qbas 4/a>, 4a href="+code=INT_TYPE" class="sref">INT_TYPE4/a>)) {e. 784/a>                4a href="+code=printk" class="sref">printk4/a>(4a href="+code=KERN_WARNING" class="sref">KERN_WARNING4/a> 4spal class="string">"%s: probe failed for %#x\n". 794/a>                                                                4a href="+code=qlogicfas_nam " class="sref">qlogicfas_nam 4/a>,e. 804/a>                                                                4a href="+code=qbas " class="sref">qbas 4/a>);e. 814/a>                goto.4a href="+code=err_releas _mem" class="sref">err_releas _mem4/a>;e. 824/a>        }e. 834/a>e. 844/a>        4a href="+code=printk" class="sref">printk4/a>(4a href="+code=KERN_INFO" class="sref">KERN_INFO4/a> 4spal class="string">"%s: Using preset bas  address of %03x,". 854/a>                         4spal class="string">" IRQ %d\n"qlogicfas_nam 4/a>,.4a href="+code=qbas " class="sref">qbas 4/a>,.4a href="+code=qlirq" class="sref">qlirq4/a>);e. 864/a>e. 874/a>        4a href="+code=qltyp" class="sref">qltyp4/a> = 4a href="+code=qlogicfas408_get_chip_type" class="sref">qlogicfas408_get_chip_type4/a>(4a href="+code=qbas " class="sref">qbas 4/a>, 4a href="+code=INT_TYPE" class="sref">INT_TYPE4/a>);e. 884/a>        4a href="+code=qinitid" class="sref">qinitid4/a> = 4a href="+code=host" class="sref">host4/a>->4a href="+code=this_id" class="sref">this_id4/a>;e. 894/a>        if (4a href="+code=qinitid" class="sref">qinitid4/a> < 0)e. 904/a>                4a href="+code=qinitid" class="sref">qinitid4/a> = 7;    4spal class="comment">/* if no ID, use 7 */. 914/a>e. 924/a>        4a href="+code=qlogicfas408_setup" class="sref">qlogicfas408_setup4/a>(4a href="+code=qbas " class="sref">qbas 4/a>, 4a href="+code=qinitid" class="sref">qinitid4/a>, 4a href="+code=INT_TYPE" class="sref">INT_TYPE4/a>);e. 934/a>e. 944/a>        4a href="+code=hreg" class="sref">hreg4/a> = 4a href="+code=scsi_host_alloc" class="sref">scsi_host_alloc4/a>(4a href="+code=host" class="sref">host4/a>, sizeof(struct.4a href="+code=qlogicfas408_priv" class="sref">qlogicfas408_priv4/a>));e. 954/a>        if (!4a href="+code=hreg" class="sref">hreg4/a>)e. 964/a>                goto.4a href="+code=err_releas _mem" class="sref">err_releas _mem4/a>;e. 974/a>        4a href="+code=priv" class="sref">priv4/a> = 4a href="+code=get_priv_by_host" class="sref">get_priv_by_host4/a>(4a href="+code=hreg" class="sref">hreg4/a>);e. 984/a>        4a href="+code=hreg" class="sref">hreg4/a>->4a href="+code=io_port" class="sref">io_port4/a> = 4a href="+code=qbas " class="sref">qbas 4/a>;e. 994/a>        4a href="+code=hreg" class="sref">hreg4/a>->4a href="+code=n_io_port" class="sref">n_io_port4/a> = 16;e.1004/a>        4a href="+code=hreg" class="sref">hreg4/a>->4a href="+code=dma_channel" class="sref">dma_channel4/a> = -1;e.1014/a>        if (4a href="+code=qlirq" class="sref">qlirq4/a> != -1)e.1024/a>                4a href="+code=hreg" class="sref">hreg4/a>->4a href="+code=irq" class="sref">irq4/a> =.4a href="+code=qlirq" class="sref">qlirq4/a>;e.1034/a>        4a href="+code=priv" class="sref">priv4/a>->4a href="+code=qbas " class="sref">qbas 4/a> = 4a href="+code=qbas " class="sref">qbas 4/a>;e.1044/a>        4a href="+code=priv" class="sref">priv4/a>->4a href="+code=qlirq" class="sref">qlirq4/a> =.4a href="+code=qlirq" class="sref">qlirq4/a>;e.1054/a>        4a href="+code=priv" class="sref">priv4/a>->4a href="+code=qinitid" class="sref">qinitid4/a> = 4a href="+code=qinitid" class="sref">qinitid4/a>;e.1064/a>        4a href="+code=priv" class="sref">priv4/a>->4a href="+code=shost" class="sref">shost4/a> = 4a href="+code=hreg" class="sref">hreg4/a>;e.1074/a>        4a href="+code=priv" class="sref">priv4/a>->4a href="+code=int_type" class="sref">int_type4/a> = 4a href="+code=INT_TYPE" class="sref">INT_TYPE4/a>;e.1084/a>e.1094/a>        4a href="+code=sprintf" class="sref">sprintf4/a>(4a href="+code=priv" class="sref">priv4/a>->4a href="+code=qinfo" class="sref">qinfo4/a>,e.1104/a>                4spal class="string">"Qlogicfas Driver vers"
	 0.46, chip %02X at %03X, IRQ %d, TPdma:%d".1114/a>                4a href="+code=qltyp" class="sref">qltyp4/a>,.4a href="+code=qbas " class="sref">qbas 4/a>,.4a href="+code=qlirq" class="sref">qlirq4/a>,.4a href="+code=QL_TURBO_PDMA" class="sref">QL_TURBO_PDMA4/a>);e.1124/a>        4a href="+code=host" class="sref">host4/a>->4a href="+code=nam " class="sref">nam 4/a> = 4a href="+code=qlogicfas_nam " class="sref">qlogicfas_nam 4/a>;e.1134/a>e.1144/a>        if (4a href="+code=request_irq" class="sref">request_irq4/a>(4a href="+code=qlirq" class="sref">qlirq4/a>,.4a href="+code=qlogicfas408_ihandl" class="sref">qlogicfas408_ihandl4/a>, 0,.4a href="+code=qlogicfas_nam " class="sref">qlogicfas_nam 4/a>,.4a href="+code=hreg" class="sref">hreg4/a>))e.1154/a>                goto.4a href="+code=free_scsi_host" class="sref">free_scsi_host4/a>;e.1164/a>e.1174/a>        if (4a href="+code=scsi_add_host" class="sref">scsi_add_host4/a>(4a href="+code=hreg" class="sref">hreg4/a>,.4a href="+code=NULL" class="sref">NULL4/a>))e.1184/a>                goto.4a href="+code=free_interrupt" class="sref">free_interrupt4/a>;e.1194/a>e.1204/a>        4a href="+code=scsi_scan_host" class="sref">scsi_scan_host4/a>(4a href="+code=hreg" class="sref">hreg4/a>);e.1214/a>e.1224/a>        return 4a href="+code=hreg" class="sref">hreg4/a>;e.1234/a>e.1244/a>4a href="+code=free_interrupt" class="sref">free_interrupt4/a>:e.1254/a>        4a href="+code=free_irq" class="sref">free_irq4/a>(4a href="+code=qlirq" class="sref">qlirq4/a>,.4a href="+code=hreg" class="sref">hreg4/a>);e.1264/a>e.1274/a>4a href="+code=free_scsi_host" class="sref">free_scsi_host4/a>:e.1284/a>        4a href="+code=scsi_host_put" class="sref">scsi_host_put4/a>(4a href="+code=hreg" class="sref">hreg4/a>);e.1294/a>e.1304/a>4a href="+code=err_releas _mem" class="sref">err_releas _mem4/a>:e.1314/a>        4a href="+code=releas _region" class="sref">releas _region4/a>(4a href="+code=qbas " class="sref">qbas 4/a>, 0x10);e.1324/a>4a href="+code=err" class="sref">err4/a>:e.1334/a>        return 4a href="+code=NULL" class="sref">NULL4/a>;e.1344/a>}e.1354/a>e.1364/a>#define.4a href="+code=MAX_QLOGICFAS" class="sref">MAX_QLOGICFAS4/a>   8e.1374/a>static struct.4a href="+code=qlogicfas408_priv" class="sref">qlogicfas408_priv4/a> *4a href="+code=cards" class="sref">cards4/a>;e.1384/a>static int.4a href="+code=iobas " class="sref">iobas 4/a>[4a href="+code=MAX_QLOGICFAS" class="sref">MAX_QLOGICFAS4/a>];e.1394/a>static int.4a href="+code=irq" class="sref">irq4/a>[4a href="+code=MAX_QLOGICFAS" class="sref">MAX_QLOGICFAS4/a>] = { [0 ....4a href="+code=MAX_QLOGICFAS" class="sref">MAX_QLOGICFAS4/a>-1] = -1 };e.1404/a>4a href="+code=module_param_array" class="sref">module_param_array4/a>(4a href="+code=iobas " class="sref">iobas 4/a>, int,.4a href="+code=NULL" class="sref">NULL4/a>, 0);e.1414/a>4a href="+code=module_param_array" class="sref">module_param_array4/a>(4a href="+code=irq" class="sref">irq4/a>, int,.4a href="+code=NULL" class="sref">NULL4/a>, 0);e.1424/a>4a href="+code=MODULE_PARM_DESC" class="sref">MODULE_PARM_DESC4/a>(4a href="+code=iobas " class="sref">iobas 4/a>, 4spal class="string">"I/O address".1434/a>4a href="+code=MODULE_PARM_DESC" class="sref">MODULE_PARM_DESC4/a>(4a href="+code=irq" class="sref">irq4/a>, 4spal class="string">"IRQ".1444/a>e.1454/a>static int.4a href="+code=qlogicfas_detect" class="sref">qlogicfas_detect4/a>(struct.4a href="+code=scsi_host_template" class="sref">scsi_host_template4/a> *4a href="+code=sht" class="sref">sht4/a>)e.1464/a>{e.1474/a>        struct.4a href="+code=Scsi_Host" class="sref">Scsi_Host4/a> *4a href="+code=shost" class="sref">shost4/a>;e.1484/a>        struct.4a href="+code=qlogicfas408_priv" class="sref">qlogicfas408_priv4/a> *4a href="+code=priv" class="sref">priv4/a>;e.1494/a>        int.4a href="+code=num" class="sref">num4/a>;e.1504/a>e.1514/a>        for (4a href="+code=num" class="sref">num4/a> = 0;.4a href="+code=num" class="sref">num4/a> < 4a href="+code=MAX_QLOGICFAS" class="sref">MAX_QLOGICFAS4/a>;.4a href="+code=num" class="sref">num4/a>++) {e.1524/a>                4a href="+code=shost" class="sref">shost4/a> = 4a href="+code=__qlogicfas_detect" class="sref">__qlogicfas_detect4/a>(4a href="+code=sht" class="sref">sht4/a>,.4a href="+code=iobas " class="sref">iobas 4/a>[4a href="+code=num" class="sref">num4/a>],.4a href="+code=irq" class="sref">irq4/a>[4a href="+code=num" class="sref">num4/a>]);e.1534/a>                if (4a href="+code=shost" class="sref">shost4/a> == 4a href="+code=NULL" class="sref">NULL4/a>) {e.1544/a>                        4spal class="comment">/* no more devices */.1554/a>                        break;e.1564/a>                }e.1574/a>                4a href="+code=priv" class="sref">priv4/a> = 4a href="+code=get_priv_by_host" class="sref">get_priv_by_host4/a>(4a href="+code=shost" class="sref">shost4/a>);e.1584/a>                4a href="+code=priv" class="sref">priv4/a>->4a href="+code=next" class="sref">next4/a> = 4a href="+code=cards" class="sref">cards4/a>;e.1594/a>                4a href="+code=cards" class="sref">cards4/a> = 4a href="+code=priv" class="sref">priv4/a>;e.1604/a>        }e.1614/a>e.1624/a>        return 4a href="+code=num" class="sref">num4/a>;e.1634/a>}e.1644/a>e.1654/a>static int.4a href="+code=qlogicfas_releas " class="sref">qlogicfas_releas 4/a>(struct.4a href="+code=Scsi_Host" class="sref">Scsi_Host4/a> *4a href="+code=shost" class="sref">shost4/a>)e.1664/a>{e.1674/a>        struct.4a href="+code=qlogicfas408_priv" class="sref">qlogicfas408_priv4/a> *4a href="+code=priv" class="sref">priv4/a> = 4a href="+code=get_priv_by_host" class="sref">get_priv_by_host4/a>(4a href="+code=shost" class="sref">shost4/a>);e.1684/a>e.1694/a>        4a href="+code=scsi_remove_host" class="sref">scsi_remove_host4/a>(4a href="+code=shost" class="sref">shost4/a>);e.1704/a>        if (4a href="+code=shost" class="sref">shost4/a>->4a href="+code=irq" class="sref">irq4/a>) {e.1714/a>                4a href="+code=qlogicfas408_disable_ints" class="sref">qlogicfas408_disable_ints4/a>(4a href="+code=priv" class="sref">priv4/a>);        e.1724/a>                4a href="+code=free_irq" class="sref">free_irq4/a>(4a href="+code=shost" class="sref">shost4/a>->4a href="+code=irq" class="sref">irq4/a>,.4a href="+code=shost" class="sref">shost4/a>);e.1734/a>        }e.1744/a>        if (4a href="+code=shost" class="sref">shost4/a>->4a href="+code=dma_channel" class="sref">dma_channel4/a> != 0xff)e.1754/a>                4a href="+code=free_dma" class="sref">free_dma4/a>(4a href="+code=shost" class="sref">shost4/a>->4a href="+code=dma_channel" class="sref">dma_channel4/a>);e.1764/a>        if (4a href="+code=shost" class="sref">shost4/a>->4a href="+code=io_port" class="sref">io_port4/a> &&.4a href="+code=shost" class="sref">shost4/a>->4a href="+code=n_io_port" class="sref">n_io_port4/a>)e.1774/a>                4a href="+code=releas _region" class="sref">releas _region4/a>(4a href="+code=shost" class="sref">shost4/a>->4a href="+code=io_port" class="sref">io_port4/a>,.4a href="+code=shost" class="sref">shost4/a>->4a href="+code=n_io_port" class="sref">n_io_port4/a>);e.1784/a>        4a href="+code=scsi_host_put" class="sref">scsi_host_put4/a>(4a href="+code=shost" class="sref">shost4/a>);e.1794/a>e.1804/a>        return 0;e.1814/a>}e.1824/a>e.1834/a>4spal class="comment">/*4/spalue.1844/a>4spal class="comment"> *      The driver template is also needed for PCMCIA4/spalue.1854/a>4spal class="comment"> */.1864/a>static struct.4a href="+code=scsi_host_template" class="sref">scsi_host_template4/a> 4a href="+code=qlogicfas_driver_template" class="sref">qlogicfas_driver_template4/a> = {e.1874/a>        .4a href="+code=module" class="sref">module4/a>                 = 4a href="+code=THIS_MODULE" class="sref">THIS_MODULE4/a>,e.1884/a>        .4a href="+code=nam " class="sref">nam 4/a>                   = 4a href="+code=qlogicfas_nam " class="sref">qlogicfas_nam 4/a>,e.1894/a>        .4a href="+code=proc_nam " class="sref">proc_nam 4/a>              = 4a href="+code=qlogicfas_nam " class="sref">qlogicfas_nam 4/a>,e.1904/a>        .4a href="+code=info" class="sref">info4/a>                   = 4a href="+code=qlogicfas408_info" class="sref">qlogicfas408_info4/a>,e.1914/a>        .4a href="+code=queuecommand" class="sref">queuecommand4/a>           = 4a href="+code=qlogicfas408_queuecommand" class="sref">qlogicfas408_queuecommand4/a>,e.1924/a>        .4a href="+code=eh_abort_handler" class="sref">eh_abort_handler4/a>       = 4a href="+code=qlogicfas408_abort" class="sref">qlogicfas408_abort4/a>,e.1934/a>        .4a href="+code=eh_bus_reset_handler" class="sref">eh_bus_reset_handler4/a>   = 4a href="+code=qlogicfas408_bus_reset" class="sref">qlogicfas408_bus_reset4/a>,e.1944/a>        .4a href="+code=bios_param" class="sref">bios_param4/a>             = 4a href="+code=qlogicfas408_biosparam" class="sref">qlogicfas408_biosparam4/a>,e.1954/a>        .4a href="+code=can_queue" class="sref">can_queue4/a>              = 1,e.1964/a>        .4a href="+code=this_id" class="sref">this_id4/a>                = -1,e.1974/a>        .4a href="+code=sg_tablesize" class="sref">sg_tablesize4/a>           = 4a href="+code=SG_ALL" class="sref">SG_ALL4/a>,e.1984/a>        .4a href="+code=cmd_per_lun" class="sref">cmd_per_lun4/a>            = 1,e.1994/a>        .4a href="+code=us _clustering" class="sref">us _clustering4/a>         = 4a href="+code=DISABLE_CLUSTERING" class="sref">DISABLE_CLUSTERING4/a>,e.2004/a>};e.2014/a>e.2024/a>static 4a href="+code=__init" class="sref">__init4/a> int.4a href="+code=qlogicfas_init" class="sref">qlogicfas_init4/a>(void)e.2034/a>{e.2044/a>        if (!4a href="+code=qlogicfas_detect" class="sref">qlogicfas_detect4/a>(&4a href="+code=qlogicfas_driver_template" class="sref">qlogicfas_driver_template4/a>)) {e.2054/a>                4spal class="comment">/* no cards found */.2064/a>                4a href="+code=printk" class="sref">printk4/a>(4a href="+code=KERN_INFO" class="sref">KERN_INFO4/a> 4spal class="string">"%s: no cards were found, pleas  specify ".2074/a>                                 4spal class="string">"I/O address and IRQ using iobas = and irq= ".2084/a>                                 4spal class="string">"options"qlogicfas_nam 4/a>);e.2094/a>                return -4a href="+code=ENODEV" class="sref">ENODEV4/a>;e.2104/a>        }e.2114/a>e.2124/a>        return 0;e.2134/a>}e.2144/a>e.2154/a>static 4a href="+code=__exit" class="sref">__exit4/a> void.4a href="+code=qlogicfas_exit" class="sref">qlogicfas_exit4/a>(void)e.2164/a>{e.2174/a>        struct.4a href="+code=qlogicfas408_priv" class="sref">qlogicfas408_priv4/a> *4a href="+code=priv" class="sref">priv4/a>;e.2184/a>e.2194/a>        for (4a href="+code=priv" class="sref">priv4/a> = 4a href="+code=cards" class="sref">cards4/a>; 4a href="+code=priv" class="sref">priv4/a> != 4a href="+code=NULL" class="sref">NULL4/a>; 4a href="+code=priv" class="sref">priv4/a> = 4a href="+code=priv" class="sref">priv4/a>->4a href="+code=next" class="sref">next4/a>)e.2204/a>                4a href="+code=qlogicfas_releas " class="sref">qlogicfas_releas 4/a>(4a href="+code=priv" class="sref">priv4/a>->4a href="+code=shost" class="sref">shost4/a>);e.2214/a>}e.2224/a>e.2234/a>4a href="+code=MODULE_AUTHOR" class="sref">MODULE_AUTHOR4/a>(4spal class="string">"Tom Zerucha, Michael Griffith".2244/a>4a href="+code=MODULE_DESCRIPTION" class="sref">MODULE_DESCRIPTION4/a>(4spal class="string">"Driver for the Qlogic FAS408 bas d ISA card".2254/a>4a href="+code=MODULE_LICENSE" class="sref">MODULE_LICENSE4/a>(4spal class="string">"GPL".2264/a>4a href="+code=module_init" class="sref">module_init4/a>(4a href="+code=qlogicfas_init" class="sref">qlogicfas_init4/a>);e.2274/a>4a href="+code=module_exit" class="sref">module_exit4/a>(4a href="+code=qlogicfas_exit" class="sref">qlogicfas_exit4/a>);e.2284/a>e.2294/a>
lxr.linux.no kindly host d by Redpill Linpro AS4/a>, provider of Linux consulting and operations services since 1995.