diff options
| author | Dominik Brodowski <linux@dominikbrodowski.net> | 2006-10-25 21:49:27 -0400 |
|---|---|---|
| committer | Dominik Brodowski <linux@dominikbrodowski.net> | 2006-12-04 20:12:02 -0500 |
| commit | af2b3b503ad1b071b66e1531caae252b4b95c847 (patch) | |
| tree | 600785af3af4a79978f688fa35e19ab900db264b | |
| parent | a9606fd39083478bef313c0e3b77bc065e39e36e (diff) | |
[PATCH] pcmcia: conf.ConfigBase and conf.Present consolidation
struct pcmcia_device *p_dev->conf.ConfigBase and .Present are set in almost
all PCMICA driver right at the beginning, using the same calls but slightly
different implementations. Unfiy this in the PCMCIA core.
Includes a small bugfix ("drivers/net/pcmcia/xirc2ps_cs.c: remove unused
label") from and Signed-off-by Adrian Bunk <bunk@stusta.de>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
45 files changed, 47 insertions, 614 deletions
diff --git a/drivers/ata/pata_pcmcia.c b/drivers/ata/pata_pcmcia.c index da7c218c9cce..9ed7f58424a3 100644 --- a/drivers/ata/pata_pcmcia.c +++ b/drivers/ata/pata_pcmcia.c | |||
| @@ -154,13 +154,6 @@ static int pcmcia_init_one(struct pcmcia_device *pdev) | |||
| 154 | tuple.TupleOffset = 0; | 154 | tuple.TupleOffset = 0; |
| 155 | tuple.TupleDataMax = 255; | 155 | tuple.TupleDataMax = 255; |
| 156 | tuple.Attributes = 0; | 156 | tuple.Attributes = 0; |
| 157 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 158 | |||
| 159 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(pdev, &tuple)); | ||
| 160 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(pdev, &tuple)); | ||
| 161 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(pdev, &tuple, &stk->parse)); | ||
| 162 | pdev->conf.ConfigBase = stk->parse.config.base; | ||
| 163 | pdev->conf.Present = stk->parse.config.rmask[0]; | ||
| 164 | 157 | ||
| 165 | /* See if we have a manufacturer identifier. Use it to set is_kme for | 158 | /* See if we have a manufacturer identifier. Use it to set is_kme for |
| 166 | vendor quirks */ | 159 | vendor quirks */ |
diff --git a/drivers/bluetooth/bluecard_cs.c b/drivers/bluetooth/bluecard_cs.c index cbc07250b898..acfb6a430dcc 100644 --- a/drivers/bluetooth/bluecard_cs.c +++ b/drivers/bluetooth/bluecard_cs.c | |||
| @@ -892,43 +892,10 @@ static void bluecard_detach(struct pcmcia_device *link) | |||
| 892 | } | 892 | } |
| 893 | 893 | ||
| 894 | 894 | ||
| 895 | static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse) | ||
| 896 | { | ||
| 897 | int i; | ||
| 898 | |||
| 899 | i = pcmcia_get_first_tuple(handle, tuple); | ||
| 900 | if (i != CS_SUCCESS) | ||
| 901 | return CS_NO_MORE_ITEMS; | ||
| 902 | |||
| 903 | i = pcmcia_get_tuple_data(handle, tuple); | ||
| 904 | if (i != CS_SUCCESS) | ||
| 905 | return i; | ||
| 906 | |||
| 907 | return pcmcia_parse_tuple(handle, tuple, parse); | ||
| 908 | } | ||
| 909 | |||
| 910 | static int bluecard_config(struct pcmcia_device *link) | 895 | static int bluecard_config(struct pcmcia_device *link) |
| 911 | { | 896 | { |
| 912 | bluecard_info_t *info = link->priv; | 897 | bluecard_info_t *info = link->priv; |
| 913 | tuple_t tuple; | 898 | int i, n; |
| 914 | u_short buf[256]; | ||
| 915 | cisparse_t parse; | ||
| 916 | int i, n, last_ret, last_fn; | ||
| 917 | |||
| 918 | tuple.TupleData = (cisdata_t *)buf; | ||
| 919 | tuple.TupleOffset = 0; | ||
| 920 | tuple.TupleDataMax = 255; | ||
| 921 | tuple.Attributes = 0; | ||
| 922 | |||
| 923 | /* Get configuration register information */ | ||
| 924 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 925 | last_ret = first_tuple(link, &tuple, &parse); | ||
| 926 | if (last_ret != CS_SUCCESS) { | ||
| 927 | last_fn = ParseTuple; | ||
| 928 | goto cs_failed; | ||
| 929 | } | ||
| 930 | link->conf.ConfigBase = parse.config.base; | ||
| 931 | link->conf.Present = parse.config.rmask[0]; | ||
| 932 | 899 | ||
| 933 | link->conf.ConfigIndex = 0x20; | 900 | link->conf.ConfigIndex = 0x20; |
| 934 | link->io.NumPorts1 = 64; | 901 | link->io.NumPorts1 = 64; |
| @@ -966,9 +933,6 @@ static int bluecard_config(struct pcmcia_device *link) | |||
| 966 | 933 | ||
| 967 | return 0; | 934 | return 0; |
| 968 | 935 | ||
| 969 | cs_failed: | ||
| 970 | cs_error(link, last_fn, last_ret); | ||
| 971 | |||
| 972 | failed: | 936 | failed: |
| 973 | bluecard_release(link); | 937 | bluecard_release(link); |
| 974 | return -ENODEV; | 938 | return -ENODEV; |
diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c index 3a96a0babc6a..aae3abace586 100644 --- a/drivers/bluetooth/bt3c_cs.c +++ b/drivers/bluetooth/bt3c_cs.c | |||
| @@ -713,22 +713,7 @@ static int bt3c_config(struct pcmcia_device *link) | |||
| 713 | u_short buf[256]; | 713 | u_short buf[256]; |
| 714 | cisparse_t parse; | 714 | cisparse_t parse; |
| 715 | cistpl_cftable_entry_t *cf = &parse.cftable_entry; | 715 | cistpl_cftable_entry_t *cf = &parse.cftable_entry; |
| 716 | int i, j, try, last_ret, last_fn; | 716 | int i, j, try; |
| 717 | |||
| 718 | tuple.TupleData = (cisdata_t *)buf; | ||
| 719 | tuple.TupleOffset = 0; | ||
| 720 | tuple.TupleDataMax = 255; | ||
| 721 | tuple.Attributes = 0; | ||
| 722 | |||
| 723 | /* Get configuration register information */ | ||
| 724 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 725 | last_ret = first_tuple(link, &tuple, &parse); | ||
| 726 | if (last_ret != CS_SUCCESS) { | ||
| 727 | last_fn = ParseTuple; | ||
| 728 | goto cs_failed; | ||
| 729 | } | ||
| 730 | link->conf.ConfigBase = parse.config.base; | ||
| 731 | link->conf.Present = parse.config.rmask[0]; | ||
| 732 | 717 | ||
| 733 | /* First pass: look for a config entry that looks normal. */ | 718 | /* First pass: look for a config entry that looks normal. */ |
| 734 | tuple.TupleData = (cisdata_t *)buf; | 719 | tuple.TupleData = (cisdata_t *)buf; |
| @@ -802,9 +787,6 @@ found_port: | |||
| 802 | 787 | ||
| 803 | return 0; | 788 | return 0; |
| 804 | 789 | ||
| 805 | cs_failed: | ||
| 806 | cs_error(link, last_fn, last_ret); | ||
| 807 | |||
| 808 | failed: | 790 | failed: |
| 809 | bt3c_release(link); | 791 | bt3c_release(link); |
| 810 | return -ENODEV; | 792 | return -ENODEV; |
diff --git a/drivers/bluetooth/btuart_cs.c b/drivers/bluetooth/btuart_cs.c index 3b29086b7c3f..92648ef2f5d0 100644 --- a/drivers/bluetooth/btuart_cs.c +++ b/drivers/bluetooth/btuart_cs.c | |||
| @@ -644,22 +644,7 @@ static int btuart_config(struct pcmcia_device *link) | |||
| 644 | u_short buf[256]; | 644 | u_short buf[256]; |
| 645 | cisparse_t parse; | 645 | cisparse_t parse; |
| 646 | cistpl_cftable_entry_t *cf = &parse.cftable_entry; | 646 | cistpl_cftable_entry_t *cf = &parse.cftable_entry; |
| 647 | int i, j, try, last_ret, last_fn; | 647 | int i, j, try; |
| 648 | |||
| 649 | tuple.TupleData = (cisdata_t *)buf; | ||
| 650 | tuple.TupleOffset = 0; | ||
| 651 | tuple.TupleDataMax = 255; | ||
| 652 | tuple.Attributes = 0; | ||
| 653 | |||
| 654 | /* Get configuration register information */ | ||
| 655 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 656 | last_ret = first_tuple(link, &tuple, &parse); | ||
| 657 | if (last_ret != CS_SUCCESS) { | ||
| 658 | last_fn = ParseTuple; | ||
| 659 | goto cs_failed; | ||
| 660 | } | ||
| 661 | link->conf.ConfigBase = parse.config.base; | ||
| 662 | link->conf.Present = parse.config.rmask[0]; | ||
| 663 | 648 | ||
| 664 | /* First pass: look for a config entry that looks normal. */ | 649 | /* First pass: look for a config entry that looks normal. */ |
| 665 | tuple.TupleData = (cisdata_t *) buf; | 650 | tuple.TupleData = (cisdata_t *) buf; |
| @@ -734,9 +719,6 @@ found_port: | |||
| 734 | 719 | ||
| 735 | return 0; | 720 | return 0; |
| 736 | 721 | ||
| 737 | cs_failed: | ||
| 738 | cs_error(link, last_fn, last_ret); | ||
| 739 | |||
| 740 | failed: | 722 | failed: |
| 741 | btuart_release(link); | 723 | btuart_release(link); |
| 742 | return -ENODEV; | 724 | return -ENODEV; |
diff --git a/drivers/bluetooth/dtl1_cs.c b/drivers/bluetooth/dtl1_cs.c index 07eafbc5dc3a..77b99eecbc49 100644 --- a/drivers/bluetooth/dtl1_cs.c +++ b/drivers/bluetooth/dtl1_cs.c | |||
| @@ -626,22 +626,7 @@ static int dtl1_config(struct pcmcia_device *link) | |||
| 626 | u_short buf[256]; | 626 | u_short buf[256]; |
| 627 | cisparse_t parse; | 627 | cisparse_t parse; |
| 628 | cistpl_cftable_entry_t *cf = &parse.cftable_entry; | 628 | cistpl_cftable_entry_t *cf = &parse.cftable_entry; |
| 629 | int i, last_ret, last_fn; | 629 | int i; |
| 630 | |||
| 631 | tuple.TupleData = (cisdata_t *)buf; | ||
| 632 | tuple.TupleOffset = 0; | ||
| 633 | tuple.TupleDataMax = 255; | ||
| 634 | tuple.Attributes = 0; | ||
| 635 | |||
| 636 | /* Get configuration register information */ | ||
| 637 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 638 | last_ret = first_tuple(link, &tuple, &parse); | ||
| 639 | if (last_ret != CS_SUCCESS) { | ||
| 640 | last_fn = ParseTuple; | ||
| 641 | goto cs_failed; | ||
| 642 | } | ||
| 643 | link->conf.ConfigBase = parse.config.base; | ||
| 644 | link->conf.Present = parse.config.rmask[0]; | ||
| 645 | 630 | ||
| 646 | tuple.TupleData = (cisdata_t *)buf; | 631 | tuple.TupleData = (cisdata_t *)buf; |
| 647 | tuple.TupleOffset = 0; | 632 | tuple.TupleOffset = 0; |
| @@ -690,9 +675,6 @@ static int dtl1_config(struct pcmcia_device *link) | |||
| 690 | 675 | ||
| 691 | return 0; | 676 | return 0; |
| 692 | 677 | ||
| 693 | cs_failed: | ||
| 694 | cs_error(link, last_fn, last_ret); | ||
| 695 | |||
| 696 | failed: | 678 | failed: |
| 697 | dtl1_release(link); | 679 | dtl1_release(link); |
| 698 | return -ENODEV; | 680 | return -ENODEV; |
diff --git a/drivers/char/pcmcia/cm4000_cs.c b/drivers/char/pcmcia/cm4000_cs.c index d9fdef227910..211c93fda6fc 100644 --- a/drivers/char/pcmcia/cm4000_cs.c +++ b/drivers/char/pcmcia/cm4000_cs.c | |||
| @@ -1764,29 +1764,11 @@ static int cm4000_config(struct pcmcia_device * link, int devno) | |||
| 1764 | int rc; | 1764 | int rc; |
| 1765 | 1765 | ||
| 1766 | /* read the config-tuples */ | 1766 | /* read the config-tuples */ |
| 1767 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 1768 | tuple.Attributes = 0; | 1767 | tuple.Attributes = 0; |
| 1769 | tuple.TupleData = buf; | 1768 | tuple.TupleData = buf; |
| 1770 | tuple.TupleDataMax = sizeof(buf); | 1769 | tuple.TupleDataMax = sizeof(buf); |
| 1771 | tuple.TupleOffset = 0; | 1770 | tuple.TupleOffset = 0; |
| 1772 | 1771 | ||
| 1773 | if ((fail_rc = pcmcia_get_first_tuple(link, &tuple)) != CS_SUCCESS) { | ||
| 1774 | fail_fn = GetFirstTuple; | ||
| 1775 | goto cs_failed; | ||
| 1776 | } | ||
| 1777 | if ((fail_rc = pcmcia_get_tuple_data(link, &tuple)) != CS_SUCCESS) { | ||
| 1778 | fail_fn = GetTupleData; | ||
| 1779 | goto cs_failed; | ||
| 1780 | } | ||
| 1781 | if ((fail_rc = | ||
| 1782 | pcmcia_parse_tuple(link, &tuple, &parse)) != CS_SUCCESS) { | ||
| 1783 | fail_fn = ParseTuple; | ||
| 1784 | goto cs_failed; | ||
| 1785 | } | ||
| 1786 | |||
| 1787 | link->conf.ConfigBase = parse.config.base; | ||
| 1788 | link->conf.Present = parse.config.rmask[0]; | ||
| 1789 | |||
| 1790 | link->io.BasePort2 = 0; | 1772 | link->io.BasePort2 = 0; |
| 1791 | link->io.NumPorts2 = 0; | 1773 | link->io.NumPorts2 = 0; |
| 1792 | link->io.Attributes2 = 0; | 1774 | link->io.Attributes2 = 0; |
| @@ -1841,8 +1823,6 @@ static int cm4000_config(struct pcmcia_device * link, int devno) | |||
| 1841 | 1823 | ||
| 1842 | return 0; | 1824 | return 0; |
| 1843 | 1825 | ||
| 1844 | cs_failed: | ||
| 1845 | cs_error(link, fail_fn, fail_rc); | ||
| 1846 | cs_release: | 1826 | cs_release: |
| 1847 | cm4000_release(link); | 1827 | cm4000_release(link); |
| 1848 | return -ENODEV; | 1828 | return -ENODEV; |
diff --git a/drivers/char/pcmcia/cm4040_cs.c b/drivers/char/pcmcia/cm4040_cs.c index 7368332c698c..9b1ff7e8f896 100644 --- a/drivers/char/pcmcia/cm4040_cs.c +++ b/drivers/char/pcmcia/cm4040_cs.c | |||
| @@ -523,29 +523,11 @@ static int reader_config(struct pcmcia_device *link, int devno) | |||
| 523 | int fail_fn, fail_rc; | 523 | int fail_fn, fail_rc; |
| 524 | int rc; | 524 | int rc; |
| 525 | 525 | ||
| 526 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 527 | tuple.Attributes = 0; | 526 | tuple.Attributes = 0; |
| 528 | tuple.TupleData = buf; | 527 | tuple.TupleData = buf; |
| 529 | tuple.TupleDataMax = sizeof(buf); | 528 | tuple.TupleDataMax = sizeof(buf); |
| 530 | tuple.TupleOffset = 0; | 529 | tuple.TupleOffset = 0; |
| 531 | 530 | ||
| 532 | if ((fail_rc = pcmcia_get_first_tuple(link, &tuple)) != CS_SUCCESS) { | ||
| 533 | fail_fn = GetFirstTuple; | ||
| 534 | goto cs_failed; | ||
| 535 | } | ||
| 536 | if ((fail_rc = pcmcia_get_tuple_data(link, &tuple)) != CS_SUCCESS) { | ||
| 537 | fail_fn = GetTupleData; | ||
| 538 | goto cs_failed; | ||
| 539 | } | ||
| 540 | if ((fail_rc = pcmcia_parse_tuple(link, &tuple, &parse)) | ||
| 541 | != CS_SUCCESS) { | ||
| 542 | fail_fn = ParseTuple; | ||
| 543 | goto cs_failed; | ||
| 544 | } | ||
| 545 | |||
| 546 | link->conf.ConfigBase = parse.config.base; | ||
| 547 | link->conf.Present = parse.config.rmask[0]; | ||
| 548 | |||
| 549 | link->io.BasePort2 = 0; | 531 | link->io.BasePort2 = 0; |
| 550 | link->io.NumPorts2 = 0; | 532 | link->io.NumPorts2 = 0; |
| 551 | link->io.Attributes2 = 0; | 533 | link->io.Attributes2 = 0; |
| @@ -609,8 +591,6 @@ static int reader_config(struct pcmcia_device *link, int devno) | |||
| 609 | 591 | ||
| 610 | return 0; | 592 | return 0; |
| 611 | 593 | ||
| 612 | cs_failed: | ||
| 613 | cs_error(link, fail_fn, fail_rc); | ||
| 614 | cs_release: | 594 | cs_release: |
| 615 | reader_release(link); | 595 | reader_release(link); |
| 616 | return -ENODEV; | 596 | return -ENODEV; |
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c index 1a0bc30b79d1..f9f72500ea5d 100644 --- a/drivers/char/pcmcia/synclink_cs.c +++ b/drivers/char/pcmcia/synclink_cs.c | |||
| @@ -604,17 +604,10 @@ static int mgslpc_config(struct pcmcia_device *link) | |||
| 604 | if (debug_level >= DEBUG_LEVEL_INFO) | 604 | if (debug_level >= DEBUG_LEVEL_INFO) |
| 605 | printk("mgslpc_config(0x%p)\n", link); | 605 | printk("mgslpc_config(0x%p)\n", link); |
| 606 | 606 | ||
| 607 | /* read CONFIG tuple to find its configuration registers */ | ||
| 608 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 609 | tuple.Attributes = 0; | 607 | tuple.Attributes = 0; |
| 610 | tuple.TupleData = buf; | 608 | tuple.TupleData = buf; |
| 611 | tuple.TupleDataMax = sizeof(buf); | 609 | tuple.TupleDataMax = sizeof(buf); |
| 612 | tuple.TupleOffset = 0; | 610 | tuple.TupleOffset = 0; |
| 613 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 614 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 615 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 616 | link->conf.ConfigBase = parse.config.base; | ||
| 617 | link->conf.Present = parse.config.rmask[0]; | ||
| 618 | 611 | ||
| 619 | /* get CIS configuration entry */ | 612 | /* get CIS configuration entry */ |
| 620 | 613 | ||
diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c index 1b996e62a404..7efd28ac21ed 100644 --- a/drivers/ide/legacy/ide-cs.c +++ b/drivers/ide/legacy/ide-cs.c | |||
| @@ -192,12 +192,6 @@ static int ide_config(struct pcmcia_device *link) | |||
| 192 | tuple.TupleOffset = 0; | 192 | tuple.TupleOffset = 0; |
| 193 | tuple.TupleDataMax = 255; | 193 | tuple.TupleDataMax = 255; |
| 194 | tuple.Attributes = 0; | 194 | tuple.Attributes = 0; |
| 195 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 196 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 197 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 198 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &stk->parse)); | ||
| 199 | link->conf.ConfigBase = stk->parse.config.base; | ||
| 200 | link->conf.Present = stk->parse.config.rmask[0]; | ||
| 201 | 195 | ||
| 202 | is_kme = ((link->manf_id == MANFID_KME) && | 196 | is_kme = ((link->manf_id == MANFID_KME) && |
| 203 | ((link->card_id == PRODID_KME_KXLC005_A) || | 197 | ((link->card_id == PRODID_KME_KXLC005_A) || |
diff --git a/drivers/isdn/hardware/avm/avm_cs.c b/drivers/isdn/hardware/avm/avm_cs.c index db3755b28f53..fd5d7364a487 100644 --- a/drivers/isdn/hardware/avm/avm_cs.c +++ b/drivers/isdn/hardware/avm/avm_cs.c | |||
| @@ -194,28 +194,6 @@ static int avmcs_config(struct pcmcia_device *link) | |||
| 194 | 194 | ||
| 195 | dev = link->priv; | 195 | dev = link->priv; |
| 196 | 196 | ||
| 197 | /* | ||
| 198 | This reads the card's CONFIG tuple to find its configuration | ||
| 199 | registers. | ||
| 200 | */ | ||
| 201 | do { | ||
| 202 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 203 | i = pcmcia_get_first_tuple(link, &tuple); | ||
| 204 | if (i != CS_SUCCESS) break; | ||
| 205 | tuple.TupleData = buf; | ||
| 206 | tuple.TupleDataMax = 64; | ||
| 207 | tuple.TupleOffset = 0; | ||
| 208 | i = pcmcia_get_tuple_data(link, &tuple); | ||
| 209 | if (i != CS_SUCCESS) break; | ||
| 210 | i = pcmcia_parse_tuple(link, &tuple, &parse); | ||
| 211 | if (i != CS_SUCCESS) break; | ||
| 212 | link->conf.ConfigBase = parse.config.base; | ||
| 213 | } while (0); | ||
| 214 | if (i != CS_SUCCESS) { | ||
| 215 | cs_error(link, ParseTuple, i); | ||
| 216 | return -ENODEV; | ||
| 217 | } | ||
| 218 | |||
| 219 | do { | 197 | do { |
| 220 | devname[0] = 0; | 198 | devname[0] = 0; |
| 221 | if (link->prod_id[1]) | 199 | if (link->prod_id[1]) |
diff --git a/drivers/isdn/hisax/avma1_cs.c b/drivers/isdn/hisax/avma1_cs.c index 40c9b026729c..876fec6c6be8 100644 --- a/drivers/isdn/hisax/avma1_cs.c +++ b/drivers/isdn/hisax/avma1_cs.c | |||
| @@ -216,28 +216,6 @@ static int avma1cs_config(struct pcmcia_device *link) | |||
| 216 | 216 | ||
| 217 | DEBUG(0, "avma1cs_config(0x%p)\n", link); | 217 | DEBUG(0, "avma1cs_config(0x%p)\n", link); |
| 218 | 218 | ||
| 219 | /* | ||
| 220 | This reads the card's CONFIG tuple to find its configuration | ||
| 221 | registers. | ||
| 222 | */ | ||
| 223 | do { | ||
| 224 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 225 | i = pcmcia_get_first_tuple(link, &tuple); | ||
| 226 | if (i != CS_SUCCESS) break; | ||
| 227 | tuple.TupleData = buf; | ||
| 228 | tuple.TupleDataMax = 64; | ||
| 229 | tuple.TupleOffset = 0; | ||
| 230 | i = pcmcia_get_tuple_data(link, &tuple); | ||
| 231 | if (i != CS_SUCCESS) break; | ||
| 232 | i = pcmcia_parse_tuple(link, &tuple, &parse); | ||
| 233 | if (i != CS_SUCCESS) break; | ||
| 234 | link->conf.ConfigBase = parse.config.base; | ||
| 235 | } while (0); | ||
| 236 | if (i != CS_SUCCESS) { | ||
| 237 | cs_error(link, ParseTuple, i); | ||
| 238 | return -ENODEV; | ||
| 239 | } | ||
| 240 | |||
| 241 | do { | 219 | do { |
| 242 | devname[0] = 0; | 220 | devname[0] = 0; |
| 243 | if (link->prod_id[1]) | 221 | if (link->prod_id[1]) |
diff --git a/drivers/isdn/hisax/elsa_cs.c b/drivers/isdn/hisax/elsa_cs.c index e18e75be8ed3..4e180d210faa 100644 --- a/drivers/isdn/hisax/elsa_cs.c +++ b/drivers/isdn/hisax/elsa_cs.c | |||
| @@ -242,23 +242,6 @@ static int elsa_cs_config(struct pcmcia_device *link) | |||
| 242 | DEBUG(0, "elsa_config(0x%p)\n", link); | 242 | DEBUG(0, "elsa_config(0x%p)\n", link); |
| 243 | dev = link->priv; | 243 | dev = link->priv; |
| 244 | 244 | ||
| 245 | /* | ||
| 246 | This reads the card's CONFIG tuple to find its configuration | ||
| 247 | registers. | ||
| 248 | */ | ||
| 249 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 250 | tuple.TupleData = (cisdata_t *)buf; | ||
| 251 | tuple.TupleDataMax = 255; | ||
| 252 | tuple.TupleOffset = 0; | ||
| 253 | tuple.Attributes = 0; | ||
| 254 | i = first_tuple(link, &tuple, &parse); | ||
| 255 | if (i != CS_SUCCESS) { | ||
| 256 | last_fn = ParseTuple; | ||
| 257 | goto cs_failed; | ||
| 258 | } | ||
| 259 | link->conf.ConfigBase = parse.config.base; | ||
| 260 | link->conf.Present = parse.config.rmask[0]; | ||
| 261 | |||
| 262 | tuple.TupleData = (cisdata_t *)buf; | 245 | tuple.TupleData = (cisdata_t *)buf; |
| 263 | tuple.TupleOffset = 0; tuple.TupleDataMax = 255; | 246 | tuple.TupleOffset = 0; tuple.TupleDataMax = 255; |
| 264 | tuple.Attributes = 0; | 247 | tuple.Attributes = 0; |
diff --git a/drivers/isdn/hisax/sedlbauer_cs.c b/drivers/isdn/hisax/sedlbauer_cs.c index f9c14a2970bc..46ed65334c51 100644 --- a/drivers/isdn/hisax/sedlbauer_cs.c +++ b/drivers/isdn/hisax/sedlbauer_cs.c | |||
| @@ -233,20 +233,10 @@ static int sedlbauer_config(struct pcmcia_device *link) | |||
| 233 | 233 | ||
| 234 | DEBUG(0, "sedlbauer_config(0x%p)\n", link); | 234 | DEBUG(0, "sedlbauer_config(0x%p)\n", link); |
| 235 | 235 | ||
| 236 | /* | ||
| 237 | This reads the card's CONFIG tuple to find its configuration | ||
| 238 | registers. | ||
| 239 | */ | ||
| 240 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 241 | tuple.Attributes = 0; | 236 | tuple.Attributes = 0; |
| 242 | tuple.TupleData = buf; | 237 | tuple.TupleData = buf; |
| 243 | tuple.TupleDataMax = sizeof(buf); | 238 | tuple.TupleDataMax = sizeof(buf); |
| 244 | tuple.TupleOffset = 0; | 239 | tuple.TupleOffset = 0; |
| 245 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 246 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 247 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 248 | link->conf.ConfigBase = parse.config.base; | ||
| 249 | link->conf.Present = parse.config.rmask[0]; | ||
| 250 | 240 | ||
| 251 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &conf)); | 241 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &conf)); |
| 252 | 242 | ||
diff --git a/drivers/isdn/hisax/teles_cs.c b/drivers/isdn/hisax/teles_cs.c index afcc2aeadb34..6b754f183796 100644 --- a/drivers/isdn/hisax/teles_cs.c +++ b/drivers/isdn/hisax/teles_cs.c | |||
| @@ -232,23 +232,6 @@ static int teles_cs_config(struct pcmcia_device *link) | |||
| 232 | DEBUG(0, "teles_config(0x%p)\n", link); | 232 | DEBUG(0, "teles_config(0x%p)\n", link); |
| 233 | dev = link->priv; | 233 | dev = link->priv; |
| 234 | 234 | ||
| 235 | /* | ||
| 236 | This reads the card's CONFIG tuple to find its configuration | ||
| 237 | registers. | ||
| 238 | */ | ||
| 239 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 240 | tuple.TupleData = (cisdata_t *)buf; | ||
| 241 | tuple.TupleDataMax = 255; | ||
| 242 | tuple.TupleOffset = 0; | ||
| 243 | tuple.Attributes = 0; | ||
| 244 | i = first_tuple(link, &tuple, &parse); | ||
| 245 | if (i != CS_SUCCESS) { | ||
| 246 | last_fn = ParseTuple; | ||
| 247 | goto cs_failed; | ||
| 248 | } | ||
| 249 | link->conf.ConfigBase = parse.config.base; | ||
| 250 | link->conf.Present = parse.config.rmask[0]; | ||
| 251 | |||
| 252 | tuple.TupleData = (cisdata_t *)buf; | 235 | tuple.TupleData = (cisdata_t *)buf; |
| 253 | tuple.TupleOffset = 0; tuple.TupleDataMax = 255; | 236 | tuple.TupleOffset = 0; tuple.TupleDataMax = 255; |
| 254 | tuple.Attributes = 0; | 237 | tuple.Attributes = 0; |
diff --git a/drivers/net/pcmcia/3c574_cs.c b/drivers/net/pcmcia/3c574_cs.c index 420f70b6b88a..794cc61819dd 100644 --- a/drivers/net/pcmcia/3c574_cs.c +++ b/drivers/net/pcmcia/3c574_cs.c | |||
| @@ -338,7 +338,6 @@ static int tc574_config(struct pcmcia_device *link) | |||
| 338 | struct net_device *dev = link->priv; | 338 | struct net_device *dev = link->priv; |
| 339 | struct el3_private *lp = netdev_priv(dev); | 339 | struct el3_private *lp = netdev_priv(dev); |
| 340 | tuple_t tuple; | 340 | tuple_t tuple; |
| 341 | cisparse_t parse; | ||
| 342 | unsigned short buf[32]; | 341 | unsigned short buf[32]; |
| 343 | int last_fn, last_ret, i, j; | 342 | int last_fn, last_ret, i, j; |
| 344 | kio_addr_t ioaddr; | 343 | kio_addr_t ioaddr; |
| @@ -350,17 +349,6 @@ static int tc574_config(struct pcmcia_device *link) | |||
| 350 | 349 | ||
| 351 | DEBUG(0, "3c574_config(0x%p)\n", link); | 350 | DEBUG(0, "3c574_config(0x%p)\n", link); |
| 352 | 351 | ||
| 353 | tuple.Attributes = 0; | ||
| 354 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 355 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 356 | tuple.TupleData = (cisdata_t *)buf; | ||
| 357 | tuple.TupleDataMax = 64; | ||
| 358 | tuple.TupleOffset = 0; | ||
| 359 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 360 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 361 | link->conf.ConfigBase = parse.config.base; | ||
| 362 | link->conf.Present = parse.config.rmask[0]; | ||
| 363 | |||
| 364 | link->io.IOAddrLines = 16; | 352 | link->io.IOAddrLines = 16; |
| 365 | for (i = j = 0; j < 0x400; j += 0x20) { | 353 | for (i = j = 0; j < 0x400; j += 0x20) { |
| 366 | link->io.BasePort1 = j ^ 0x300; | 354 | link->io.BasePort1 = j ^ 0x300; |
| @@ -382,6 +370,10 @@ static int tc574_config(struct pcmcia_device *link) | |||
| 382 | /* The 3c574 normally uses an EEPROM for configuration info, including | 370 | /* The 3c574 normally uses an EEPROM for configuration info, including |
| 383 | the hardware address. The future products may include a modem chip | 371 | the hardware address. The future products may include a modem chip |
| 384 | and put the address in the CIS. */ | 372 | and put the address in the CIS. */ |
| 373 | tuple.Attributes = 0; | ||
| 374 | tuple.TupleData = (cisdata_t *)buf; | ||
| 375 | tuple.TupleDataMax = 64; | ||
| 376 | tuple.TupleOffset = 0; | ||
| 385 | tuple.DesiredTuple = 0x88; | 377 | tuple.DesiredTuple = 0x88; |
| 386 | if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) { | 378 | if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) { |
| 387 | pcmcia_get_tuple_data(link, &tuple); | 379 | pcmcia_get_tuple_data(link, &tuple); |
diff --git a/drivers/net/pcmcia/3c589_cs.c b/drivers/net/pcmcia/3c589_cs.c index eb5783294489..1e73ff7d5d8e 100644 --- a/drivers/net/pcmcia/3c589_cs.c +++ b/drivers/net/pcmcia/3c589_cs.c | |||
| @@ -253,7 +253,6 @@ static int tc589_config(struct pcmcia_device *link) | |||
| 253 | struct net_device *dev = link->priv; | 253 | struct net_device *dev = link->priv; |
| 254 | struct el3_private *lp = netdev_priv(dev); | 254 | struct el3_private *lp = netdev_priv(dev); |
| 255 | tuple_t tuple; | 255 | tuple_t tuple; |
| 256 | cisparse_t parse; | ||
| 257 | u16 buf[32], *phys_addr; | 256 | u16 buf[32], *phys_addr; |
| 258 | int last_fn, last_ret, i, j, multi = 0, fifo; | 257 | int last_fn, last_ret, i, j, multi = 0, fifo; |
| 259 | kio_addr_t ioaddr; | 258 | kio_addr_t ioaddr; |
| @@ -263,15 +262,9 @@ static int tc589_config(struct pcmcia_device *link) | |||
| 263 | 262 | ||
| 264 | phys_addr = (u16 *)dev->dev_addr; | 263 | phys_addr = (u16 *)dev->dev_addr; |
| 265 | tuple.Attributes = 0; | 264 | tuple.Attributes = 0; |
| 266 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 267 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 268 | tuple.TupleData = (cisdata_t *)buf; | 265 | tuple.TupleData = (cisdata_t *)buf; |
| 269 | tuple.TupleDataMax = sizeof(buf); | 266 | tuple.TupleDataMax = sizeof(buf); |
| 270 | tuple.TupleOffset = 0; | 267 | tuple.TupleOffset = 0; |
| 271 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 272 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 273 | link->conf.ConfigBase = parse.config.base; | ||
| 274 | link->conf.Present = parse.config.rmask[0]; | ||
| 275 | tuple.Attributes = TUPLE_RETURN_COMMON; | 268 | tuple.Attributes = TUPLE_RETURN_COMMON; |
| 276 | 269 | ||
| 277 | /* Is this a 3c562? */ | 270 | /* Is this a 3c562? */ |
diff --git a/drivers/net/pcmcia/axnet_cs.c b/drivers/net/pcmcia/axnet_cs.c index 5ddd5742f779..6139048f8117 100644 --- a/drivers/net/pcmcia/axnet_cs.c +++ b/drivers/net/pcmcia/axnet_cs.c | |||
| @@ -299,11 +299,7 @@ static int axnet_config(struct pcmcia_device *link) | |||
| 299 | tuple.TupleData = (cisdata_t *)buf; | 299 | tuple.TupleData = (cisdata_t *)buf; |
| 300 | tuple.TupleDataMax = sizeof(buf); | 300 | tuple.TupleDataMax = sizeof(buf); |
| 301 | tuple.TupleOffset = 0; | 301 | tuple.TupleOffset = 0; |
| 302 | tuple.DesiredTuple = CISTPL_CONFIG; | 302 | |
| 303 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 304 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 305 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 306 | link->conf.ConfigBase = parse.config.base; | ||
| 307 | /* don't trust the CIS on this; Linksys got it wrong */ | 303 | /* don't trust the CIS on this; Linksys got it wrong */ |
| 308 | link->conf.Present = 0x63; | 304 | link->conf.Present = 0x63; |
| 309 | 305 | ||
diff --git a/drivers/net/pcmcia/com20020_cs.c b/drivers/net/pcmcia/com20020_cs.c index 48434d7924eb..91f65e91cd5f 100644 --- a/drivers/net/pcmcia/com20020_cs.c +++ b/drivers/net/pcmcia/com20020_cs.c | |||
| @@ -249,12 +249,9 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | |||
| 249 | static int com20020_config(struct pcmcia_device *link) | 249 | static int com20020_config(struct pcmcia_device *link) |
| 250 | { | 250 | { |
| 251 | struct arcnet_local *lp; | 251 | struct arcnet_local *lp; |
| 252 | tuple_t tuple; | ||
| 253 | cisparse_t parse; | ||
| 254 | com20020_dev_t *info; | 252 | com20020_dev_t *info; |
| 255 | struct net_device *dev; | 253 | struct net_device *dev; |
| 256 | int i, last_ret, last_fn; | 254 | int i, last_ret, last_fn; |
| 257 | u_char buf[64]; | ||
| 258 | int ioaddr; | 255 | int ioaddr; |
| 259 | 256 | ||
| 260 | info = link->priv; | 257 | info = link->priv; |
| @@ -264,16 +261,6 @@ static int com20020_config(struct pcmcia_device *link) | |||
| 264 | 261 | ||
| 265 | DEBUG(0, "com20020_config(0x%p)\n", link); | 262 | DEBUG(0, "com20020_config(0x%p)\n", link); |
| 266 | 263 | ||
| 267 | tuple.Attributes = 0; | ||
| 268 | tuple.TupleData = buf; | ||
| 269 | tuple.TupleDataMax = 64; | ||
| 270 | tuple.TupleOffset = 0; | ||
| 271 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 272 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 273 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 274 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 275 | link->conf.ConfigBase = parse.config.base; | ||
| 276 | |||
| 277 | DEBUG(1,"arcnet: baseport1 is %Xh\n", link->io.BasePort1); | 264 | DEBUG(1,"arcnet: baseport1 is %Xh\n", link->io.BasePort1); |
| 278 | i = !CS_SUCCESS; | 265 | i = !CS_SUCCESS; |
| 279 | if (!link->io.BasePort1) | 266 | if (!link->io.BasePort1) |
diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c index e3731fd15606..0d7de617e535 100644 --- a/drivers/net/pcmcia/fmvj18x_cs.c +++ b/drivers/net/pcmcia/fmvj18x_cs.c | |||
| @@ -342,7 +342,7 @@ static int fmvj18x_config(struct pcmcia_device *link) | |||
| 342 | tuple_t tuple; | 342 | tuple_t tuple; |
| 343 | cisparse_t parse; | 343 | cisparse_t parse; |
| 344 | u_short buf[32]; | 344 | u_short buf[32]; |
| 345 | int i, last_fn, last_ret, ret; | 345 | int i, last_fn = 0, last_ret = 0, ret; |
| 346 | kio_addr_t ioaddr; | 346 | kio_addr_t ioaddr; |
| 347 | cardtype_t cardtype; | 347 | cardtype_t cardtype; |
| 348 | char *card_name = "unknown"; | 348 | char *card_name = "unknown"; |
| @@ -350,21 +350,9 @@ static int fmvj18x_config(struct pcmcia_device *link) | |||
| 350 | 350 | ||
| 351 | DEBUG(0, "fmvj18x_config(0x%p)\n", link); | 351 | DEBUG(0, "fmvj18x_config(0x%p)\n", link); |
| 352 | 352 | ||
| 353 | /* | ||
| 354 | This reads the card's CONFIG tuple to find its configuration | ||
| 355 | registers. | ||
| 356 | */ | ||
| 357 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 358 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 359 | tuple.TupleData = (u_char *)buf; | 353 | tuple.TupleData = (u_char *)buf; |
| 360 | tuple.TupleDataMax = 64; | 354 | tuple.TupleDataMax = 64; |
| 361 | tuple.TupleOffset = 0; | 355 | tuple.TupleOffset = 0; |
| 362 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 363 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 364 | |||
| 365 | link->conf.ConfigBase = parse.config.base; | ||
| 366 | link->conf.Present = parse.config.rmask[0]; | ||
| 367 | |||
| 368 | tuple.DesiredTuple = CISTPL_FUNCE; | 356 | tuple.DesiredTuple = CISTPL_FUNCE; |
| 369 | tuple.TupleOffset = 0; | 357 | tuple.TupleOffset = 0; |
| 370 | if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) { | 358 | if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) { |
diff --git a/drivers/net/pcmcia/ibmtr_cs.c b/drivers/net/pcmcia/ibmtr_cs.c index bc0ca41a0542..a956a51d284f 100644 --- a/drivers/net/pcmcia/ibmtr_cs.c +++ b/drivers/net/pcmcia/ibmtr_cs.c | |||
| @@ -222,24 +222,12 @@ static int ibmtr_config(struct pcmcia_device *link) | |||
| 222 | ibmtr_dev_t *info = link->priv; | 222 | ibmtr_dev_t *info = link->priv; |
| 223 | struct net_device *dev = info->dev; | 223 | struct net_device *dev = info->dev; |
| 224 | struct tok_info *ti = netdev_priv(dev); | 224 | struct tok_info *ti = netdev_priv(dev); |
| 225 | tuple_t tuple; | ||
| 226 | cisparse_t parse; | ||
| 227 | win_req_t req; | 225 | win_req_t req; |
| 228 | memreq_t mem; | 226 | memreq_t mem; |
| 229 | int i, last_ret, last_fn; | 227 | int i, last_ret, last_fn; |
| 230 | u_char buf[64]; | ||
| 231 | 228 | ||
| 232 | DEBUG(0, "ibmtr_config(0x%p)\n", link); | 229 | DEBUG(0, "ibmtr_config(0x%p)\n", link); |
| 233 | 230 | ||
| 234 | tuple.Attributes = 0; | ||
| 235 | tuple.TupleData = buf; | ||
| 236 | tuple.TupleDataMax = 64; | ||
| 237 | tuple.TupleOffset = 0; | ||
| 238 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 239 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 240 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 241 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 242 | link->conf.ConfigBase = parse.config.base; | ||
| 243 | link->conf.ConfigIndex = 0x61; | 231 | link->conf.ConfigIndex = 0x61; |
| 244 | 232 | ||
| 245 | /* Determine if this is PRIMARY or ALTERNATE. */ | 233 | /* Determine if this is PRIMARY or ALTERNATE. */ |
diff --git a/drivers/net/pcmcia/nmclan_cs.c b/drivers/net/pcmcia/nmclan_cs.c index e77110e4c288..3b707747a811 100644 --- a/drivers/net/pcmcia/nmclan_cs.c +++ b/drivers/net/pcmcia/nmclan_cs.c | |||
| @@ -656,23 +656,12 @@ static int nmclan_config(struct pcmcia_device *link) | |||
| 656 | struct net_device *dev = link->priv; | 656 | struct net_device *dev = link->priv; |
| 657 | mace_private *lp = netdev_priv(dev); | 657 | mace_private *lp = netdev_priv(dev); |
| 658 | tuple_t tuple; | 658 | tuple_t tuple; |
| 659 | cisparse_t parse; | ||
| 660 | u_char buf[64]; | 659 | u_char buf[64]; |
| 661 | int i, last_ret, last_fn; | 660 | int i, last_ret, last_fn; |
| 662 | kio_addr_t ioaddr; | 661 | kio_addr_t ioaddr; |
| 663 | 662 | ||
| 664 | DEBUG(0, "nmclan_config(0x%p)\n", link); | 663 | DEBUG(0, "nmclan_config(0x%p)\n", link); |
| 665 | 664 | ||
| 666 | tuple.Attributes = 0; | ||
| 667 | tuple.TupleData = buf; | ||
| 668 | tuple.TupleDataMax = 64; | ||
| 669 | tuple.TupleOffset = 0; | ||
| 670 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 671 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 672 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 673 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 674 | link->conf.ConfigBase = parse.config.base; | ||
| 675 | |||
| 676 | CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); | 665 | CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); |
| 677 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); | 666 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); |
| 678 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); | 667 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); |
| @@ -686,6 +675,7 @@ static int nmclan_config(struct pcmcia_device *link) | |||
| 686 | tuple.TupleData = buf; | 675 | tuple.TupleData = buf; |
| 687 | tuple.TupleDataMax = 64; | 676 | tuple.TupleDataMax = 64; |
| 688 | tuple.TupleOffset = 0; | 677 | tuple.TupleOffset = 0; |
| 678 | tuple.Attributes = 0; | ||
| 689 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 679 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
| 690 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | 680 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); |
| 691 | memcpy(dev->dev_addr, tuple.TupleData, ETHER_ADDR_LEN); | 681 | memcpy(dev->dev_addr, tuple.TupleData, ETHER_ADDR_LEN); |
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c index 430a41e7b686..2b1238e2dbdb 100644 --- a/drivers/net/pcmcia/pcnet_cs.c +++ b/drivers/net/pcmcia/pcnet_cs.c | |||
| @@ -525,17 +525,9 @@ static int pcnet_config(struct pcmcia_device *link) | |||
| 525 | 525 | ||
| 526 | DEBUG(0, "pcnet_config(0x%p)\n", link); | 526 | DEBUG(0, "pcnet_config(0x%p)\n", link); |
| 527 | 527 | ||
| 528 | tuple.Attributes = 0; | ||
| 529 | tuple.TupleData = (cisdata_t *)buf; | 528 | tuple.TupleData = (cisdata_t *)buf; |
| 530 | tuple.TupleDataMax = sizeof(buf); | 529 | tuple.TupleDataMax = sizeof(buf); |
| 531 | tuple.TupleOffset = 0; | 530 | tuple.TupleOffset = 0; |
| 532 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 533 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 534 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 535 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 536 | link->conf.ConfigBase = parse.config.base; | ||
| 537 | link->conf.Present = parse.config.rmask[0]; | ||
| 538 | |||
| 539 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 531 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 540 | tuple.Attributes = 0; | 532 | tuple.Attributes = 0; |
| 541 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 533 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c index bf408482443e..530df8883fe5 100644 --- a/drivers/net/pcmcia/smc91c92_cs.c +++ b/drivers/net/pcmcia/smc91c92_cs.c | |||
| @@ -959,10 +959,6 @@ static int smc91c92_config(struct pcmcia_device *link) | |||
| 959 | { | 959 | { |
| 960 | struct net_device *dev = link->priv; | 960 | struct net_device *dev = link->priv; |
| 961 | struct smc_private *smc = netdev_priv(dev); | 961 | struct smc_private *smc = netdev_priv(dev); |
| 962 | struct smc_cfg_mem *cfg_mem; | ||
| 963 | tuple_t *tuple; | ||
| 964 | cisparse_t *parse; | ||
| 965 | u_char *buf; | ||
| 966 | char *name; | 962 | char *name; |
| 967 | int i, j, rev; | 963 | int i, j, rev; |
| 968 | kio_addr_t ioaddr; | 964 | kio_addr_t ioaddr; |
| @@ -970,24 +966,6 @@ static int smc91c92_config(struct pcmcia_device *link) | |||
| 970 | 966 | ||
| 971 | DEBUG(0, "smc91c92_config(0x%p)\n", link); | 967 | DEBUG(0, "smc91c92_config(0x%p)\n", link); |
| 972 | 968 | ||
| 973 | cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL); | ||
| 974 | if (!cfg_mem) | ||
| 975 | goto config_failed; | ||
| 976 | |||
| 977 | tuple = &cfg_mem->tuple; | ||
| 978 | parse = &cfg_mem->parse; | ||
| 979 | buf = cfg_mem->buf; | ||
| 980 | |||
| 981 | tuple->Attributes = tuple->TupleOffset = 0; | ||
| 982 | tuple->TupleData = (cisdata_t *)buf; | ||
| 983 | tuple->TupleDataMax = 64; | ||
| 984 | |||
| 985 | tuple->DesiredTuple = CISTPL_CONFIG; | ||
| 986 | i = first_tuple(link, tuple, parse); | ||
| 987 | CS_EXIT_TEST(i, ParseTuple, config_failed); | ||
| 988 | link->conf.ConfigBase = parse->config.base; | ||
| 989 | link->conf.Present = parse->config.rmask[0]; | ||
| 990 | |||
| 991 | smc->manfid = link->manf_id; | 969 | smc->manfid = link->manf_id; |
| 992 | smc->cardid = link->card_id; | 970 | smc->cardid = link->card_id; |
| 993 | 971 | ||
| @@ -1119,14 +1097,12 @@ static int smc91c92_config(struct pcmcia_device *link) | |||
| 1119 | printk(KERN_NOTICE " No MII transceivers found!\n"); | 1097 | printk(KERN_NOTICE " No MII transceivers found!\n"); |
| 1120 | } | 1098 | } |
| 1121 | } | 1099 | } |
| 1122 | kfree(cfg_mem); | ||
| 1123 | return 0; | 1100 | return 0; |
| 1124 | 1101 | ||
| 1125 | config_undo: | 1102 | config_undo: |
| 1126 | unregister_netdev(dev); | 1103 | unregister_netdev(dev); |
| 1127 | config_failed: /* CS_EXIT_TEST() calls jump to here... */ | 1104 | config_failed: /* CS_EXIT_TEST() calls jump to here... */ |
| 1128 | smc91c92_release(link); | 1105 | smc91c92_release(link); |
| 1129 | kfree(cfg_mem); | ||
| 1130 | return -ENODEV; | 1106 | return -ENODEV; |
| 1131 | } /* smc91c92_config */ | 1107 | } /* smc91c92_config */ |
| 1132 | 1108 | ||
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c index d6273619686a..69813406782d 100644 --- a/drivers/net/pcmcia/xirc2ps_cs.c +++ b/drivers/net/pcmcia/xirc2ps_cs.c | |||
| @@ -781,13 +781,6 @@ xirc2ps_config(struct pcmcia_device * link) | |||
| 781 | goto failure; | 781 | goto failure; |
| 782 | } | 782 | } |
| 783 | 783 | ||
| 784 | /* get configuration stuff */ | ||
| 785 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 786 | if ((err=first_tuple(link, &tuple, &parse))) | ||
| 787 | goto cis_error; | ||
| 788 | link->conf.ConfigBase = parse.config.base; | ||
| 789 | link->conf.Present = parse.config.rmask[0]; | ||
| 790 | |||
| 791 | /* get the ethernet address from the CIS */ | 784 | /* get the ethernet address from the CIS */ |
| 792 | tuple.DesiredTuple = CISTPL_FUNCE; | 785 | tuple.DesiredTuple = CISTPL_FUNCE; |
| 793 | for (err = first_tuple(link, &tuple, &parse); !err; | 786 | for (err = first_tuple(link, &tuple, &parse); !err; |
| @@ -1051,8 +1044,6 @@ xirc2ps_config(struct pcmcia_device * link) | |||
| 1051 | xirc2ps_release(link); | 1044 | xirc2ps_release(link); |
| 1052 | return -ENODEV; | 1045 | return -ENODEV; |
| 1053 | 1046 | ||
| 1054 | cis_error: | ||
| 1055 | printk(KNOT_XIRC "unable to parse CIS\n"); | ||
| 1056 | failure: | 1047 | failure: |
| 1057 | return -ENODEV; | 1048 | return -ENODEV; |
| 1058 | } /* xirc2ps_config */ | 1049 | } /* xirc2ps_config */ |
diff --git a/drivers/net/wireless/airo_cs.c b/drivers/net/wireless/airo_cs.c index ac9437d497f0..f12355398fe7 100644 --- a/drivers/net/wireless/airo_cs.c +++ b/drivers/net/wireless/airo_cs.c | |||
| @@ -219,21 +219,6 @@ static int airo_config(struct pcmcia_device *link) | |||
| 219 | dev = link->priv; | 219 | dev = link->priv; |
| 220 | 220 | ||
| 221 | DEBUG(0, "airo_config(0x%p)\n", link); | 221 | DEBUG(0, "airo_config(0x%p)\n", link); |
| 222 | |||
| 223 | /* | ||
| 224 | This reads the card's CONFIG tuple to find its configuration | ||
| 225 | registers. | ||
| 226 | */ | ||
| 227 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 228 | tuple.Attributes = 0; | ||
| 229 | tuple.TupleData = buf; | ||
| 230 | tuple.TupleDataMax = sizeof(buf); | ||
| 231 | tuple.TupleOffset = 0; | ||
| 232 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 233 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 234 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 235 | link->conf.ConfigBase = parse.config.base; | ||
| 236 | link->conf.Present = parse.config.rmask[0]; | ||
| 237 | 222 | ||
| 238 | /* | 223 | /* |
| 239 | In this loop, we scan the CIS for configuration table entries, | 224 | In this loop, we scan the CIS for configuration table entries, |
| @@ -247,6 +232,10 @@ static int airo_config(struct pcmcia_device *link) | |||
| 247 | these things without consulting the CIS, and most client drivers | 232 | these things without consulting the CIS, and most client drivers |
| 248 | will only use the CIS to fill in implementation-defined details. | 233 | will only use the CIS to fill in implementation-defined details. |
| 249 | */ | 234 | */ |
| 235 | tuple.Attributes = 0; | ||
| 236 | tuple.TupleData = buf; | ||
| 237 | tuple.TupleDataMax = sizeof(buf); | ||
| 238 | tuple.TupleOffset = 0; | ||
| 250 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 239 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 251 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 240 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
| 252 | while (1) { | 241 | while (1) { |
diff --git a/drivers/net/wireless/atmel_cs.c b/drivers/net/wireless/atmel_cs.c index 5c410989c4d7..12617cd0b78e 100644 --- a/drivers/net/wireless/atmel_cs.c +++ b/drivers/net/wireless/atmel_cs.c | |||
| @@ -244,17 +244,6 @@ static int atmel_config(struct pcmcia_device *link) | |||
| 244 | tuple.TupleOffset = 0; | 244 | tuple.TupleOffset = 0; |
| 245 | 245 | ||
| 246 | /* | 246 | /* |
| 247 | This reads the card's CONFIG tuple to find its configuration | ||
| 248 | registers. | ||
| 249 | */ | ||
| 250 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 251 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 252 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 253 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 254 | link->conf.ConfigBase = parse.config.base; | ||
| 255 | link->conf.Present = parse.config.rmask[0]; | ||
| 256 | |||
| 257 | /* | ||
| 258 | In this loop, we scan the CIS for configuration table entries, | 247 | In this loop, we scan the CIS for configuration table entries, |
| 259 | each of which describes a valid card configuration, including | 248 | each of which describes a valid card configuration, including |
| 260 | voltage, IO window, memory window, and interrupt settings. | 249 | voltage, IO window, memory window, and interrupt settings. |
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c index 8a7984bc8afc..ee542ec6d6a8 100644 --- a/drivers/net/wireless/hostap/hostap_cs.c +++ b/drivers/net/wireless/hostap/hostap_cs.c | |||
| @@ -570,16 +570,10 @@ static int prism2_config(struct pcmcia_device *link) | |||
| 570 | } | 570 | } |
| 571 | memset(hw_priv, 0, sizeof(*hw_priv)); | 571 | memset(hw_priv, 0, sizeof(*hw_priv)); |
| 572 | 572 | ||
| 573 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 574 | tuple.Attributes = 0; | 573 | tuple.Attributes = 0; |
| 575 | tuple.TupleData = buf; | 574 | tuple.TupleData = buf; |
| 576 | tuple.TupleDataMax = sizeof(buf); | 575 | tuple.TupleDataMax = sizeof(buf); |
| 577 | tuple.TupleOffset = 0; | 576 | tuple.TupleOffset = 0; |
| 578 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 579 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 580 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse)); | ||
| 581 | link->conf.ConfigBase = parse->config.base; | ||
| 582 | link->conf.Present = parse->config.rmask[0]; | ||
| 583 | 577 | ||
| 584 | CS_CHECK(GetConfigurationInfo, | 578 | CS_CHECK(GetConfigurationInfo, |
| 585 | pcmcia_get_configuration_info(link, &conf)); | 579 | pcmcia_get_configuration_info(link, &conf)); |
diff --git a/drivers/net/wireless/netwave_cs.c b/drivers/net/wireless/netwave_cs.c index 6714e0dfa8d6..644b4741ef74 100644 --- a/drivers/net/wireless/netwave_cs.c +++ b/drivers/net/wireless/netwave_cs.c | |||
| @@ -735,10 +735,7 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | |||
| 735 | static int netwave_pcmcia_config(struct pcmcia_device *link) { | 735 | static int netwave_pcmcia_config(struct pcmcia_device *link) { |
| 736 | struct net_device *dev = link->priv; | 736 | struct net_device *dev = link->priv; |
| 737 | netwave_private *priv = netdev_priv(dev); | 737 | netwave_private *priv = netdev_priv(dev); |
| 738 | tuple_t tuple; | ||
| 739 | cisparse_t parse; | ||
| 740 | int i, j, last_ret, last_fn; | 738 | int i, j, last_ret, last_fn; |
| 741 | u_char buf[64]; | ||
| 742 | win_req_t req; | 739 | win_req_t req; |
| 743 | memreq_t mem; | 740 | memreq_t mem; |
| 744 | u_char __iomem *ramBase = NULL; | 741 | u_char __iomem *ramBase = NULL; |
| @@ -746,21 +743,6 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) { | |||
| 746 | DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link); | 743 | DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link); |
| 747 | 744 | ||
| 748 | /* | 745 | /* |
| 749 | This reads the card's CONFIG tuple to find its configuration | ||
| 750 | registers. | ||
| 751 | */ | ||
| 752 | tuple.Attributes = 0; | ||
| 753 | tuple.TupleData = (cisdata_t *) buf; | ||
| 754 | tuple.TupleDataMax = 64; | ||
| 755 | tuple.TupleOffset = 0; | ||
| 756 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 757 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 758 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 759 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 760 | link->conf.ConfigBase = parse.config.base; | ||
| 761 | link->conf.Present = parse.config.rmask[0]; | ||
| 762 | |||
| 763 | /* | ||
| 764 | * Try allocating IO ports. This tries a few fixed addresses. | 746 | * Try allocating IO ports. This tries a few fixed addresses. |
| 765 | * If you want, you can also read the card's config table to | 747 | * If you want, you can also read the card's config table to |
| 766 | * pick addresses -- see the serial driver for an example. | 748 | * pick addresses -- see the serial driver for an example. |
diff --git a/drivers/net/wireless/orinoco_cs.c b/drivers/net/wireless/orinoco_cs.c index bc14689cbf24..d08ae8d2726c 100644 --- a/drivers/net/wireless/orinoco_cs.c +++ b/drivers/net/wireless/orinoco_cs.c | |||
| @@ -178,21 +178,6 @@ orinoco_cs_config(struct pcmcia_device *link) | |||
| 178 | cisparse_t parse; | 178 | cisparse_t parse; |
| 179 | void __iomem *mem; | 179 | void __iomem *mem; |
| 180 | 180 | ||
| 181 | /* | ||
| 182 | * This reads the card's CONFIG tuple to find its | ||
| 183 | * configuration registers. | ||
| 184 | */ | ||
| 185 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 186 | tuple.Attributes = 0; | ||
| 187 | tuple.TupleData = buf; | ||
| 188 | tuple.TupleDataMax = sizeof(buf); | ||
| 189 | tuple.TupleOffset = 0; | ||
| 190 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 191 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 192 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 193 | link->conf.ConfigBase = parse.config.base; | ||
| 194 | link->conf.Present = parse.config.rmask[0]; | ||
| 195 | |||
| 196 | /* Look up the current Vcc */ | 181 | /* Look up the current Vcc */ |
| 197 | CS_CHECK(GetConfigurationInfo, | 182 | CS_CHECK(GetConfigurationInfo, |
| 198 | pcmcia_get_configuration_info(link, &conf)); | 183 | pcmcia_get_configuration_info(link, &conf)); |
| @@ -211,6 +196,10 @@ orinoco_cs_config(struct pcmcia_device *link) | |||
| 211 | * and most client drivers will only use the CIS to fill in | 196 | * and most client drivers will only use the CIS to fill in |
| 212 | * implementation-defined details. | 197 | * implementation-defined details. |
| 213 | */ | 198 | */ |
| 199 | tuple.Attributes = 0; | ||
| 200 | tuple.TupleData = buf; | ||
| 201 | tuple.TupleDataMax = sizeof(buf); | ||
| 202 | tuple.TupleOffset = 0; | ||
| 214 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 203 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 215 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 204 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
| 216 | while (1) { | 205 | while (1) { |
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c index 75cdc3e5852a..88e10c9bc4ac 100644 --- a/drivers/net/wireless/ray_cs.c +++ b/drivers/net/wireless/ray_cs.c | |||
| @@ -408,11 +408,8 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | |||
| 408 | #define MAX_TUPLE_SIZE 128 | 408 | #define MAX_TUPLE_SIZE 128 |
| 409 | static int ray_config(struct pcmcia_device *link) | 409 | static int ray_config(struct pcmcia_device *link) |
| 410 | { | 410 | { |
| 411 | tuple_t tuple; | ||
| 412 | cisparse_t parse; | ||
| 413 | int last_fn = 0, last_ret = 0; | 411 | int last_fn = 0, last_ret = 0; |
| 414 | int i; | 412 | int i; |
| 415 | u_char buf[MAX_TUPLE_SIZE]; | ||
| 416 | win_req_t req; | 413 | win_req_t req; |
| 417 | memreq_t mem; | 414 | memreq_t mem; |
| 418 | struct net_device *dev = (struct net_device *)link->priv; | 415 | struct net_device *dev = (struct net_device *)link->priv; |
| @@ -420,19 +417,7 @@ static int ray_config(struct pcmcia_device *link) | |||
| 420 | 417 | ||
| 421 | DEBUG(1, "ray_config(0x%p)\n", link); | 418 | DEBUG(1, "ray_config(0x%p)\n", link); |
| 422 | 419 | ||
| 423 | /* This reads the card's CONFIG tuple to find its configuration regs */ | ||
| 424 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 425 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 426 | tuple.TupleData = buf; | ||
| 427 | tuple.TupleDataMax = MAX_TUPLE_SIZE; | ||
| 428 | tuple.TupleOffset = 0; | ||
| 429 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 430 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 431 | link->conf.ConfigBase = parse.config.base; | ||
| 432 | link->conf.Present = parse.config.rmask[0]; | ||
| 433 | |||
| 434 | /* Determine card type and firmware version */ | 420 | /* Determine card type and firmware version */ |
| 435 | buf[0] = buf[MAX_TUPLE_SIZE - 1] = 0; | ||
| 436 | printk(KERN_INFO "ray_cs Detected: %s%s%s%s\n", | 421 | printk(KERN_INFO "ray_cs Detected: %s%s%s%s\n", |
| 437 | link->prod_id[0] ? link->prod_id[0] : " ", | 422 | link->prod_id[0] ? link->prod_id[0] : " ", |
| 438 | link->prod_id[1] ? link->prod_id[1] : " ", | 423 | link->prod_id[1] ? link->prod_id[1] : " ", |
diff --git a/drivers/net/wireless/spectrum_cs.c b/drivers/net/wireless/spectrum_cs.c index bcc7038130f6..cf2d1486b01d 100644 --- a/drivers/net/wireless/spectrum_cs.c +++ b/drivers/net/wireless/spectrum_cs.c | |||
| @@ -647,21 +647,6 @@ spectrum_cs_config(struct pcmcia_device *link) | |||
| 647 | cisparse_t parse; | 647 | cisparse_t parse; |
| 648 | void __iomem *mem; | 648 | void __iomem *mem; |
| 649 | 649 | ||
| 650 | /* | ||
| 651 | * This reads the card's CONFIG tuple to find its | ||
| 652 | * configuration registers. | ||
| 653 | */ | ||
| 654 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 655 | tuple.Attributes = 0; | ||
| 656 | tuple.TupleData = buf; | ||
| 657 | tuple.TupleDataMax = sizeof(buf); | ||
| 658 | tuple.TupleOffset = 0; | ||
| 659 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 660 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 661 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 662 | link->conf.ConfigBase = parse.config.base; | ||
| 663 | link->conf.Present = parse.config.rmask[0]; | ||
| 664 | |||
| 665 | /* Look up the current Vcc */ | 650 | /* Look up the current Vcc */ |
| 666 | CS_CHECK(GetConfigurationInfo, | 651 | CS_CHECK(GetConfigurationInfo, |
| 667 | pcmcia_get_configuration_info(link, &conf)); | 652 | pcmcia_get_configuration_info(link, &conf)); |
| @@ -681,6 +666,10 @@ spectrum_cs_config(struct pcmcia_device *link) | |||
| 681 | * implementation-defined details. | 666 | * implementation-defined details. |
| 682 | */ | 667 | */ |
| 683 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 668 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 669 | tuple.Attributes = 0; | ||
| 670 | tuple.TupleData = buf; | ||
| 671 | tuple.TupleDataMax = sizeof(buf); | ||
| 672 | tuple.TupleOffset = 0; | ||
| 684 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 673 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
| 685 | while (1) { | 674 | while (1) { |
| 686 | cistpl_cftable_entry_t *cfg = &(parse.cftable_entry); | 675 | cistpl_cftable_entry_t *cfg = &(parse.cftable_entry); |
diff --git a/drivers/net/wireless/wavelan_cs.c b/drivers/net/wireless/wavelan_cs.c index aafb301041b1..233d906c08f0 100644 --- a/drivers/net/wireless/wavelan_cs.c +++ b/drivers/net/wireless/wavelan_cs.c | |||
| @@ -3939,11 +3939,8 @@ wv_hw_reset(struct net_device * dev) | |||
| 3939 | static inline int | 3939 | static inline int |
| 3940 | wv_pcmcia_config(struct pcmcia_device * link) | 3940 | wv_pcmcia_config(struct pcmcia_device * link) |
| 3941 | { | 3941 | { |
| 3942 | tuple_t tuple; | ||
| 3943 | cisparse_t parse; | ||
| 3944 | struct net_device * dev = (struct net_device *) link->priv; | 3942 | struct net_device * dev = (struct net_device *) link->priv; |
| 3945 | int i; | 3943 | int i; |
| 3946 | u_char buf[64]; | ||
| 3947 | win_req_t req; | 3944 | win_req_t req; |
| 3948 | memreq_t mem; | 3945 | memreq_t mem; |
| 3949 | net_local * lp = netdev_priv(dev); | 3946 | net_local * lp = netdev_priv(dev); |
| @@ -3953,36 +3950,6 @@ wv_pcmcia_config(struct pcmcia_device * link) | |||
| 3953 | printk(KERN_DEBUG "->wv_pcmcia_config(0x%p)\n", link); | 3950 | printk(KERN_DEBUG "->wv_pcmcia_config(0x%p)\n", link); |
| 3954 | #endif | 3951 | #endif |
| 3955 | 3952 | ||
| 3956 | /* | ||
| 3957 | * This reads the card's CONFIG tuple to find its configuration | ||
| 3958 | * registers. | ||
| 3959 | */ | ||
| 3960 | do | ||
| 3961 | { | ||
| 3962 | tuple.Attributes = 0; | ||
| 3963 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 3964 | i = pcmcia_get_first_tuple(link, &tuple); | ||
| 3965 | if(i != CS_SUCCESS) | ||
| 3966 | break; | ||
| 3967 | tuple.TupleData = (cisdata_t *)buf; | ||
| 3968 | tuple.TupleDataMax = 64; | ||
| 3969 | tuple.TupleOffset = 0; | ||
| 3970 | i = pcmcia_get_tuple_data(link, &tuple); | ||
| 3971 | if(i != CS_SUCCESS) | ||
| 3972 | break; | ||
| 3973 | i = pcmcia_parse_tuple(link, &tuple, &parse); | ||
| 3974 | if(i != CS_SUCCESS) | ||
| 3975 | break; | ||
| 3976 | link->conf.ConfigBase = parse.config.base; | ||
| 3977 | link->conf.Present = parse.config.rmask[0]; | ||
| 3978 | } | ||
| 3979 | while(0); | ||
| 3980 | if(i != CS_SUCCESS) | ||
| 3981 | { | ||
| 3982 | cs_error(link, ParseTuple, i); | ||
| 3983 | return FALSE; | ||
| 3984 | } | ||
| 3985 | |||
| 3986 | do | 3953 | do |
| 3987 | { | 3954 | { |
| 3988 | i = pcmcia_request_io(link, &link->io); | 3955 | i = pcmcia_request_io(link, &link->io); |
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c index 5b98a7876982..583e0d655a98 100644 --- a/drivers/net/wireless/wl3501_cs.c +++ b/drivers/net/wireless/wl3501_cs.c | |||
| @@ -1966,25 +1966,10 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | |||
| 1966 | */ | 1966 | */ |
| 1967 | static int wl3501_config(struct pcmcia_device *link) | 1967 | static int wl3501_config(struct pcmcia_device *link) |
| 1968 | { | 1968 | { |
| 1969 | tuple_t tuple; | ||
| 1970 | cisparse_t parse; | ||
| 1971 | struct net_device *dev = link->priv; | 1969 | struct net_device *dev = link->priv; |
| 1972 | int i = 0, j, last_fn, last_ret; | 1970 | int i = 0, j, last_fn, last_ret; |
| 1973 | unsigned char bf[64]; | ||
| 1974 | struct wl3501_card *this; | 1971 | struct wl3501_card *this; |
| 1975 | 1972 | ||
| 1976 | /* This reads the card's CONFIG tuple to find its config registers. */ | ||
| 1977 | tuple.Attributes = 0; | ||
| 1978 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 1979 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 1980 | tuple.TupleData = bf; | ||
| 1981 | tuple.TupleDataMax = sizeof(bf); | ||
| 1982 | tuple.TupleOffset = 0; | ||
| 1983 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 1984 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 1985 | link->conf.ConfigBase = parse.config.base; | ||
| 1986 | link->conf.Present = parse.config.rmask[0]; | ||
| 1987 | |||
| 1988 | /* Try allocating IO ports. This tries a few fixed addresses. If you | 1973 | /* Try allocating IO ports. This tries a few fixed addresses. If you |
| 1989 | * want, you can also read the card's config table to pick addresses -- | 1974 | * want, you can also read the card's config table to pick addresses -- |
| 1990 | * see the serial driver for an example. */ | 1975 | * see the serial driver for an example. */ |
diff --git a/drivers/parport/parport_cs.c b/drivers/parport/parport_cs.c index fb80fed0da0c..e60b4bf6bae8 100644 --- a/drivers/parport/parport_cs.c +++ b/drivers/parport/parport_cs.c | |||
| @@ -166,14 +166,6 @@ static int parport_config(struct pcmcia_device *link) | |||
| 166 | 166 | ||
| 167 | tuple.TupleData = (cisdata_t *)buf; | 167 | tuple.TupleData = (cisdata_t *)buf; |
| 168 | tuple.TupleOffset = 0; tuple.TupleDataMax = 255; | 168 | tuple.TupleOffset = 0; tuple.TupleDataMax = 255; |
| 169 | tuple.Attributes = 0; | ||
| 170 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 171 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 172 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 173 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 174 | link->conf.ConfigBase = parse.config.base; | ||
| 175 | link->conf.Present = parse.config.rmask[0]; | ||
| 176 | |||
| 177 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 169 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 178 | tuple.Attributes = 0; | 170 | tuple.Attributes = 0; |
| 179 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 171 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 6572b3850e55..5b302e822ef5 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
| @@ -313,6 +313,7 @@ static int pcmcia_device_probe(struct device * dev) | |||
| 313 | struct pcmcia_driver *p_drv; | 313 | struct pcmcia_driver *p_drv; |
| 314 | struct pcmcia_device_id *did; | 314 | struct pcmcia_device_id *did; |
| 315 | struct pcmcia_socket *s; | 315 | struct pcmcia_socket *s; |
| 316 | cistpl_config_t cis_config; | ||
| 316 | int ret = 0; | 317 | int ret = 0; |
| 317 | 318 | ||
| 318 | dev = get_device(dev); | 319 | dev = get_device(dev); |
| @@ -329,6 +330,18 @@ static int pcmcia_device_probe(struct device * dev) | |||
| 329 | goto put_dev; | 330 | goto put_dev; |
| 330 | } | 331 | } |
| 331 | 332 | ||
| 333 | /* set up some more device information */ | ||
| 334 | ret = pccard_read_tuple(p_dev->socket, p_dev->func, CISTPL_CONFIG, | ||
| 335 | &cis_config); | ||
| 336 | if (!ret) { | ||
| 337 | p_dev->conf.ConfigBase = cis_config.base; | ||
| 338 | p_dev->conf.Present = cis_config.rmask[0]; | ||
| 339 | } else { | ||
| 340 | printk(KERN_INFO "pcmcia: could not parse base and rmask0 of CIS\n"); | ||
| 341 | p_dev->conf.ConfigBase = 0; | ||
| 342 | p_dev->conf.Present = 0; | ||
| 343 | } | ||
| 344 | |||
| 332 | ret = p_drv->probe(p_dev); | 345 | ret = p_drv->probe(p_dev); |
| 333 | if (ret) | 346 | if (ret) |
| 334 | goto put_module; | 347 | goto put_module; |
diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c index ee449b29fc82..aad362ba02e0 100644 --- a/drivers/scsi/pcmcia/aha152x_stub.c +++ b/drivers/scsi/pcmcia/aha152x_stub.c | |||
| @@ -154,16 +154,11 @@ static int aha152x_config_cs(struct pcmcia_device *link) | |||
| 154 | 154 | ||
| 155 | DEBUG(0, "aha152x_config(0x%p)\n", link); | 155 | DEBUG(0, "aha152x_config(0x%p)\n", link); |
| 156 | 156 | ||
| 157 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 158 | tuple.TupleData = tuple_data; | 157 | tuple.TupleData = tuple_data; |
| 159 | tuple.TupleDataMax = 64; | 158 | tuple.TupleDataMax = 64; |
| 160 | tuple.TupleOffset = 0; | 159 | tuple.TupleOffset = 0; |
| 161 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 162 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 163 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 164 | link->conf.ConfigBase = parse.config.base; | ||
| 165 | |||
| 166 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 160 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 161 | tuple.Attributes = 0; | ||
| 167 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 162 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
| 168 | while (1) { | 163 | while (1) { |
| 169 | if (pcmcia_get_tuple_data(link, &tuple) != 0 || | 164 | if (pcmcia_get_tuple_data(link, &tuple) != 0 || |
diff --git a/drivers/scsi/pcmcia/fdomain_stub.c b/drivers/scsi/pcmcia/fdomain_stub.c index 85f7ffac19a0..a1c5f265069f 100644 --- a/drivers/scsi/pcmcia/fdomain_stub.c +++ b/drivers/scsi/pcmcia/fdomain_stub.c | |||
| @@ -136,14 +136,9 @@ static int fdomain_config(struct pcmcia_device *link) | |||
| 136 | 136 | ||
| 137 | DEBUG(0, "fdomain_config(0x%p)\n", link); | 137 | DEBUG(0, "fdomain_config(0x%p)\n", link); |
| 138 | 138 | ||
| 139 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 140 | tuple.TupleData = tuple_data; | 139 | tuple.TupleData = tuple_data; |
| 141 | tuple.TupleDataMax = 64; | 140 | tuple.TupleDataMax = 64; |
| 142 | tuple.TupleOffset = 0; | 141 | tuple.TupleOffset = 0; |
| 143 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 144 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 145 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 146 | link->conf.ConfigBase = parse.config.base; | ||
| 147 | 142 | ||
| 148 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 143 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 149 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 144 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
diff --git a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c index f2d79c3f0b8e..d72df5dae4ee 100644 --- a/drivers/scsi/pcmcia/nsp_cs.c +++ b/drivers/scsi/pcmcia/nsp_cs.c | |||
| @@ -1685,16 +1685,10 @@ static int nsp_cs_config(struct pcmcia_device *link) | |||
| 1685 | 1685 | ||
| 1686 | nsp_dbg(NSP_DEBUG_INIT, "in"); | 1686 | nsp_dbg(NSP_DEBUG_INIT, "in"); |
| 1687 | 1687 | ||
| 1688 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 1689 | tuple.Attributes = 0; | 1688 | tuple.Attributes = 0; |
| 1690 | tuple.TupleData = tuple_data; | 1689 | tuple.TupleData = tuple_data; |
| 1691 | tuple.TupleDataMax = sizeof(tuple_data); | 1690 | tuple.TupleDataMax = sizeof(tuple_data); |
| 1692 | tuple.TupleOffset = 0; | 1691 | tuple.TupleOffset = 0; |
| 1693 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 1694 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 1695 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 1696 | link->conf.ConfigBase = parse.config.base; | ||
| 1697 | link->conf.Present = parse.config.rmask[0]; | ||
| 1698 | 1692 | ||
| 1699 | /* Look up the current Vcc */ | 1693 | /* Look up the current Vcc */ |
| 1700 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &conf)); | 1694 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &conf)); |
diff --git a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c index 336e370f7f65..9d431fe7f47f 100644 --- a/drivers/scsi/pcmcia/qlogic_stub.c +++ b/drivers/scsi/pcmcia/qlogic_stub.c | |||
| @@ -208,16 +208,11 @@ static int qlogic_config(struct pcmcia_device * link) | |||
| 208 | 208 | ||
| 209 | DEBUG(0, "qlogic_config(0x%p)\n", link); | 209 | DEBUG(0, "qlogic_config(0x%p)\n", link); |
| 210 | 210 | ||
| 211 | info->manf_id = link->manf_id; | ||
| 212 | |||
| 211 | tuple.TupleData = (cisdata_t *) tuple_data; | 213 | tuple.TupleData = (cisdata_t *) tuple_data; |
| 212 | tuple.TupleDataMax = 64; | 214 | tuple.TupleDataMax = 64; |
| 213 | tuple.TupleOffset = 0; | 215 | tuple.TupleOffset = 0; |
| 214 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 215 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 216 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 217 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 218 | link->conf.ConfigBase = parse.config.base; | ||
| 219 | |||
| 220 | info->manf_id = link->manf_id; | ||
| 221 | 216 | ||
| 222 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 217 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 223 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 218 | 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 80c28b9fb70a..fb7acea60286 100644 --- a/drivers/scsi/pcmcia/sym53c500_cs.c +++ b/drivers/scsi/pcmcia/sym53c500_cs.c | |||
| @@ -722,16 +722,11 @@ SYM53C500_config(struct pcmcia_device *link) | |||
| 722 | 722 | ||
| 723 | DEBUG(0, "SYM53C500_config(0x%p)\n", link); | 723 | DEBUG(0, "SYM53C500_config(0x%p)\n", link); |
| 724 | 724 | ||
| 725 | info->manf_id = link->manf_id; | ||
| 726 | |||
| 725 | tuple.TupleData = (cisdata_t *)tuple_data; | 727 | tuple.TupleData = (cisdata_t *)tuple_data; |
| 726 | tuple.TupleDataMax = 64; | 728 | tuple.TupleDataMax = 64; |
| 727 | tuple.TupleOffset = 0; | 729 | tuple.TupleOffset = 0; |
| 728 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 729 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 730 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 731 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 732 | link->conf.ConfigBase = parse.config.base; | ||
| 733 | |||
| 734 | info->manf_id = link->manf_id; | ||
| 735 | 730 | ||
| 736 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 731 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 737 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 732 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index 7aa2820e35bd..431433f4dd6d 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c | |||
| @@ -723,7 +723,7 @@ static int serial_config(struct pcmcia_device * link) | |||
| 723 | u_char *buf; | 723 | u_char *buf; |
| 724 | cisparse_t *parse; | 724 | cisparse_t *parse; |
| 725 | cistpl_cftable_entry_t *cf; | 725 | cistpl_cftable_entry_t *cf; |
| 726 | int i, last_ret, last_fn; | 726 | int i; |
| 727 | 727 | ||
| 728 | DEBUG(0, "serial_config(0x%p)\n", link); | 728 | DEBUG(0, "serial_config(0x%p)\n", link); |
| 729 | 729 | ||
| @@ -740,15 +740,6 @@ static int serial_config(struct pcmcia_device * link) | |||
| 740 | tuple->TupleOffset = 0; | 740 | tuple->TupleOffset = 0; |
| 741 | tuple->TupleDataMax = 255; | 741 | tuple->TupleDataMax = 255; |
| 742 | tuple->Attributes = 0; | 742 | tuple->Attributes = 0; |
| 743 | /* Get configuration register information */ | ||
| 744 | tuple->DesiredTuple = CISTPL_CONFIG; | ||
| 745 | last_ret = first_tuple(link, tuple, parse); | ||
| 746 | if (last_ret != CS_SUCCESS) { | ||
| 747 | last_fn = ParseTuple; | ||
| 748 | goto cs_failed; | ||
| 749 | } | ||
| 750 | link->conf.ConfigBase = parse->config.base; | ||
| 751 | link->conf.Present = parse->config.rmask[0]; | ||
| 752 | 743 | ||
| 753 | /* Is this a compliant multifunction card? */ | 744 | /* Is this a compliant multifunction card? */ |
| 754 | tuple->DesiredTuple = CISTPL_LONGLINK_MFC; | 745 | tuple->DesiredTuple = CISTPL_LONGLINK_MFC; |
| @@ -812,8 +803,6 @@ static int serial_config(struct pcmcia_device * link) | |||
| 812 | kfree(cfg_mem); | 803 | kfree(cfg_mem); |
| 813 | return 0; | 804 | return 0; |
| 814 | 805 | ||
| 815 | cs_failed: | ||
| 816 | cs_error(link, last_fn, last_ret); | ||
| 817 | failed: | 806 | failed: |
| 818 | serial_remove(link); | 807 | serial_remove(link); |
| 819 | kfree(cfg_mem); | 808 | kfree(cfg_mem); |
diff --git a/drivers/telephony/ixj_pcmcia.c b/drivers/telephony/ixj_pcmcia.c index 3f88978d5aee..164a5dcf1f1e 100644 --- a/drivers/telephony/ixj_pcmcia.c +++ b/drivers/telephony/ixj_pcmcia.c | |||
| @@ -144,13 +144,6 @@ static int ixj_config(struct pcmcia_device * link) | |||
| 144 | tuple.TupleData = (cisdata_t *) buf; | 144 | tuple.TupleData = (cisdata_t *) buf; |
| 145 | tuple.TupleOffset = 0; | 145 | tuple.TupleOffset = 0; |
| 146 | tuple.TupleDataMax = 255; | 146 | tuple.TupleDataMax = 255; |
| 147 | tuple.Attributes = 0; | ||
| 148 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 149 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 150 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 151 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 152 | link->conf.ConfigBase = parse.config.base; | ||
| 153 | link->conf.Present = parse.config.rmask[0]; | ||
| 154 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 147 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 155 | tuple.Attributes = 0; | 148 | tuple.Attributes = 0; |
| 156 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 149 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
diff --git a/drivers/usb/host/sl811_cs.c b/drivers/usb/host/sl811_cs.c index 54f554e0f0ad..ac9f11d19817 100644 --- a/drivers/usb/host/sl811_cs.c +++ b/drivers/usb/host/sl811_cs.c | |||
| @@ -169,21 +169,14 @@ static int sl811_cs_config(struct pcmcia_device *link) | |||
| 169 | 169 | ||
| 170 | DBG(0, "sl811_cs_config(0x%p)\n", link); | 170 | DBG(0, "sl811_cs_config(0x%p)\n", link); |
| 171 | 171 | ||
| 172 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 173 | tuple.Attributes = 0; | ||
| 174 | tuple.TupleData = buf; | ||
| 175 | tuple.TupleDataMax = sizeof(buf); | ||
| 176 | tuple.TupleOffset = 0; | ||
| 177 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 178 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 179 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | ||
| 180 | link->conf.ConfigBase = parse.config.base; | ||
| 181 | link->conf.Present = parse.config.rmask[0]; | ||
| 182 | |||
| 183 | /* Look up the current Vcc */ | 172 | /* Look up the current Vcc */ |
| 184 | CS_CHECK(GetConfigurationInfo, | 173 | CS_CHECK(GetConfigurationInfo, |
| 185 | pcmcia_get_configuration_info(link, &conf)); | 174 | pcmcia_get_configuration_info(link, &conf)); |
| 186 | 175 | ||
| 176 | tuple.Attributes = 0; | ||
| 177 | tuple.TupleData = buf; | ||
| 178 | tuple.TupleDataMax = sizeof(buf); | ||
| 179 | tuple.TupleOffset = 0; | ||
| 187 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 180 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 188 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 181 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
| 189 | while (1) { | 182 | while (1) { |
diff --git a/sound/pcmcia/pdaudiocf/pdaudiocf.c b/sound/pcmcia/pdaudiocf/pdaudiocf.c index a31d80cd1655..2d40cc72f236 100644 --- a/sound/pcmcia/pdaudiocf/pdaudiocf.c +++ b/sound/pcmcia/pdaudiocf/pdaudiocf.c | |||
| @@ -219,35 +219,15 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | |||
| 219 | static int pdacf_config(struct pcmcia_device *link) | 219 | static int pdacf_config(struct pcmcia_device *link) |
| 220 | { | 220 | { |
| 221 | struct snd_pdacf *pdacf = link->priv; | 221 | struct snd_pdacf *pdacf = link->priv; |
| 222 | tuple_t tuple; | ||
| 223 | cisparse_t *parse = NULL; | ||
| 224 | u_short buf[32]; | ||
| 225 | int last_fn, last_ret; | 222 | int last_fn, last_ret; |
| 226 | 223 | ||
| 227 | snd_printdd(KERN_DEBUG "pdacf_config called\n"); | 224 | snd_printdd(KERN_DEBUG "pdacf_config called\n"); |
| 228 | parse = kmalloc(sizeof(*parse), GFP_KERNEL); | ||
| 229 | if (! parse) { | ||
| 230 | snd_printk(KERN_ERR "pdacf_config: cannot allocate\n"); | ||
| 231 | return -ENOMEM; | ||
| 232 | } | ||
| 233 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | ||
| 234 | tuple.Attributes = 0; | ||
| 235 | tuple.TupleData = (cisdata_t *)buf; | ||
| 236 | tuple.TupleDataMax = sizeof(buf); | ||
| 237 | tuple.TupleOffset = 0; | ||
| 238 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 239 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 240 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 241 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse)); | ||
| 242 | link->conf.ConfigBase = parse->config.base; | ||
| 243 | link->conf.ConfigIndex = 0x5; | 225 | link->conf.ConfigIndex = 0x5; |
| 244 | 226 | ||
| 245 | CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); | 227 | CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); |
| 246 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); | 228 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); |
| 247 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); | 229 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); |
| 248 | 230 | ||
| 249 | kfree(parse); | ||
| 250 | |||
| 251 | if (snd_pdacf_assign_resources(pdacf, link->io.BasePort1, link->irq.AssignedIRQ) < 0) | 231 | if (snd_pdacf_assign_resources(pdacf, link->io.BasePort1, link->irq.AssignedIRQ) < 0) |
| 252 | goto failed; | 232 | goto failed; |
| 253 | 233 | ||
| @@ -255,7 +235,6 @@ static int pdacf_config(struct pcmcia_device *link) | |||
| 255 | return 0; | 235 | return 0; |
| 256 | 236 | ||
| 257 | cs_failed: | 237 | cs_failed: |
| 258 | kfree(parse); | ||
| 259 | cs_error(link, last_fn, last_ret); | 238 | cs_error(link, last_fn, last_ret); |
| 260 | failed: | 239 | failed: |
| 261 | pcmcia_disable_device(link); | 240 | pcmcia_disable_device(link); |
diff --git a/sound/pcmcia/vx/vxpocket.c b/sound/pcmcia/vx/vxpocket.c index 3089fcca800e..d7df59e9c647 100644 --- a/sound/pcmcia/vx/vxpocket.c +++ b/sound/pcmcia/vx/vxpocket.c | |||
| @@ -217,34 +217,12 @@ static int vxpocket_config(struct pcmcia_device *link) | |||
| 217 | { | 217 | { |
| 218 | struct vx_core *chip = link->priv; | 218 | struct vx_core *chip = link->priv; |
| 219 | struct snd_vxpocket *vxp = (struct snd_vxpocket *)chip; | 219 | struct snd_vxpocket *vxp = (struct snd_vxpocket *)chip; |
| 220 | tuple_t tuple; | ||
| 221 | cisparse_t *parse; | ||
| 222 | u_short buf[32]; | ||
| 223 | int last_fn, last_ret; | 220 | int last_fn, last_ret; |
| 224 | 221 | ||
| 225 | snd_printdd(KERN_DEBUG "vxpocket_config called\n"); | 222 | snd_printdd(KERN_DEBUG "vxpocket_config called\n"); |
| 226 | parse = kmalloc(sizeof(*parse), GFP_KERNEL); | ||
| 227 | if (! parse) { | ||
| 228 | snd_printk(KERN_ERR "vx: cannot allocate\n"); | ||
| 229 | return -ENOMEM; | ||
| 230 | } | ||
| 231 | tuple.Attributes = 0; | ||
| 232 | tuple.TupleData = (cisdata_t *)buf; | ||
| 233 | tuple.TupleDataMax = sizeof(buf); | ||
| 234 | tuple.TupleOffset = 0; | ||
| 235 | tuple.DesiredTuple = CISTPL_CONFIG; | ||
| 236 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 237 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 238 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse)); | ||
| 239 | link->conf.ConfigBase = parse->config.base; | ||
| 240 | link->conf.Present = parse->config.rmask[0]; | ||
| 241 | 223 | ||
| 242 | /* redefine hardware record according to the VERSION1 string */ | 224 | /* redefine hardware record according to the VERSION1 string */ |
| 243 | tuple.DesiredTuple = CISTPL_VERS_1; | 225 | if (!strcmp(link->prod_id[1], "VX-POCKET")) { |
| 244 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
| 245 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
| 246 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse)); | ||
| 247 | if (! strcmp(parse->version_1.str + parse->version_1.ofs[1], "VX-POCKET")) { | ||
| 248 | snd_printdd("VX-pocket is detected\n"); | 226 | snd_printdd("VX-pocket is detected\n"); |
| 249 | } else { | 227 | } else { |
| 250 | snd_printdd("VX-pocket 440 is detected\n"); | 228 | snd_printdd("VX-pocket 440 is detected\n"); |
| @@ -265,14 +243,12 @@ static int vxpocket_config(struct pcmcia_device *link) | |||
| 265 | goto failed; | 243 | goto failed; |
| 266 | 244 | ||
| 267 | link->dev_node = &vxp->node; | 245 | link->dev_node = &vxp->node; |
| 268 | kfree(parse); | ||
| 269 | return 0; | 246 | return 0; |
| 270 | 247 | ||
| 271 | cs_failed: | 248 | cs_failed: |
| 272 | cs_error(link, last_fn, last_ret); | 249 | cs_error(link, last_fn, last_ret); |
| 273 | failed: | 250 | failed: |
| 274 | pcmcia_disable_device(link); | 251 | pcmcia_disable_device(link); |
| 275 | kfree(parse); | ||
| 276 | return -ENODEV; | 252 | return -ENODEV; |
| 277 | } | 253 | } |
| 278 | 254 | ||
