aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2006-10-25 21:28:53 -0400
committerDominik Brodowski <linux@dominikbrodowski.net>2006-12-04 20:09:20 -0500
commitefd50585e2ff9bd60e044fda7764d323010a7fe4 (patch)
treef43f8f10a3cfe6ceb1b5cede6581f79134ca0e63 /drivers
parent44e5e33e99e1b955ac6f0bb26abd9380629b48a9 (diff)
[PATCH] pcmcia: remove manf_id and card_id indirection
As we read out the manufactor and card_id from the PCMCIA device in the PCMCIA core, and device drivers can access those reliably in struct pcmcia_device's fields manf_id and card_id, remove additional (and partly broken) manf_id and card_id detection logic from PCMCIA device drivers. Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ata/pata_pcmcia.c6
-rw-r--r--drivers/ide/legacy/ide-cs.c10
-rw-r--r--drivers/net/pcmcia/3c589_cs.c12
-rw-r--r--drivers/net/pcmcia/fmvj18x_cs.c26
-rw-r--r--drivers/net/pcmcia/pcnet_cs.c22
-rw-r--r--drivers/net/pcmcia/smc91c92_cs.c8
-rw-r--r--drivers/net/wireless/hostap/hostap_cs.c7
-rw-r--r--drivers/scsi/pcmcia/qlogic_stub.c4
-rw-r--r--drivers/scsi/pcmcia/sym53c500_cs.c5
-rw-r--r--drivers/serial/serial_cs.c30
10 files changed, 45 insertions, 85 deletions
diff --git a/drivers/ata/pata_pcmcia.c b/drivers/ata/pata_pcmcia.c
index 3ce33bfdcccc..da7c218c9cce 100644
--- a/drivers/ata/pata_pcmcia.c
+++ b/drivers/ata/pata_pcmcia.c
@@ -164,9 +164,9 @@ static int pcmcia_init_one(struct pcmcia_device *pdev)
164 164
165 /* See if we have a manufacturer identifier. Use it to set is_kme for 165 /* See if we have a manufacturer identifier. Use it to set is_kme for
166 vendor quirks */ 166 vendor quirks */
167 tuple.DesiredTuple = CISTPL_MANFID; 167 is_kme = ((pdev->manf_id == MANFID_KME) &&
168 if (!pcmcia_get_first_tuple(pdev, &tuple) && !pcmcia_get_tuple_data(pdev, &tuple) && !pcmcia_parse_tuple(pdev, &tuple, &stk->parse)) 168 ((pdev->card_id == PRODID_KME_KXLC005_A) ||
169 is_kme = ((stk->parse.manfid.manf == MANFID_KME) && ((stk->parse.manfid.card == PRODID_KME_KXLC005_A) || (stk->parse.manfid.card == PRODID_KME_KXLC005_B))); 169 (pdev->card_id == PRODID_KME_KXLC005_B)));
170 170
171 /* Not sure if this is right... look up the current Vcc */ 171 /* Not sure if this is right... look up the current Vcc */
172 CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(pdev, &stk->conf)); 172 CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(pdev, &stk->conf));
diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c
index 7e8d778dcb88..1b996e62a404 100644
--- a/drivers/ide/legacy/ide-cs.c
+++ b/drivers/ide/legacy/ide-cs.c
@@ -199,13 +199,9 @@ static int ide_config(struct pcmcia_device *link)
199 link->conf.ConfigBase = stk->parse.config.base; 199 link->conf.ConfigBase = stk->parse.config.base;
200 link->conf.Present = stk->parse.config.rmask[0]; 200 link->conf.Present = stk->parse.config.rmask[0];
201 201
202 tuple.DesiredTuple = CISTPL_MANFID; 202 is_kme = ((link->manf_id == MANFID_KME) &&
203 if (!pcmcia_get_first_tuple(link, &tuple) && 203 ((link->card_id == PRODID_KME_KXLC005_A) ||
204 !pcmcia_get_tuple_data(link, &tuple) && 204 (link->card_id == PRODID_KME_KXLC005_B)));
205 !pcmcia_parse_tuple(link, &tuple, &stk->parse))
206 is_kme = ((stk->parse.manfid.manf == MANFID_KME) &&
207 ((stk->parse.manfid.card == PRODID_KME_KXLC005_A) ||
208 (stk->parse.manfid.card == PRODID_KME_KXLC005_B)));
209 205
210 /* Not sure if this is right... look up the current Vcc */ 206 /* Not sure if this is right... look up the current Vcc */
211 CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &stk->conf)); 207 CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &stk->conf));
diff --git a/drivers/net/pcmcia/3c589_cs.c b/drivers/net/pcmcia/3c589_cs.c
index 231fa2c9ec6c..eb5783294489 100644
--- a/drivers/net/pcmcia/3c589_cs.c
+++ b/drivers/net/pcmcia/3c589_cs.c
@@ -272,17 +272,13 @@ static int tc589_config(struct pcmcia_device *link)
272 CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); 272 CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
273 link->conf.ConfigBase = parse.config.base; 273 link->conf.ConfigBase = parse.config.base;
274 link->conf.Present = parse.config.rmask[0]; 274 link->conf.Present = parse.config.rmask[0];
275
276 /* Is this a 3c562? */
277 tuple.DesiredTuple = CISTPL_MANFID;
278 tuple.Attributes = TUPLE_RETURN_COMMON; 275 tuple.Attributes = TUPLE_RETURN_COMMON;
279 if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) && 276
280 (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) { 277 /* Is this a 3c562? */
281 if (le16_to_cpu(buf[0]) != MANFID_3COM) 278 if (link->manf_id != MANFID_3COM)
282 printk(KERN_INFO "3c589_cs: hmmm, is this really a " 279 printk(KERN_INFO "3c589_cs: hmmm, is this really a "
283 "3Com card??\n"); 280 "3Com card??\n");
284 multi = (le16_to_cpu(buf[1]) == PRODID_3COM_3C562); 281 multi = (link->card_id == PRODID_3COM_3C562);
285 }
286 282
287 /* For the 3c562, the base address must be xx00-xx7f */ 283 /* For the 3c562, the base address must be xx00-xx7f */
288 link->io.IOAddrLines = 16; 284 link->io.IOAddrLines = 16;
diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c
index 65f6fdf43725..e3731fd15606 100644
--- a/drivers/net/pcmcia/fmvj18x_cs.c
+++ b/drivers/net/pcmcia/fmvj18x_cs.c
@@ -374,17 +374,12 @@ static int fmvj18x_config(struct pcmcia_device *link)
374 CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 374 CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
375 CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); 375 CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
376 link->conf.ConfigIndex = parse.cftable_entry.index; 376 link->conf.ConfigIndex = parse.cftable_entry.index;
377 tuple.DesiredTuple = CISTPL_MANFID; 377 switch (link->manf_id) {
378 if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS)
379 CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
380 else
381 buf[0] = 0xffff;
382 switch (le16_to_cpu(buf[0])) {
383 case MANFID_TDK: 378 case MANFID_TDK:
384 cardtype = TDK; 379 cardtype = TDK;
385 if (le16_to_cpu(buf[1]) == PRODID_TDK_GN3410 380 if (link->card_id == PRODID_TDK_GN3410
386 || le16_to_cpu(buf[1]) == PRODID_TDK_NP9610 381 || link->card_id == PRODID_TDK_NP9610
387 || le16_to_cpu(buf[1]) == PRODID_TDK_MN3200) { 382 || link->card_id == PRODID_TDK_MN3200) {
388 /* MultiFunction Card */ 383 /* MultiFunction Card */
389 link->conf.ConfigBase = 0x800; 384 link->conf.ConfigBase = 0x800;
390 link->conf.ConfigIndex = 0x47; 385 link->conf.ConfigIndex = 0x47;
@@ -395,11 +390,11 @@ static int fmvj18x_config(struct pcmcia_device *link)
395 cardtype = CONTEC; 390 cardtype = CONTEC;
396 break; 391 break;
397 case MANFID_FUJITSU: 392 case MANFID_FUJITSU:
398 if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10302) 393 if (link->card_id == PRODID_FUJITSU_MBH10302)
399 /* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302), 394 /* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302),
400 but these are MBH10304 based card. */ 395 but these are MBH10304 based card. */
401 cardtype = MBH10304; 396 cardtype = MBH10304;
402 else if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10304) 397 else if (link->card_id == PRODID_FUJITSU_MBH10304)
403 cardtype = MBH10304; 398 cardtype = MBH10304;
404 else 399 else
405 cardtype = LA501; 400 cardtype = LA501;
@@ -409,14 +404,9 @@ static int fmvj18x_config(struct pcmcia_device *link)
409 } 404 }
410 } else { 405 } else {
411 /* old type card */ 406 /* old type card */
412 tuple.DesiredTuple = CISTPL_MANFID; 407 switch (link->manf_id) {
413 if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS)
414 CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
415 else
416 buf[0] = 0xffff;
417 switch (le16_to_cpu(buf[0])) {
418 case MANFID_FUJITSU: 408 case MANFID_FUJITSU:
419 if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10304) { 409 if (link->card_id == PRODID_FUJITSU_MBH10304) {
420 cardtype = XXX10304; /* MBH10304 with buggy CIS */ 410 cardtype = XXX10304; /* MBH10304 with buggy CIS */
421 link->conf.ConfigIndex = 0x20; 411 link->conf.ConfigIndex = 0x20;
422 } else { 412 } else {
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c
index c51cc5d8789a..430a41e7b686 100644
--- a/drivers/net/pcmcia/pcnet_cs.c
+++ b/drivers/net/pcmcia/pcnet_cs.c
@@ -519,7 +519,7 @@ static int pcnet_config(struct pcmcia_device *link)
519 tuple_t tuple; 519 tuple_t tuple;
520 cisparse_t parse; 520 cisparse_t parse;
521 int i, last_ret, last_fn, start_pg, stop_pg, cm_offset; 521 int i, last_ret, last_fn, start_pg, stop_pg, cm_offset;
522 int manfid = 0, prodid = 0, has_shmem = 0; 522 int has_shmem = 0;
523 u_short buf[64]; 523 u_short buf[64];
524 hw_info_t *hw_info; 524 hw_info_t *hw_info;
525 525
@@ -536,14 +536,6 @@ static int pcnet_config(struct pcmcia_device *link)
536 link->conf.ConfigBase = parse.config.base; 536 link->conf.ConfigBase = parse.config.base;
537 link->conf.Present = parse.config.rmask[0]; 537 link->conf.Present = parse.config.rmask[0];
538 538
539 tuple.DesiredTuple = CISTPL_MANFID;
540 tuple.Attributes = TUPLE_RETURN_COMMON;
541 if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) &&
542 (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) {
543 manfid = le16_to_cpu(buf[0]);
544 prodid = le16_to_cpu(buf[1]);
545 }
546
547 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 539 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
548 tuple.Attributes = 0; 540 tuple.Attributes = 0;
549 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 541 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
@@ -589,8 +581,8 @@ static int pcnet_config(struct pcmcia_device *link)
589 link->conf.Attributes |= CONF_ENABLE_SPKR; 581 link->conf.Attributes |= CONF_ENABLE_SPKR;
590 link->conf.Status = CCSR_AUDIO_ENA; 582 link->conf.Status = CCSR_AUDIO_ENA;
591 } 583 }
592 if ((manfid == MANFID_IBM) && 584 if ((link->manf_id == MANFID_IBM) &&
593 (prodid == PRODID_IBM_HOME_AND_AWAY)) 585 (link->card_id == PRODID_IBM_HOME_AND_AWAY))
594 link->conf.ConfigIndex |= 0x10; 586 link->conf.ConfigIndex |= 0x10;
595 587
596 CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); 588 CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
@@ -624,10 +616,10 @@ static int pcnet_config(struct pcmcia_device *link)
624 info->flags = hw_info->flags; 616 info->flags = hw_info->flags;
625 /* Check for user overrides */ 617 /* Check for user overrides */
626 info->flags |= (delay_output) ? DELAY_OUTPUT : 0; 618 info->flags |= (delay_output) ? DELAY_OUTPUT : 0;
627 if ((manfid == MANFID_SOCKET) && 619 if ((link->manf_id == MANFID_SOCKET) &&
628 ((prodid == PRODID_SOCKET_LPE) || 620 ((link->card_id == PRODID_SOCKET_LPE) ||
629 (prodid == PRODID_SOCKET_LPE_CF) || 621 (link->card_id == PRODID_SOCKET_LPE_CF) ||
630 (prodid == PRODID_SOCKET_EIO))) 622 (link->card_id == PRODID_SOCKET_EIO)))
631 info->flags &= ~USE_BIG_BUF; 623 info->flags &= ~USE_BIG_BUF;
632 if (!use_big_buf) 624 if (!use_big_buf)
633 info->flags &= ~USE_BIG_BUF; 625 info->flags &= ~USE_BIG_BUF;
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c
index 20fcc3576202..ae024bfc1ae4 100644
--- a/drivers/net/pcmcia/smc91c92_cs.c
+++ b/drivers/net/pcmcia/smc91c92_cs.c
@@ -999,12 +999,8 @@ static int smc91c92_config(struct pcmcia_device *link)
999 link->conf.ConfigBase = parse->config.base; 999 link->conf.ConfigBase = parse->config.base;
1000 link->conf.Present = parse->config.rmask[0]; 1000 link->conf.Present = parse->config.rmask[0];
1001 1001
1002 tuple->DesiredTuple = CISTPL_MANFID; 1002 smc->manfid = link->manf_id;
1003 tuple->Attributes = TUPLE_RETURN_COMMON; 1003 smc->cardid = link->card_id;
1004 if (first_tuple(link, tuple, parse) == CS_SUCCESS) {
1005 smc->manfid = parse->manfid.manf;
1006 smc->cardid = parse->manfid.card;
1007 }
1008 1004
1009 if ((smc->manfid == MANFID_OSITECH) && 1005 if ((smc->manfid == MANFID_OSITECH) &&
1010 (smc->cardid != PRODID_OSITECH_SEVEN)) { 1006 (smc->cardid != PRODID_OSITECH_SEVEN)) {
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
index f63909e4bc32..8a7984bc8afc 100644
--- a/drivers/net/wireless/hostap/hostap_cs.c
+++ b/drivers/net/wireless/hostap/hostap_cs.c
@@ -293,15 +293,12 @@ static int sandisk_enable_wireless(struct net_device *dev)
293 goto done; 293 goto done;
294 } 294 }
295 295
296 tuple.DesiredTuple = CISTPL_MANFID;
297 tuple.Attributes = TUPLE_RETURN_COMMON; 296 tuple.Attributes = TUPLE_RETURN_COMMON;
298 tuple.TupleData = buf; 297 tuple.TupleData = buf;
299 tuple.TupleDataMax = sizeof(buf); 298 tuple.TupleDataMax = sizeof(buf);
300 tuple.TupleOffset = 0; 299 tuple.TupleOffset = 0;
301 if (pcmcia_get_first_tuple(hw_priv->link, &tuple) || 300
302 pcmcia_get_tuple_data(hw_priv->link, &tuple) || 301 if (hw_priv->link->manf_id != 0xd601 || hw_priv->link->card_id != 0x0101) {
303 pcmcia_parse_tuple(hw_priv->link, &tuple, parse) ||
304 parse->manfid.manf != 0xd601 || parse->manfid.card != 0x0101) {
305 /* No SanDisk manfid found */ 302 /* No SanDisk manfid found */
306 ret = -ENODEV; 303 ret = -ENODEV;
307 goto done; 304 goto done;
diff --git a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c
index 86c2ac6ae623..336e370f7f65 100644
--- a/drivers/scsi/pcmcia/qlogic_stub.c
+++ b/drivers/scsi/pcmcia/qlogic_stub.c
@@ -217,9 +217,7 @@ static int qlogic_config(struct pcmcia_device * link)
217 CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); 217 CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
218 link->conf.ConfigBase = parse.config.base; 218 link->conf.ConfigBase = parse.config.base;
219 219
220 tuple.DesiredTuple = CISTPL_MANFID; 220 info->manf_id = link->manf_id;
221 if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) && (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS))
222 info->manf_id = le16_to_cpu(tuple.TupleData[0]);
223 221
224 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 222 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
225 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 223 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c
index 72fe5d055de1..80c28b9fb70a 100644
--- a/drivers/scsi/pcmcia/sym53c500_cs.c
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c
@@ -731,10 +731,7 @@ SYM53C500_config(struct pcmcia_device *link)
731 CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); 731 CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
732 link->conf.ConfigBase = parse.config.base; 732 link->conf.ConfigBase = parse.config.base;
733 733
734 tuple.DesiredTuple = CISTPL_MANFID; 734 info->manf_id = link->manf_id;
735 if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) &&
736 (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS))
737 info->manf_id = le16_to_cpu(tuple.TupleData[0]);
738 735
739 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 736 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
740 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 737 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c
index 783b0c5f8870..7aa2820e35bd 100644
--- a/drivers/serial/serial_cs.c
+++ b/drivers/serial/serial_cs.c
@@ -757,27 +757,25 @@ static int serial_config(struct pcmcia_device * link)
757 757
758 /* Is this a multiport card? */ 758 /* Is this a multiport card? */
759 tuple->DesiredTuple = CISTPL_MANFID; 759 tuple->DesiredTuple = CISTPL_MANFID;
760 if (first_tuple(link, tuple, parse) == CS_SUCCESS) { 760 info->manfid = link->manf_id;
761 info->manfid = parse->manfid.manf; 761 info->prodid = link->card_id;
762 info->prodid = parse->manfid.card; 762
763 763 for (i = 0; i < ARRAY_SIZE(quirks); i++)
764 for (i = 0; i < ARRAY_SIZE(quirks); i++) 764 if ((quirks[i].manfid == ~0 ||
765 if ((quirks[i].manfid == ~0 || 765 quirks[i].manfid == info->manfid) &&
766 quirks[i].manfid == info->manfid) && 766 (quirks[i].prodid == ~0 ||
767 (quirks[i].prodid == ~0 || 767 quirks[i].prodid == info->prodid)) {
768 quirks[i].prodid == info->prodid)) { 768 info->quirk = &quirks[i];
769 info->quirk = &quirks[i]; 769 break;
770 break; 770 }
771 }
772 }
773 771
774 /* Another check for dual-serial cards: look for either serial or 772 /* Another check for dual-serial cards: look for either serial or
775 multifunction cards that ask for appropriate IO port ranges */ 773 multifunction cards that ask for appropriate IO port ranges */
776 tuple->DesiredTuple = CISTPL_FUNCID; 774 tuple->DesiredTuple = CISTPL_FUNCID;
777 if ((info->multi == 0) && 775 if ((info->multi == 0) &&
778 ((first_tuple(link, tuple, parse) != CS_SUCCESS) || 776 (link->has_func_id) &&
779 (parse->funcid.func == CISTPL_FUNCID_MULTI) || 777 ((link->func_id == CISTPL_FUNCID_MULTI) ||
780 (parse->funcid.func == CISTPL_FUNCID_SERIAL))) { 778 (link->func_id == CISTPL_FUNCID_SERIAL))) {
781 tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY; 779 tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY;
782 if (first_tuple(link, tuple, parse) == CS_SUCCESS) { 780 if (first_tuple(link, tuple, parse) == CS_SUCCESS) {
783 if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) 781 if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0))