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.31.13)


  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_check(struct pcmcia_device *p_dev,
                                                   >> 199                                cistpl_cftable_entry_t *cfg,
                                                   >> 200                                cistpl_cftable_entry_t *dflt,
                                                   >> 201                                unsigned int vcc,
                                                   >> 202                                void *priv_data)
                                                   >> 203 {
                                                   >> 204         p_dev->io.BasePort1 = cfg->io.win[0].base;
                                                   >> 205         p_dev->io.NumPorts1 = cfg->io.win[0].len;
                                                   >> 206 
                                                   >> 207         if (p_dev->io.BasePort1 == 0)
                                                   >> 208                 return -ENODEV;
                                                   >> 209 
                                                   >> 210         return pcmcia_request_io(p_dev, &p_dev->io);
                                                   >> 211 }
                                                   >> 212 
198 static int qlogic_config(struct pcmcia_device     213 static int qlogic_config(struct pcmcia_device * link)
199 {                                                 214 {
200         scsi_info_t *info = link->priv;           215         scsi_info_t *info = link->priv;
201         tuple_t tuple;                         !! 216         int last_ret, last_fn;
202         cisparse_t parse;                      << 
203         int i, last_ret, last_fn;              << 
204         unsigned short tuple_data[32];         << 
205         struct Scsi_Host *host;                   217         struct Scsi_Host *host;
206                                                   218 
207         DEBUG(0, "qlogic_config(0x%p)\n", link    219         DEBUG(0, "qlogic_config(0x%p)\n", link);
208                                                   220 
209         info->manf_id = link->manf_id;         !! 221         last_ret = pcmcia_loop_config(link, qlogic_config_check, NULL);
210                                                !! 222         if (last_ret) {
211         tuple.TupleData = (cisdata_t *) tuple_ !! 223                 cs_error(link, RequestIO, last_ret);
212         tuple.TupleDataMax = 64;               !! 224                 goto failed;
213         tuple.TupleOffset = 0;                 << 
214                                                << 
215         tuple.DesiredTuple = CISTPL_CFTABLE_EN << 
216         CS_CHECK(GetFirstTuple, pcmcia_get_fir << 
217         while (1) {                            << 
218                 if (pcmcia_get_tuple_data(link << 
219                                 pcmcia_parse_t << 
220                         goto next_entry;       << 
221                 link->conf.ConfigIndex = parse << 
222                 link->io.BasePort1 = parse.cft << 
223                 link->io.NumPorts1 = parse.cft << 
224                 if (link->io.BasePort1 != 0) { << 
225                         i = pcmcia_request_io( << 
226                         if (i == CS_SUCCESS)   << 
227                                 break;         << 
228                 }                              << 
229               next_entry:                      << 
230                 CS_CHECK(GetNextTuple, pcmcia_ << 
231         }                                         225         }
232                                                   226 
233         CS_CHECK(RequestIRQ, pcmcia_request_ir    227         CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
234         CS_CHECK(RequestConfiguration, pcmcia_    228         CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
235                                                   229 
236         if ((info->manf_id == MANFID_MACNICA)     230         if ((info->manf_id == MANFID_MACNICA) || (info->manf_id == MANFID_PIONEER) || (info->manf_id == 0x0098)) {
237                 /* set ATAcmd */                  231                 /* set ATAcmd */
238                 outb(0xb4, link->io.BasePort1     232                 outb(0xb4, link->io.BasePort1 + 0xd);
239                 outb(0x24, link->io.BasePort1     233                 outb(0x24, link->io.BasePort1 + 0x9);
240                 outb(0x04, link->io.BasePort1     234                 outb(0x04, link->io.BasePort1 + 0xd);
241         }                                         235         }
242                                                   236 
243         /* The KXL-810AN has a bigger IO port     237         /* The KXL-810AN has a bigger IO port window */
244         if (link->io.NumPorts1 == 32)             238         if (link->io.NumPorts1 == 32)
245                 host = qlogic_detect(&qlogicfa    239                 host = qlogic_detect(&qlogicfas_driver_template, link,
246                         link->io.BasePort1 + 1    240                         link->io.BasePort1 + 16, link->irq.AssignedIRQ);
247         else                                      241         else
248                 host = qlogic_detect(&qlogicfa    242                 host = qlogic_detect(&qlogicfas_driver_template, link,
249                         link->io.BasePort1, li    243                         link->io.BasePort1, link->irq.AssignedIRQ);
250                                                   244         
251         if (!host) {                              245         if (!host) {
252                 printk(KERN_INFO "%s: no SCSI     246                 printk(KERN_INFO "%s: no SCSI devices found\n", qlogic_name);
253                 goto cs_failed;                   247                 goto cs_failed;
254         }                                         248         }
255                                                   249 
256         sprintf(info->node.dev_name, "scsi%d",    250         sprintf(info->node.dev_name, "scsi%d", host->host_no);
257         link->dev_node = &info->node;             251         link->dev_node = &info->node;
258         info->host = host;                        252         info->host = host;
259                                                   253 
260         return 0;                                 254         return 0;
261                                                   255 
262 cs_failed:                                        256 cs_failed:
263         cs_error(link, last_fn, last_ret);        257         cs_error(link, last_fn, last_ret);
264         pcmcia_disable_device(link);              258         pcmcia_disable_device(link);
                                                   >> 259 failed:
265         return -ENODEV;                           260         return -ENODEV;
266                                                   261 
267 }                               /* qlogic_conf    262 }                               /* qlogic_config */
268                                                   263 
269 /*============================================    264 /*====================================================================*/
270                                                   265 
271 static void qlogic_release(struct pcmcia_devic    266 static void qlogic_release(struct pcmcia_device *link)
272 {                                                 267 {
273         scsi_info_t *info = link->priv;           268         scsi_info_t *info = link->priv;
274                                                   269 
275         DEBUG(0, "qlogic_release(0x%p)\n", lin    270         DEBUG(0, "qlogic_release(0x%p)\n", link);
276                                                   271 
277         scsi_remove_host(info->host);             272         scsi_remove_host(info->host);
278                                                   273 
279         free_irq(link->irq.AssignedIRQ, info->    274         free_irq(link->irq.AssignedIRQ, info->host);
280         pcmcia_disable_device(link);              275         pcmcia_disable_device(link);
281                                                   276 
282         scsi_host_put(info->host);                277         scsi_host_put(info->host);
283 }                                                 278 }
284                                                   279 
285 /*============================================    280 /*====================================================================*/
286                                                   281 
287 static int qlogic_resume(struct pcmcia_device     282 static int qlogic_resume(struct pcmcia_device *link)
288 {                                                 283 {
289         scsi_info_t *info = link->priv;           284         scsi_info_t *info = link->priv;
290                                                   285 
291         pcmcia_request_configuration(link, &li    286         pcmcia_request_configuration(link, &link->conf);
292         if ((info->manf_id == MANFID_MACNICA)     287         if ((info->manf_id == MANFID_MACNICA) ||
293             (info->manf_id == MANFID_PIONEER)     288             (info->manf_id == MANFID_PIONEER) ||
294             (info->manf_id == 0x0098)) {          289             (info->manf_id == 0x0098)) {
295                 outb(0x80, link->io.BasePort1     290                 outb(0x80, link->io.BasePort1 + 0xd);
296                 outb(0x24, link->io.BasePort1     291                 outb(0x24, link->io.BasePort1 + 0x9);
297                 outb(0x04, link->io.BasePort1     292                 outb(0x04, link->io.BasePort1 + 0xd);
298         }                                         293         }
299         /* Ugggglllyyyy!!! */                     294         /* Ugggglllyyyy!!! */
300         qlogicfas408_bus_reset(NULL);             295         qlogicfas408_bus_reset(NULL);
301                                                   296 
302         return 0;                                 297         return 0;
303 }                                                 298 }
304                                                   299 
305 static struct pcmcia_device_id qlogic_ids[] =     300 static struct pcmcia_device_id qlogic_ids[] = {
306         PCMCIA_DEVICE_PROD_ID12("EIger Labs",     301         PCMCIA_DEVICE_PROD_ID12("EIger Labs", "PCMCIA-to-SCSI Adapter", 0x88395fa7, 0x33b7a5e6),
307         PCMCIA_DEVICE_PROD_ID12("EPSON", "SCSI    302         PCMCIA_DEVICE_PROD_ID12("EPSON", "SCSI-2 PC Card SC200", 0xd361772f, 0x299d1751),
308         PCMCIA_DEVICE_PROD_ID12("MACNICA", "MI    303         PCMCIA_DEVICE_PROD_ID12("MACNICA", "MIRACLE SCSI-II mPS110", 0x20841b68, 0xab3c3b6d),
309         PCMCIA_DEVICE_PROD_ID12("MIDORI ELECTR    304         PCMCIA_DEVICE_PROD_ID12("MIDORI ELECTRONICS ", "CN-SC43", 0x6534382a, 0xd67eee79),
310         PCMCIA_DEVICE_PROD_ID12("NEC", "PC-980    305         PCMCIA_DEVICE_PROD_ID12("NEC", "PC-9801N-J03R", 0x18df0ba0, 0x24662e8a),
311         PCMCIA_DEVICE_PROD_ID12("KME ", "KXLC0    306         PCMCIA_DEVICE_PROD_ID12("KME ", "KXLC003", 0x82375a27, 0xf68e5bf7),
312         PCMCIA_DEVICE_PROD_ID12("KME ", "KXLC0    307         PCMCIA_DEVICE_PROD_ID12("KME ", "KXLC004", 0x82375a27, 0x68eace54),
313         PCMCIA_DEVICE_PROD_ID12("KME", "KXLC10    308         PCMCIA_DEVICE_PROD_ID12("KME", "KXLC101", 0x3faee676, 0x194250ec),
314         PCMCIA_DEVICE_PROD_ID12("QLOGIC CORPOR    309         PCMCIA_DEVICE_PROD_ID12("QLOGIC CORPORATION", "pc05", 0xd77b2930, 0xa85b2735),
315         PCMCIA_DEVICE_PROD_ID12("QLOGIC CORPOR    310         PCMCIA_DEVICE_PROD_ID12("QLOGIC CORPORATION", "pc05 rev 1.10", 0xd77b2930, 0x70f8b5f8),
316         PCMCIA_DEVICE_PROD_ID123("KME", "KXLC0    311         PCMCIA_DEVICE_PROD_ID123("KME", "KXLC002", "00", 0x3faee676, 0x81896b61, 0xf99f065f),
317         PCMCIA_DEVICE_PROD_ID12("RATOC System     312         PCMCIA_DEVICE_PROD_ID12("RATOC System Inc.", "SCSI2 CARD 37", 0x85c10e17, 0x1a2640c1),
318         PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "SC    313         PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "SCSC200A PC CARD SCSI", 0xb4585a1a, 0xa6f06ebe),
319         PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "SC    314         PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "SCSC200B PC CARD SCSI-10", 0xb4585a1a, 0x0a88dea0),
320         /* these conflict with other cards! */    315         /* these conflict with other cards! */
321         /* PCMCIA_DEVICE_PROD_ID123("MACNICA",    316         /* PCMCIA_DEVICE_PROD_ID123("MACNICA", "MIRACLE SCSI", "mPS100", 0x20841b68, 0xf8dedaeb, 0x89f7fafb), */
322         /* PCMCIA_DEVICE_PROD_ID123("MACNICA",    317         /* PCMCIA_DEVICE_PROD_ID123("MACNICA", "MIRACLE SCSI", "mPS100", 0x20841b68, 0xf8dedaeb, 0x89f7fafb), */
323         PCMCIA_DEVICE_NULL,                       318         PCMCIA_DEVICE_NULL,
324 };                                                319 };
325 MODULE_DEVICE_TABLE(pcmcia, qlogic_ids);          320 MODULE_DEVICE_TABLE(pcmcia, qlogic_ids);
326                                                   321 
327 static struct pcmcia_driver qlogic_cs_driver =    322 static struct pcmcia_driver qlogic_cs_driver = {
328         .owner          = THIS_MODULE,            323         .owner          = THIS_MODULE,
329         .drv            = {                       324         .drv            = {
330         .name           = "qlogic_cs",            325         .name           = "qlogic_cs",
331         },                                        326         },
332         .probe          = qlogic_probe,           327         .probe          = qlogic_probe,
333         .remove         = qlogic_detach,          328         .remove         = qlogic_detach,
334         .id_table       = qlogic_ids,             329         .id_table       = qlogic_ids,
335         .resume         = qlogic_resume,          330         .resume         = qlogic_resume,
336 };                                                331 };
337                                                   332 
338 static int __init init_qlogic_cs(void)            333 static int __init init_qlogic_cs(void)
339 {                                                 334 {
340         return pcmcia_register_driver(&qlogic_    335         return pcmcia_register_driver(&qlogic_cs_driver);
341 }                                                 336 }
342                                                   337 
343 static void __exit exit_qlogic_cs(void)           338 static void __exit exit_qlogic_cs(void)
344 {                                                 339 {
345         pcmcia_unregister_driver(&qlogic_cs_dr    340         pcmcia_unregister_driver(&qlogic_cs_driver);
346 }                                                 341 }
347                                                   342 
348 MODULE_AUTHOR("Tom Zerucha, Michael Griffith")    343 MODULE_AUTHOR("Tom Zerucha, Michael Griffith");
349 MODULE_DESCRIPTION("Driver for the PCMCIA Qlog    344 MODULE_DESCRIPTION("Driver for the PCMCIA Qlogic FAS SCSI controllers");
350 MODULE_LICENSE("GPL");                            345 MODULE_LICENSE("GPL");
351 module_init(init_qlogic_cs);                      346 module_init(init_qlogic_cs);
352 module_exit(exit_qlogic_cs);                      347 module_exit(exit_qlogic_cs);
353                                                   348 
  This page was automatically generated by the LXR engine.