pcmcia: simplify IntType
[deliverable/linux.git] / drivers / scsi / pcmcia / fdomain_stub.c
CommitLineData
1da177e4
LT
1/*======================================================================
2
3 A driver for Future Domain-compatible PCMCIA SCSI cards
4
5 fdomain_cs.c 1.47 2001/10/13 00:08:52
6
7 The contents of this file are subject to the Mozilla Public
8 License Version 1.1 (the "License"); you may not use this file
9 except in compliance with the License. You may obtain a copy of
10 the License at http://www.mozilla.org/MPL/
11
12 Software distributed under the License is distributed on an "AS
13 IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14 implied. See the License for the specific language governing
15 rights and limitations under the License.
16
17 The initial developer of the original code is David A. Hinds
18 <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
19 are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
20
21 Alternatively, the contents of this file may be used under the
22 terms of the GNU General Public License version 2 (the "GPL"), in
23 which case the provisions of the GPL are applicable instead of the
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 allow others to use
26 your version of this file under the MPL, indicate your decision
27 by deleting the provisions above and replace them with the notice
28 and other provisions required by the GPL. If you do not delete
29 the provisions above, a recipient may use your version of this
30 file under either the MPL or the GPL.
31
32======================================================================*/
33
34#include <linux/module.h>
35#include <linux/init.h>
36#include <linux/kernel.h>
1da177e4
LT
37#include <linux/slab.h>
38#include <linux/string.h>
39#include <linux/ioport.h>
40#include <scsi/scsi.h>
41#include <linux/major.h>
42#include <linux/blkdev.h>
43#include <scsi/scsi_ioctl.h>
44
45#include "scsi.h"
46#include <scsi/scsi_host.h>
47#include "fdomain.h"
48
1da177e4
LT
49#include <pcmcia/cs.h>
50#include <pcmcia/cistpl.h>
51#include <pcmcia/ds.h>
52
53/*====================================================================*/
54
55/* Module parameters */
56
57MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
58MODULE_DESCRIPTION("Future Domain PCMCIA SCSI driver");
59MODULE_LICENSE("Dual MPL/GPL");
60
1da177e4
LT
61/*====================================================================*/
62
63typedef struct scsi_info_t {
fd238232 64 struct pcmcia_device *p_dev;
1da177e4
LT
65 struct Scsi_Host *host;
66} scsi_info_t;
67
68
fba395ee 69static void fdomain_release(struct pcmcia_device *link);
cc3b4866 70static void fdomain_detach(struct pcmcia_device *p_dev);
15b99ac1 71static int fdomain_config(struct pcmcia_device *link);
1da177e4 72
15b99ac1 73static int fdomain_probe(struct pcmcia_device *link)
1da177e4 74{
15b99ac1
DB
75 scsi_info_t *info;
76
3e716617 77 dev_dbg(&link->dev, "fdomain_attach()\n");
15b99ac1
DB
78
79 /* Create new SCSI device */
80 info = kzalloc(sizeof(*info), GFP_KERNEL);
81 if (!info)
82 return -ENOMEM;
83
84 info->p_dev = link;
85 link->priv = info;
90abdc3b
DB
86 link->resource[0]->end = 0x10;
87 link->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
15b99ac1 88 link->conf.Attributes = CONF_ENABLE_IRQ;
15b99ac1
DB
89 link->conf.Present = PRESENT_OPTION;
90
15b99ac1 91 return fdomain_config(link);
1da177e4
LT
92} /* fdomain_attach */
93
94/*====================================================================*/
95
fba395ee 96static void fdomain_detach(struct pcmcia_device *link)
1da177e4 97{
3e716617 98 dev_dbg(&link->dev, "fdomain_detach\n");
b4635811 99
e2d40963 100 fdomain_release(link);
b4635811
DB
101
102 kfree(link->priv);
1da177e4
LT
103} /* fdomain_detach */
104
105/*====================================================================*/
106
0e6f9d27 107static int fdomain_config_check(struct pcmcia_device *p_dev,
8e2fc39d
DB
108 cistpl_cftable_entry_t *cfg,
109 cistpl_cftable_entry_t *dflt,
ad913c11 110 unsigned int vcc,
8e2fc39d 111 void *priv_data)
0e6f9d27 112{
90abdc3b
DB
113 p_dev->io_lines = 10;
114 p_dev->resource[0]->start = cfg->io.win[0].base;
115 return pcmcia_request_io(p_dev);
0e6f9d27
DB
116}
117
118
15b99ac1 119static int fdomain_config(struct pcmcia_device *link)
1da177e4 120{
1da177e4 121 scsi_info_t *info = link->priv;
3e716617 122 int ret;
ecb8a847 123 char str[22];
1da177e4
LT
124 struct Scsi_Host *host;
125
3e716617 126 dev_dbg(&link->dev, "fdomain_config\n");
1da177e4 127
3e716617
DB
128 ret = pcmcia_loop_config(link, fdomain_config_check, NULL);
129 if (ret)
0e6f9d27 130 goto failed;
1da177e4 131
eb14120f 132 if (!link->irq)
3e716617
DB
133 goto failed;
134 ret = pcmcia_request_configuration(link, &link->conf);
135 if (ret)
136 goto failed;
15b99ac1 137
1da177e4 138 /* A bad hack... */
9a017a91 139 release_region(link->resource[0]->start, resource_size(link->resource[0]));
1da177e4
LT
140
141 /* Set configuration options for the fdomain driver */
9a017a91 142 sprintf(str, "%d,%d", (unsigned int) link->resource[0]->start, link->irq);
1da177e4 143 fdomain_setup(str);
15b99ac1 144
1da177e4
LT
145 host = __fdomain_16x0_detect(&fdomain_driver_template);
146 if (!host) {
147 printk(KERN_INFO "fdomain_cs: no SCSI devices found\n");
3e716617 148 goto failed;
1da177e4 149 }
15b99ac1
DB
150
151 if (scsi_add_host(host, NULL))
3e716617 152 goto failed;
1da177e4
LT
153 scsi_scan_host(host);
154
1da177e4 155 info->host = host;
15b99ac1 156
15b99ac1
DB
157 return 0;
158
0e6f9d27 159failed:
1da177e4 160 fdomain_release(link);
15b99ac1 161 return -ENODEV;
1da177e4
LT
162} /* fdomain_config */
163
164/*====================================================================*/
165
fba395ee 166static void fdomain_release(struct pcmcia_device *link)
1da177e4 167{
5f2a71fc 168 scsi_info_t *info = link->priv;
1da177e4 169
3e716617 170 dev_dbg(&link->dev, "fdomain_release\n");
1da177e4 171
5f2a71fc 172 scsi_remove_host(info->host);
fba395ee 173 pcmcia_disable_device(link);
5f2a71fc 174 scsi_unregister(info->host);
1da177e4
LT
175}
176
177/*====================================================================*/
178
fba395ee 179static int fdomain_resume(struct pcmcia_device *link)
98e4c28b 180{
e2d40963 181 fdomain_16x0_bus_reset(NULL);
98e4c28b
DB
182
183 return 0;
184}
185
2d1fb376
DB
186static struct pcmcia_device_id fdomain_ids[] = {
187 PCMCIA_DEVICE_PROD_ID12("IBM Corp.", "SCSI PCMCIA Card", 0xe3736c88, 0x859cad20),
188 PCMCIA_DEVICE_PROD_ID1("SCSI PCMCIA Adapter Card", 0x8dacb57e),
189 PCMCIA_DEVICE_PROD_ID12(" SIMPLE TECHNOLOGY Corporation", "SCSI PCMCIA Credit Card Controller", 0x182bdafe, 0xc80d106f),
190 PCMCIA_DEVICE_NULL,
191};
192MODULE_DEVICE_TABLE(pcmcia, fdomain_ids);
193
1da177e4
LT
194static struct pcmcia_driver fdomain_cs_driver = {
195 .owner = THIS_MODULE,
196 .drv = {
197 .name = "fdomain_cs",
198 },
15b99ac1 199 .probe = fdomain_probe,
cc3b4866 200 .remove = fdomain_detach,
2d1fb376 201 .id_table = fdomain_ids,
98e4c28b 202 .resume = fdomain_resume,
1da177e4
LT
203};
204
205static int __init init_fdomain_cs(void)
206{
207 return pcmcia_register_driver(&fdomain_cs_driver);
208}
209
210static void __exit exit_fdomain_cs(void)
211{
212 pcmcia_unregister_driver(&fdomain_cs_driver);
1da177e4
LT
213}
214
215module_init(init_fdomain_cs);
216module_exit(exit_fdomain_cs);
This page took 0.602165 seconds and 5 git commands to generate.