aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2010-03-07 06:21:16 -0500
committerDominik Brodowski <linux@dominikbrodowski.net>2010-05-10 04:23:13 -0400
commiteb14120f743d29744d9475bffec56ff4ad43a749 (patch)
tree56857094d2b0cfc0ecbd1685f18d6edbe78e140f /drivers/net
parenta7debe789dfcaee9c4d81e5738b0be8c5d93930b (diff)
pcmcia: re-work pcmcia_request_irq()
Instead of the old pcmcia_request_irq() interface, drivers may now choose between: - calling request_irq/free_irq directly. Use the IRQ from *p_dev->irq. - use pcmcia_request_irq(p_dev, handler_t); the PCMCIA core will clean up automatically on calls to pcmcia_disable_device() or device ejection. - drivers still not capable of IRQF_SHARED (or not telling us so) may use the deprecated pcmcia_request_exclusive_irq() for the time being; they might receive a shared IRQ nonetheless. CC: linux-bluetooth@vger.kernel.org CC: netdev@vger.kernel.org CC: linux-wireless@vger.kernel.org CC: linux-serial@vger.kernel.org CC: alsa-devel@alsa-project.org CC: linux-usb@vger.kernel.org CC: linux-ide@vger.kernel.org Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/pcmcia/3c574_cs.c6
-rw-r--r--drivers/net/pcmcia/3c589_cs.c7
-rw-r--r--drivers/net/pcmcia/axnet_cs.c13
-rw-r--r--drivers/net/pcmcia/com20020_cs.c8
-rw-r--r--drivers/net/pcmcia/fmvj18x_cs.c10
-rw-r--r--drivers/net/pcmcia/ibmtr_cs.c8
-rw-r--r--drivers/net/pcmcia/nmclan_cs.c6
-rw-r--r--drivers/net/pcmcia/pcnet_cs.c8
-rw-r--r--drivers/net/pcmcia/smc91c92_cs.c8
-rw-r--r--drivers/net/pcmcia/xirc2ps_cs.c7
-rw-r--r--drivers/net/wireless/airo_cs.c25
-rw-r--r--drivers/net/wireless/atmel_cs.c28
-rw-r--r--drivers/net/wireless/b43/pcmcia.c5
-rw-r--r--drivers/net/wireless/hostap/hostap_cs.c29
-rw-r--r--drivers/net/wireless/libertas/if_cs.c21
-rw-r--r--drivers/net/wireless/orinoco/orinoco_cs.c13
-rw-r--r--drivers/net/wireless/orinoco/spectrum_cs.c13
-rw-r--r--drivers/net/wireless/ray_cs.c8
-rw-r--r--drivers/net/wireless/wl3501_cs.c8
19 files changed, 56 insertions, 175 deletions
diff --git a/drivers/net/pcmcia/3c574_cs.c b/drivers/net/pcmcia/3c574_cs.c
index 757f87bb1db3..14428317c009 100644
--- a/drivers/net/pcmcia/3c574_cs.c
+++ b/drivers/net/pcmcia/3c574_cs.c
@@ -283,8 +283,6 @@ static int tc574_probe(struct pcmcia_device *link)
283 spin_lock_init(&lp->window_lock); 283 spin_lock_init(&lp->window_lock);
284 link->io.NumPorts1 = 32; 284 link->io.NumPorts1 = 32;
285 link->io.Attributes1 = IO_DATA_PATH_WIDTH_16; 285 link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
286 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
287 link->irq.Handler = &el3_interrupt;
288 link->conf.Attributes = CONF_ENABLE_IRQ; 286 link->conf.Attributes = CONF_ENABLE_IRQ;
289 link->conf.IntType = INT_MEMORY_AND_IO; 287 link->conf.IntType = INT_MEMORY_AND_IO;
290 link->conf.ConfigIndex = 1; 288 link->conf.ConfigIndex = 1;
@@ -353,7 +351,7 @@ static int tc574_config(struct pcmcia_device *link)
353 if (i != 0) 351 if (i != 0)
354 goto failed; 352 goto failed;
355 353
356 ret = pcmcia_request_irq(link, &link->irq); 354 ret = pcmcia_request_irq(link, el3_interrupt);
357 if (ret) 355 if (ret)
358 goto failed; 356 goto failed;
359 357
@@ -361,7 +359,7 @@ static int tc574_config(struct pcmcia_device *link)
361 if (ret) 359 if (ret)
362 goto failed; 360 goto failed;
363 361
364 dev->irq = link->irq.AssignedIRQ; 362 dev->irq = link->irq;
365 dev->base_addr = link->io.BasePort1; 363 dev->base_addr = link->io.BasePort1;
366 364
367 ioaddr = dev->base_addr; 365 ioaddr = dev->base_addr;
diff --git a/drivers/net/pcmcia/3c589_cs.c b/drivers/net/pcmcia/3c589_cs.c
index 091e0b00043e..405d772bfde7 100644
--- a/drivers/net/pcmcia/3c589_cs.c
+++ b/drivers/net/pcmcia/3c589_cs.c
@@ -194,8 +194,7 @@ static int tc589_probe(struct pcmcia_device *link)
194 spin_lock_init(&lp->lock); 194 spin_lock_init(&lp->lock);
195 link->io.NumPorts1 = 16; 195 link->io.NumPorts1 = 16;
196 link->io.Attributes1 = IO_DATA_PATH_WIDTH_16; 196 link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
197 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; 197
198 link->irq.Handler = &el3_interrupt;
199 link->conf.Attributes = CONF_ENABLE_IRQ; 198 link->conf.Attributes = CONF_ENABLE_IRQ;
200 link->conf.IntType = INT_MEMORY_AND_IO; 199 link->conf.IntType = INT_MEMORY_AND_IO;
201 link->conf.ConfigIndex = 1; 200 link->conf.ConfigIndex = 1;
@@ -271,7 +270,7 @@ static int tc589_config(struct pcmcia_device *link)
271 if (i != 0) 270 if (i != 0)
272 goto failed; 271 goto failed;
273 272
274 ret = pcmcia_request_irq(link, &link->irq); 273 ret = pcmcia_request_irq(link, el3_interrupt);
275 if (ret) 274 if (ret)
276 goto failed; 275 goto failed;
277 276
@@ -279,7 +278,7 @@ static int tc589_config(struct pcmcia_device *link)
279 if (ret) 278 if (ret)
280 goto failed; 279 goto failed;
281 280
282 dev->irq = link->irq.AssignedIRQ; 281 dev->irq = link->irq;
283 dev->base_addr = link->io.BasePort1; 282 dev->base_addr = link->io.BasePort1;
284 ioaddr = dev->base_addr; 283 ioaddr = dev->base_addr;
285 EL3WINDOW(0); 284 EL3WINDOW(0);
diff --git a/drivers/net/pcmcia/axnet_cs.c b/drivers/net/pcmcia/axnet_cs.c
index 9f3d593f14ed..967547a84b4b 100644
--- a/drivers/net/pcmcia/axnet_cs.c
+++ b/drivers/net/pcmcia/axnet_cs.c
@@ -168,7 +168,6 @@ static int axnet_probe(struct pcmcia_device *link)
168 info = PRIV(dev); 168 info = PRIV(dev);
169 info->p_dev = link; 169 info->p_dev = link;
170 link->priv = dev; 170 link->priv = dev;
171 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
172 link->conf.Attributes = CONF_ENABLE_IRQ; 171 link->conf.Attributes = CONF_ENABLE_IRQ;
173 link->conf.IntType = INT_MEMORY_AND_IO; 172 link->conf.IntType = INT_MEMORY_AND_IO;
174 173
@@ -265,12 +264,9 @@ static int try_io_port(struct pcmcia_device *link)
265 int j, ret; 264 int j, ret;
266 if (link->io.NumPorts1 == 32) { 265 if (link->io.NumPorts1 == 32) {
267 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 266 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
268 if (link->io.NumPorts2 > 0) { 267 /* for master/slave multifunction cards */
269 /* for master/slave multifunction cards */ 268 if (link->io.NumPorts2 > 0)
270 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8; 269 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
271 link->irq.Attributes =
272 IRQ_TYPE_DYNAMIC_SHARING;
273 }
274 } else { 270 } else {
275 /* This should be two 16-port windows */ 271 /* This should be two 16-port windows */
276 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 272 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
@@ -336,8 +332,7 @@ static int axnet_config(struct pcmcia_device *link)
336 if (ret != 0) 332 if (ret != 0)
337 goto failed; 333 goto failed;
338 334
339 ret = pcmcia_request_irq(link, &link->irq); 335 if (!link->irq)
340 if (ret)
341 goto failed; 336 goto failed;
342 337
343 if (link->io.NumPorts2 == 8) { 338 if (link->io.NumPorts2 == 8) {
@@ -349,7 +344,7 @@ static int axnet_config(struct pcmcia_device *link)
349 if (ret) 344 if (ret)
350 goto failed; 345 goto failed;
351 346
352 dev->irq = link->irq.AssignedIRQ; 347 dev->irq = link->irq;
353 dev->base_addr = link->io.BasePort1; 348 dev->base_addr = link->io.BasePort1;
354 349
355 if (!get_prom(link)) { 350 if (!get_prom(link)) {
diff --git a/drivers/net/pcmcia/com20020_cs.c b/drivers/net/pcmcia/com20020_cs.c
index 21d9c9d815d1..278438beb915 100644
--- a/drivers/net/pcmcia/com20020_cs.c
+++ b/drivers/net/pcmcia/com20020_cs.c
@@ -163,7 +163,6 @@ static int com20020_probe(struct pcmcia_device *p_dev)
163 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 163 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
164 p_dev->io.NumPorts1 = 16; 164 p_dev->io.NumPorts1 = 16;
165 p_dev->io.IOAddrLines = 16; 165 p_dev->io.IOAddrLines = 16;
166 p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
167 p_dev->conf.Attributes = CONF_ENABLE_IRQ; 166 p_dev->conf.Attributes = CONF_ENABLE_IRQ;
168 p_dev->conf.IntType = INT_MEMORY_AND_IO; 167 p_dev->conf.IntType = INT_MEMORY_AND_IO;
169 168
@@ -275,15 +274,14 @@ static int com20020_config(struct pcmcia_device *link)
275 dev_dbg(&link->dev, "got ioaddr %Xh\n", ioaddr); 274 dev_dbg(&link->dev, "got ioaddr %Xh\n", ioaddr);
276 275
277 dev_dbg(&link->dev, "request IRQ %d\n", 276 dev_dbg(&link->dev, "request IRQ %d\n",
278 link->irq.AssignedIRQ); 277 link->irq);
279 i = pcmcia_request_irq(link, &link->irq); 278 if (!link->irq)
280 if (i != 0)
281 { 279 {
282 dev_dbg(&link->dev, "requestIRQ failed totally!\n"); 280 dev_dbg(&link->dev, "requestIRQ failed totally!\n");
283 goto failed; 281 goto failed;
284 } 282 }
285 283
286 dev->irq = link->irq.AssignedIRQ; 284 dev->irq = link->irq;
287 285
288 ret = pcmcia_request_configuration(link, &link->conf); 286 ret = pcmcia_request_configuration(link, &link->conf);
289 if (ret) 287 if (ret)
diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c
index b9dc80b9d04a..31f1a037737c 100644
--- a/drivers/net/pcmcia/fmvj18x_cs.c
+++ b/drivers/net/pcmcia/fmvj18x_cs.c
@@ -254,10 +254,6 @@ static int fmvj18x_probe(struct pcmcia_device *link)
254 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 254 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
255 link->io.IOAddrLines = 5; 255 link->io.IOAddrLines = 5;
256 256
257 /* Interrupt setup */
258 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
259 link->irq.Handler = fjn_interrupt;
260
261 /* General socket configuration */ 257 /* General socket configuration */
262 link->conf.Attributes = CONF_ENABLE_IRQ; 258 link->conf.Attributes = CONF_ENABLE_IRQ;
263 link->conf.IntType = INT_MEMORY_AND_IO; 259 link->conf.IntType = INT_MEMORY_AND_IO;
@@ -425,8 +421,6 @@ static int fmvj18x_config(struct pcmcia_device *link)
425 } 421 }
426 422
427 if (link->io.NumPorts2 != 0) { 423 if (link->io.NumPorts2 != 0) {
428 link->irq.Attributes =
429 IRQ_TYPE_DYNAMIC_SHARING;
430 ret = mfc_try_io_port(link); 424 ret = mfc_try_io_port(link);
431 if (ret != 0) goto failed; 425 if (ret != 0) goto failed;
432 } else if (cardtype == UNGERMANN) { 426 } else if (cardtype == UNGERMANN) {
@@ -437,14 +431,14 @@ static int fmvj18x_config(struct pcmcia_device *link)
437 if (ret) 431 if (ret)
438 goto failed; 432 goto failed;
439 } 433 }
440 ret = pcmcia_request_irq(link, &link->irq); 434 ret = pcmcia_request_irq(link, fjn_interrupt);
441 if (ret) 435 if (ret)
442 goto failed; 436 goto failed;
443 ret = pcmcia_request_configuration(link, &link->conf); 437 ret = pcmcia_request_configuration(link, &link->conf);
444 if (ret) 438 if (ret)
445 goto failed; 439 goto failed;
446 440
447 dev->irq = link->irq.AssignedIRQ; 441 dev->irq = link->irq;
448 dev->base_addr = link->io.BasePort1; 442 dev->base_addr = link->io.BasePort1;
449 443
450 if (link->io.BasePort2 != 0) { 444 if (link->io.BasePort2 != 0) {
diff --git a/drivers/net/pcmcia/ibmtr_cs.c b/drivers/net/pcmcia/ibmtr_cs.c
index 37f4a6fdc3ef..0225cdffa4b9 100644
--- a/drivers/net/pcmcia/ibmtr_cs.c
+++ b/drivers/net/pcmcia/ibmtr_cs.c
@@ -156,8 +156,6 @@ static int __devinit ibmtr_attach(struct pcmcia_device *link)
156 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 156 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
157 link->io.NumPorts1 = 4; 157 link->io.NumPorts1 = 4;
158 link->io.IOAddrLines = 16; 158 link->io.IOAddrLines = 16;
159 link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
160 link->irq.Handler = ibmtr_interrupt;
161 link->conf.Attributes = CONF_ENABLE_IRQ; 159 link->conf.Attributes = CONF_ENABLE_IRQ;
162 link->conf.IntType = INT_MEMORY_AND_IO; 160 link->conf.IntType = INT_MEMORY_AND_IO;
163 link->conf.Present = PRESENT_OPTION; 161 link->conf.Present = PRESENT_OPTION;
@@ -238,11 +236,11 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
238 } 236 }
239 dev->base_addr = link->io.BasePort1; 237 dev->base_addr = link->io.BasePort1;
240 238
241 ret = pcmcia_request_irq(link, &link->irq); 239 ret = pcmcia_request_exclusive_irq(link, ibmtr_interrupt);
242 if (ret) 240 if (ret)
243 goto failed; 241 goto failed;
244 dev->irq = link->irq.AssignedIRQ; 242 dev->irq = link->irq;
245 ti->irq = link->irq.AssignedIRQ; 243 ti->irq = link->irq;
246 ti->global_int_enable=GLOBAL_INT_ENABLE+((dev->irq==9) ? 2 : dev->irq); 244 ti->global_int_enable=GLOBAL_INT_ENABLE+((dev->irq==9) ? 2 : dev->irq);
247 245
248 /* Allocate the MMIO memory window */ 246 /* Allocate the MMIO memory window */
diff --git a/drivers/net/pcmcia/nmclan_cs.c b/drivers/net/pcmcia/nmclan_cs.c
index c717b143f11a..b779e3a0b4dd 100644
--- a/drivers/net/pcmcia/nmclan_cs.c
+++ b/drivers/net/pcmcia/nmclan_cs.c
@@ -463,8 +463,6 @@ static int nmclan_probe(struct pcmcia_device *link)
463 link->io.NumPorts1 = 32; 463 link->io.NumPorts1 = 32;
464 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 464 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
465 link->io.IOAddrLines = 5; 465 link->io.IOAddrLines = 5;
466 link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
467 link->irq.Handler = mace_interrupt;
468 link->conf.Attributes = CONF_ENABLE_IRQ; 466 link->conf.Attributes = CONF_ENABLE_IRQ;
469 link->conf.IntType = INT_MEMORY_AND_IO; 467 link->conf.IntType = INT_MEMORY_AND_IO;
470 link->conf.ConfigIndex = 1; 468 link->conf.ConfigIndex = 1;
@@ -652,14 +650,14 @@ static int nmclan_config(struct pcmcia_device *link)
652 ret = pcmcia_request_io(link, &link->io); 650 ret = pcmcia_request_io(link, &link->io);
653 if (ret) 651 if (ret)
654 goto failed; 652 goto failed;
655 ret = pcmcia_request_irq(link, &link->irq); 653 ret = pcmcia_request_exclusive_irq(link, mace_interrupt);
656 if (ret) 654 if (ret)
657 goto failed; 655 goto failed;
658 ret = pcmcia_request_configuration(link, &link->conf); 656 ret = pcmcia_request_configuration(link, &link->conf);
659 if (ret) 657 if (ret)
660 goto failed; 658 goto failed;
661 659
662 dev->irq = link->irq.AssignedIRQ; 660 dev->irq = link->irq;
663 dev->base_addr = link->io.BasePort1; 661 dev->base_addr = link->io.BasePort1;
664 662
665 ioaddr = dev->base_addr; 663 ioaddr = dev->base_addr;
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c
index 4c0368de1815..af09be487577 100644
--- a/drivers/net/pcmcia/pcnet_cs.c
+++ b/drivers/net/pcmcia/pcnet_cs.c
@@ -264,7 +264,6 @@ static int pcnet_probe(struct pcmcia_device *link)
264 info->p_dev = link; 264 info->p_dev = link;
265 link->priv = dev; 265 link->priv = dev;
266 266
267 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
268 link->conf.Attributes = CONF_ENABLE_IRQ; 267 link->conf.Attributes = CONF_ENABLE_IRQ;
269 link->conf.IntType = INT_MEMORY_AND_IO; 268 link->conf.IntType = INT_MEMORY_AND_IO;
270 269
@@ -488,8 +487,6 @@ static int try_io_port(struct pcmcia_device *link)
488 if (link->io.NumPorts2 > 0) { 487 if (link->io.NumPorts2 > 0) {
489 /* for master/slave multifunction cards */ 488 /* for master/slave multifunction cards */
490 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8; 489 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
491 link->irq.Attributes =
492 IRQ_TYPE_DYNAMIC_SHARING;
493 } 490 }
494 } else { 491 } else {
495 /* This should be two 16-port windows */ 492 /* This should be two 16-port windows */
@@ -559,8 +556,7 @@ static int pcnet_config(struct pcmcia_device *link)
559 if (ret) 556 if (ret)
560 goto failed; 557 goto failed;
561 558
562 ret = pcmcia_request_irq(link, &link->irq); 559 if (!link->irq)
563 if (ret)
564 goto failed; 560 goto failed;
565 561
566 if (link->io.NumPorts2 == 8) { 562 if (link->io.NumPorts2 == 8) {
@@ -574,7 +570,7 @@ static int pcnet_config(struct pcmcia_device *link)
574 ret = pcmcia_request_configuration(link, &link->conf); 570 ret = pcmcia_request_configuration(link, &link->conf);
575 if (ret) 571 if (ret)
576 goto failed; 572 goto failed;
577 dev->irq = link->irq.AssignedIRQ; 573 dev->irq = link->irq;
578 dev->base_addr = link->io.BasePort1; 574 dev->base_addr = link->io.BasePort1;
579 if (info->flags & HAS_MISC_REG) { 575 if (info->flags & HAS_MISC_REG) {
580 if ((if_port == 1) || (if_port == 2)) 576 if ((if_port == 1) || (if_port == 2))
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c
index ccc553782a0d..ad061c7106b5 100644
--- a/drivers/net/pcmcia/smc91c92_cs.c
+++ b/drivers/net/pcmcia/smc91c92_cs.c
@@ -329,8 +329,6 @@ static int smc91c92_probe(struct pcmcia_device *link)
329 link->io.NumPorts1 = 16; 329 link->io.NumPorts1 = 16;
330 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 330 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
331 link->io.IOAddrLines = 4; 331 link->io.IOAddrLines = 4;
332 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
333 link->irq.Handler = &smc_interrupt;
334 link->conf.Attributes = CONF_ENABLE_IRQ; 332 link->conf.Attributes = CONF_ENABLE_IRQ;
335 link->conf.IntType = INT_MEMORY_AND_IO; 333 link->conf.IntType = INT_MEMORY_AND_IO;
336 334
@@ -453,7 +451,6 @@ static int mhz_mfc_config(struct pcmcia_device *link)
453 451
454 link->conf.Attributes |= CONF_ENABLE_SPKR; 452 link->conf.Attributes |= CONF_ENABLE_SPKR;
455 link->conf.Status = CCSR_AUDIO_ENA; 453 link->conf.Status = CCSR_AUDIO_ENA;
456 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
457 link->io.IOAddrLines = 16; 454 link->io.IOAddrLines = 16;
458 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8; 455 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
459 link->io.NumPorts2 = 8; 456 link->io.NumPorts2 = 8;
@@ -652,7 +649,6 @@ static int osi_config(struct pcmcia_device *link)
652 649
653 link->conf.Attributes |= CONF_ENABLE_SPKR; 650 link->conf.Attributes |= CONF_ENABLE_SPKR;
654 link->conf.Status = CCSR_AUDIO_ENA; 651 link->conf.Status = CCSR_AUDIO_ENA;
655 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
656 link->io.NumPorts1 = 64; 652 link->io.NumPorts1 = 64;
657 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8; 653 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
658 link->io.NumPorts2 = 8; 654 link->io.NumPorts2 = 8;
@@ -877,7 +873,7 @@ static int smc91c92_config(struct pcmcia_device *link)
877 if (i) 873 if (i)
878 goto config_failed; 874 goto config_failed;
879 875
880 i = pcmcia_request_irq(link, &link->irq); 876 i = pcmcia_request_irq(link, smc_interrupt);
881 if (i) 877 if (i)
882 goto config_failed; 878 goto config_failed;
883 i = pcmcia_request_configuration(link, &link->conf); 879 i = pcmcia_request_configuration(link, &link->conf);
@@ -887,7 +883,7 @@ static int smc91c92_config(struct pcmcia_device *link)
887 if (smc->manfid == MANFID_MOTOROLA) 883 if (smc->manfid == MANFID_MOTOROLA)
888 mot_config(link); 884 mot_config(link);
889 885
890 dev->irq = link->irq.AssignedIRQ; 886 dev->irq = link->irq;
891 887
892 if ((if_port >= 0) && (if_port <= 2)) 888 if ((if_port >= 0) && (if_port <= 2))
893 dev->if_port = if_port; 889 dev->if_port = if_port;
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c
index 4d1802e457be..c9e7d7d47835 100644
--- a/drivers/net/pcmcia/xirc2ps_cs.c
+++ b/drivers/net/pcmcia/xirc2ps_cs.c
@@ -555,7 +555,6 @@ xirc2ps_probe(struct pcmcia_device *link)
555 link->conf.Attributes = CONF_ENABLE_IRQ; 555 link->conf.Attributes = CONF_ENABLE_IRQ;
556 link->conf.IntType = INT_MEMORY_AND_IO; 556 link->conf.IntType = INT_MEMORY_AND_IO;
557 link->conf.ConfigIndex = 1; 557 link->conf.ConfigIndex = 1;
558 link->irq.Handler = xirc2ps_interrupt;
559 558
560 /* Fill in card specific entries */ 559 /* Fill in card specific entries */
561 dev->netdev_ops = &netdev_ops; 560 dev->netdev_ops = &netdev_ops;
@@ -841,7 +840,6 @@ xirc2ps_config(struct pcmcia_device * link)
841 link->conf.Attributes |= CONF_ENABLE_SPKR; 840 link->conf.Attributes |= CONF_ENABLE_SPKR;
842 link->conf.Status |= CCSR_AUDIO_ENA; 841 link->conf.Status |= CCSR_AUDIO_ENA;
843 } 842 }
844 link->irq.Attributes |= IRQ_TYPE_DYNAMIC_SHARING;
845 link->io.NumPorts2 = 8; 843 link->io.NumPorts2 = 8;
846 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8; 844 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
847 if (local->dingo) { 845 if (local->dingo) {
@@ -866,7 +864,6 @@ xirc2ps_config(struct pcmcia_device * link)
866 } 864 }
867 printk(KNOT_XIRC "no ports available\n"); 865 printk(KNOT_XIRC "no ports available\n");
868 } else { 866 } else {
869 link->irq.Attributes |= IRQ_TYPE_DYNAMIC_SHARING;
870 link->io.NumPorts1 = 16; 867 link->io.NumPorts1 = 16;
871 for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) { 868 for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) {
872 link->io.BasePort1 = ioaddr; 869 link->io.BasePort1 = ioaddr;
@@ -885,7 +882,7 @@ xirc2ps_config(struct pcmcia_device * link)
885 * Now allocate an interrupt line. Note that this does not 882 * Now allocate an interrupt line. Note that this does not
886 * actually assign a handler to the interrupt. 883 * actually assign a handler to the interrupt.
887 */ 884 */
888 if ((err=pcmcia_request_irq(link, &link->irq))) 885 if ((err=pcmcia_request_irq(link, xirc2ps_interrupt)))
889 goto config_error; 886 goto config_error;
890 887
891 /**************** 888 /****************
@@ -982,7 +979,7 @@ xirc2ps_config(struct pcmcia_device * link)
982 printk(KNOT_XIRC "invalid if_port requested\n"); 979 printk(KNOT_XIRC "invalid if_port requested\n");
983 980
984 /* we can now register the device with the net subsystem */ 981 /* we can now register the device with the net subsystem */
985 dev->irq = link->irq.AssignedIRQ; 982 dev->irq = link->irq;
986 dev->base_addr = link->io.BasePort1; 983 dev->base_addr = link->io.BasePort1;
987 984
988 if (local->dingo) 985 if (local->dingo)
diff --git a/drivers/net/wireless/airo_cs.c b/drivers/net/wireless/airo_cs.c
index f6036fb42319..7867c51be15f 100644
--- a/drivers/net/wireless/airo_cs.c
+++ b/drivers/net/wireless/airo_cs.c
@@ -132,10 +132,6 @@ static int airo_probe(struct pcmcia_device *p_dev)
132 132
133 dev_dbg(&p_dev->dev, "airo_attach()\n"); 133 dev_dbg(&p_dev->dev, "airo_attach()\n");
134 134
135 /* Interrupt setup */
136 p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
137 p_dev->irq.Handler = NULL;
138
139 /* 135 /*
140 General socket configuration defaults can go here. In this 136 General socket configuration defaults can go here. In this
141 client, we assume very little, and rely on the CIS for almost 137 client, we assume very little, and rely on the CIS for almost
@@ -212,9 +208,7 @@ static int airo_cs_config_check(struct pcmcia_device *p_dev,
212 else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM)) 208 else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM))
213 p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000; 209 p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000;
214 210
215 /* Do we need to allocate an interrupt? */ 211 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
216 if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
217 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
218 212
219 /* IO window settings */ 213 /* IO window settings */
220 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0; 214 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
@@ -300,16 +294,8 @@ static int airo_config(struct pcmcia_device *link)
300 if (ret) 294 if (ret)
301 goto failed; 295 goto failed;
302 296
303 /* 297 if (!link->irq)
304 Allocate an interrupt line. Note that this does not assign a 298 goto failed;
305 handler to the interrupt, unless the 'Handler' member of the
306 irq structure is initialized.
307 */
308 if (link->conf.Attributes & CONF_ENABLE_IRQ) {
309 ret = pcmcia_request_irq(link, &link->irq);
310 if (ret)
311 goto failed;
312 }
313 299
314 /* 300 /*
315 This actually configures the PCMCIA socket -- setting up 301 This actually configures the PCMCIA socket -- setting up
@@ -320,7 +306,7 @@ static int airo_config(struct pcmcia_device *link)
320 if (ret) 306 if (ret)
321 goto failed; 307 goto failed;
322 ((local_info_t *)link->priv)->eth_dev = 308 ((local_info_t *)link->priv)->eth_dev =
323 init_airo_card(link->irq.AssignedIRQ, 309 init_airo_card(link->irq,
324 link->io.BasePort1, 1, &link->dev); 310 link->io.BasePort1, 1, &link->dev);
325 if (!((local_info_t *)link->priv)->eth_dev) 311 if (!((local_info_t *)link->priv)->eth_dev)
326 goto failed; 312 goto failed;
@@ -338,8 +324,7 @@ static int airo_config(struct pcmcia_device *link)
338 dev->node.dev_name, link->conf.ConfigIndex); 324 dev->node.dev_name, link->conf.ConfigIndex);
339 if (link->conf.Vpp) 325 if (link->conf.Vpp)
340 printk(", Vpp %d.%d", link->conf.Vpp/10, link->conf.Vpp%10); 326 printk(", Vpp %d.%d", link->conf.Vpp/10, link->conf.Vpp%10);
341 if (link->conf.Attributes & CONF_ENABLE_IRQ) 327 printk(", irq %d", link->irq);
342 printk(", irq %d", link->irq.AssignedIRQ);
343 if (link->io.NumPorts1) 328 if (link->io.NumPorts1)
344 printk(", io 0x%04x-0x%04x", link->io.BasePort1, 329 printk(", io 0x%04x-0x%04x", link->io.BasePort1,
345 link->io.BasePort1+link->io.NumPorts1-1); 330 link->io.BasePort1+link->io.NumPorts1-1);
diff --git a/drivers/net/wireless/atmel_cs.c b/drivers/net/wireless/atmel_cs.c
index 32407911842f..759cdc419326 100644
--- a/drivers/net/wireless/atmel_cs.c
+++ b/drivers/net/wireless/atmel_cs.c
@@ -141,10 +141,6 @@ static int atmel_probe(struct pcmcia_device *p_dev)
141 141
142 dev_dbg(&p_dev->dev, "atmel_attach()\n"); 142 dev_dbg(&p_dev->dev, "atmel_attach()\n");
143 143
144 /* Interrupt setup */
145 p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
146 p_dev->irq.Handler = NULL;
147
148 /* 144 /*
149 General socket configuration defaults can go here. In this 145 General socket configuration defaults can go here. In this
150 client, we assume very little, and rely on the CIS for almost 146 client, we assume very little, and rely on the CIS for almost
@@ -226,9 +222,7 @@ static int atmel_config_check(struct pcmcia_device *p_dev,
226 else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM)) 222 else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM))
227 p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000; 223 p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000;
228 224
229 /* Do we need to allocate an interrupt? */ 225 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
230 if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
231 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
232 226
233 /* IO window settings */ 227 /* IO window settings */
234 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0; 228 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
@@ -278,15 +272,9 @@ static int atmel_config(struct pcmcia_device *link)
278 if (pcmcia_loop_config(link, atmel_config_check, NULL)) 272 if (pcmcia_loop_config(link, atmel_config_check, NULL))
279 goto failed; 273 goto failed;
280 274
281 /* 275 if (!link->irq) {
282 Allocate an interrupt line. Note that this does not assign a 276 dev_err(&link->dev, "atmel: cannot assign IRQ: check that CONFIG_ISA is set in kernel config.");
283 handler to the interrupt, unless the 'Handler' member of the 277 goto failed;
284 irq structure is initialized.
285 */
286 if (link->conf.Attributes & CONF_ENABLE_IRQ) {
287 ret = pcmcia_request_irq(link, &link->irq);
288 if (ret)
289 goto failed;
290 } 278 }
291 279
292 /* 280 /*
@@ -298,14 +286,8 @@ static int atmel_config(struct pcmcia_device *link)
298 if (ret) 286 if (ret)
299 goto failed; 287 goto failed;
300 288
301 if (link->irq.AssignedIRQ == 0) {
302 printk(KERN_ALERT
303 "atmel: cannot assign IRQ: check that CONFIG_ISA is set in kernel config.");
304 goto failed;
305 }
306
307 ((local_info_t*)link->priv)->eth_dev = 289 ((local_info_t*)link->priv)->eth_dev =
308 init_atmel_card(link->irq.AssignedIRQ, 290 init_atmel_card(link->irq,
309 link->io.BasePort1, 291 link->io.BasePort1,
310 did ? did->driver_info : ATMEL_FW_TYPE_NONE, 292 did ? did->driver_info : ATMEL_FW_TYPE_NONE,
311 &link->dev, 293 &link->dev,
diff --git a/drivers/net/wireless/b43/pcmcia.c b/drivers/net/wireless/b43/pcmcia.c
index 609e7051e018..0e99b634267c 100644
--- a/drivers/net/wireless/b43/pcmcia.c
+++ b/drivers/net/wireless/b43/pcmcia.c
@@ -98,10 +98,7 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
98 if (res != 0) 98 if (res != 0)
99 goto err_disable; 99 goto err_disable;
100 100
101 dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; 101 if (!dev->irq)
102 dev->irq.Handler = NULL; /* The handler is registered later. */
103 res = pcmcia_request_irq(dev, &dev->irq);
104 if (res != 0)
105 goto err_disable; 102 goto err_disable;
106 103
107 res = pcmcia_request_configuration(dev, &dev->conf); 104 res = pcmcia_request_configuration(dev, &dev->conf);
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
index a36501dbbe02..5e2efbb03675 100644
--- a/drivers/net/wireless/hostap/hostap_cs.c
+++ b/drivers/net/wireless/hostap/hostap_cs.c
@@ -556,15 +556,7 @@ static int prism2_config_check(struct pcmcia_device *p_dev,
556 p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM] / 10000; 556 p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM] / 10000;
557 557
558 /* Do we need to allocate an interrupt? */ 558 /* Do we need to allocate an interrupt? */
559 if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1) 559 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
560 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
561 else if (!(p_dev->conf.Attributes & CONF_ENABLE_IRQ)) {
562 /* At least Compaq WL200 does not have IRQInfo1 set,
563 * but it does not work without interrupts.. */
564 printk(KERN_WARNING "Config has no IRQ info, but trying to "
565 "enable IRQ anyway..\n");
566 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
567 }
568 560
569 /* IO window settings */ 561 /* IO window settings */
570 PDEBUG(DEBUG_EXTRA, "IO window settings: cfg->io.nwin=%d " 562 PDEBUG(DEBUG_EXTRA, "IO window settings: cfg->io.nwin=%d "
@@ -636,18 +628,9 @@ static int prism2_config(struct pcmcia_device *link)
636 strcpy(hw_priv->node.dev_name, dev->name); 628 strcpy(hw_priv->node.dev_name, dev->name);
637 link->dev_node = &hw_priv->node; 629 link->dev_node = &hw_priv->node;
638 630
639 /* 631 ret = pcmcia_request_irq(link, prism2_interrupt);
640 * Allocate an interrupt line. Note that this does not assign a 632 if (ret)
641 * handler to the interrupt, unless the 'Handler' member of the 633 goto failed;
642 * irq structure is initialized.
643 */
644 if (link->conf.Attributes & CONF_ENABLE_IRQ) {
645 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
646 link->irq.Handler = prism2_interrupt;
647 ret = pcmcia_request_irq(link, &link->irq);
648 if (ret)
649 goto failed;
650 }
651 634
652 /* 635 /*
653 * This actually configures the PCMCIA socket -- setting up 636 * This actually configures the PCMCIA socket -- setting up
@@ -658,7 +641,7 @@ static int prism2_config(struct pcmcia_device *link)
658 if (ret) 641 if (ret)
659 goto failed; 642 goto failed;
660 643
661 dev->irq = link->irq.AssignedIRQ; 644 dev->irq = link->irq;
662 dev->base_addr = link->io.BasePort1; 645 dev->base_addr = link->io.BasePort1;
663 646
664 /* Finally, report what we've done */ 647 /* Finally, report what we've done */
@@ -668,7 +651,7 @@ static int prism2_config(struct pcmcia_device *link)
668 printk(", Vpp %d.%d", link->conf.Vpp / 10, 651 printk(", Vpp %d.%d", link->conf.Vpp / 10,
669 link->conf.Vpp % 10); 652 link->conf.Vpp % 10);
670 if (link->conf.Attributes & CONF_ENABLE_IRQ) 653 if (link->conf.Attributes & CONF_ENABLE_IRQ)
671 printk(", irq %d", link->irq.AssignedIRQ); 654 printk(", irq %d", link->irq);
672 if (link->io.NumPorts1) 655 if (link->io.NumPorts1)
673 printk(", io 0x%04x-0x%04x", link->io.BasePort1, 656 printk(", io 0x%04x-0x%04x", link->io.BasePort1,
674 link->io.BasePort1+link->io.NumPorts1-1); 657 link->io.BasePort1+link->io.NumPorts1-1);
diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
index 6d55439a7b97..08e4e3908003 100644
--- a/drivers/net/wireless/libertas/if_cs.c
+++ b/drivers/net/wireless/libertas/if_cs.c
@@ -777,7 +777,7 @@ static void if_cs_release(struct pcmcia_device *p_dev)
777 777
778 lbs_deb_enter(LBS_DEB_CS); 778 lbs_deb_enter(LBS_DEB_CS);
779 779
780 free_irq(p_dev->irq.AssignedIRQ, card); 780 free_irq(p_dev->irq, card);
781 pcmcia_disable_device(p_dev); 781 pcmcia_disable_device(p_dev);
782 if (card->iobase) 782 if (card->iobase)
783 ioport_unmap(card->iobase); 783 ioport_unmap(card->iobase);
@@ -807,8 +807,7 @@ static int if_cs_ioprobe(struct pcmcia_device *p_dev,
807 p_dev->io.NumPorts1 = cfg->io.win[0].len; 807 p_dev->io.NumPorts1 = cfg->io.win[0].len;
808 808
809 /* Do we need to allocate an interrupt? */ 809 /* Do we need to allocate an interrupt? */
810 if (cfg->irq.IRQInfo1) 810 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
811 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
812 811
813 /* IO window settings */ 812 /* IO window settings */
814 if (cfg->io.nwin != 1) { 813 if (cfg->io.nwin != 1) {
@@ -837,9 +836,6 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
837 card->p_dev = p_dev; 836 card->p_dev = p_dev;
838 p_dev->priv = card; 837 p_dev->priv = card;
839 838
840 p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
841 p_dev->irq.Handler = NULL;
842
843 p_dev->conf.Attributes = 0; 839 p_dev->conf.Attributes = 0;
844 p_dev->conf.IntType = INT_MEMORY_AND_IO; 840 p_dev->conf.IntType = INT_MEMORY_AND_IO;
845 841
@@ -854,13 +850,8 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
854 * a handler to the interrupt, unless the 'Handler' member of 850 * a handler to the interrupt, unless the 'Handler' member of
855 * the irq structure is initialized. 851 * the irq structure is initialized.
856 */ 852 */
857 if (p_dev->conf.Attributes & CONF_ENABLE_IRQ) { 853 if (!p_dev->irq)
858 ret = pcmcia_request_irq(p_dev, &p_dev->irq); 854 goto out1;
859 if (ret) {
860 lbs_pr_err("error in pcmcia_request_irq\n");
861 goto out1;
862 }
863 }
864 855
865 /* Initialize io access */ 856 /* Initialize io access */
866 card->iobase = ioport_map(p_dev->io.BasePort1, p_dev->io.NumPorts1); 857 card->iobase = ioport_map(p_dev->io.BasePort1, p_dev->io.NumPorts1);
@@ -883,7 +874,7 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
883 874
884 /* Finally, report what we've done */ 875 /* Finally, report what we've done */
885 lbs_deb_cs("irq %d, io 0x%04x-0x%04x\n", 876 lbs_deb_cs("irq %d, io 0x%04x-0x%04x\n",
886 p_dev->irq.AssignedIRQ, p_dev->io.BasePort1, 877 p_dev->irq, p_dev->io.BasePort1,
887 p_dev->io.BasePort1 + p_dev->io.NumPorts1 - 1); 878 p_dev->io.BasePort1 + p_dev->io.NumPorts1 - 1);
888 879
889 /* 880 /*
@@ -940,7 +931,7 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
940 priv->fw_ready = 1; 931 priv->fw_ready = 1;
941 932
942 /* Now actually get the IRQ */ 933 /* Now actually get the IRQ */
943 ret = request_irq(p_dev->irq.AssignedIRQ, if_cs_interrupt, 934 ret = request_irq(p_dev->irq, if_cs_interrupt,
944 IRQF_SHARED, DRV_NAME, card); 935 IRQF_SHARED, DRV_NAME, card);
945 if (ret) { 936 if (ret) {
946 lbs_pr_err("error in request_irq\n"); 937 lbs_pr_err("error in request_irq\n");
diff --git a/drivers/net/wireless/orinoco/orinoco_cs.c b/drivers/net/wireless/orinoco/orinoco_cs.c
index 1d4ada188eda..5d29b11fdbc0 100644
--- a/drivers/net/wireless/orinoco/orinoco_cs.c
+++ b/drivers/net/wireless/orinoco/orinoco_cs.c
@@ -119,10 +119,6 @@ orinoco_cs_probe(struct pcmcia_device *link)
119 card->p_dev = link; 119 card->p_dev = link;
120 link->priv = priv; 120 link->priv = priv;
121 121
122 /* Interrupt setup */
123 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
124 link->irq.Handler = orinoco_interrupt;
125
126 /* General socket configuration defaults can go here. In this 122 /* General socket configuration defaults can go here. In this
127 * client, we assume very little, and rely on the CIS for 123 * client, we assume very little, and rely on the CIS for
128 * almost everything. In most clients, many details (i.e., 124 * almost everything. In most clients, many details (i.e.,
@@ -258,12 +254,7 @@ orinoco_cs_config(struct pcmcia_device *link)
258 goto failed; 254 goto failed;
259 } 255 }
260 256
261 /* 257 ret = pcmcia_request_irq(link, orinoco_interrupt);
262 * Allocate an interrupt line. Note that this does not assign
263 * a handler to the interrupt, unless the 'Handler' member of
264 * the irq structure is initialized.
265 */
266 ret = pcmcia_request_irq(link, &link->irq);
267 if (ret) 258 if (ret)
268 goto failed; 259 goto failed;
269 260
@@ -296,7 +287,7 @@ orinoco_cs_config(struct pcmcia_device *link)
296 287
297 /* Register an interface with the stack */ 288 /* Register an interface with the stack */
298 if (orinoco_if_add(priv, link->io.BasePort1, 289 if (orinoco_if_add(priv, link->io.BasePort1,
299 link->irq.AssignedIRQ) != 0) { 290 link->irq) != 0) {
300 printk(KERN_ERR PFX "orinoco_if_add() failed\n"); 291 printk(KERN_ERR PFX "orinoco_if_add() failed\n");
301 goto failed; 292 goto failed;
302 } 293 }
diff --git a/drivers/net/wireless/orinoco/spectrum_cs.c b/drivers/net/wireless/orinoco/spectrum_cs.c
index 59bda240fdc2..7a8e056cd62d 100644
--- a/drivers/net/wireless/orinoco/spectrum_cs.c
+++ b/drivers/net/wireless/orinoco/spectrum_cs.c
@@ -193,10 +193,6 @@ spectrum_cs_probe(struct pcmcia_device *link)
193 card->p_dev = link; 193 card->p_dev = link;
194 link->priv = priv; 194 link->priv = priv;
195 195
196 /* Interrupt setup */
197 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
198 link->irq.Handler = orinoco_interrupt;
199
200 /* General socket configuration defaults can go here. In this 196 /* General socket configuration defaults can go here. In this
201 * client, we assume very little, and rely on the CIS for 197 * client, we assume very little, and rely on the CIS for
202 * almost everything. In most clients, many details (i.e., 198 * almost everything. In most clients, many details (i.e.,
@@ -332,12 +328,7 @@ spectrum_cs_config(struct pcmcia_device *link)
332 goto failed; 328 goto failed;
333 } 329 }
334 330
335 /* 331 ret = pcmcia_request_irq(link, orinoco_interrupt);
336 * Allocate an interrupt line. Note that this does not assign
337 * a handler to the interrupt, unless the 'Handler' member of
338 * the irq structure is initialized.
339 */
340 ret = pcmcia_request_irq(link, &link->irq);
341 if (ret) 332 if (ret)
342 goto failed; 333 goto failed;
343 334
@@ -374,7 +365,7 @@ spectrum_cs_config(struct pcmcia_device *link)
374 365
375 /* Register an interface with the stack */ 366 /* Register an interface with the stack */
376 if (orinoco_if_add(priv, link->io.BasePort1, 367 if (orinoco_if_add(priv, link->io.BasePort1,
377 link->irq.AssignedIRQ) != 0) { 368 link->irq) != 0) {
378 printk(KERN_ERR PFX "orinoco_if_add() failed\n"); 369 printk(KERN_ERR PFX "orinoco_if_add() failed\n");
379 goto failed; 370 goto failed;
380 } 371 }
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
index 11865ea21875..fe4642a49bfb 100644
--- a/drivers/net/wireless/ray_cs.c
+++ b/drivers/net/wireless/ray_cs.c
@@ -321,10 +321,6 @@ static int ray_probe(struct pcmcia_device *p_dev)
321 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 321 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
322 p_dev->io.IOAddrLines = 5; 322 p_dev->io.IOAddrLines = 5;
323 323
324 /* Interrupt setup. For PCMCIA, driver takes what's given */
325 p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
326 p_dev->irq.Handler = &ray_interrupt;
327
328 /* General socket configuration */ 324 /* General socket configuration */
329 p_dev->conf.Attributes = CONF_ENABLE_IRQ; 325 p_dev->conf.Attributes = CONF_ENABLE_IRQ;
330 p_dev->conf.IntType = INT_MEMORY_AND_IO; 326 p_dev->conf.IntType = INT_MEMORY_AND_IO;
@@ -417,10 +413,10 @@ static int ray_config(struct pcmcia_device *link)
417 /* Now allocate an interrupt line. Note that this does not 413 /* Now allocate an interrupt line. Note that this does not
418 actually assign a handler to the interrupt. 414 actually assign a handler to the interrupt.
419 */ 415 */
420 ret = pcmcia_request_irq(link, &link->irq); 416 ret = pcmcia_request_irq(link, ray_interrupt);
421 if (ret) 417 if (ret)
422 goto failed; 418 goto failed;
423 dev->irq = link->irq.AssignedIRQ; 419 dev->irq = link->irq;
424 420
425 /* This actually configures the PCMCIA socket -- setting up 421 /* This actually configures the PCMCIA socket -- setting up
426 the I/O windows and the interrupt mapping. 422 the I/O windows and the interrupt mapping.
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
index 7b9621de239f..c43f05b98c4e 100644
--- a/drivers/net/wireless/wl3501_cs.c
+++ b/drivers/net/wireless/wl3501_cs.c
@@ -1897,10 +1897,6 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
1897 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 1897 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
1898 p_dev->io.IOAddrLines = 5; 1898 p_dev->io.IOAddrLines = 5;
1899 1899
1900 /* Interrupt setup */
1901 p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
1902 p_dev->irq.Handler = wl3501_interrupt;
1903
1904 /* General socket configuration */ 1900 /* General socket configuration */
1905 p_dev->conf.Attributes = CONF_ENABLE_IRQ; 1901 p_dev->conf.Attributes = CONF_ENABLE_IRQ;
1906 p_dev->conf.IntType = INT_MEMORY_AND_IO; 1902 p_dev->conf.IntType = INT_MEMORY_AND_IO;
@@ -1961,7 +1957,7 @@ static int wl3501_config(struct pcmcia_device *link)
1961 /* Now allocate an interrupt line. Note that this does not actually 1957 /* Now allocate an interrupt line. Note that this does not actually
1962 * assign a handler to the interrupt. */ 1958 * assign a handler to the interrupt. */
1963 1959
1964 ret = pcmcia_request_irq(link, &link->irq); 1960 ret = pcmcia_request_irq(link, wl3501_interrupt);
1965 if (ret) 1961 if (ret)
1966 goto failed; 1962 goto failed;
1967 1963
@@ -1972,7 +1968,7 @@ static int wl3501_config(struct pcmcia_device *link)
1972 if (ret) 1968 if (ret)
1973 goto failed; 1969 goto failed;
1974 1970
1975 dev->irq = link->irq.AssignedIRQ; 1971 dev->irq = link->irq;
1976 dev->base_addr = link->io.BasePort1; 1972 dev->base_addr = link->io.BasePort1;
1977 SET_NETDEV_DEV(dev, &link->dev); 1973 SET_NETDEV_DEV(dev, &link->dev);
1978 if (register_netdev(dev)) { 1974 if (register_netdev(dev)) {