aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/pcmcia
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/pcmcia
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/pcmcia')
-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
10 files changed, 25 insertions, 56 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)