Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]

Diff markup

Differences between /linux/drivers/scsi/pcmcia/qlogic_stub.c (Version 2.6.25) and /linux/drivers/scsi/pcmcia/qlogic_stub.c (Version 2.6.25.8)


  1 /*============================================      1 /*======================================================================
  2                                                     2 
  3     A driver for the Qlogic SCSI card               3     A driver for the Qlogic SCSI card
  4                                                     4 
  5     qlogic_cs.c 1.79 2000/06/12 21:27:26            5     qlogic_cs.c 1.79 2000/06/12 21:27:26
  6                                                     6 
  7     The contents of this file are subject to t      7     The contents of this file are subject to the Mozilla Public
  8     License Version 1.1 (the "License"); you m      8     License Version 1.1 (the "License"); you may not use this file
  9     except in compliance with the License. You      9     except in compliance with the License. You may obtain a copy of
 10     the License at http://www.mozilla.org/MPL/     10     the License at http://www.mozilla.org/MPL/
 11                                                    11 
 12     Software distributed under the License is      12     Software distributed under the License is distributed on an "AS
 13     IS" basis, WITHOUT WARRANTY OF ANY KIND, e     13     IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 14     implied. See the License for the specific      14     implied. See the License for the specific language governing
 15     rights and limitations under the License.      15     rights and limitations under the License.
 16                                                    16 
 17     The initial developer of the original code     17     The initial developer of the original code is David A. Hinds
 18     <dahinds@users.sourceforge.net>.  Portions     18     <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
 19     are Copyright (C) 1999 David A. Hinds.  Al     19     are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
 20                                                    20 
 21     Alternatively, the contents of this file m     21     Alternatively, the contents of this file may be used under the
 22     terms of the GNU General Public License ve     22     terms of the GNU General Public License version 2 (the "GPL"), in which
 23     case the provisions of the GPL are applica     23     case the provisions of the GPL are applicable instead of the
 24     above.  If you wish to allow the use of yo     24     above.  If you wish to allow the use of your version of this file
 25     only under the terms of the GPL and not to     25     only under the terms of the GPL and not to allow others to use
 26     your version of this file under the MPL, i     26     your version of this file under the MPL, indicate your decision
 27     by deleting the provisions above and repla     27     by deleting the provisions above and replace them with the notice
 28     and other provisions required by the GPL.      28     and other provisions required by the GPL.  If you do not delete
 29     the provisions above, a recipient may use      29     the provisions above, a recipient may use your version of this
 30     file under either the MPL or the GPL.          30     file under either the MPL or the GPL.
 31                                                    31     
 32 ==============================================     32 ======================================================================*/
 33                                                    33 
 34 #include <linux/module.h>                          34 #include <linux/module.h>
 35 #include <linux/init.h>                            35 #include <linux/init.h>
 36 #include <linux/kernel.h>                          36 #include <linux/kernel.h>
 37 #include <linux/slab.h>                            37 #include <linux/slab.h>
 38 #include <linux/string.h>                          38 #include <linux/string.h>
 39 #include <linux/ioport.h>                          39 #include <linux/ioport.h>
 40 #include <asm/io.h>                                40 #include <asm/io.h>
 41 #include <scsi/scsi.h>                             41 #include <scsi/scsi.h>
 42 #include <linux/major.h>                           42 #include <linux/major.h>
 43 #include <linux/blkdev.h>                          43 #include <linux/blkdev.h>
 44 #include <scsi/scsi_ioctl.h>                       44 #include <scsi/scsi_ioctl.h>
 45 #include <linux/interrupt.h>                       45 #include <linux/interrupt.h>
 46                                                    46 
 47 #include "scsi.h"                                  47 #include "scsi.h"
 48 #include <scsi/scsi_host.h>                        48 #include <scsi/scsi_host.h>
 49 #include "../qlogicfas408.h"                       49 #include "../qlogicfas408.h"
 50                                                    50 
 51 #include <pcmcia/cs_types.h>                       51 #include <pcmcia/cs_types.h>
 52 #include <pcmcia/cs.h>                             52 #include <pcmcia/cs.h>
 53 #include <pcmcia/cistpl.h>                         53 #include <pcmcia/cistpl.h>
 54 #include <pcmcia/ds.h>                             54 #include <pcmcia/ds.h>
 55 #include <pcmcia/ciscode.h>                        55 #include <pcmcia/ciscode.h>
 56                                                    56 
 57 /* Set the following to 2 to use normal interr     57 /* Set the following to 2 to use normal interrupt (active high/totempole-
 58  * tristate), otherwise use 0 (REQUIRED FOR PC     58  * tristate), otherwise use 0 (REQUIRED FOR PCMCIA) for active low, open
 59  * drain                                           59  * drain
 60  */                                                60  */
 61 #define INT_TYPE        0                          61 #define INT_TYPE        0
 62                                                    62 
 63 static char qlogic_name[] = "qlogic_cs";           63 static char qlogic_name[] = "qlogic_cs";
 64                                                    64 
 65 #ifdef PCMCIA_DEBUG                                65 #ifdef PCMCIA_DEBUG
 66 static int pc_debug = PCMCIA_DEBUG;                66 static int pc_debug = PCMCIA_DEBUG;
 67 module_param(pc_debug, int, 0644);                 67 module_param(pc_debug, int, 0644);
 68 #define DEBUG(n, args...) if (pc_debug>(n)) pr     68 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 69 static char *version = "qlogic_cs.c 1.79-ac 20     69 static char *version = "qlogic_cs.c 1.79-ac 2002/10/26 (David Hinds)";
 70 #else                                              70 #else
 71 #define DEBUG(n, args...)                          71 #define DEBUG(n, args...)
 72 #endif                                             72 #endif
 73                                                    73 
 74 static struct scsi_host_template qlogicfas_dri     74 static struct scsi_host_template qlogicfas_driver_template = {
 75         .module                 = THIS_MODULE,     75         .module                 = THIS_MODULE,
 76         .name                   = qlogic_name,     76         .name                   = qlogic_name,
 77         .proc_name              = qlogic_name,     77         .proc_name              = qlogic_name,
 78         .info                   = qlogicfas408     78         .info                   = qlogicfas408_info,
 79         .queuecommand           = qlogicfas408     79         .queuecommand           = qlogicfas408_queuecommand,
 80         .eh_abort_handler       = qlogicfas408     80         .eh_abort_handler       = qlogicfas408_abort,
 81         .eh_bus_reset_handler   = qlogicfas408     81         .eh_bus_reset_handler   = qlogicfas408_bus_reset,
 82         .bios_param             = qlogicfas408     82         .bios_param             = qlogicfas408_biosparam,
 83         .can_queue              = 1,               83         .can_queue              = 1,
 84         .this_id                = -1,              84         .this_id                = -1,
 85         .sg_tablesize           = SG_ALL,          85         .sg_tablesize           = SG_ALL,
 86         .cmd_per_lun            = 1,               86         .cmd_per_lun            = 1,
 87         .use_clustering         = DISABLE_CLUS     87         .use_clustering         = DISABLE_CLUSTERING,
 88 };                                                 88 };
 89                                                    89 
 90 /*============================================     90 /*====================================================================*/
 91                                                    91 
 92 typedef struct scsi_info_t {                       92 typedef struct scsi_info_t {
 93         struct pcmcia_device    *p_dev;            93         struct pcmcia_device    *p_dev;
 94         dev_node_t node;                           94         dev_node_t node;
 95         struct Scsi_Host *host;                    95         struct Scsi_Host *host;
 96         unsigned short manf_id;                    96         unsigned short manf_id;
 97 } scsi_info_t;                                     97 } scsi_info_t;
 98                                                    98 
 99 static void qlogic_release(struct pcmcia_devic     99 static void qlogic_release(struct pcmcia_device *link);
100 static void qlogic_detach(struct pcmcia_device    100 static void qlogic_detach(struct pcmcia_device *p_dev);
101 static int qlogic_config(struct pcmcia_device     101 static int qlogic_config(struct pcmcia_device * link);
102                                                   102 
103 static struct Scsi_Host *qlogic_detect(struct     103 static struct Scsi_Host *qlogic_detect(struct scsi_host_template *host,
104                                 struct pcmcia_    104                                 struct pcmcia_device *link, int qbase, int qlirq)
105 {                                                 105 {
106         int qltyp;              /* type of chi    106         int qltyp;              /* type of chip */
107         int qinitid;                              107         int qinitid;
108         struct Scsi_Host *shost;        /* reg    108         struct Scsi_Host *shost;        /* registered host structure */
109         struct qlogicfas408_priv *priv;           109         struct qlogicfas408_priv *priv;
110                                                   110 
111         qltyp = qlogicfas408_get_chip_type(qba    111         qltyp = qlogicfas408_get_chip_type(qbase, INT_TYPE);
112         qinitid = host->this_id;                  112         qinitid = host->this_id;
113         if (qinitid < 0)                          113         if (qinitid < 0)
114                 qinitid = 7;    /* if no ID, u    114                 qinitid = 7;    /* if no ID, use 7 */
115                                                   115 
116         qlogicfas408_setup(qbase, qinitid, INT    116         qlogicfas408_setup(qbase, qinitid, INT_TYPE);
117                                                   117 
118         host->name = qlogic_name;                 118         host->name = qlogic_name;
119         shost = scsi_host_alloc(host, sizeof(s    119         shost = scsi_host_alloc(host, sizeof(struct qlogicfas408_priv));
120         if (!shost)                               120         if (!shost)
121                 goto err;                         121                 goto err;
122         shost->io_port = qbase;                   122         shost->io_port = qbase;
123         shost->n_io_port = 16;                    123         shost->n_io_port = 16;
124         shost->dma_channel = -1;                  124         shost->dma_channel = -1;
125         if (qlirq != -1)                          125         if (qlirq != -1)
126                 shost->irq = qlirq;               126                 shost->irq = qlirq;
127                                                   127 
128         priv = get_priv_by_host(shost);           128         priv = get_priv_by_host(shost);
129         priv->qlirq = qlirq;                      129         priv->qlirq = qlirq;
130         priv->qbase = qbase;                      130         priv->qbase = qbase;
131         priv->qinitid = qinitid;                  131         priv->qinitid = qinitid;
132         priv->shost = shost;                      132         priv->shost = shost;
133         priv->int_type = INT_TYPE;                133         priv->int_type = INT_TYPE;                                      
134                                                   134 
135         if (request_irq(qlirq, qlogicfas408_ih    135         if (request_irq(qlirq, qlogicfas408_ihandl, 0, qlogic_name, shost))
136                 goto free_scsi_host;              136                 goto free_scsi_host;
137                                                   137 
138         sprintf(priv->qinfo,                      138         sprintf(priv->qinfo,
139                 "Qlogicfas Driver version 0.46    139                 "Qlogicfas Driver version 0.46, chip %02X at %03X, IRQ %d, TPdma:%d",
140                 qltyp, qbase, qlirq, QL_TURBO_    140                 qltyp, qbase, qlirq, QL_TURBO_PDMA);
141                                                   141 
142         if (scsi_add_host(shost, NULL))           142         if (scsi_add_host(shost, NULL))
143                 goto free_interrupt;              143                 goto free_interrupt;
144                                                   144 
145         scsi_scan_host(shost);                    145         scsi_scan_host(shost);
146                                                   146 
147         return shost;                             147         return shost;
148                                                   148 
149 free_interrupt:                                   149 free_interrupt:
150         free_irq(qlirq, shost);                   150         free_irq(qlirq, shost);
151                                                   151 
152 free_scsi_host:                                   152 free_scsi_host:
153         scsi_host_put(shost);                     153         scsi_host_put(shost);
154                                                   154         
155 err:                                              155 err:
156         return NULL;                              156         return NULL;
157 }                                                 157 }
158 static int qlogic_probe(struct pcmcia_device *    158 static int qlogic_probe(struct pcmcia_device *link)
159 {                                                 159 {
160         scsi_info_t *info;                        160         scsi_info_t *info;
161                                                   161 
162         DEBUG(0, "qlogic_attach()\n");            162         DEBUG(0, "qlogic_attach()\n");
163                                                   163 
164         /* Create new SCSI device */              164         /* Create new SCSI device */
165         info = kzalloc(sizeof(*info), GFP_KERN    165         info = kzalloc(sizeof(*info), GFP_KERNEL);
166         if (!info)                                166         if (!info)
167                 return -ENOMEM;                   167                 return -ENOMEM;
168         info->p_dev = link;                       168         info->p_dev = link;
169         link->priv = info;                        169         link->priv = info;
170         link->io.NumPorts1 = 16;                  170         link->io.NumPorts1 = 16;
171         link->io.Attributes1 = IO_DATA_PATH_WI    171         link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
172         link->io.IOAddrLines = 10;                172         link->io.IOAddrLines = 10;
173         link->irq.Attributes = IRQ_TYPE_EXCLUS    173         link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
174         link->irq.IRQInfo1 = IRQ_LEVEL_ID;        174         link->irq.IRQInfo1 = IRQ_LEVEL_ID;
175         link->conf.Attributes = CONF_ENABLE_IR    175         link->conf.Attributes = CONF_ENABLE_IRQ;
176         link->conf.IntType = INT_MEMORY_AND_IO    176         link->conf.IntType = INT_MEMORY_AND_IO;
177         link->conf.Present = PRESENT_OPTION;      177         link->conf.Present = PRESENT_OPTION;
178                                                   178 
179         return qlogic_config(link);               179         return qlogic_config(link);
180 }                               /* qlogic_atta    180 }                               /* qlogic_attach */
181                                                   181 
182 /*============================================    182 /*====================================================================*/
183                                                   183 
184 static void qlogic_detach(struct pcmcia_device    184 static void qlogic_detach(struct pcmcia_device *link)
185 {                                                 185 {
186         DEBUG(0, "qlogic_detach(0x%p)\n", link    186         DEBUG(0, "qlogic_detach(0x%p)\n", link);
187                                                   187 
188         qlogic_release(link);                     188         qlogic_release(link);
189         kfree(link->priv);                        189         kfree(link->priv);
190                                                   190 
191 }                               /* qlogic_deta    191 }                               /* qlogic_detach */
192                                                   192 
193 /*============================================    193 /*====================================================================*/
194                                                   194 
195 #define CS_CHECK(fn, ret) \                       195 #define CS_CHECK(fn, ret) \
196 do { last_fn = (fn); if ((last_ret = (ret)) !=    196 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
197                                                   197 
198 static int qlogic_config(struct pcmcia_device     198 static int qlogic_config(struct pcmcia_device * link)
199 {                                                 199 {
200         scsi_info_t *info = link->priv;           200         scsi_info_t *info = link->priv;
201         tuple_t tuple;                            201         tuple_t tuple;
202         cisparse_t parse;                         202         cisparse_t parse;
203         int i, last_ret, last_fn;                 203         int i, last_ret, last_fn;
204         unsigned short tuple_data[32];            204         unsigned short tuple_data[32];
205         struct Scsi_Host *host;                   205         struct Scsi_Host *host;
206                                                   206 
207         DEBUG(0, "qlogic_config(0x%p)\n", link    207         DEBUG(0, "qlogic_config(0x%p)\n", link);
208                                                   208 
209         info->manf_id = link->manf_id;            209         info->manf_id = link->manf_id;
210                                                   210 
211         tuple.TupleData = (cisdata_t *) tuple_    211         tuple.TupleData = (cisdata_t *) tuple_data;
212         tuple.TupleDataMax = 64;                  212         tuple.TupleDataMax = 64;
213         tuple.TupleOffset = 0;                    213         tuple.TupleOffset = 0;
214                                                   214 
215         tuple.DesiredTuple = CISTPL_CFTABLE_EN    215         tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
216         CS_CHECK(GetFirstTuple, pcmcia_get_fir    216         CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
217         while (1) {                               217         while (1) {
218                 if (pcmcia_get_tuple_data(link    218                 if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
219                                 pcmcia_parse_t    219                                 pcmcia_parse_tuple(link, &tuple, &parse) != 0)
220                         goto next_entry;          220                         goto next_entry;
221                 link->conf.ConfigIndex = parse    221                 link->conf.ConfigIndex = parse.cftable_entry.index;
222                 link->io.BasePort1 = parse.cft    222                 link->io.BasePort1 = parse.cftable_entry.io.win[0].base;
223                 link->io.NumPorts1 = parse.cft    223                 link->io.NumPorts1 = parse.cftable_entry.io.win[0].len;
224                 if (link->io.BasePort1 != 0) {    224                 if (link->io.BasePort1 != 0) {
225                         i = pcmcia_request_io(    225                         i = pcmcia_request_io(link, &link->io);
226                         if (i == CS_SUCCESS)      226                         if (i == CS_SUCCESS)
227                                 break;            227                                 break;
228                 }                                 228                 }
229               next_entry:                         229               next_entry:
230                 CS_CHECK(GetNextTuple, pcmcia_    230                 CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
231         }                                         231         }
232                                                   232 
233         CS_CHECK(RequestIRQ, pcmcia_request_ir    233         CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
234         CS_CHECK(RequestConfiguration, pcmcia_    234         CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
235                                                   235 
236         if ((info->manf_id == MANFID_MACNICA)     236         if ((info->manf_id == MANFID_MACNICA) || (info->manf_id == MANFID_PIONEER) || (info->manf_id == 0x0098)) {
237                 /* set ATAcmd */                  237                 /* set ATAcmd */
238                 outb(0xb4, link->io.BasePort1     238                 outb(0xb4, link->io.BasePort1 + 0xd);
239                 outb(0x24, link->io.BasePort1     239                 outb(0x24, link->io.BasePort1 + 0x9);
240                 outb(0x04, link->io.BasePort1     240                 outb(0x04, link->io.BasePort1 + 0xd);
241         }                                         241         }
242                                                   242 
243         /* The KXL-810AN has a bigger IO port     243         /* The KXL-810AN has a bigger IO port window */
244         if (link->io.NumPorts1 == 32)             244         if (link->io.NumPorts1 == 32)
245                 host = qlogic_detect(&qlogicfa    245                 host = qlogic_detect(&qlogicfas_driver_template, link,
246                         link->io.BasePort1 + 1    246                         link->io.BasePort1 + 16, link->irq.AssignedIRQ);
247         else                                      247         else
248                 host = qlogic_detect(&qlogicfa    248                 host = qlogic_detect(&qlogicfas_driver_template, link,
249                         link->io.BasePort1, li    249                         link->io.BasePort1, link->irq.AssignedIRQ);
250                                                   250         
251         if (!host) {                              251         if (!host) {
252                 printk(KERN_INFO "%s: no SCSI     252                 printk(KERN_INFO "%s: no SCSI devices found\n", qlogic_name);
253                 goto cs_failed;                   253                 goto cs_failed;
254         }                                         254         }
255                                                   255 
256         sprintf(info->node.dev_name, "scsi%d",    256         sprintf(info->node.dev_name, "scsi%d", host->host_no);
257         link->dev_node = &info->node;             257         link->dev_node = &info->node;
258         info->host = host;                        258         info->host = host;
259                                                   259 
260         return 0;                                 260         return 0;
261                                                   261 
262 cs_failed:                                        262 cs_failed:
263         cs_error(link, last_fn, last_ret);        263         cs_error(link, last_fn, last_ret);
264         pcmcia_disable_device(link);              264         pcmcia_disable_device(link);
265         return -ENODEV;                           265         return -ENODEV;
266                                                   266 
267 }                               /* qlogic_conf    267 }                               /* qlogic_config */
268                                                   268 
269 /*============================================    269 /*====================================================================*/
270                                                   270 
271 static void qlogic_release(struct pcmcia_devic    271 static void qlogic_release(struct pcmcia_device *link)
272 {                                                 272 {
273         scsi_info_t *info = link->priv;           273         scsi_info_t *info = link->priv;
274                                                   274 
275         DEBUG(0, "qlogic_release(0x%p)\n", lin    275         DEBUG(0, "qlogic_release(0x%p)\n", link);
276                                                   276 
277         scsi_remove_host(info->host);             277         scsi_remove_host(info->host);
278                                                   278 
279         free_irq(link->irq.AssignedIRQ, info->    279         free_irq(link->irq.AssignedIRQ, info->host);
280         pcmcia_disable_device(link);              280         pcmcia_disable_device(link);
281                                                   281 
282         scsi_host_put(info->host);                282         scsi_host_put(info->host);
283 }                                                 283 }
284                                                   284 
285 /*============================================    285 /*====================================================================*/
286                                                   286 
287 static int qlogic_resume(struct pcmcia_device     287 static int qlogic_resume(struct pcmcia_device *link)
288 {                                                 288 {
289         scsi_info_t *info = link->priv;           289         scsi_info_t *info = link->priv;
290                                                   290 
291         pcmcia_request_configuration(link, &li    291         pcmcia_request_configuration(link, &link->conf);
292         if ((info->manf_id == MANFID_MACNICA)     292         if ((info->manf_id == MANFID_MACNICA) ||
293             (info->manf_id == MANFID_PIONEER)     293             (info->manf_id == MANFID_PIONEER) ||
294             (info->manf_id == 0x0098)) {          294             (info->manf_id == 0x0098)) {
295                 outb(0x80, link->io.BasePort1     295                 outb(0x80, link->io.BasePort1 + 0xd);
296                 outb(0x24, link->io.BasePort1     296                 outb(0x24, link->io.BasePort1 + 0x9);
297                 outb(0x04, link->io.BasePort1     297                 outb(0x04, link->io.BasePort1 + 0xd);
298         }                                         298         }
299         /* Ugggglllyyyy!!! */                     299         /* Ugggglllyyyy!!! */
300         qlogicfas408_bus_reset(NULL);             300         qlogicfas408_bus_reset(NULL);
301                                                   301 
302         return 0;                                 302         return 0;
303 }                                                 303 }
304                                                   304 
305 static struct pcmcia_device_id qlogic_ids[] =     305 static struct pcmcia_device_id qlogic_ids[] = {
306         PCMCIA_DEVICE_PROD_ID12("EIger Labs",     306         PCMCIA_DEVICE_PROD_ID12("EIger Labs", "PCMCIA-to-SCSI Adapter", 0x88395fa7, 0x33b7a5e6),
307         PCMCIA_DEVICE_PROD_ID12("EPSON", "SCSI    307         PCMCIA_DEVICE_PROD_ID12("EPSON", "SCSI-2 PC Card SC200", 0xd361772f, 0x299d1751),
308         PCMCIA_DEVICE_PROD_ID12("MACNICA", "MI    308         PCMCIA_DEVICE_PROD_ID12("MACNICA", "MIRACLE SCSI-II mPS110", 0x20841b68, 0xab3c3b6d),
309         PCMCIA_DEVICE_PROD_ID12("MIDORI ELECTR    309         PCMCIA_DEVICE_PROD_ID12("MIDORI ELECTRONICS ", "CN-SC43", 0x6534382a, 0xd67eee79),
310         PCMCIA_DEVICE_PROD_ID12("NEC", "PC-980    310         PCMCIA_DEVICE_PROD_ID12("NEC", "PC-9801N-J03R", 0x18df0ba0, 0x24662e8a),
311         PCMCIA_DEVICE_PROD_ID12("KME ", "KXLC0    311         PCMCIA_DEVICE_PROD_ID12("KME ", "KXLC003", 0x82375a27, 0xf68e5bf7),
312         PCMCIA_DEVICE_PROD_ID12("KME ", "KXLC0    312         PCMCIA_DEVICE_PROD_ID12("KME ", "KXLC004", 0x82375a27, 0x68eace54),
313         PCMCIA_DEVICE_PROD_ID12("KME", "KXLC10    313         PCMCIA_DEVICE_PROD_ID12("KME", "KXLC101", 0x3faee676, 0x194250ec),
314         PCMCIA_DEVICE_PROD_ID12("QLOGIC CORPOR    314         PCMCIA_DEVICE_PROD_ID12("QLOGIC CORPORATION", "pc05", 0xd77b2930, 0xa85b2735),
315         PCMCIA_DEVICE_PROD_ID12("QLOGIC CORPOR    315         PCMCIA_DEVICE_PROD_ID12("QLOGIC CORPORATION", "pc05 rev 1.10", 0xd77b2930, 0x70f8b5f8),
316         PCMCIA_DEVICE_PROD_ID123("KME", "KXLC0    316         PCMCIA_DEVICE_PROD_ID123("KME", "KXLC002", "00", 0x3faee676, 0x81896b61, 0xf99f065f),
317         PCMCIA_DEVICE_PROD_ID12("RATOC System     317         PCMCIA_DEVICE_PROD_ID12("RATOC System Inc.", "SCSI2 CARD 37", 0x85c10e17, 0x1a2640c1),
318         PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "SC    318         PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "SCSC200A PC CARD SCSI", 0xb4585a1a, 0xa6f06ebe),
319         PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "SC    319         PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "SCSC200B PC CARD SCSI-10", 0xb4585a1a, 0x0a88dea0),
320         /* these conflict with other cards! */    320         /* these conflict with other cards! */
321         /* PCMCIA_DEVICE_PROD_ID123("MACNICA",    321         /* PCMCIA_DEVICE_PROD_ID123("MACNICA", "MIRACLE SCSI", "mPS100", 0x20841b68, 0xf8dedaeb, 0x89f7fafb), */
322         /* PCMCIA_DEVICE_PROD_ID123("MACNICA",    322         /* PCMCIA_DEVICE_PROD_ID123("MACNICA", "MIRACLE SCSI", "mPS100", 0x20841b68, 0xf8dedaeb, 0x89f7fafb), */
323         PCMCIA_DEVICE_NULL,                       323         PCMCIA_DEVICE_NULL,
324 };                                                324 };
325 MODULE_DEVICE_TABLE(pcmcia, qlogic_ids);          325 MODULE_DEVICE_TABLE(pcmcia, qlogic_ids);
326                                                   326 
327 static struct pcmcia_driver qlogic_cs_driver =    327 static struct pcmcia_driver qlogic_cs_driver = {
328         .owner          = THIS_MODULE,            328         .owner          = THIS_MODULE,
329         .drv            = {                       329         .drv            = {
330         .name           = "qlogic_cs",            330         .name           = "qlogic_cs",
331         },                                        331         },
332         .probe          = qlogic_probe,           332         .probe          = qlogic_probe,
333         .remove         = qlogic_detach,          333         .remove         = qlogic_detach,
334         .id_table       = qlogic_ids,             334         .id_table       = qlogic_ids,
335         .resume         = qlogic_resume,          335         .resume         = qlogic_resume,
336 };                                                336 };
337                                                   337 
338 static int __init init_qlogic_cs(void)            338 static int __init init_qlogic_cs(void)
339 {                                                 339 {
340         return pcmcia_register_driver(&qlogic_    340         return pcmcia_register_driver(&qlogic_cs_driver);
341 }                                                 341 }
342                                                   342 
343 static void __exit exit_qlogic_cs(void)           343 static void __exit exit_qlogic_cs(void)
344 {                                                 344 {
345         pcmcia_unregister_driver(&qlogic_cs_dr    345         pcmcia_unregister_driver(&qlogic_cs_driver);
346 }                                                 346 }
347                                                   347 
348 MODULE_AUTHOR("Tom Zerucha, Michael Griffith")    348 MODULE_AUTHOR("Tom Zerucha, Michael Griffith");
349 MODULE_DESCRIPTION("Driver for the PCMCIA Qlog    349 MODULE_DESCRIPTION("Driver for the PCMCIA Qlogic FAS SCSI controllers");
350 MODULE_LICENSE("GPL");                            350 MODULE_LICENSE("GPL");
351 module_init(init_qlogic_cs);                      351 module_init(init_qlogic_cs);
352 module_exit(exit_qlogic_cs);                      352 module_exit(exit_qlogic_cs);
353                                                   353 
  This page was automatically generated by the LXR engine.