aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-10-13 17:12:40 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-13 17:12:40 -0400
commit2be4ff2f084842839b041b793ed6237e8d1d315a (patch)
tree1d776ac1717edeff4ee7d59ab0aea2782cb86dba /drivers/net/wireless
parentcf2fa66055d718ae13e62451bb546505f63906a2 (diff)
parenta45b3fb19ba1e4dfc3fc53563a072612092930a9 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6: (49 commits) pcmcia: ioctl-internal definitions pcmcia: cistpl header cleanup pcmcia: remove unused argument to pcmcia_parse_tuple() pcmcia: card services header cleanup pcmcia: device_id header cleanup pcmcia: encapsulate ioaddr_t pcmcia: cleanup device driver header file pcmcia: cleanup socket services header file pcmcia: merge ds_internal.h into cs_internal.h pcmcia: cleanup cs_internal.h pcmcia: cs_internal.h is internal pcmcia: use dev_printk for cs_error() pcmcia: remove CS_ error codes alltogether pcmcia: deprecate CS_BAD_TUPLE pcmcia: deprecate CS_BAD_ARGS pcmcia: deprecate CS_BAD_BASE, CS_BAD_IRQ, CS_BAD_OFFSET and CS_BAD_SIZE pcmcia: deprecate CS_BAD_ATTRIBUTE, CS_BAD_TYPE and CS_BAD_PAGE pcmcia: deprecate CS_NO_MORE_ITEMS pcmcia: deprecate CS_IN_USE pcmcia: deprecate CS_CONFIGURATION_LOCKED ... Fix trivial conflict in drivers/pcmcia/ds.c manually
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/airo_cs.c222
-rw-r--r--drivers/net/wireless/atmel_cs.c119
-rw-r--r--drivers/net/wireless/b43/pcmcia.c16
-rw-r--r--drivers/net/wireless/hostap/hostap_cs.c237
-rw-r--r--drivers/net/wireless/libertas/if_cs.c2
-rw-r--r--drivers/net/wireless/netwave_cs.c5
-rw-r--r--drivers/net/wireless/orinoco_cs.c165
-rw-r--r--drivers/net/wireless/ray_cs.c4
-rw-r--r--drivers/net/wireless/spectrum_cs.c162
-rw-r--r--drivers/net/wireless/wavelan_cs.c16
-rw-r--r--drivers/net/wireless/wl3501_cs.c4
11 files changed, 429 insertions, 523 deletions
diff --git a/drivers/net/wireless/airo_cs.c b/drivers/net/wireless/airo_cs.c
index fd72e427cb28..27696c20f4c2 100644
--- a/drivers/net/wireless/airo_cs.c
+++ b/drivers/net/wireless/airo_cs.c
@@ -206,126 +206,123 @@ static void airo_detach(struct pcmcia_device *link)
206#define CS_CHECK(fn, ret) \ 206#define CS_CHECK(fn, ret) \
207do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) 207do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
208 208
209static int airo_cs_config_check(struct pcmcia_device *p_dev,
210 cistpl_cftable_entry_t *cfg,
211 cistpl_cftable_entry_t *dflt,
212 unsigned int vcc,
213 void *priv_data)
214{
215 win_req_t *req = priv_data;
216
217 if (cfg->index == 0)
218 return -ENODEV;
219
220 /* Does this card need audio output? */
221 if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
222 p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
223 p_dev->conf.Status = CCSR_AUDIO_ENA;
224 }
225
226 /* Use power settings for Vcc and Vpp if present */
227 /* Note that the CIS values need to be rescaled */
228 if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))
229 p_dev->conf.Vpp = cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;
230 else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM))
231 p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000;
232
233 /* Do we need to allocate an interrupt? */
234 if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
235 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
236
237 /* IO window settings */
238 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
239 if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
240 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
241 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
242 if (!(io->flags & CISTPL_IO_8BIT))
243 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
244 if (!(io->flags & CISTPL_IO_16BIT))
245 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
246 p_dev->io.BasePort1 = io->win[0].base;
247 p_dev->io.NumPorts1 = io->win[0].len;
248 if (io->nwin > 1) {
249 p_dev->io.Attributes2 = p_dev->io.Attributes1;
250 p_dev->io.BasePort2 = io->win[1].base;
251 p_dev->io.NumPorts2 = io->win[1].len;
252 }
253 }
254
255 /* This reserves IO space but doesn't actually enable it */
256 if (pcmcia_request_io(p_dev, &p_dev->io) != 0)
257 return -ENODEV;
258
259 /*
260 Now set up a common memory window, if needed. There is room
261 in the struct pcmcia_device structure for one memory window handle,
262 but if the base addresses need to be saved, or if multiple
263 windows are needed, the info should go in the private data
264 structure for this device.
265
266 Note that the memory window base is a physical address, and
267 needs to be mapped to virtual space with ioremap() before it
268 is used.
269 */
270 if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
271 cistpl_mem_t *mem = (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
272 memreq_t map;
273 req->Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
274 req->Base = mem->win[0].host_addr;
275 req->Size = mem->win[0].len;
276 req->AccessSpeed = 0;
277 if (pcmcia_request_window(&p_dev, req, &p_dev->win) != 0)
278 return -ENODEV;
279 map.Page = 0;
280 map.CardOffset = mem->win[0].card_addr;
281 if (pcmcia_map_mem_page(p_dev->win, &map) != 0)
282 return -ENODEV;
283 }
284 /* If we got this far, we're cool! */
285 return 0;
286}
287
288
209static int airo_config(struct pcmcia_device *link) 289static int airo_config(struct pcmcia_device *link)
210{ 290{
211 tuple_t tuple;
212 cisparse_t parse;
213 local_info_t *dev; 291 local_info_t *dev;
292 win_req_t *req;
214 int last_fn, last_ret; 293 int last_fn, last_ret;
215 u_char buf[64];
216 win_req_t req;
217 memreq_t map;
218 294
219 dev = link->priv; 295 dev = link->priv;
220 296
221 DEBUG(0, "airo_config(0x%p)\n", link); 297 DEBUG(0, "airo_config(0x%p)\n", link);
222 298
299 req = kzalloc(sizeof(win_req_t), GFP_KERNEL);
300 if (!req)
301 return -ENOMEM;
302
303 /*
304 * In this loop, we scan the CIS for configuration table
305 * entries, each of which describes a valid card
306 * configuration, including voltage, IO window, memory window,
307 * and interrupt settings.
308 *
309 * We make no assumptions about the card to be configured: we
310 * use just the information available in the CIS. In an ideal
311 * world, this would work for any PCMCIA card, but it requires
312 * a complete and accurate CIS. In practice, a driver usually
313 * "knows" most of these things without consulting the CIS,
314 * and most client drivers will only use the CIS to fill in
315 * implementation-defined details.
316 */
317 last_ret = pcmcia_loop_config(link, airo_cs_config_check, req);
318 if (last_ret)
319 goto failed;
320
223 /* 321 /*
224 In this loop, we scan the CIS for configuration table entries, 322 Allocate an interrupt line. Note that this does not assign a
225 each of which describes a valid card configuration, including 323 handler to the interrupt, unless the 'Handler' member of the
226 voltage, IO window, memory window, and interrupt settings. 324 irq structure is initialized.
227
228 We make no assumptions about the card to be configured: we use
229 just the information available in the CIS. In an ideal world,
230 this would work for any PCMCIA card, but it requires a complete
231 and accurate CIS. In practice, a driver usually "knows" most of
232 these things without consulting the CIS, and most client drivers
233 will only use the CIS to fill in implementation-defined details.
234 */ 325 */
235 tuple.Attributes = 0;
236 tuple.TupleData = buf;
237 tuple.TupleDataMax = sizeof(buf);
238 tuple.TupleOffset = 0;
239 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
240 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
241 while (1) {
242 cistpl_cftable_entry_t dflt = { 0 };
243 cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
244 if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
245 pcmcia_parse_tuple(link, &tuple, &parse) != 0)
246 goto next_entry;
247
248 if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
249 if (cfg->index == 0) goto next_entry;
250 link->conf.ConfigIndex = cfg->index;
251
252 /* Does this card need audio output? */
253 if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
254 link->conf.Attributes |= CONF_ENABLE_SPKR;
255 link->conf.Status = CCSR_AUDIO_ENA;
256 }
257
258 /* Use power settings for Vcc and Vpp if present */
259 /* Note that the CIS values need to be rescaled */
260 if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))
261 link->conf.Vpp =
262 cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;
263 else if (dflt.vpp1.present & (1<<CISTPL_POWER_VNOM))
264 link->conf.Vpp =
265 dflt.vpp1.param[CISTPL_POWER_VNOM]/10000;
266
267 /* Do we need to allocate an interrupt? */
268 if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
269 link->conf.Attributes |= CONF_ENABLE_IRQ;
270
271 /* IO window settings */
272 link->io.NumPorts1 = link->io.NumPorts2 = 0;
273 if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
274 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
275 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
276 if (!(io->flags & CISTPL_IO_8BIT))
277 link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
278 if (!(io->flags & CISTPL_IO_16BIT))
279 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
280 link->io.BasePort1 = io->win[0].base;
281 link->io.NumPorts1 = io->win[0].len;
282 if (io->nwin > 1) {
283 link->io.Attributes2 = link->io.Attributes1;
284 link->io.BasePort2 = io->win[1].base;
285 link->io.NumPorts2 = io->win[1].len;
286 }
287 }
288
289 /* This reserves IO space but doesn't actually enable it */
290 if (pcmcia_request_io(link, &link->io) != 0)
291 goto next_entry;
292
293 /*
294 Now set up a common memory window, if needed. There is room
295 in the struct pcmcia_device structure for one memory window handle,
296 but if the base addresses need to be saved, or if multiple
297 windows are needed, the info should go in the private data
298 structure for this device.
299
300 Note that the memory window base is a physical address, and
301 needs to be mapped to virtual space with ioremap() before it
302 is used.
303 */
304 if ((cfg->mem.nwin > 0) || (dflt.mem.nwin > 0)) {
305 cistpl_mem_t *mem =
306 (cfg->mem.nwin) ? &cfg->mem : &dflt.mem;
307 req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
308 req.Base = mem->win[0].host_addr;
309 req.Size = mem->win[0].len;
310 req.AccessSpeed = 0;
311 if (pcmcia_request_window(&link, &req, &link->win) != 0)
312 goto next_entry;
313 map.Page = 0; map.CardOffset = mem->win[0].card_addr;
314 if (pcmcia_map_mem_page(link->win, &map) != 0)
315 goto next_entry;
316 }
317 /* If we got this far, we're cool! */
318 break;
319
320 next_entry:
321 CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
322 }
323
324 /*
325 Allocate an interrupt line. Note that this does not assign a
326 handler to the interrupt, unless the 'Handler' member of the
327 irq structure is initialized.
328 */
329 if (link->conf.Attributes & CONF_ENABLE_IRQ) 326 if (link->conf.Attributes & CONF_ENABLE_IRQ)
330 CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); 327 CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
331 328
@@ -362,14 +359,17 @@ static int airo_config(struct pcmcia_device *link)
362 printk(" & 0x%04x-0x%04x", link->io.BasePort2, 359 printk(" & 0x%04x-0x%04x", link->io.BasePort2,
363 link->io.BasePort2+link->io.NumPorts2-1); 360 link->io.BasePort2+link->io.NumPorts2-1);
364 if (link->win) 361 if (link->win)
365 printk(", mem 0x%06lx-0x%06lx", req.Base, 362 printk(", mem 0x%06lx-0x%06lx", req->Base,
366 req.Base+req.Size-1); 363 req->Base+req->Size-1);
367 printk("\n"); 364 printk("\n");
365 kfree(req);
368 return 0; 366 return 0;
369 367
370 cs_failed: 368 cs_failed:
371 cs_error(link, last_fn, last_ret); 369 cs_error(link, last_fn, last_ret);
370 failed:
372 airo_release(link); 371 airo_release(link);
372 kfree(req);
373 return -ENODEV; 373 return -ENODEV;
374} /* airo_config */ 374} /* airo_config */
375 375
diff --git a/drivers/net/wireless/atmel_cs.c b/drivers/net/wireless/atmel_cs.c
index d2388e8d179a..77406245dc7b 100644
--- a/drivers/net/wireless/atmel_cs.c
+++ b/drivers/net/wireless/atmel_cs.c
@@ -224,13 +224,58 @@ static int card_present(void *arg)
224 return 0; 224 return 0;
225} 225}
226 226
227static int atmel_config_check(struct pcmcia_device *p_dev,
228 cistpl_cftable_entry_t *cfg,
229 cistpl_cftable_entry_t *dflt,
230 unsigned int vcc,
231 void *priv_data)
232{
233 if (cfg->index == 0)
234 return -ENODEV;
235
236 /* Does this card need audio output? */
237 if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
238 p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
239 p_dev->conf.Status = CCSR_AUDIO_ENA;
240 }
241
242 /* Use power settings for Vcc and Vpp if present */
243 /* Note that the CIS values need to be rescaled */
244 if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))
245 p_dev->conf.Vpp = cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;
246 else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM))
247 p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000;
248
249 /* Do we need to allocate an interrupt? */
250 if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
251 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
252
253 /* IO window settings */
254 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
255 if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
256 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
257 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
258 if (!(io->flags & CISTPL_IO_8BIT))
259 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
260 if (!(io->flags & CISTPL_IO_16BIT))
261 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
262 p_dev->io.BasePort1 = io->win[0].base;
263 p_dev->io.NumPorts1 = io->win[0].len;
264 if (io->nwin > 1) {
265 p_dev->io.Attributes2 = p_dev->io.Attributes1;
266 p_dev->io.BasePort2 = io->win[1].base;
267 p_dev->io.NumPorts2 = io->win[1].len;
268 }
269 }
270
271 /* This reserves IO space but doesn't actually enable it */
272 return pcmcia_request_io(p_dev, &p_dev->io);
273}
274
227static int atmel_config(struct pcmcia_device *link) 275static int atmel_config(struct pcmcia_device *link)
228{ 276{
229 tuple_t tuple;
230 cisparse_t parse;
231 local_info_t *dev; 277 local_info_t *dev;
232 int last_fn, last_ret; 278 int last_fn, last_ret;
233 u_char buf[64];
234 struct pcmcia_device_id *did; 279 struct pcmcia_device_id *did;
235 280
236 dev = link->priv; 281 dev = link->priv;
@@ -238,11 +283,6 @@ static int atmel_config(struct pcmcia_device *link)
238 283
239 DEBUG(0, "atmel_config(0x%p)\n", link); 284 DEBUG(0, "atmel_config(0x%p)\n", link);
240 285
241 tuple.Attributes = 0;
242 tuple.TupleData = buf;
243 tuple.TupleDataMax = sizeof(buf);
244 tuple.TupleOffset = 0;
245
246 /* 286 /*
247 In this loop, we scan the CIS for configuration table entries, 287 In this loop, we scan the CIS for configuration table entries,
248 each of which describes a valid card configuration, including 288 each of which describes a valid card configuration, including
@@ -255,66 +295,8 @@ static int atmel_config(struct pcmcia_device *link)
255 these things without consulting the CIS, and most client drivers 295 these things without consulting the CIS, and most client drivers
256 will only use the CIS to fill in implementation-defined details. 296 will only use the CIS to fill in implementation-defined details.
257 */ 297 */
258 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 298 if (pcmcia_loop_config(link, atmel_config_check, NULL))
259 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 299 goto failed;
260 while (1) {
261 cistpl_cftable_entry_t dflt = { 0 };
262 cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
263 if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
264 pcmcia_parse_tuple(link, &tuple, &parse) != 0)
265 goto next_entry;
266
267 if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
268 if (cfg->index == 0) goto next_entry;
269 link->conf.ConfigIndex = cfg->index;
270
271 /* Does this card need audio output? */
272 if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
273 link->conf.Attributes |= CONF_ENABLE_SPKR;
274 link->conf.Status = CCSR_AUDIO_ENA;
275 }
276
277 /* Use power settings for Vcc and Vpp if present */
278 /* Note that the CIS values need to be rescaled */
279 if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))
280 link->conf.Vpp =
281 cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;
282 else if (dflt.vpp1.present & (1<<CISTPL_POWER_VNOM))
283 link->conf.Vpp =
284 dflt.vpp1.param[CISTPL_POWER_VNOM]/10000;
285
286 /* Do we need to allocate an interrupt? */
287 if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
288 link->conf.Attributes |= CONF_ENABLE_IRQ;
289
290 /* IO window settings */
291 link->io.NumPorts1 = link->io.NumPorts2 = 0;
292 if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
293 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
294 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
295 if (!(io->flags & CISTPL_IO_8BIT))
296 link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
297 if (!(io->flags & CISTPL_IO_16BIT))
298 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
299 link->io.BasePort1 = io->win[0].base;
300 link->io.NumPorts1 = io->win[0].len;
301 if (io->nwin > 1) {
302 link->io.Attributes2 = link->io.Attributes1;
303 link->io.BasePort2 = io->win[1].base;
304 link->io.NumPorts2 = io->win[1].len;
305 }
306 }
307
308 /* This reserves IO space but doesn't actually enable it */
309 if (pcmcia_request_io(link, &link->io) != 0)
310 goto next_entry;
311
312 /* If we got this far, we're cool! */
313 break;
314
315 next_entry:
316 CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
317 }
318 300
319 /* 301 /*
320 Allocate an interrupt line. Note that this does not assign a 302 Allocate an interrupt line. Note that this does not assign a
@@ -360,6 +342,7 @@ static int atmel_config(struct pcmcia_device *link)
360 342
361 cs_failed: 343 cs_failed:
362 cs_error(link, last_fn, last_ret); 344 cs_error(link, last_fn, last_ret);
345 failed:
363 atmel_release(link); 346 atmel_release(link);
364 return -ENODEV; 347 return -ENODEV;
365} 348}
diff --git a/drivers/net/wireless/b43/pcmcia.c b/drivers/net/wireless/b43/pcmcia.c
index b8aa16307f79..3cfc30307a27 100644
--- a/drivers/net/wireless/b43/pcmcia.c
+++ b/drivers/net/wireless/b43/pcmcia.c
@@ -82,13 +82,13 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
82 tuple.TupleOffset = 0; 82 tuple.TupleOffset = 0;
83 83
84 res = pcmcia_get_first_tuple(dev, &tuple); 84 res = pcmcia_get_first_tuple(dev, &tuple);
85 if (res != CS_SUCCESS) 85 if (res != 0)
86 goto err_kfree_ssb; 86 goto err_kfree_ssb;
87 res = pcmcia_get_tuple_data(dev, &tuple); 87 res = pcmcia_get_tuple_data(dev, &tuple);
88 if (res != CS_SUCCESS) 88 if (res != 0)
89 goto err_kfree_ssb; 89 goto err_kfree_ssb;
90 res = pcmcia_parse_tuple(dev, &tuple, &parse); 90 res = pcmcia_parse_tuple(&tuple, &parse);
91 if (res != CS_SUCCESS) 91 if (res != 0)
92 goto err_kfree_ssb; 92 goto err_kfree_ssb;
93 93
94 dev->conf.ConfigBase = parse.config.base; 94 dev->conf.ConfigBase = parse.config.base;
@@ -107,13 +107,13 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
107 win.Size = SSB_CORE_SIZE; 107 win.Size = SSB_CORE_SIZE;
108 win.AccessSpeed = 250; 108 win.AccessSpeed = 250;
109 res = pcmcia_request_window(&dev, &win, &dev->win); 109 res = pcmcia_request_window(&dev, &win, &dev->win);
110 if (res != CS_SUCCESS) 110 if (res != 0)
111 goto err_kfree_ssb; 111 goto err_kfree_ssb;
112 112
113 mem.CardOffset = 0; 113 mem.CardOffset = 0;
114 mem.Page = 0; 114 mem.Page = 0;
115 res = pcmcia_map_mem_page(dev->win, &mem); 115 res = pcmcia_map_mem_page(dev->win, &mem);
116 if (res != CS_SUCCESS) 116 if (res != 0)
117 goto err_disable; 117 goto err_disable;
118 118
119 dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; 119 dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
@@ -121,11 +121,11 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
121 dev->irq.Handler = NULL; /* The handler is registered later. */ 121 dev->irq.Handler = NULL; /* The handler is registered later. */
122 dev->irq.Instance = NULL; 122 dev->irq.Instance = NULL;
123 res = pcmcia_request_irq(dev, &dev->irq); 123 res = pcmcia_request_irq(dev, &dev->irq);
124 if (res != CS_SUCCESS) 124 if (res != 0)
125 goto err_disable; 125 goto err_disable;
126 126
127 res = pcmcia_request_configuration(dev, &dev->conf); 127 res = pcmcia_request_configuration(dev, &dev->conf);
128 if (res != CS_SUCCESS) 128 if (res != 0)
129 goto err_disable; 129 goto err_disable;
130 130
131 err = ssb_bus_pcmciabus_register(ssb, dev, win.Base); 131 err = ssb_bus_pcmciabus_register(ssb, dev, win.Base);
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
index 3b4e55cf33cd..633740277352 100644
--- a/drivers/net/wireless/hostap/hostap_cs.c
+++ b/drivers/net/wireless/hostap/hostap_cs.c
@@ -234,7 +234,7 @@ static void sandisk_set_iobase(local_info_t *local)
234 reg.Value = hw_priv->link->io.BasePort1 & 0x00ff; 234 reg.Value = hw_priv->link->io.BasePort1 & 0x00ff;
235 res = pcmcia_access_configuration_register(hw_priv->link, 235 res = pcmcia_access_configuration_register(hw_priv->link,
236 &reg); 236 &reg);
237 if (res != CS_SUCCESS) { 237 if (res != 0) {
238 printk(KERN_DEBUG "Prism3 SanDisk - failed to set I/O base 0 -" 238 printk(KERN_DEBUG "Prism3 SanDisk - failed to set I/O base 0 -"
239 " res=%d\n", res); 239 " res=%d\n", res);
240 } 240 }
@@ -246,7 +246,7 @@ static void sandisk_set_iobase(local_info_t *local)
246 reg.Value = (hw_priv->link->io.BasePort1 & 0xff00) >> 8; 246 reg.Value = (hw_priv->link->io.BasePort1 & 0xff00) >> 8;
247 res = pcmcia_access_configuration_register(hw_priv->link, 247 res = pcmcia_access_configuration_register(hw_priv->link,
248 &reg); 248 &reg);
249 if (res != CS_SUCCESS) { 249 if (res != 0) {
250 printk(KERN_DEBUG "Prism3 SanDisk - failed to set I/O base 1 -" 250 printk(KERN_DEBUG "Prism3 SanDisk - failed to set I/O base 1 -"
251 " res=%d\n", res); 251 " res=%d\n", res);
252 } 252 }
@@ -305,7 +305,7 @@ static int sandisk_enable_wireless(struct net_device *dev)
305 tuple.DesiredTuple = CISTPL_LONGLINK_MFC; 305 tuple.DesiredTuple = CISTPL_LONGLINK_MFC;
306 if (pcmcia_get_first_tuple(hw_priv->link, &tuple) || 306 if (pcmcia_get_first_tuple(hw_priv->link, &tuple) ||
307 pcmcia_get_tuple_data(hw_priv->link, &tuple) || 307 pcmcia_get_tuple_data(hw_priv->link, &tuple) ||
308 pcmcia_parse_tuple(hw_priv->link, &tuple, parse) || 308 pcmcia_parse_tuple(&tuple, parse) ||
309 parse->longlink_mfc.nfn < 2) { 309 parse->longlink_mfc.nfn < 2) {
310 /* No multi-function links found */ 310 /* No multi-function links found */
311 ret = -ENODEV; 311 ret = -ENODEV;
@@ -322,7 +322,7 @@ static int sandisk_enable_wireless(struct net_device *dev)
322 reg.Value = COR_SOFT_RESET; 322 reg.Value = COR_SOFT_RESET;
323 res = pcmcia_access_configuration_register(hw_priv->link, 323 res = pcmcia_access_configuration_register(hw_priv->link,
324 &reg); 324 &reg);
325 if (res != CS_SUCCESS) { 325 if (res != 0) {
326 printk(KERN_DEBUG "%s: SanDisk - COR sreset failed (%d)\n", 326 printk(KERN_DEBUG "%s: SanDisk - COR sreset failed (%d)\n",
327 dev->name, res); 327 dev->name, res);
328 goto done; 328 goto done;
@@ -339,7 +339,7 @@ static int sandisk_enable_wireless(struct net_device *dev)
339 reg.Value = COR_LEVEL_REQ | 0x8 | COR_ADDR_DECODE | COR_FUNC_ENA; 339 reg.Value = COR_LEVEL_REQ | 0x8 | COR_ADDR_DECODE | COR_FUNC_ENA;
340 res = pcmcia_access_configuration_register(hw_priv->link, 340 res = pcmcia_access_configuration_register(hw_priv->link,
341 &reg); 341 &reg);
342 if (res != CS_SUCCESS) { 342 if (res != 0) {
343 printk(KERN_DEBUG "%s: SanDisk - COR sreset failed (%d)\n", 343 printk(KERN_DEBUG "%s: SanDisk - COR sreset failed (%d)\n",
344 dev->name, res); 344 dev->name, res);
345 goto done; 345 goto done;
@@ -374,7 +374,7 @@ static void prism2_pccard_cor_sreset(local_info_t *local)
374 reg.Value = 0; 374 reg.Value = 0;
375 res = pcmcia_access_configuration_register(hw_priv->link, 375 res = pcmcia_access_configuration_register(hw_priv->link,
376 &reg); 376 &reg);
377 if (res != CS_SUCCESS) { 377 if (res != 0) {
378 printk(KERN_DEBUG "prism2_pccard_cor_sreset failed 1 (%d)\n", 378 printk(KERN_DEBUG "prism2_pccard_cor_sreset failed 1 (%d)\n",
379 res); 379 res);
380 return; 380 return;
@@ -386,7 +386,7 @@ static void prism2_pccard_cor_sreset(local_info_t *local)
386 reg.Value |= COR_SOFT_RESET; 386 reg.Value |= COR_SOFT_RESET;
387 res = pcmcia_access_configuration_register(hw_priv->link, 387 res = pcmcia_access_configuration_register(hw_priv->link,
388 &reg); 388 &reg);
389 if (res != CS_SUCCESS) { 389 if (res != 0) {
390 printk(KERN_DEBUG "prism2_pccard_cor_sreset failed 2 (%d)\n", 390 printk(KERN_DEBUG "prism2_pccard_cor_sreset failed 2 (%d)\n",
391 res); 391 res);
392 return; 392 return;
@@ -399,7 +399,7 @@ static void prism2_pccard_cor_sreset(local_info_t *local)
399 reg.Value |= COR_IREQ_ENA; 399 reg.Value |= COR_IREQ_ENA;
400 res = pcmcia_access_configuration_register(hw_priv->link, 400 res = pcmcia_access_configuration_register(hw_priv->link,
401 &reg); 401 &reg);
402 if (res != CS_SUCCESS) { 402 if (res != 0) {
403 printk(KERN_DEBUG "prism2_pccard_cor_sreset failed 3 (%d)\n", 403 printk(KERN_DEBUG "prism2_pccard_cor_sreset failed 3 (%d)\n",
404 res); 404 res);
405 return; 405 return;
@@ -433,7 +433,7 @@ static void prism2_pccard_genesis_reset(local_info_t *local, int hcr)
433 reg.Value = 0; 433 reg.Value = 0;
434 res = pcmcia_access_configuration_register(hw_priv->link, 434 res = pcmcia_access_configuration_register(hw_priv->link,
435 &reg); 435 &reg);
436 if (res != CS_SUCCESS) { 436 if (res != 0) {
437 printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 1 " 437 printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 1 "
438 "(%d)\n", res); 438 "(%d)\n", res);
439 return; 439 return;
@@ -446,7 +446,7 @@ static void prism2_pccard_genesis_reset(local_info_t *local, int hcr)
446 reg.Value |= COR_SOFT_RESET; 446 reg.Value |= COR_SOFT_RESET;
447 res = pcmcia_access_configuration_register(hw_priv->link, 447 res = pcmcia_access_configuration_register(hw_priv->link,
448 &reg); 448 &reg);
449 if (res != CS_SUCCESS) { 449 if (res != 0) {
450 printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 2 " 450 printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 2 "
451 "(%d)\n", res); 451 "(%d)\n", res);
452 return; 452 return;
@@ -460,7 +460,7 @@ static void prism2_pccard_genesis_reset(local_info_t *local, int hcr)
460 reg.Offset = CISREG_CCSR; 460 reg.Offset = CISREG_CCSR;
461 res = pcmcia_access_configuration_register(hw_priv->link, 461 res = pcmcia_access_configuration_register(hw_priv->link,
462 &reg); 462 &reg);
463 if (res != CS_SUCCESS) { 463 if (res != 0) {
464 printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 3 " 464 printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 3 "
465 "(%d)\n", res); 465 "(%d)\n", res);
466 return; 466 return;
@@ -472,7 +472,7 @@ static void prism2_pccard_genesis_reset(local_info_t *local, int hcr)
472 reg.Value = old_cor & ~COR_SOFT_RESET; 472 reg.Value = old_cor & ~COR_SOFT_RESET;
473 res = pcmcia_access_configuration_register(hw_priv->link, 473 res = pcmcia_access_configuration_register(hw_priv->link,
474 &reg); 474 &reg);
475 if (res != CS_SUCCESS) { 475 if (res != 0) {
476 printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 4 " 476 printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 4 "
477 "(%d)\n", res); 477 "(%d)\n", res);
478 return; 478 return;
@@ -532,145 +532,118 @@ static void prism2_detach(struct pcmcia_device *link)
532#define CS_CHECK(fn, ret) \ 532#define CS_CHECK(fn, ret) \
533do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) 533do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
534 534
535#define CFG_CHECK2(fn, retf) \
536do { int _ret = (retf); \
537if (_ret != 0) { \
538 PDEBUG(DEBUG_EXTRA, "CardServices(" #fn ") returned %d\n", _ret); \
539 cs_error(link, fn, _ret); \
540 goto next_entry; \
541} \
542} while (0)
543
544 535
545/* run after a CARD_INSERTION event is received to configure the PCMCIA 536/* run after a CARD_INSERTION event is received to configure the PCMCIA
546 * socket and make the device available to the system */ 537 * socket and make the device available to the system */
538
539static int prism2_config_check(struct pcmcia_device *p_dev,
540 cistpl_cftable_entry_t *cfg,
541 cistpl_cftable_entry_t *dflt,
542 unsigned int vcc,
543 void *priv_data)
544{
545 if (cfg->index == 0)
546 return -ENODEV;
547
548 PDEBUG(DEBUG_EXTRA, "Checking CFTABLE_ENTRY 0x%02X "
549 "(default 0x%02X)\n", cfg->index, dflt->index);
550
551 /* Does this card need audio output? */
552 if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
553 p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
554 p_dev->conf.Status = CCSR_AUDIO_ENA;
555 }
556
557 /* Use power settings for Vcc and Vpp if present */
558 /* Note that the CIS values need to be rescaled */
559 if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
560 if (vcc != cfg->vcc.param[CISTPL_POWER_VNOM] /
561 10000 && !ignore_cis_vcc) {
562 PDEBUG(DEBUG_EXTRA, " Vcc mismatch - skipping"
563 " this entry\n");
564 return -ENODEV;
565 }
566 } else if (dflt->vcc.present & (1 << CISTPL_POWER_VNOM)) {
567 if (vcc != dflt->vcc.param[CISTPL_POWER_VNOM] /
568 10000 && !ignore_cis_vcc) {
569 PDEBUG(DEBUG_EXTRA, " Vcc (default) mismatch "
570 "- skipping this entry\n");
571 return -ENODEV;
572 }
573 }
574
575 if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM))
576 p_dev->conf.Vpp = cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
577 else if (dflt->vpp1.present & (1 << CISTPL_POWER_VNOM))
578 p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM] / 10000;
579
580 /* Do we need to allocate an interrupt? */
581 if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
582 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
583 else if (!(p_dev->conf.Attributes & CONF_ENABLE_IRQ)) {
584 /* At least Compaq WL200 does not have IRQInfo1 set,
585 * but it does not work without interrupts.. */
586 printk(KERN_WARNING "Config has no IRQ info, but trying to "
587 "enable IRQ anyway..\n");
588 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
589 }
590
591 /* IO window settings */
592 PDEBUG(DEBUG_EXTRA, "IO window settings: cfg->io.nwin=%d "
593 "dflt->io.nwin=%d\n",
594 cfg->io.nwin, dflt->io.nwin);
595 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
596 if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
597 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
598 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
599 PDEBUG(DEBUG_EXTRA, "io->flags = 0x%04X, "
600 "io.base=0x%04x, len=%d\n", io->flags,
601 io->win[0].base, io->win[0].len);
602 if (!(io->flags & CISTPL_IO_8BIT))
603 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
604 if (!(io->flags & CISTPL_IO_16BIT))
605 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
606 p_dev->io.IOAddrLines = io->flags &
607 CISTPL_IO_LINES_MASK;
608 p_dev->io.BasePort1 = io->win[0].base;
609 p_dev->io.NumPorts1 = io->win[0].len;
610 if (io->nwin > 1) {
611 p_dev->io.Attributes2 = p_dev->io.Attributes1;
612 p_dev->io.BasePort2 = io->win[1].base;
613 p_dev->io.NumPorts2 = io->win[1].len;
614 }
615 }
616
617 /* This reserves IO space but doesn't actually enable it */
618 return pcmcia_request_io(p_dev, &p_dev->io);
619}
620
547static int prism2_config(struct pcmcia_device *link) 621static int prism2_config(struct pcmcia_device *link)
548{ 622{
549 struct net_device *dev; 623 struct net_device *dev;
550 struct hostap_interface *iface; 624 struct hostap_interface *iface;
551 local_info_t *local; 625 local_info_t *local;
552 int ret = 1; 626 int ret = 1;
553 tuple_t tuple;
554 cisparse_t *parse;
555 int last_fn, last_ret; 627 int last_fn, last_ret;
556 u_char buf[64];
557 config_info_t conf;
558 cistpl_cftable_entry_t dflt = { 0 };
559 struct hostap_cs_priv *hw_priv; 628 struct hostap_cs_priv *hw_priv;
560 629
561 PDEBUG(DEBUG_FLOW, "prism2_config()\n"); 630 PDEBUG(DEBUG_FLOW, "prism2_config()\n");
562 631
563 parse = kmalloc(sizeof(cisparse_t), GFP_KERNEL);
564 hw_priv = kzalloc(sizeof(*hw_priv), GFP_KERNEL); 632 hw_priv = kzalloc(sizeof(*hw_priv), GFP_KERNEL);
565 if (parse == NULL || hw_priv == NULL) { 633 if (hw_priv == NULL) {
566 ret = -ENOMEM; 634 ret = -ENOMEM;
567 goto failed; 635 goto failed;
568 } 636 }
569 637
570 tuple.Attributes = 0;
571 tuple.TupleData = buf;
572 tuple.TupleDataMax = sizeof(buf);
573 tuple.TupleOffset = 0;
574
575 CS_CHECK(GetConfigurationInfo,
576 pcmcia_get_configuration_info(link, &conf));
577
578 /* Look for an appropriate configuration table entry in the CIS */ 638 /* Look for an appropriate configuration table entry in the CIS */
579 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 639 last_ret = pcmcia_loop_config(link, prism2_config_check, NULL);
580 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 640 if (last_ret) {
581 for (;;) { 641 if (!ignore_cis_vcc)
582 cistpl_cftable_entry_t *cfg = &(parse->cftable_entry); 642 printk(KERN_ERR "GetNextTuple(): No matching "
583 CFG_CHECK2(GetTupleData, 643 "CIS configuration. Maybe you need the "
584 pcmcia_get_tuple_data(link, &tuple)); 644 "ignore_cis_vcc=1 parameter.\n");
585 CFG_CHECK2(ParseTuple, 645 cs_error(link, RequestIO, last_ret);
586 pcmcia_parse_tuple(link, &tuple, parse)); 646 goto failed;
587
588 if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
589 dflt = *cfg;
590 if (cfg->index == 0)
591 goto next_entry;
592 link->conf.ConfigIndex = cfg->index;
593 PDEBUG(DEBUG_EXTRA, "Checking CFTABLE_ENTRY 0x%02X "
594 "(default 0x%02X)\n", cfg->index, dflt.index);
595
596 /* Does this card need audio output? */
597 if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
598 link->conf.Attributes |= CONF_ENABLE_SPKR;
599 link->conf.Status = CCSR_AUDIO_ENA;
600 }
601
602 /* Use power settings for Vcc and Vpp if present */
603 /* Note that the CIS values need to be rescaled */
604 if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
605 if (conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM] /
606 10000 && !ignore_cis_vcc) {
607 PDEBUG(DEBUG_EXTRA, " Vcc mismatch - skipping"
608 " this entry\n");
609 goto next_entry;
610 }
611 } else if (dflt.vcc.present & (1 << CISTPL_POWER_VNOM)) {
612 if (conf.Vcc != dflt.vcc.param[CISTPL_POWER_VNOM] /
613 10000 && !ignore_cis_vcc) {
614 PDEBUG(DEBUG_EXTRA, " Vcc (default) mismatch "
615 "- skipping this entry\n");
616 goto next_entry;
617 }
618 }
619
620 if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM))
621 link->conf.Vpp =
622 cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
623 else if (dflt.vpp1.present & (1 << CISTPL_POWER_VNOM))
624 link->conf.Vpp =
625 dflt.vpp1.param[CISTPL_POWER_VNOM] / 10000;
626
627 /* Do we need to allocate an interrupt? */
628 if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
629 link->conf.Attributes |= CONF_ENABLE_IRQ;
630 else if (!(link->conf.Attributes & CONF_ENABLE_IRQ)) {
631 /* At least Compaq WL200 does not have IRQInfo1 set,
632 * but it does not work without interrupts.. */
633 printk("Config has no IRQ info, but trying to enable "
634 "IRQ anyway..\n");
635 link->conf.Attributes |= CONF_ENABLE_IRQ;
636 }
637
638 /* IO window settings */
639 PDEBUG(DEBUG_EXTRA, "IO window settings: cfg->io.nwin=%d "
640 "dflt.io.nwin=%d\n",
641 cfg->io.nwin, dflt.io.nwin);
642 link->io.NumPorts1 = link->io.NumPorts2 = 0;
643 if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
644 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
645 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
646 PDEBUG(DEBUG_EXTRA, "io->flags = 0x%04X, "
647 "io.base=0x%04x, len=%d\n", io->flags,
648 io->win[0].base, io->win[0].len);
649 if (!(io->flags & CISTPL_IO_8BIT))
650 link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
651 if (!(io->flags & CISTPL_IO_16BIT))
652 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
653 link->io.IOAddrLines = io->flags &
654 CISTPL_IO_LINES_MASK;
655 link->io.BasePort1 = io->win[0].base;
656 link->io.NumPorts1 = io->win[0].len;
657 if (io->nwin > 1) {
658 link->io.Attributes2 = link->io.Attributes1;
659 link->io.BasePort2 = io->win[1].base;
660 link->io.NumPorts2 = io->win[1].len;
661 }
662 }
663
664 /* This reserves IO space but doesn't actually enable it */
665 CFG_CHECK2(RequestIO,
666 pcmcia_request_io(link, &link->io));
667
668 /* This configuration table entry is OK */
669 break;
670
671 next_entry:
672 CS_CHECK(GetNextTuple,
673 pcmcia_get_next_tuple(link, &tuple));
674 } 647 }
675 648
676 /* Need to allocate net_device before requesting IRQ handler */ 649 /* Need to allocate net_device before requesting IRQ handler */
@@ -738,14 +711,12 @@ static int prism2_config(struct pcmcia_device *link)
738 if (ret == 0 && local->ddev) 711 if (ret == 0 && local->ddev)
739 strcpy(hw_priv->node.dev_name, local->ddev->name); 712 strcpy(hw_priv->node.dev_name, local->ddev->name);
740 } 713 }
741 kfree(parse);
742 return ret; 714 return ret;
743 715
744 cs_failed: 716 cs_failed:
745 cs_error(link, last_fn, last_ret); 717 cs_error(link, last_fn, last_ret);
746 718
747 failed: 719 failed:
748 kfree(parse);
749 kfree(hw_priv); 720 kfree(hw_priv);
750 prism2_release((u_long)link); 721 prism2_release((u_long)link);
751 return ret; 722 return ret;
diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
index e3505c110af6..842a08d1f106 100644
--- a/drivers/net/wireless/libertas/if_cs.c
+++ b/drivers/net/wireless/libertas/if_cs.c
@@ -791,7 +791,7 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
791 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 791 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
792 if ((ret = pcmcia_get_first_tuple(p_dev, &tuple)) != 0 || 792 if ((ret = pcmcia_get_first_tuple(p_dev, &tuple)) != 0 ||
793 (ret = pcmcia_get_tuple_data(p_dev, &tuple)) != 0 || 793 (ret = pcmcia_get_tuple_data(p_dev, &tuple)) != 0 ||
794 (ret = pcmcia_parse_tuple(p_dev, &tuple, &parse)) != 0) 794 (ret = pcmcia_parse_tuple(&tuple, &parse)) != 0)
795 { 795 {
796 lbs_pr_err("error in pcmcia_get_first_tuple etc\n"); 796 lbs_pr_err("error in pcmcia_get_first_tuple etc\n");
797 goto out1; 797 goto out1;
diff --git a/drivers/net/wireless/netwave_cs.c b/drivers/net/wireless/netwave_cs.c
index 25bae7933aa5..a670f36b5f3f 100644
--- a/drivers/net/wireless/netwave_cs.c
+++ b/drivers/net/wireless/netwave_cs.c
@@ -749,9 +749,10 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) {
749 for (i = j = 0x0; j < 0x400; j += 0x20) { 749 for (i = j = 0x0; j < 0x400; j += 0x20) {
750 link->io.BasePort1 = j ^ 0x300; 750 link->io.BasePort1 = j ^ 0x300;
751 i = pcmcia_request_io(link, &link->io); 751 i = pcmcia_request_io(link, &link->io);
752 if (i == CS_SUCCESS) break; 752 if (i == 0)
753 break;
753 } 754 }
754 if (i != CS_SUCCESS) { 755 if (i != 0) {
755 cs_error(link, RequestIO, i); 756 cs_error(link, RequestIO, i);
756 goto failed; 757 goto failed;
757 } 758 }
diff --git a/drivers/net/wireless/orinoco_cs.c b/drivers/net/wireless/orinoco_cs.c
index 9eaa252c2430..e585684e59a0 100644
--- a/drivers/net/wireless/orinoco_cs.c
+++ b/drivers/net/wireless/orinoco_cs.c
@@ -80,7 +80,7 @@ orinoco_cs_hard_reset(struct orinoco_private *priv)
80 /* We need atomic ops here, because we're not holding the lock */ 80 /* We need atomic ops here, because we're not holding the lock */
81 set_bit(0, &card->hard_reset_in_progress); 81 set_bit(0, &card->hard_reset_in_progress);
82 82
83 err = pcmcia_reset_card(link, NULL); 83 err = pcmcia_reset_card(link->socket);
84 if (err) 84 if (err)
85 return err; 85 return err;
86 86
@@ -165,6 +165,70 @@ static void orinoco_cs_detach(struct pcmcia_device *link)
165 last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; \ 165 last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; \
166 } while (0) 166 } while (0)
167 167
168static int orinoco_cs_config_check(struct pcmcia_device *p_dev,
169 cistpl_cftable_entry_t *cfg,
170 cistpl_cftable_entry_t *dflt,
171 unsigned int vcc,
172 void *priv_data)
173{
174 if (cfg->index == 0)
175 goto next_entry;
176
177 /* Use power settings for Vcc and Vpp if present */
178 /* Note that the CIS values need to be rescaled */
179 if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
180 if (vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000) {
181 DEBUG(2, "spectrum_cs_config: Vcc mismatch (vcc = %d, CIS = %d)\n", vcc, cfg->vcc.param[CISTPL_POWER_VNOM] / 10000);
182 if (!ignore_cis_vcc)
183 goto next_entry;
184 }
185 } else if (dflt->vcc.present & (1 << CISTPL_POWER_VNOM)) {
186 if (vcc != dflt->vcc.param[CISTPL_POWER_VNOM] / 10000) {
187 DEBUG(2, "spectrum_cs_config: Vcc mismatch (vcc = %d, CIS = %d)\n", vcc, dflt->vcc.param[CISTPL_POWER_VNOM] / 10000);
188 if (!ignore_cis_vcc)
189 goto next_entry;
190 }
191 }
192
193 if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM))
194 p_dev->conf.Vpp =
195 cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
196 else if (dflt->vpp1.present & (1 << CISTPL_POWER_VNOM))
197 p_dev->conf.Vpp =
198 dflt->vpp1.param[CISTPL_POWER_VNOM] / 10000;
199
200 /* Do we need to allocate an interrupt? */
201 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
202
203 /* IO window settings */
204 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
205 if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
206 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
207 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
208 if (!(io->flags & CISTPL_IO_8BIT))
209 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
210 if (!(io->flags & CISTPL_IO_16BIT))
211 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
212 p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
213 p_dev->io.BasePort1 = io->win[0].base;
214 p_dev->io.NumPorts1 = io->win[0].len;
215 if (io->nwin > 1) {
216 p_dev->io.Attributes2 = p_dev->io.Attributes1;
217 p_dev->io.BasePort2 = io->win[1].base;
218 p_dev->io.NumPorts2 = io->win[1].len;
219 }
220
221 /* This reserves IO space but doesn't actually enable it */
222 if (pcmcia_request_io(p_dev, &p_dev->io) != 0)
223 goto next_entry;
224 }
225 return 0;
226
227next_entry:
228 pcmcia_disable_device(p_dev);
229 return -ENODEV;
230};
231
168static int 232static int
169orinoco_cs_config(struct pcmcia_device *link) 233orinoco_cs_config(struct pcmcia_device *link)
170{ 234{
@@ -173,16 +237,8 @@ orinoco_cs_config(struct pcmcia_device *link)
173 struct orinoco_pccard *card = priv->card; 237 struct orinoco_pccard *card = priv->card;
174 hermes_t *hw = &priv->hw; 238 hermes_t *hw = &priv->hw;
175 int last_fn, last_ret; 239 int last_fn, last_ret;
176 u_char buf[64];
177 config_info_t conf;
178 tuple_t tuple;
179 cisparse_t parse;
180 void __iomem *mem; 240 void __iomem *mem;
181 241
182 /* Look up the current Vcc */
183 CS_CHECK(GetConfigurationInfo,
184 pcmcia_get_configuration_info(link, &conf));
185
186 /* 242 /*
187 * In this loop, we scan the CIS for configuration table 243 * In this loop, we scan the CIS for configuration table
188 * entries, each of which describes a valid card 244 * entries, each of which describes a valid card
@@ -197,94 +253,14 @@ orinoco_cs_config(struct pcmcia_device *link)
197 * and most client drivers will only use the CIS to fill in 253 * and most client drivers will only use the CIS to fill in
198 * implementation-defined details. 254 * implementation-defined details.
199 */ 255 */
200 tuple.Attributes = 0; 256 last_ret = pcmcia_loop_config(link, orinoco_cs_config_check, NULL);
201 tuple.TupleData = buf; 257 if (last_ret) {
202 tuple.TupleDataMax = sizeof(buf); 258 if (!ignore_cis_vcc)
203 tuple.TupleOffset = 0;
204 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
205 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
206 while (1) {
207 cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
208 cistpl_cftable_entry_t dflt = { .index = 0 };
209
210 if ( (pcmcia_get_tuple_data(link, &tuple) != 0)
211 || (pcmcia_parse_tuple(link, &tuple, &parse) != 0))
212 goto next_entry;
213
214 if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
215 dflt = *cfg;
216 if (cfg->index == 0)
217 goto next_entry;
218 link->conf.ConfigIndex = cfg->index;
219
220 /* Use power settings for Vcc and Vpp if present */
221 /* Note that the CIS values need to be rescaled */
222 if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
223 if (conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000) {
224 DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, cfg CIS = %d)\n", conf.Vcc, cfg->vcc.param[CISTPL_POWER_VNOM] / 10000);
225 if (!ignore_cis_vcc)
226 goto next_entry;
227 }
228 } else if (dflt.vcc.present & (1 << CISTPL_POWER_VNOM)) {
229 if (conf.Vcc != dflt.vcc.param[CISTPL_POWER_VNOM] / 10000) {
230 DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, dflt CIS = %d)\n", conf.Vcc, dflt.vcc.param[CISTPL_POWER_VNOM] / 10000);
231 if(!ignore_cis_vcc)
232 goto next_entry;
233 }
234 }
235
236 if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM))
237 link->conf.Vpp =
238 cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
239 else if (dflt.vpp1.present & (1 << CISTPL_POWER_VNOM))
240 link->conf.Vpp =
241 dflt.vpp1.param[CISTPL_POWER_VNOM] / 10000;
242
243 /* Do we need to allocate an interrupt? */
244 link->conf.Attributes |= CONF_ENABLE_IRQ;
245
246 /* IO window settings */
247 link->io.NumPorts1 = link->io.NumPorts2 = 0;
248 if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
249 cistpl_io_t *io =
250 (cfg->io.nwin) ? &cfg->io : &dflt.io;
251 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
252 if (!(io->flags & CISTPL_IO_8BIT))
253 link->io.Attributes1 =
254 IO_DATA_PATH_WIDTH_16;
255 if (!(io->flags & CISTPL_IO_16BIT))
256 link->io.Attributes1 =
257 IO_DATA_PATH_WIDTH_8;
258 link->io.IOAddrLines =
259 io->flags & CISTPL_IO_LINES_MASK;
260 link->io.BasePort1 = io->win[0].base;
261 link->io.NumPorts1 = io->win[0].len;
262 if (io->nwin > 1) {
263 link->io.Attributes2 =
264 link->io.Attributes1;
265 link->io.BasePort2 = io->win[1].base;
266 link->io.NumPorts2 = io->win[1].len;
267 }
268
269 /* This reserves IO space but doesn't actually enable it */
270 if (pcmcia_request_io(link, &link->io) != 0)
271 goto next_entry;
272 }
273
274
275 /* If we got this far, we're cool! */
276
277 break;
278
279 next_entry:
280 pcmcia_disable_device(link);
281 last_ret = pcmcia_get_next_tuple(link, &tuple);
282 if (last_ret == CS_NO_MORE_ITEMS) {
283 printk(KERN_ERR PFX "GetNextTuple(): No matching " 259 printk(KERN_ERR PFX "GetNextTuple(): No matching "
284 "CIS configuration. Maybe you need the " 260 "CIS configuration. Maybe you need the "
285 "ignore_cis_vcc=1 parameter.\n"); 261 "ignore_cis_vcc=1 parameter.\n");
286 goto cs_failed; 262 cs_error(link, RequestIO, last_ret);
287 } 263 goto failed;
288 } 264 }
289 265
290 /* 266 /*
@@ -335,7 +311,6 @@ orinoco_cs_config(struct pcmcia_device *link)
335 "0x%04x-0x%04x\n", dev->name, dev->dev.parent->bus_id, 311 "0x%04x-0x%04x\n", dev->name, dev->dev.parent->bus_id,
336 link->irq.AssignedIRQ, link->io.BasePort1, 312 link->irq.AssignedIRQ, link->io.BasePort1,
337 link->io.BasePort1 + link->io.NumPorts1 - 1); 313 link->io.BasePort1 + link->io.NumPorts1 - 1);
338
339 return 0; 314 return 0;
340 315
341 cs_failed: 316 cs_failed:
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
index 44da0d19b5c8..1404a5717520 100644
--- a/drivers/net/wireless/ray_cs.c
+++ b/drivers/net/wireless/ray_cs.c
@@ -798,9 +798,9 @@ static void ray_release(struct pcmcia_device *link)
798 iounmap(local->amem); 798 iounmap(local->amem);
799 /* Do bother checking to see if these succeed or not */ 799 /* Do bother checking to see if these succeed or not */
800 i = pcmcia_release_window(local->amem_handle); 800 i = pcmcia_release_window(local->amem_handle);
801 if ( i != CS_SUCCESS ) DEBUG(0,"ReleaseWindow(local->amem) ret = %x\n",i); 801 if ( i != 0 ) DEBUG(0,"ReleaseWindow(local->amem) ret = %x\n",i);
802 i = pcmcia_release_window(local->rmem_handle); 802 i = pcmcia_release_window(local->rmem_handle);
803 if ( i != CS_SUCCESS ) DEBUG(0,"ReleaseWindow(local->rmem) ret = %x\n",i); 803 if ( i != 0 ) DEBUG(0,"ReleaseWindow(local->rmem) ret = %x\n",i);
804 pcmcia_disable_device(link); 804 pcmcia_disable_device(link);
805 805
806 DEBUG(2,"ray_release ending\n"); 806 DEBUG(2,"ray_release ending\n");
diff --git a/drivers/net/wireless/spectrum_cs.c b/drivers/net/wireless/spectrum_cs.c
index 67b26d3c3cd5..b0c71c3be467 100644
--- a/drivers/net/wireless/spectrum_cs.c
+++ b/drivers/net/wireless/spectrum_cs.c
@@ -235,6 +235,70 @@ static void spectrum_cs_detach(struct pcmcia_device *link)
235 * device available to the system. 235 * device available to the system.
236 */ 236 */
237 237
238static int spectrum_cs_config_check(struct pcmcia_device *p_dev,
239 cistpl_cftable_entry_t *cfg,
240 cistpl_cftable_entry_t *dflt,
241 unsigned int vcc,
242 void *priv_data)
243{
244 if (cfg->index == 0)
245 goto next_entry;
246
247 /* Use power settings for Vcc and Vpp if present */
248 /* Note that the CIS values need to be rescaled */
249 if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
250 if (vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000) {
251 DEBUG(2, "spectrum_cs_config: Vcc mismatch (vcc = %d, CIS = %d)\n", vcc, cfg->vcc.param[CISTPL_POWER_VNOM] / 10000);
252 if (!ignore_cis_vcc)
253 goto next_entry;
254 }
255 } else if (dflt->vcc.present & (1 << CISTPL_POWER_VNOM)) {
256 if (vcc != dflt->vcc.param[CISTPL_POWER_VNOM] / 10000) {
257 DEBUG(2, "spectrum_cs_config: Vcc mismatch (vcc = %d, CIS = %d)\n", vcc, dflt->vcc.param[CISTPL_POWER_VNOM] / 10000);
258 if (!ignore_cis_vcc)
259 goto next_entry;
260 }
261 }
262
263 if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM))
264 p_dev->conf.Vpp =
265 cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
266 else if (dflt->vpp1.present & (1 << CISTPL_POWER_VNOM))
267 p_dev->conf.Vpp =
268 dflt->vpp1.param[CISTPL_POWER_VNOM] / 10000;
269
270 /* Do we need to allocate an interrupt? */
271 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
272
273 /* IO window settings */
274 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
275 if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
276 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
277 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
278 if (!(io->flags & CISTPL_IO_8BIT))
279 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
280 if (!(io->flags & CISTPL_IO_16BIT))
281 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
282 p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
283 p_dev->io.BasePort1 = io->win[0].base;
284 p_dev->io.NumPorts1 = io->win[0].len;
285 if (io->nwin > 1) {
286 p_dev->io.Attributes2 = p_dev->io.Attributes1;
287 p_dev->io.BasePort2 = io->win[1].base;
288 p_dev->io.NumPorts2 = io->win[1].len;
289 }
290
291 /* This reserves IO space but doesn't actually enable it */
292 if (pcmcia_request_io(p_dev, &p_dev->io) != 0)
293 goto next_entry;
294 }
295 return 0;
296
297next_entry:
298 pcmcia_disable_device(p_dev);
299 return -ENODEV;
300};
301
238static int 302static int
239spectrum_cs_config(struct pcmcia_device *link) 303spectrum_cs_config(struct pcmcia_device *link)
240{ 304{
@@ -243,16 +307,8 @@ spectrum_cs_config(struct pcmcia_device *link)
243 struct orinoco_pccard *card = priv->card; 307 struct orinoco_pccard *card = priv->card;
244 hermes_t *hw = &priv->hw; 308 hermes_t *hw = &priv->hw;
245 int last_fn, last_ret; 309 int last_fn, last_ret;
246 u_char buf[64];
247 config_info_t conf;
248 tuple_t tuple;
249 cisparse_t parse;
250 void __iomem *mem; 310 void __iomem *mem;
251 311
252 /* Look up the current Vcc */
253 CS_CHECK(GetConfigurationInfo,
254 pcmcia_get_configuration_info(link, &conf));
255
256 /* 312 /*
257 * In this loop, we scan the CIS for configuration table 313 * In this loop, we scan the CIS for configuration table
258 * entries, each of which describes a valid card 314 * entries, each of which describes a valid card
@@ -267,94 +323,14 @@ spectrum_cs_config(struct pcmcia_device *link)
267 * and most client drivers will only use the CIS to fill in 323 * and most client drivers will only use the CIS to fill in
268 * implementation-defined details. 324 * implementation-defined details.
269 */ 325 */
270 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 326 last_ret = pcmcia_loop_config(link, spectrum_cs_config_check, NULL);
271 tuple.Attributes = 0; 327 if (last_ret) {
272 tuple.TupleData = buf; 328 if (!ignore_cis_vcc)
273 tuple.TupleDataMax = sizeof(buf);
274 tuple.TupleOffset = 0;
275 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
276 while (1) {
277 cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
278 cistpl_cftable_entry_t dflt = { .index = 0 };
279
280 if ( (pcmcia_get_tuple_data(link, &tuple) != 0)
281 || (pcmcia_parse_tuple(link, &tuple, &parse) != 0))
282 goto next_entry;
283
284 if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
285 dflt = *cfg;
286 if (cfg->index == 0)
287 goto next_entry;
288 link->conf.ConfigIndex = cfg->index;
289
290 /* Use power settings for Vcc and Vpp if present */
291 /* Note that the CIS values need to be rescaled */
292 if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
293 if (conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000) {
294 DEBUG(2, "spectrum_cs_config: Vcc mismatch (conf.Vcc = %d, CIS = %d)\n", conf.Vcc, cfg->vcc.param[CISTPL_POWER_VNOM] / 10000);
295 if (!ignore_cis_vcc)
296 goto next_entry;
297 }
298 } else if (dflt.vcc.present & (1 << CISTPL_POWER_VNOM)) {
299 if (conf.Vcc != dflt.vcc.param[CISTPL_POWER_VNOM] / 10000) {
300 DEBUG(2, "spectrum_cs_config: Vcc mismatch (conf.Vcc = %d, CIS = %d)\n", conf.Vcc, dflt.vcc.param[CISTPL_POWER_VNOM] / 10000);
301 if(!ignore_cis_vcc)
302 goto next_entry;
303 }
304 }
305
306 if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM))
307 link->conf.Vpp =
308 cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
309 else if (dflt.vpp1.present & (1 << CISTPL_POWER_VNOM))
310 link->conf.Vpp =
311 dflt.vpp1.param[CISTPL_POWER_VNOM] / 10000;
312
313 /* Do we need to allocate an interrupt? */
314 link->conf.Attributes |= CONF_ENABLE_IRQ;
315
316 /* IO window settings */
317 link->io.NumPorts1 = link->io.NumPorts2 = 0;
318 if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
319 cistpl_io_t *io =
320 (cfg->io.nwin) ? &cfg->io : &dflt.io;
321 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
322 if (!(io->flags & CISTPL_IO_8BIT))
323 link->io.Attributes1 =
324 IO_DATA_PATH_WIDTH_16;
325 if (!(io->flags & CISTPL_IO_16BIT))
326 link->io.Attributes1 =
327 IO_DATA_PATH_WIDTH_8;
328 link->io.IOAddrLines =
329 io->flags & CISTPL_IO_LINES_MASK;
330 link->io.BasePort1 = io->win[0].base;
331 link->io.NumPorts1 = io->win[0].len;
332 if (io->nwin > 1) {
333 link->io.Attributes2 =
334 link->io.Attributes1;
335 link->io.BasePort2 = io->win[1].base;
336 link->io.NumPorts2 = io->win[1].len;
337 }
338
339 /* This reserves IO space but doesn't actually enable it */
340 if (pcmcia_request_io(link, &link->io) != 0)
341 goto next_entry;
342 }
343
344
345 /* If we got this far, we're cool! */
346
347 break;
348
349 next_entry:
350 pcmcia_disable_device(link);
351 last_ret = pcmcia_get_next_tuple(link, &tuple);
352 if (last_ret == CS_NO_MORE_ITEMS) {
353 printk(KERN_ERR PFX "GetNextTuple(): No matching " 329 printk(KERN_ERR PFX "GetNextTuple(): No matching "
354 "CIS configuration. Maybe you need the " 330 "CIS configuration. Maybe you need the "
355 "ignore_cis_vcc=1 parameter.\n"); 331 "ignore_cis_vcc=1 parameter.\n");
356 goto cs_failed; 332 cs_error(link, RequestIO, last_ret);
357 } 333 goto failed;
358 } 334 }
359 335
360 /* 336 /*
diff --git a/drivers/net/wireless/wavelan_cs.c b/drivers/net/wireless/wavelan_cs.c
index b5de38a9b791..e124b1d6267a 100644
--- a/drivers/net/wireless/wavelan_cs.c
+++ b/drivers/net/wireless/wavelan_cs.c
@@ -3702,7 +3702,7 @@ wv_pcmcia_reset(struct net_device * dev)
3702#endif 3702#endif
3703 3703
3704 i = pcmcia_access_configuration_register(link, &reg); 3704 i = pcmcia_access_configuration_register(link, &reg);
3705 if(i != CS_SUCCESS) 3705 if (i != 0)
3706 { 3706 {
3707 cs_error(link, AccessConfigurationRegister, i); 3707 cs_error(link, AccessConfigurationRegister, i);
3708 return FALSE; 3708 return FALSE;
@@ -3716,7 +3716,7 @@ wv_pcmcia_reset(struct net_device * dev)
3716 reg.Action = CS_WRITE; 3716 reg.Action = CS_WRITE;
3717 reg.Value = reg.Value | COR_SW_RESET; 3717 reg.Value = reg.Value | COR_SW_RESET;
3718 i = pcmcia_access_configuration_register(link, &reg); 3718 i = pcmcia_access_configuration_register(link, &reg);
3719 if(i != CS_SUCCESS) 3719 if (i != 0)
3720 { 3720 {
3721 cs_error(link, AccessConfigurationRegister, i); 3721 cs_error(link, AccessConfigurationRegister, i);
3722 return FALSE; 3722 return FALSE;
@@ -3725,7 +3725,7 @@ wv_pcmcia_reset(struct net_device * dev)
3725 reg.Action = CS_WRITE; 3725 reg.Action = CS_WRITE;
3726 reg.Value = COR_LEVEL_IRQ | COR_CONFIG; 3726 reg.Value = COR_LEVEL_IRQ | COR_CONFIG;
3727 i = pcmcia_access_configuration_register(link, &reg); 3727 i = pcmcia_access_configuration_register(link, &reg);
3728 if(i != CS_SUCCESS) 3728 if (i != 0)
3729 { 3729 {
3730 cs_error(link, AccessConfigurationRegister, i); 3730 cs_error(link, AccessConfigurationRegister, i);
3731 return FALSE; 3731 return FALSE;
@@ -3903,7 +3903,7 @@ wv_pcmcia_config(struct pcmcia_device * link)
3903 do 3903 do
3904 { 3904 {
3905 i = pcmcia_request_io(link, &link->io); 3905 i = pcmcia_request_io(link, &link->io);
3906 if(i != CS_SUCCESS) 3906 if (i != 0)
3907 { 3907 {
3908 cs_error(link, RequestIO, i); 3908 cs_error(link, RequestIO, i);
3909 break; 3909 break;
@@ -3914,7 +3914,7 @@ wv_pcmcia_config(struct pcmcia_device * link)
3914 * actually assign a handler to the interrupt. 3914 * actually assign a handler to the interrupt.
3915 */ 3915 */
3916 i = pcmcia_request_irq(link, &link->irq); 3916 i = pcmcia_request_irq(link, &link->irq);
3917 if(i != CS_SUCCESS) 3917 if (i != 0)
3918 { 3918 {
3919 cs_error(link, RequestIRQ, i); 3919 cs_error(link, RequestIRQ, i);
3920 break; 3920 break;
@@ -3926,7 +3926,7 @@ wv_pcmcia_config(struct pcmcia_device * link)
3926 */ 3926 */
3927 link->conf.ConfigIndex = 1; 3927 link->conf.ConfigIndex = 1;
3928 i = pcmcia_request_configuration(link, &link->conf); 3928 i = pcmcia_request_configuration(link, &link->conf);
3929 if(i != CS_SUCCESS) 3929 if (i != 0)
3930 { 3930 {
3931 cs_error(link, RequestConfiguration, i); 3931 cs_error(link, RequestConfiguration, i);
3932 break; 3932 break;
@@ -3942,7 +3942,7 @@ wv_pcmcia_config(struct pcmcia_device * link)
3942 req.Base = req.Size = 0; 3942 req.Base = req.Size = 0;
3943 req.AccessSpeed = mem_speed; 3943 req.AccessSpeed = mem_speed;
3944 i = pcmcia_request_window(&link, &req, &link->win); 3944 i = pcmcia_request_window(&link, &req, &link->win);
3945 if(i != CS_SUCCESS) 3945 if (i != 0)
3946 { 3946 {
3947 cs_error(link, RequestWindow, i); 3947 cs_error(link, RequestWindow, i);
3948 break; 3948 break;
@@ -3954,7 +3954,7 @@ wv_pcmcia_config(struct pcmcia_device * link)
3954 3954
3955 mem.CardOffset = 0; mem.Page = 0; 3955 mem.CardOffset = 0; mem.Page = 0;
3956 i = pcmcia_map_mem_page(link->win, &mem); 3956 i = pcmcia_map_mem_page(link->win, &mem);
3957 if(i != CS_SUCCESS) 3957 if (i != 0)
3958 { 3958 {
3959 cs_error(link, MapMemPage, i); 3959 cs_error(link, MapMemPage, i);
3960 break; 3960 break;
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
index 74a5ad2f1223..68789c6e1ce9 100644
--- a/drivers/net/wireless/wl3501_cs.c
+++ b/drivers/net/wireless/wl3501_cs.c
@@ -1977,10 +1977,10 @@ static int wl3501_config(struct pcmcia_device *link)
1977 link->io.BasePort1 = j; 1977 link->io.BasePort1 = j;
1978 link->io.BasePort2 = link->io.BasePort1 + 0x10; 1978 link->io.BasePort2 = link->io.BasePort1 + 0x10;
1979 i = pcmcia_request_io(link, &link->io); 1979 i = pcmcia_request_io(link, &link->io);
1980 if (i == CS_SUCCESS) 1980 if (i == 0)
1981 break; 1981 break;
1982 } 1982 }
1983 if (i != CS_SUCCESS) { 1983 if (i != 0) {
1984 cs_error(link, RequestIO, i); 1984 cs_error(link, RequestIO, i);
1985 goto failed; 1985 goto failed;
1986 } 1986 }