Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge master.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6:
[PATCH] pcmcia: at91_cf update
[PATCH] pcmcia: fix m32r_cfc.c compilation
[PATCH] pcmcia: ds.c debug enhancements
[PATCH] pcmcia: at91_cf update
[PATCH] pcmcia: conf.ConfigBase and conf.Present consolidation
[PATCH] pcmcia: remove prod_id indirection
[PATCH] pcmcia: remove manf_id and card_id indirection
[PATCH] pcmcia: IDs for Elan serial PCMCIA devcies
[PATCH] pcmcia: allow for four multifunction subdevices
[PATCH] pcmcia: handle __copy_from_user() return value in ioctl
[PATCH] pcmcia: multifunction card handling fixes
[PATCH] pcmcia: allow shared IRQs on pd6729 sockets
[PATCH] pcmcia: start over after CIS override
[PATCH] cm4000_cs: fix return value check
[PATCH] pcmcia: yet another IDE ID
[PATCH] pcmcia: Add an id to ide-cs.c

+380 -932
+5 -10
drivers/ata/pata_pcmcia.c
··· 154 154 tuple.TupleOffset = 0; 155 155 tuple.TupleDataMax = 255; 156 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 158 /* See if we have a manufacturer identifier. Use it to set is_kme for 166 159 vendor quirks */ 167 - tuple.DesiredTuple = CISTPL_MANFID; 168 - if (!pcmcia_get_first_tuple(pdev, &tuple) && !pcmcia_get_tuple_data(pdev, &tuple) && !pcmcia_parse_tuple(pdev, &tuple, &stk->parse)) 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))); 160 + is_kme = ((pdev->manf_id == MANFID_KME) && 161 + ((pdev->card_id == PRODID_KME_KXLC005_A) || 162 + (pdev->card_id == PRODID_KME_KXLC005_B))); 170 163 171 164 /* Not sure if this is right... look up the current Vcc */ 172 165 CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(pdev, &stk->conf)); ··· 349 356 PCMCIA_DEVICE_PROD_ID12("SMI VENDOR", "SMI PRODUCT", 0x30896c92, 0x703cc5f6), 350 357 PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003), 351 358 PCMCIA_DEVICE_PROD_ID1("TRANSCEND 512M ", 0xd0909443), 359 + PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS1GCF80", 0x709b1bf1, 0x2a54d4b1), 352 360 PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF120", 0x709b1bf1, 0xf54a91c8), 353 361 PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852), 362 + PCMCIA_DEVICE_PROD_ID12("WEIDA", "TWTTI", 0xcc7cf69c, 0x212bb918), 354 363 PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209), 355 364 PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e), 356 365 PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
+1 -37
drivers/bluetooth/bluecard_cs.c
··· 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 895 static int bluecard_config(struct pcmcia_device *link) 911 896 { 912 897 bluecard_info_t *info = link->priv; 913 - tuple_t tuple; 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]; 898 + int i, n; 932 899 933 900 link->conf.ConfigIndex = 0x20; 934 901 link->io.NumPorts1 = 64; ··· 932 965 link->dev_node = &info->node; 933 966 934 967 return 0; 935 - 936 - cs_failed: 937 - cs_error(link, last_fn, last_ret); 938 968 939 969 failed: 940 970 bluecard_release(link);
+1 -19
drivers/bluetooth/bt3c_cs.c
··· 713 713 u_short buf[256]; 714 714 cisparse_t parse; 715 715 cistpl_cftable_entry_t *cf = &parse.cftable_entry; 716 - int i, j, try, last_ret, last_fn; 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]; 716 + int i, j, try; 732 717 733 718 /* First pass: look for a config entry that looks normal. */ 734 719 tuple.TupleData = (cisdata_t *)buf; ··· 786 801 link->dev_node = &info->node; 787 802 788 803 return 0; 789 - 790 - cs_failed: 791 - cs_error(link, last_fn, last_ret); 792 804 793 805 failed: 794 806 bt3c_release(link);
+1 -19
drivers/bluetooth/btuart_cs.c
··· 644 644 u_short buf[256]; 645 645 cisparse_t parse; 646 646 cistpl_cftable_entry_t *cf = &parse.cftable_entry; 647 - int i, j, try, last_ret, last_fn; 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]; 647 + int i, j, try; 663 648 664 649 /* First pass: look for a config entry that looks normal. */ 665 650 tuple.TupleData = (cisdata_t *) buf; ··· 718 733 link->dev_node = &info->node; 719 734 720 735 return 0; 721 - 722 - cs_failed: 723 - cs_error(link, last_fn, last_ret); 724 736 725 737 failed: 726 738 btuart_release(link);
+1 -19
drivers/bluetooth/dtl1_cs.c
··· 626 626 u_short buf[256]; 627 627 cisparse_t parse; 628 628 cistpl_cftable_entry_t *cf = &parse.cftable_entry; 629 - int i, last_ret, last_fn; 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]; 629 + int i; 645 630 646 631 tuple.TupleData = (cisdata_t *)buf; 647 632 tuple.TupleOffset = 0; ··· 674 689 link->dev_node = &info->node; 675 690 676 691 return 0; 677 - 678 - cs_failed: 679 - cs_error(link, last_fn, last_ret); 680 692 681 693 failed: 682 694 dtl1_release(link);
+3 -23
drivers/char/pcmcia/cm4000_cs.c
··· 1764 1764 int rc; 1765 1765 1766 1766 /* read the config-tuples */ 1767 - tuple.DesiredTuple = CISTPL_CONFIG; 1768 1767 tuple.Attributes = 0; 1769 1768 tuple.TupleData = buf; 1770 1769 tuple.TupleDataMax = sizeof(buf); 1771 1770 tuple.TupleOffset = 0; 1772 - 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 1771 1790 1772 link->io.BasePort2 = 0; 1791 1773 link->io.NumPorts2 = 0; ··· 1823 1841 1824 1842 return 0; 1825 1843 1826 - cs_failed: 1827 - cs_error(link, fail_fn, fail_rc); 1828 1844 cs_release: 1829 1845 cm4000_release(link); 1830 1846 return -ENODEV; ··· 1953 1973 printk(KERN_INFO "%s\n", version); 1954 1974 1955 1975 cmm_class = class_create(THIS_MODULE, "cardman_4000"); 1956 - if (!cmm_class) 1957 - return -1; 1976 + if (IS_ERR(cmm_class)) 1977 + return PTR_ERR(cmm_class); 1958 1978 1959 1979 major = register_chrdev(0, DEVICE_NAME, &cm4000_fops); 1960 1980 if (major < 0) { 1961 1981 printk(KERN_WARNING MODULE_NAME 1962 1982 ": could not get major number\n"); 1963 - return -1; 1983 + return major; 1964 1984 } 1965 1985 1966 1986 rc = pcmcia_register_driver(&cm4000_driver);
+3 -23
drivers/char/pcmcia/cm4040_cs.c
··· 523 523 int fail_fn, fail_rc; 524 524 int rc; 525 525 526 - tuple.DesiredTuple = CISTPL_CONFIG; 527 526 tuple.Attributes = 0; 528 527 tuple.TupleData = buf; 529 528 tuple.TupleDataMax = sizeof(buf); 530 529 tuple.TupleOffset = 0; 531 - 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 530 549 531 link->io.BasePort2 = 0; 550 532 link->io.NumPorts2 = 0; ··· 591 609 592 610 return 0; 593 611 594 - cs_failed: 595 - cs_error(link, fail_fn, fail_rc); 596 612 cs_release: 597 613 reader_release(link); 598 614 return -ENODEV; ··· 701 721 702 722 printk(KERN_INFO "%s\n", version); 703 723 cmx_class = class_create(THIS_MODULE, "cardman_4040"); 704 - if (!cmx_class) 705 - return -1; 724 + if (IS_ERR(cmx_class)) 725 + return PTR_ERR(cmx_class); 706 726 707 727 major = register_chrdev(0, DEVICE_NAME, &reader_fops); 708 728 if (major < 0) { 709 729 printk(KERN_WARNING MODULE_NAME 710 730 ": could not get major number\n"); 711 - return -1; 731 + return major; 712 732 } 713 733 714 734 rc = pcmcia_register_driver(&reader_driver);
+5 -13
drivers/ide/legacy/ide-cs.c
··· 192 192 tuple.TupleOffset = 0; 193 193 tuple.TupleDataMax = 255; 194 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 - tuple.DesiredTuple = CISTPL_MANFID; 203 - if (!pcmcia_get_first_tuple(link, &tuple) && 204 - !pcmcia_get_tuple_data(link, &tuple) && 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))); 196 + is_kme = ((link->manf_id == MANFID_KME) && 197 + ((link->card_id == PRODID_KME_KXLC005_A) || 198 + (link->card_id == PRODID_KME_KXLC005_B))); 209 199 210 200 /* Not sure if this is right... look up the current Vcc */ 211 201 CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &stk->conf)); ··· 398 408 PCMCIA_DEVICE_PROD_ID12("SMI VENDOR", "SMI PRODUCT", 0x30896c92, 0x703cc5f6), 399 409 PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003), 400 410 PCMCIA_DEVICE_PROD_ID1("TRANSCEND 512M ", 0xd0909443), 411 + PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS1GCF80", 0x709b1bf1, 0x2a54d4b1), 401 412 PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF120", 0x709b1bf1, 0xf54a91c8), 402 413 PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852), 414 + PCMCIA_DEVICE_PROD_ID12("WEIDA", "TWTTI", 0xcc7cf69c, 0x212bb918), 403 415 PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209), 404 416 PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e), 405 417 PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
+3 -33
drivers/isdn/hardware/avm/avm_cs.c
··· 194 194 195 195 dev = link->priv; 196 196 197 - /* 198 - This reads the card's CONFIG tuple to find its configuration 199 - registers. 200 - */ 201 197 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 { 220 - 221 - tuple.Attributes = 0; 222 - tuple.TupleData = buf; 223 - tuple.TupleDataMax = 254; 224 - tuple.TupleOffset = 0; 225 - tuple.DesiredTuple = CISTPL_VERS_1; 226 - 227 198 devname[0] = 0; 228 - if( !first_tuple(link, &tuple, &parse) && parse.version_1.ns > 1 ) { 229 - strlcpy(devname,parse.version_1.str + parse.version_1.ofs[1], 230 - sizeof(devname)); 231 - } 199 + if (link->prod_id[1]) 200 + strlcpy(devname, link->prod_id[1], sizeof(devname)); 201 + 232 202 /* 233 203 * find IO port 234 204 */
+3 -33
drivers/isdn/hisax/avma1_cs.c
··· 216 216 217 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 219 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 { 242 - 243 - tuple.Attributes = 0; 244 - tuple.TupleData = buf; 245 - tuple.TupleDataMax = 254; 246 - tuple.TupleOffset = 0; 247 - tuple.DesiredTuple = CISTPL_VERS_1; 248 - 249 220 devname[0] = 0; 250 - if( !first_tuple(link, &tuple, &parse) && parse.version_1.ns > 1 ) { 251 - strlcpy(devname,parse.version_1.str + parse.version_1.ofs[1], 252 - sizeof(devname)); 253 - } 221 + if (link->prod_id[1]) 222 + strlcpy(devname, link->prod_id[1], sizeof(devname)); 223 + 254 224 /* 255 225 * find IO port 256 226 */
-17
drivers/isdn/hisax/elsa_cs.c
··· 242 242 DEBUG(0, "elsa_config(0x%p)\n", link); 243 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 245 tuple.TupleData = (cisdata_t *)buf; 263 246 tuple.TupleOffset = 0; tuple.TupleDataMax = 255; 264 247 tuple.Attributes = 0;
-10
drivers/isdn/hisax/sedlbauer_cs.c
··· 233 233 234 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 236 tuple.Attributes = 0; 242 237 tuple.TupleData = buf; 243 238 tuple.TupleDataMax = sizeof(buf); 244 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 241 CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &conf)); 252 242
-17
drivers/isdn/hisax/teles_cs.c
··· 232 232 DEBUG(0, "teles_config(0x%p)\n", link); 233 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 235 tuple.TupleData = (cisdata_t *)buf; 253 236 tuple.TupleOffset = 0; tuple.TupleDataMax = 255; 254 237 tuple.Attributes = 0;
+7 -18
drivers/net/pcmcia/3c574_cs.c
··· 338 338 struct net_device *dev = link->priv; 339 339 struct el3_private *lp = netdev_priv(dev); 340 340 tuple_t tuple; 341 - cisparse_t parse; 342 341 unsigned short buf[32]; 343 342 int last_fn, last_ret, i, j; 344 343 kio_addr_t ioaddr; ··· 348 349 phys_addr = (u16 *)dev->dev_addr; 349 350 350 351 DEBUG(0, "3c574_config(0x%p)\n", link); 351 - 352 - tuple.Attributes = 0; 353 - tuple.DesiredTuple = CISTPL_CONFIG; 354 - CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 355 - tuple.TupleData = (cisdata_t *)buf; 356 - tuple.TupleDataMax = 64; 357 - tuple.TupleOffset = 0; 358 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 359 - CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); 360 - link->conf.ConfigBase = parse.config.base; 361 - link->conf.Present = parse.config.rmask[0]; 362 352 363 353 link->io.IOAddrLines = 16; 364 354 for (i = j = 0; j < 0x400; j += 0x20) { ··· 370 382 /* The 3c574 normally uses an EEPROM for configuration info, including 371 383 the hardware address. The future products may include a modem chip 372 384 and put the address in the CIS. */ 385 + tuple.Attributes = 0; 386 + tuple.TupleData = (cisdata_t *)buf; 387 + tuple.TupleDataMax = 64; 388 + tuple.TupleOffset = 0; 373 389 tuple.DesiredTuple = 0x88; 374 390 if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) { 375 391 pcmcia_get_tuple_data(link, &tuple); ··· 389 397 goto failed; 390 398 } 391 399 } 392 - tuple.DesiredTuple = CISTPL_VERS_1; 393 - if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS && 394 - pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS && 395 - pcmcia_parse_tuple(link, &tuple, &parse) == CS_SUCCESS) { 396 - cardname = parse.version_1.str + parse.version_1.ofs[1]; 397 - } else 400 + if (link->prod_id[1]) 401 + cardname = link->prod_id[1]; 402 + else 398 403 cardname = "3Com 3c574"; 399 404 400 405 {
+4 -15
drivers/net/pcmcia/3c589_cs.c
··· 253 253 struct net_device *dev = link->priv; 254 254 struct el3_private *lp = netdev_priv(dev); 255 255 tuple_t tuple; 256 - cisparse_t parse; 257 256 u16 buf[32], *phys_addr; 258 257 int last_fn, last_ret, i, j, multi = 0, fifo; 259 258 kio_addr_t ioaddr; ··· 262 263 263 264 phys_addr = (u16 *)dev->dev_addr; 264 265 tuple.Attributes = 0; 265 - tuple.DesiredTuple = CISTPL_CONFIG; 266 - CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 267 266 tuple.TupleData = (cisdata_t *)buf; 268 267 tuple.TupleDataMax = sizeof(buf); 269 268 tuple.TupleOffset = 0; 270 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 271 - CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); 272 - link->conf.ConfigBase = parse.config.base; 273 - link->conf.Present = parse.config.rmask[0]; 274 - 275 - /* Is this a 3c562? */ 276 - tuple.DesiredTuple = CISTPL_MANFID; 277 269 tuple.Attributes = TUPLE_RETURN_COMMON; 278 - if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) && 279 - (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) { 280 - if (le16_to_cpu(buf[0]) != MANFID_3COM) 270 + 271 + /* Is this a 3c562? */ 272 + if (link->manf_id != MANFID_3COM) 281 273 printk(KERN_INFO "3c589_cs: hmmm, is this really a " 282 274 "3Com card??\n"); 283 - multi = (le16_to_cpu(buf[1]) == PRODID_3COM_3C562); 284 - } 275 + multi = (link->card_id == PRODID_3COM_3C562); 285 276 286 277 /* For the 3c562, the base address must be xx00-xx7f */ 287 278 link->io.IOAddrLines = 16;
+1 -5
drivers/net/pcmcia/axnet_cs.c
··· 299 299 tuple.TupleData = (cisdata_t *)buf; 300 300 tuple.TupleDataMax = sizeof(buf); 301 301 tuple.TupleOffset = 0; 302 - tuple.DesiredTuple = CISTPL_CONFIG; 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; 302 + 307 303 /* don't trust the CIS on this; Linksys got it wrong */ 308 304 link->conf.Present = 0x63; 309 305
-13
drivers/net/pcmcia/com20020_cs.c
··· 249 249 static int com20020_config(struct pcmcia_device *link) 250 250 { 251 251 struct arcnet_local *lp; 252 - tuple_t tuple; 253 - cisparse_t parse; 254 252 com20020_dev_t *info; 255 253 struct net_device *dev; 256 254 int i, last_ret, last_fn; 257 - u_char buf[64]; 258 255 int ioaddr; 259 256 260 257 info = link->priv; ··· 260 263 DEBUG(1,"config...\n"); 261 264 262 265 DEBUG(0, "com20020_config(0x%p)\n", link); 263 - 264 - tuple.Attributes = 0; 265 - tuple.TupleData = buf; 266 - tuple.TupleDataMax = 64; 267 - tuple.TupleOffset = 0; 268 - tuple.DesiredTuple = CISTPL_CONFIG; 269 - CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 270 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 271 - CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); 272 - link->conf.ConfigBase = parse.config.base; 273 266 274 267 DEBUG(1,"arcnet: baseport1 is %Xh\n", link->io.BasePort1); 275 268 i = !CS_SUCCESS;
+9 -31
drivers/net/pcmcia/fmvj18x_cs.c
··· 342 342 tuple_t tuple; 343 343 cisparse_t parse; 344 344 u_short buf[32]; 345 - int i, last_fn, last_ret, ret; 345 + int i, last_fn = 0, last_ret = 0, ret; 346 346 kio_addr_t ioaddr; 347 347 cardtype_t cardtype; 348 348 char *card_name = "unknown"; ··· 350 350 351 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 353 tuple.TupleData = (u_char *)buf; 360 354 tuple.TupleDataMax = 64; 361 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 356 tuple.DesiredTuple = CISTPL_FUNCE; 369 357 tuple.TupleOffset = 0; 370 358 if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) { ··· 362 374 CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 363 375 CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); 364 376 link->conf.ConfigIndex = parse.cftable_entry.index; 365 - tuple.DesiredTuple = CISTPL_MANFID; 366 - if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) 367 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 368 - else 369 - buf[0] = 0xffff; 370 - switch (le16_to_cpu(buf[0])) { 377 + switch (link->manf_id) { 371 378 case MANFID_TDK: 372 379 cardtype = TDK; 373 - if (le16_to_cpu(buf[1]) == PRODID_TDK_GN3410 374 - || le16_to_cpu(buf[1]) == PRODID_TDK_NP9610 375 - || le16_to_cpu(buf[1]) == PRODID_TDK_MN3200) { 380 + if (link->card_id == PRODID_TDK_GN3410 381 + || link->card_id == PRODID_TDK_NP9610 382 + || link->card_id == PRODID_TDK_MN3200) { 376 383 /* MultiFunction Card */ 377 384 link->conf.ConfigBase = 0x800; 378 385 link->conf.ConfigIndex = 0x47; ··· 378 395 cardtype = CONTEC; 379 396 break; 380 397 case MANFID_FUJITSU: 381 - if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10302) 398 + if (link->card_id == PRODID_FUJITSU_MBH10302) 382 399 /* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302), 383 400 but these are MBH10304 based card. */ 384 401 cardtype = MBH10304; 385 - else if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10304) 402 + else if (link->card_id == PRODID_FUJITSU_MBH10304) 386 403 cardtype = MBH10304; 387 404 else 388 405 cardtype = LA501; ··· 392 409 } 393 410 } else { 394 411 /* old type card */ 395 - tuple.DesiredTuple = CISTPL_MANFID; 396 - if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) 397 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 398 - else 399 - buf[0] = 0xffff; 400 - switch (le16_to_cpu(buf[0])) { 412 + switch (link->manf_id) { 401 413 case MANFID_FUJITSU: 402 - if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10304) { 414 + if (link->card_id == PRODID_FUJITSU_MBH10304) { 403 415 cardtype = XXX10304; /* MBH10304 with buggy CIS */ 404 416 link->conf.ConfigIndex = 0x20; 405 417 } else {
-12
drivers/net/pcmcia/ibmtr_cs.c
··· 222 222 ibmtr_dev_t *info = link->priv; 223 223 struct net_device *dev = info->dev; 224 224 struct tok_info *ti = netdev_priv(dev); 225 - tuple_t tuple; 226 - cisparse_t parse; 227 225 win_req_t req; 228 226 memreq_t mem; 229 227 int i, last_ret, last_fn; 230 - u_char buf[64]; 231 228 232 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 231 link->conf.ConfigIndex = 0x61; 244 232 245 233 /* Determine if this is PRIMARY or ALTERNATE. */
+1 -11
drivers/net/pcmcia/nmclan_cs.c
··· 656 656 struct net_device *dev = link->priv; 657 657 mace_private *lp = netdev_priv(dev); 658 658 tuple_t tuple; 659 - cisparse_t parse; 660 659 u_char buf[64]; 661 660 int i, last_ret, last_fn; 662 661 kio_addr_t ioaddr; 663 662 664 663 DEBUG(0, "nmclan_config(0x%p)\n", link); 665 - 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 664 676 665 CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); 677 666 CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); ··· 675 686 tuple.TupleData = buf; 676 687 tuple.TupleDataMax = 64; 677 688 tuple.TupleOffset = 0; 689 + tuple.Attributes = 0; 678 690 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 679 691 CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 680 692 memcpy(dev->dev_addr, tuple.TupleData, ETHER_ADDR_LEN);
+7 -23
drivers/net/pcmcia/pcnet_cs.c
··· 519 519 tuple_t tuple; 520 520 cisparse_t parse; 521 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 523 u_short buf[64]; 524 524 hw_info_t *hw_info; 525 525 526 526 DEBUG(0, "pcnet_config(0x%p)\n", link); 527 527 528 - tuple.Attributes = 0; 529 528 tuple.TupleData = (cisdata_t *)buf; 530 529 tuple.TupleDataMax = sizeof(buf); 531 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_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 531 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 548 532 tuple.Attributes = 0; 549 533 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); ··· 573 589 link->conf.Attributes |= CONF_ENABLE_SPKR; 574 590 link->conf.Status = CCSR_AUDIO_ENA; 575 591 } 576 - if ((manfid == MANFID_IBM) && 577 - (prodid == PRODID_IBM_HOME_AND_AWAY)) 592 + if ((link->manf_id == MANFID_IBM) && 593 + (link->card_id == PRODID_IBM_HOME_AND_AWAY)) 578 594 link->conf.ConfigIndex |= 0x10; 579 595 580 596 CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); ··· 608 624 info->flags = hw_info->flags; 609 625 /* Check for user overrides */ 610 626 info->flags |= (delay_output) ? DELAY_OUTPUT : 0; 611 - if ((manfid == MANFID_SOCKET) && 612 - ((prodid == PRODID_SOCKET_LPE) || 613 - (prodid == PRODID_SOCKET_LPE_CF) || 614 - (prodid == PRODID_SOCKET_EIO))) 627 + if ((link->manf_id == MANFID_SOCKET) && 628 + ((link->card_id == PRODID_SOCKET_LPE) || 629 + (link->card_id == PRODID_SOCKET_LPE_CF) || 630 + (link->card_id == PRODID_SOCKET_EIO))) 615 631 info->flags &= ~USE_BIG_BUF; 616 632 if (!use_big_buf) 617 633 info->flags &= ~USE_BIG_BUF;
+10 -49
drivers/net/pcmcia/smc91c92_cs.c
··· 560 560 561 561 /* Read the station address from the CIS. It is stored as the last 562 562 (fourth) string in the Version 1 Version/ID tuple. */ 563 - tuple->DesiredTuple = CISTPL_VERS_1; 564 - if (first_tuple(link, tuple, parse) != CS_SUCCESS) { 565 - rc = -1; 566 - goto free_cfg_mem; 567 - } 568 - /* Ugh -- the EM1144 card has two VERS_1 tuples!?! */ 569 - if (next_tuple(link, tuple, parse) != CS_SUCCESS) 570 - first_tuple(link, tuple, parse); 571 - if (parse->version_1.ns > 3) { 572 - station_addr = parse->version_1.str + parse->version_1.ofs[3]; 563 + if (link->prod_id[3]) { 564 + station_addr = link->prod_id[3]; 573 565 if (cvt_ascii_address(dev, station_addr) == 0) { 574 566 rc = 0; 575 567 goto free_cfg_mem; ··· 736 744 } 737 745 } 738 746 /* Try the third string in the Version 1 Version/ID tuple. */ 739 - tuple->DesiredTuple = CISTPL_VERS_1; 740 - if (first_tuple(link, tuple, parse) != CS_SUCCESS) { 741 - rc = -1; 742 - goto free_cfg_mem; 743 - } 744 - station_addr = parse->version_1.str + parse->version_1.ofs[2]; 745 - if (cvt_ascii_address(dev, station_addr) == 0) { 746 - rc = 0; 747 - goto free_cfg_mem; 747 + if (link->prod_id[2]) { 748 + station_addr = link->prod_id[2]; 749 + if (cvt_ascii_address(dev, station_addr) == 0) { 750 + rc = 0; 751 + goto free_cfg_mem; 752 + } 748 753 } 749 754 750 755 rc = -1; ··· 959 970 { 960 971 struct net_device *dev = link->priv; 961 972 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 973 char *name; 967 974 int i, j, rev; 968 975 kio_addr_t ioaddr; ··· 966 981 967 982 DEBUG(0, "smc91c92_config(0x%p)\n", link); 968 983 969 - cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL); 970 - if (!cfg_mem) 971 - goto config_failed; 972 - 973 - tuple = &cfg_mem->tuple; 974 - parse = &cfg_mem->parse; 975 - buf = cfg_mem->buf; 976 - 977 - tuple->Attributes = tuple->TupleOffset = 0; 978 - tuple->TupleData = (cisdata_t *)buf; 979 - tuple->TupleDataMax = 64; 980 - 981 - tuple->DesiredTuple = CISTPL_CONFIG; 982 - i = first_tuple(link, tuple, parse); 983 - CS_EXIT_TEST(i, ParseTuple, config_failed); 984 - link->conf.ConfigBase = parse->config.base; 985 - link->conf.Present = parse->config.rmask[0]; 986 - 987 - tuple->DesiredTuple = CISTPL_MANFID; 988 - tuple->Attributes = TUPLE_RETURN_COMMON; 989 - if (first_tuple(link, tuple, parse) == CS_SUCCESS) { 990 - smc->manfid = parse->manfid.manf; 991 - smc->cardid = parse->manfid.card; 992 - } 984 + smc->manfid = link->manf_id; 985 + smc->cardid = link->card_id; 993 986 994 987 if ((smc->manfid == MANFID_OSITECH) && 995 988 (smc->cardid != PRODID_OSITECH_SEVEN)) { ··· 1097 1134 printk(KERN_NOTICE " No MII transceivers found!\n"); 1098 1135 } 1099 1136 } 1100 - kfree(cfg_mem); 1101 1137 return 0; 1102 1138 1103 1139 config_undo: 1104 1140 unregister_netdev(dev); 1105 1141 config_failed: /* CS_EXIT_TEST() calls jump to here... */ 1106 1142 smc91c92_release(link); 1107 - kfree(cfg_mem); 1108 1143 return -ENODEV; 1109 1144 } /* smc91c92_config */ 1110 1145
+4 -24
drivers/net/pcmcia/xirc2ps_cs.c
··· 707 707 * Returns: true if this is a CE2 708 708 */ 709 709 static int 710 - has_ce2_string(struct pcmcia_device * link) 710 + has_ce2_string(struct pcmcia_device * p_dev) 711 711 { 712 - tuple_t tuple; 713 - cisparse_t parse; 714 - u_char buf[256]; 715 - 716 - tuple.Attributes = 0; 717 - tuple.TupleData = buf; 718 - tuple.TupleDataMax = 254; 719 - tuple.TupleOffset = 0; 720 - tuple.DesiredTuple = CISTPL_VERS_1; 721 - if (!first_tuple(link, &tuple, &parse) && parse.version_1.ns > 2) { 722 - if (strstr(parse.version_1.str + parse.version_1.ofs[2], "CE2")) 723 - return 1; 724 - } 725 - return 0; 712 + if (p_dev->prod_id[2] && strstr(p_dev->prod_id[2], "CE2")) 713 + return 1; 714 + return 0; 726 715 } 727 716 728 717 /**************** ··· 780 791 printk(KNOT_XIRC "this card is not supported\n"); 781 792 goto failure; 782 793 } 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 794 791 795 /* get the ethernet address from the CIS */ 792 796 tuple.DesiredTuple = CISTPL_FUNCE; ··· 1044 1062 xirc2ps_release(link); 1045 1063 return -ENODEV; 1046 1064 1047 - cis_error: 1048 - printk(KNOT_XIRC "unable to parse CIS\n"); 1049 1065 failure: 1050 1066 return -ENODEV; 1051 1067 } /* xirc2ps_config */
+4 -15
drivers/net/wireless/airo_cs.c
··· 219 219 dev = link->priv; 220 220 221 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 224 In this loop, we scan the CIS for configuration table entries, ··· 232 247 these things without consulting the CIS, and most client drivers 233 248 will only use the CIS to fill in implementation-defined details. 234 249 */ 250 + tuple.Attributes = 0; 251 + tuple.TupleData = buf; 252 + tuple.TupleDataMax = sizeof(buf); 253 + tuple.TupleOffset = 0; 235 254 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 236 255 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 237 256 while (1) {
-11
drivers/net/wireless/atmel_cs.c
··· 244 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 247 In this loop, we scan the CIS for configuration table entries, 259 248 each of which describes a valid card configuration, including 260 249 voltage, IO window, memory window, and interrupt settings.
+2 -11
drivers/net/wireless/hostap/hostap_cs.c
··· 293 293 goto done; 294 294 } 295 295 296 - tuple.DesiredTuple = CISTPL_MANFID; 297 296 tuple.Attributes = TUPLE_RETURN_COMMON; 298 297 tuple.TupleData = buf; 299 298 tuple.TupleDataMax = sizeof(buf); 300 299 tuple.TupleOffset = 0; 301 - if (pcmcia_get_first_tuple(hw_priv->link, &tuple) || 302 - pcmcia_get_tuple_data(hw_priv->link, &tuple) || 303 - pcmcia_parse_tuple(hw_priv->link, &tuple, parse) || 304 - parse->manfid.manf != 0xd601 || parse->manfid.card != 0x0101) { 300 + 301 + if (hw_priv->link->manf_id != 0xd601 || hw_priv->link->card_id != 0x0101) { 305 302 /* No SanDisk manfid found */ 306 303 ret = -ENODEV; 307 304 goto done; ··· 570 573 } 571 574 memset(hw_priv, 0, sizeof(*hw_priv)); 572 575 573 - tuple.DesiredTuple = CISTPL_CONFIG; 574 576 tuple.Attributes = 0; 575 577 tuple.TupleData = buf; 576 578 tuple.TupleDataMax = sizeof(buf); 577 579 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 580 584 581 CS_CHECK(GetConfigurationInfo, 585 582 pcmcia_get_configuration_info(link, &conf));
-18
drivers/net/wireless/netwave_cs.c
··· 735 735 static int netwave_pcmcia_config(struct pcmcia_device *link) { 736 736 struct net_device *dev = link->priv; 737 737 netwave_private *priv = netdev_priv(dev); 738 - tuple_t tuple; 739 - cisparse_t parse; 740 738 int i, j, last_ret, last_fn; 741 - u_char buf[64]; 742 739 win_req_t req; 743 740 memreq_t mem; 744 741 u_char __iomem *ramBase = NULL; 745 742 746 743 DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link); 747 - 748 - /* 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 744 763 745 /* 764 746 * Try allocating IO ports. This tries a few fixed addresses.
+4 -15
drivers/net/wireless/orinoco_cs.c
··· 178 178 cisparse_t parse; 179 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 181 /* Look up the current Vcc */ 197 182 CS_CHECK(GetConfigurationInfo, 198 183 pcmcia_get_configuration_info(link, &conf)); ··· 196 211 * and most client drivers will only use the CIS to fill in 197 212 * implementation-defined details. 198 213 */ 214 + tuple.Attributes = 0; 215 + tuple.TupleData = buf; 216 + tuple.TupleDataMax = sizeof(buf); 217 + tuple.TupleOffset = 0; 199 218 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 200 219 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 201 220 while (1) {
+5 -25
drivers/net/wireless/ray_cs.c
··· 408 408 #define MAX_TUPLE_SIZE 128 409 409 static int ray_config(struct pcmcia_device *link) 410 410 { 411 - tuple_t tuple; 412 - cisparse_t parse; 413 411 int last_fn = 0, last_ret = 0; 414 412 int i; 415 - u_char buf[MAX_TUPLE_SIZE]; 416 413 win_req_t req; 417 414 memreq_t mem; 418 415 struct net_device *dev = (struct net_device *)link->priv; ··· 417 420 418 421 DEBUG(1, "ray_config(0x%p)\n", link); 419 422 420 - /* This reads the card's CONFIG tuple to find its configuration regs */ 421 - tuple.DesiredTuple = CISTPL_CONFIG; 422 - CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 423 - tuple.TupleData = buf; 424 - tuple.TupleDataMax = MAX_TUPLE_SIZE; 425 - tuple.TupleOffset = 0; 426 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 427 - CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); 428 - link->conf.ConfigBase = parse.config.base; 429 - link->conf.Present = parse.config.rmask[0]; 430 - 431 423 /* Determine card type and firmware version */ 432 - buf[0] = buf[MAX_TUPLE_SIZE - 1] = 0; 433 - tuple.DesiredTuple = CISTPL_VERS_1; 434 - CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 435 - tuple.TupleData = buf; 436 - tuple.TupleDataMax = MAX_TUPLE_SIZE; 437 - tuple.TupleOffset = 2; 438 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 439 - 440 - for (i=0; i<tuple.TupleDataLen - 4; i++) 441 - if (buf[i] == 0) buf[i] = ' '; 442 - printk(KERN_INFO "ray_cs Detected: %s\n",buf); 424 + printk(KERN_INFO "ray_cs Detected: %s%s%s%s\n", 425 + link->prod_id[0] ? link->prod_id[0] : " ", 426 + link->prod_id[1] ? link->prod_id[1] : " ", 427 + link->prod_id[2] ? link->prod_id[2] : " ", 428 + link->prod_id[3] ? link->prod_id[3] : " "); 443 429 444 430 /* Now allocate an interrupt line. Note that this does not 445 431 actually assign a handler to the interrupt.
+4 -15
drivers/net/wireless/spectrum_cs.c
··· 647 647 cisparse_t parse; 648 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 650 /* Look up the current Vcc */ 666 651 CS_CHECK(GetConfigurationInfo, 667 652 pcmcia_get_configuration_info(link, &conf)); ··· 666 681 * implementation-defined details. 667 682 */ 668 683 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 684 + tuple.Attributes = 0; 685 + tuple.TupleData = buf; 686 + tuple.TupleDataMax = sizeof(buf); 687 + tuple.TupleOffset = 0; 669 688 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 670 689 while (1) { 671 690 cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
-33
drivers/net/wireless/wavelan_cs.c
··· 3939 3939 static inline int 3940 3940 wv_pcmcia_config(struct pcmcia_device * link) 3941 3941 { 3942 - tuple_t tuple; 3943 - cisparse_t parse; 3944 3942 struct net_device * dev = (struct net_device *) link->priv; 3945 3943 int i; 3946 - u_char buf[64]; 3947 3944 win_req_t req; 3948 3945 memreq_t mem; 3949 3946 net_local * lp = netdev_priv(dev); ··· 3949 3952 #ifdef DEBUG_CONFIG_TRACE 3950 3953 printk(KERN_DEBUG "->wv_pcmcia_config(0x%p)\n", link); 3951 3954 #endif 3952 - 3953 - /* 3954 - * This reads the card's CONFIG tuple to find its configuration 3955 - * registers. 3956 - */ 3957 - do 3958 - { 3959 - tuple.Attributes = 0; 3960 - tuple.DesiredTuple = CISTPL_CONFIG; 3961 - i = pcmcia_get_first_tuple(link, &tuple); 3962 - if(i != CS_SUCCESS) 3963 - break; 3964 - tuple.TupleData = (cisdata_t *)buf; 3965 - tuple.TupleDataMax = 64; 3966 - tuple.TupleOffset = 0; 3967 - i = pcmcia_get_tuple_data(link, &tuple); 3968 - if(i != CS_SUCCESS) 3969 - break; 3970 - i = pcmcia_parse_tuple(link, &tuple, &parse); 3971 - if(i != CS_SUCCESS) 3972 - break; 3973 - link->conf.ConfigBase = parse.config.base; 3974 - link->conf.Present = parse.config.rmask[0]; 3975 - } 3976 - while(0); 3977 - if(i != CS_SUCCESS) 3978 - { 3979 - cs_error(link, ParseTuple, i); 3980 - return FALSE; 3981 - } 3982 3955 3983 3956 do 3984 3957 {
-15
drivers/net/wireless/wl3501_cs.c
··· 1966 1966 */ 1967 1967 static int wl3501_config(struct pcmcia_device *link) 1968 1968 { 1969 - tuple_t tuple; 1970 - cisparse_t parse; 1971 1969 struct net_device *dev = link->priv; 1972 1970 int i = 0, j, last_fn, last_ret; 1973 - unsigned char bf[64]; 1974 1971 struct wl3501_card *this; 1975 - 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 1972 1988 1973 /* Try allocating IO ports. This tries a few fixed addresses. If you 1989 1974 * want, you can also read the card's config table to pick addresses --
+1 -8
drivers/parport/parport_cs.c
··· 166 166 167 167 tuple.TupleData = (cisdata_t *)buf; 168 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 169 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 178 170 tuple.Attributes = 0; 179 171 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); ··· 255 263 256 264 static struct pcmcia_device_id parport_ids[] = { 257 265 PCMCIA_DEVICE_FUNC_ID(3), 266 + PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial+Parallel Port: SP230",0x3beb8cf2,0xdb9e58bc), 258 267 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0003), 259 268 PCMCIA_DEVICE_NULL 260 269 };
+23 -46
drivers/pcmcia/at91_cf.c
··· 32 32 * A0..A10 work in each range; A23 indicates I/O space; A25 is CFRNW; 33 33 * some other bit in {A24,A22..A11} is nREG to flag memory access 34 34 * (vs attributes). So more than 2KB/region would just be waste. 35 + * Note: These are offsets from the physical base address. 35 36 */ 36 - #define CF_ATTR_PHYS (AT91_CF_BASE) 37 - #define CF_IO_PHYS (AT91_CF_BASE + (1 << 23)) 38 - #define CF_MEM_PHYS (AT91_CF_BASE + 0x017ff800) 37 + #define CF_ATTR_PHYS (0) 38 + #define CF_IO_PHYS (1 << 23) 39 + #define CF_MEM_PHYS (0x017ff800) 39 40 40 41 /*--------------------------------------------------------------------------*/ 41 42 ··· 49 48 50 49 struct platform_device *pdev; 51 50 struct at91_cf_data *board; 51 + 52 + unsigned long phys_baseaddr; 52 53 }; 53 54 54 55 #define SZ_2K (2 * SZ_1K) ··· 157 154 158 155 /* 159 156 * Use 16 bit accesses unless/until we need 8-bit i/o space. 160 - * Always set CSR4 ... PCMCIA won't always unmap things. 161 157 */ 162 - csr = at91_sys_read(AT91_SMC_CSR(4)) & ~AT91_SMC_DBW; 158 + csr = at91_sys_read(AT91_SMC_CSR(cf->board->chipselect)) & ~AT91_SMC_DBW; 163 159 164 160 /* 165 161 * NOTE: this CF controller ignores IOIS16, so we can't really do ··· 170 168 * some cards only like that way to get at the odd byte, despite 171 169 * CF 3.0 spec table 35 also giving the D8-D15 option. 172 170 */ 173 - if (!(io->flags & (MAP_16BIT|MAP_AUTOSZ))) { 171 + if (!(io->flags & (MAP_16BIT | MAP_AUTOSZ))) { 174 172 csr |= AT91_SMC_DBW_8; 175 173 pr_debug("%s: 8bit i/o bus\n", driver_name); 176 174 } else { 177 175 csr |= AT91_SMC_DBW_16; 178 176 pr_debug("%s: 16bit i/o bus\n", driver_name); 179 177 } 180 - at91_sys_write(AT91_SMC_CSR(4), csr); 178 + at91_sys_write(AT91_SMC_CSR(cf->board->chipselect), csr); 181 179 182 180 io->start = cf->socket.io_offset; 183 181 io->stop = io->start + SZ_2K - 1; ··· 196 194 197 195 cf = container_of(s, struct at91_cf_socket, socket); 198 196 199 - map->flags &= MAP_ACTIVE|MAP_ATTRIB|MAP_16BIT; 197 + map->flags &= (MAP_ACTIVE | MAP_ATTRIB | MAP_16BIT); 200 198 if (map->flags & MAP_ATTRIB) 201 - map->static_start = CF_ATTR_PHYS; 199 + map->static_start = cf->phys_baseaddr + CF_ATTR_PHYS; 202 200 else 203 - map->static_start = CF_MEM_PHYS; 201 + map->static_start = cf->phys_baseaddr + CF_MEM_PHYS; 204 202 205 203 return 0; 206 204 } ··· 221 219 struct at91_cf_socket *cf; 222 220 struct at91_cf_data *board = pdev->dev.platform_data; 223 221 struct resource *io; 224 - unsigned int csa; 225 222 int status; 226 223 227 224 if (!board || !board->det_pin || !board->rst_pin) ··· 236 235 237 236 cf->board = board; 238 237 cf->pdev = pdev; 238 + cf->phys_baseaddr = io->start; 239 239 platform_set_drvdata(pdev, cf); 240 240 241 - /* CF takes over CS4, CS5, CS6 */ 242 - csa = at91_sys_read(AT91_EBI_CSA); 243 - at91_sys_write(AT91_EBI_CSA, csa | AT91_EBI_CS4A_SMC_COMPACTFLASH); 244 - 245 - /* nWAIT is _not_ a default setting */ 246 - (void) at91_set_A_periph(AT91_PIN_PC6, 1); /* nWAIT */ 247 - 248 - /* 249 - * Static memory controller timing adjustments. 250 - * REVISIT: these timings are in terms of MCK cycles, so 251 - * when MCK changes (cpufreq etc) so must these values... 252 - */ 253 - at91_sys_write(AT91_SMC_CSR(4), 254 - AT91_SMC_ACSS_STD 255 - | AT91_SMC_DBW_16 256 - | AT91_SMC_BAT 257 - | AT91_SMC_WSEN 258 - | AT91_SMC_NWS_(32) /* wait states */ 259 - | AT91_SMC_RWSETUP_(6) /* setup time */ 260 - | AT91_SMC_RWHOLD_(4) /* hold time */ 261 - ); 262 - 263 241 /* must be a GPIO; ergo must trigger on both edges */ 264 - status = request_irq(board->det_pin, at91_cf_irq, 265 - IRQF_SAMPLE_RANDOM, driver_name, cf); 242 + status = request_irq(board->det_pin, at91_cf_irq, 0, driver_name, cf); 266 243 if (status < 0) 267 244 goto fail0; 268 245 device_init_wakeup(&pdev->dev, 1); ··· 261 282 cf->socket.pci_irq = NR_IRQS + 1; 262 283 263 284 /* pcmcia layer only remaps "real" memory not iospace */ 264 - cf->socket.io_offset = (unsigned long) ioremap(CF_IO_PHYS, SZ_2K); 265 - if (!cf->socket.io_offset) 285 + cf->socket.io_offset = (unsigned long) ioremap(cf->phys_baseaddr + CF_IO_PHYS, SZ_2K); 286 + if (!cf->socket.io_offset) { 287 + status = -ENXIO; 266 288 goto fail1; 289 + } 267 290 268 - /* reserve CS4, CS5, and CS6 regions; but use just CS4 */ 291 + /* reserve chip-select regions */ 269 292 if (!request_mem_region(io->start, io->end + 1 - io->start, 270 - driver_name)) 293 + driver_name)) { 294 + status = -ENXIO; 271 295 goto fail1; 296 + } 272 297 273 298 pr_info("%s: irqs det #%d, io #%d\n", driver_name, 274 299 board->det_pin, board->irq_pin); ··· 302 319 fail0a: 303 320 device_init_wakeup(&pdev->dev, 0); 304 321 free_irq(board->det_pin, cf); 305 - device_init_wakeup(&pdev->dev, 0); 306 322 fail0: 307 - at91_sys_write(AT91_EBI_CSA, csa); 308 323 kfree(cf); 309 324 return status; 310 325 } ··· 312 331 struct at91_cf_socket *cf = platform_get_drvdata(pdev); 313 332 struct at91_cf_data *board = cf->board; 314 333 struct resource *io = cf->socket.io[0].res; 315 - unsigned int csa; 316 334 317 335 pcmcia_unregister_socket(&cf->socket); 318 336 if (board->irq_pin) 319 337 free_irq(board->irq_pin, cf); 320 - free_irq(board->det_pin, cf); 321 338 device_init_wakeup(&pdev->dev, 0); 339 + free_irq(board->det_pin, cf); 322 340 iounmap((void __iomem *) cf->socket.io_offset); 323 341 release_mem_region(io->start, io->end + 1 - io->start); 324 - 325 - csa = at91_sys_read(AT91_EBI_CSA); 326 - at91_sys_write(AT91_EBI_CSA, csa & ~AT91_EBI_CS4A); 327 342 328 343 kfree(cf); 329 344 return 0;
+1 -1
drivers/pcmcia/cs_internal.h
··· 135 135 struct pcmcia_callback{ 136 136 struct module *owner; 137 137 int (*event) (struct pcmcia_socket *s, event_t event, int priority); 138 - void (*requery) (struct pcmcia_socket *s); 138 + void (*requery) (struct pcmcia_socket *s, int new_cis); 139 139 int (*suspend) (struct pcmcia_socket *s); 140 140 int (*resume) (struct pcmcia_socket *s); 141 141 };
+187 -84
drivers/pcmcia/ds.c
··· 231 231 } 232 232 233 233 234 - #ifdef CONFIG_PCMCIA_LOAD_CIS 235 - 236 - /** 237 - * pcmcia_load_firmware - load CIS from userspace if device-provided is broken 238 - * @dev - the pcmcia device which needs a CIS override 239 - * @filename - requested filename in /lib/firmware/ 240 - * 241 - * This uses the in-kernel firmware loading mechanism to use a "fake CIS" if 242 - * the one provided by the card is broken. The firmware files reside in 243 - * /lib/firmware/ in userspace. 244 - */ 245 - static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename) 246 - { 247 - struct pcmcia_socket *s = dev->socket; 248 - const struct firmware *fw; 249 - char path[20]; 250 - int ret=-ENOMEM; 251 - cisdump_t *cis; 252 - 253 - if (!filename) 254 - return -EINVAL; 255 - 256 - ds_dbg(1, "trying to load firmware %s\n", filename); 257 - 258 - if (strlen(filename) > 14) 259 - return -EINVAL; 260 - 261 - snprintf(path, 20, "%s", filename); 262 - 263 - if (request_firmware(&fw, path, &dev->dev) == 0) { 264 - if (fw->size >= CISTPL_MAX_CIS_SIZE) 265 - goto release; 266 - 267 - cis = kzalloc(sizeof(cisdump_t), GFP_KERNEL); 268 - if (!cis) 269 - goto release; 270 - 271 - cis->Length = fw->size + 1; 272 - memcpy(cis->Data, fw->data, fw->size); 273 - 274 - if (!pcmcia_replace_cis(s, cis)) 275 - ret = 0; 276 - } 277 - release: 278 - release_firmware(fw); 279 - 280 - return (ret); 281 - } 282 - 283 - #else /* !CONFIG_PCMCIA_LOAD_CIS */ 284 - 285 - static inline int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename) 286 - { 287 - return -ENODEV; 288 - } 289 - 290 - #endif 291 - 292 - 293 234 /*======================================================================*/ 294 235 295 236 ··· 250 309 driver->drv.bus = &pcmcia_bus_type; 251 310 driver->drv.owner = driver->owner; 252 311 312 + ds_dbg(3, "registering driver %s\n", driver->drv.name); 313 + 253 314 return driver_register(&driver->drv); 254 315 } 255 316 EXPORT_SYMBOL(pcmcia_register_driver); ··· 261 318 */ 262 319 void pcmcia_unregister_driver(struct pcmcia_driver *driver) 263 320 { 321 + ds_dbg(3, "unregistering driver %s\n", driver->drv.name); 264 322 driver_unregister(&driver->drv); 265 323 } 266 324 EXPORT_SYMBOL(pcmcia_unregister_driver); ··· 287 343 static void pcmcia_release_function(struct kref *ref) 288 344 { 289 345 struct config_t *c = container_of(ref, struct config_t, ref); 346 + ds_dbg(1, "releasing config_t\n"); 290 347 kfree(c); 291 348 } 292 349 293 350 static void pcmcia_release_dev(struct device *dev) 294 351 { 295 352 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 296 - ds_dbg(1, "releasing dev %p\n", p_dev); 353 + ds_dbg(1, "releasing device %s\n", p_dev->dev.bus_id); 297 354 pcmcia_put_socket(p_dev->socket); 298 355 kfree(p_dev->devname); 299 356 kref_put(&p_dev->function_config->ref, pcmcia_release_function); 300 357 kfree(p_dev); 301 358 } 302 359 303 - static void pcmcia_add_pseudo_device(struct pcmcia_socket *s) 360 + static void pcmcia_add_device_later(struct pcmcia_socket *s, int mfc) 304 361 { 305 362 if (!s->pcmcia_state.device_add_pending) { 363 + ds_dbg(1, "scheduling to add %s secondary" 364 + " device to %d\n", mfc ? "mfc" : "pfc", s->sock); 306 365 s->pcmcia_state.device_add_pending = 1; 366 + s->pcmcia_state.mfc_pfc = mfc; 307 367 schedule_work(&s->device_add); 308 368 } 309 369 return; ··· 319 371 struct pcmcia_driver *p_drv; 320 372 struct pcmcia_device_id *did; 321 373 struct pcmcia_socket *s; 374 + cistpl_config_t cis_config; 322 375 int ret = 0; 323 376 324 377 dev = get_device(dev); ··· 330 381 p_drv = to_pcmcia_drv(dev->driver); 331 382 s = p_dev->socket; 332 383 384 + ds_dbg(1, "trying to bind %s to %s\n", p_dev->dev.bus_id, 385 + p_drv->drv.name); 386 + 333 387 if ((!p_drv->probe) || (!p_dev->function_config) || 334 388 (!try_module_get(p_drv->owner))) { 335 389 ret = -EINVAL; 336 390 goto put_dev; 337 391 } 338 392 393 + /* set up some more device information */ 394 + ret = pccard_read_tuple(p_dev->socket, p_dev->func, CISTPL_CONFIG, 395 + &cis_config); 396 + if (!ret) { 397 + p_dev->conf.ConfigBase = cis_config.base; 398 + p_dev->conf.Present = cis_config.rmask[0]; 399 + } else { 400 + printk(KERN_INFO "pcmcia: could not parse base and rmask0 of CIS\n"); 401 + p_dev->conf.ConfigBase = 0; 402 + p_dev->conf.Present = 0; 403 + } 404 + 339 405 ret = p_drv->probe(p_dev); 340 - if (ret) 406 + if (ret) { 407 + ds_dbg(1, "binding %s to %s failed with %d\n", 408 + p_dev->dev.bus_id, p_drv->drv.name, ret); 341 409 goto put_module; 410 + } 342 411 343 412 /* handle pseudo multifunction devices: 344 413 * there are at most two pseudo multifunction devices. ··· 367 400 did = p_dev->dev.driver_data; 368 401 if (did && (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) && 369 402 (p_dev->socket->device_count == 1) && (p_dev->device_no == 0)) 370 - pcmcia_add_pseudo_device(p_dev->socket); 403 + pcmcia_add_device_later(p_dev->socket, 0); 371 404 372 405 put_module: 373 406 if (ret) ··· 388 421 struct pcmcia_device *tmp; 389 422 unsigned long flags; 390 423 391 - ds_dbg(2, "unbind_request(%d)\n", s->sock); 392 - 424 + ds_dbg(2, "pcmcia_card_remove(%d) %s\n", s->sock, 425 + leftover ? leftover->devname : ""); 393 426 394 427 if (!leftover) 395 428 s->device_count = 0; ··· 406 439 p_dev->_removed=1; 407 440 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags); 408 441 442 + ds_dbg(2, "unregistering device %s\n", p_dev->dev.bus_id); 409 443 device_unregister(&p_dev->dev); 410 444 } 411 445 ··· 422 454 423 455 p_dev = to_pcmcia_dev(dev); 424 456 p_drv = to_pcmcia_drv(dev->driver); 457 + 458 + ds_dbg(1, "removing device %s\n", p_dev->dev.bus_id); 425 459 426 460 /* If we're removing the primary module driving a 427 461 * pseudo multi-function card, we need to unbind ··· 557 587 558 588 mutex_lock(&device_add_lock); 559 589 560 - /* max of 2 devices per card */ 561 - if (s->device_count == 2) 590 + ds_dbg(3, "adding device to %d, function %d\n", s->sock, function); 591 + 592 + /* max of 4 devices per card */ 593 + if (s->device_count == 4) 562 594 goto err_put; 563 595 564 596 p_dev = kzalloc(sizeof(struct pcmcia_device), GFP_KERNEL); ··· 570 598 p_dev->socket = s; 571 599 p_dev->device_no = (s->device_count++); 572 600 p_dev->func = function; 573 - if (s->functions <= function) 574 - s->functions = function + 1; 575 601 576 602 p_dev->dev.bus = &pcmcia_bus_type; 577 603 p_dev->dev.parent = s->dev.dev; ··· 580 610 if (!p_dev->devname) 581 611 goto err_free; 582 612 sprintf (p_dev->devname, "pcmcia%s", p_dev->dev.bus_id); 613 + ds_dbg(3, "devname is %s\n", p_dev->devname); 583 614 584 - /* compat */ 585 615 spin_lock_irqsave(&pcmcia_dev_list_lock, flags); 586 616 587 617 /* ··· 601 631 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags); 602 632 603 633 if (!p_dev->function_config) { 634 + ds_dbg(3, "creating config_t for %s\n", p_dev->dev.bus_id); 604 635 p_dev->function_config = kzalloc(sizeof(struct config_t), 605 636 GFP_KERNEL); 606 637 if (!p_dev->function_config) ··· 645 674 unsigned int no_funcs, i; 646 675 int ret = 0; 647 676 648 - if (!(s->resource_setup_done)) 677 + if (!(s->resource_setup_done)) { 678 + ds_dbg(3, "no resources available, delaying card_add\n"); 649 679 return -EAGAIN; /* try again, but later... */ 680 + } 650 681 651 - if (pcmcia_validate_mem(s)) 682 + if (pcmcia_validate_mem(s)) { 683 + ds_dbg(3, "validating mem resources failed, " 684 + "delaying card_add\n"); 652 685 return -EAGAIN; /* try again, but later... */ 686 + } 653 687 654 688 ret = pccard_validate_cis(s, BIND_FN_ALL, &cisinfo); 655 689 if (ret || !cisinfo.Chains) { ··· 666 690 no_funcs = mfc.nfn; 667 691 else 668 692 no_funcs = 1; 693 + s->functions = no_funcs; 669 694 670 695 for (i=0; i < no_funcs; i++) 671 696 pcmcia_device_add(s, i); ··· 675 698 } 676 699 677 700 678 - static void pcmcia_delayed_add_pseudo_device(void *data) 701 + static void pcmcia_delayed_add_device(void *data) 679 702 { 680 703 struct pcmcia_socket *s = data; 681 - pcmcia_device_add(s, 0); 704 + ds_dbg(1, "adding additional device to %d\n", s->sock); 705 + pcmcia_device_add(s, s->pcmcia_state.mfc_pfc); 682 706 s->pcmcia_state.device_add_pending = 0; 707 + s->pcmcia_state.mfc_pfc = 0; 683 708 } 684 709 685 710 static int pcmcia_requery(struct device *dev, void * _data) 686 711 { 687 712 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 688 - if (!p_dev->dev.driver) 713 + if (!p_dev->dev.driver) { 714 + ds_dbg(1, "update device information for %s\n", 715 + p_dev->dev.bus_id); 689 716 pcmcia_device_query(p_dev); 717 + } 690 718 691 719 return 0; 692 720 } 693 721 694 - static void pcmcia_bus_rescan(struct pcmcia_socket *skt) 722 + static void pcmcia_bus_rescan(struct pcmcia_socket *skt, int new_cis) 695 723 { 696 - int no_devices=0; 724 + int no_devices = 0; 697 725 int ret = 0; 698 726 unsigned long flags; 699 727 700 728 /* must be called with skt_mutex held */ 729 + ds_dbg(0, "re-scanning socket %d\n", skt->sock); 730 + 701 731 spin_lock_irqsave(&pcmcia_dev_list_lock, flags); 702 732 if (list_empty(&skt->devices_list)) 703 - no_devices=1; 733 + no_devices = 1; 704 734 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags); 735 + 736 + /* If this is because of a CIS override, start over */ 737 + if (new_cis && !no_devices) 738 + pcmcia_card_remove(skt, NULL); 705 739 706 740 /* if no devices were added for this socket yet because of 707 741 * missing resource information or other trouble, we need to 708 742 * do this now. */ 709 - if (no_devices) { 743 + if (no_devices || new_cis) { 710 744 ret = pcmcia_card_add(skt); 711 745 if (ret) 712 746 return; ··· 734 746 if (ret) 735 747 printk(KERN_INFO "pcmcia: bus_rescan_devices failed\n"); 736 748 } 749 + 750 + #ifdef CONFIG_PCMCIA_LOAD_CIS 751 + 752 + /** 753 + * pcmcia_load_firmware - load CIS from userspace if device-provided is broken 754 + * @dev - the pcmcia device which needs a CIS override 755 + * @filename - requested filename in /lib/firmware/ 756 + * 757 + * This uses the in-kernel firmware loading mechanism to use a "fake CIS" if 758 + * the one provided by the card is broken. The firmware files reside in 759 + * /lib/firmware/ in userspace. 760 + */ 761 + static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename) 762 + { 763 + struct pcmcia_socket *s = dev->socket; 764 + const struct firmware *fw; 765 + char path[20]; 766 + int ret = -ENOMEM; 767 + int no_funcs; 768 + int old_funcs; 769 + cisdump_t *cis; 770 + cistpl_longlink_mfc_t mfc; 771 + 772 + if (!filename) 773 + return -EINVAL; 774 + 775 + ds_dbg(1, "trying to load CIS file %s\n", filename); 776 + 777 + if (strlen(filename) > 14) { 778 + printk(KERN_WARNING "pcmcia: CIS filename is too long\n"); 779 + return -EINVAL; 780 + } 781 + 782 + snprintf(path, 20, "%s", filename); 783 + 784 + if (request_firmware(&fw, path, &dev->dev) == 0) { 785 + if (fw->size >= CISTPL_MAX_CIS_SIZE) { 786 + ret = -EINVAL; 787 + printk(KERN_ERR "pcmcia: CIS override is too big\n"); 788 + goto release; 789 + } 790 + 791 + cis = kzalloc(sizeof(cisdump_t), GFP_KERNEL); 792 + if (!cis) { 793 + ret = -ENOMEM; 794 + goto release; 795 + } 796 + 797 + cis->Length = fw->size + 1; 798 + memcpy(cis->Data, fw->data, fw->size); 799 + 800 + if (!pcmcia_replace_cis(s, cis)) 801 + ret = 0; 802 + else { 803 + printk(KERN_ERR "pcmcia: CIS override failed\n"); 804 + goto release; 805 + } 806 + 807 + 808 + /* update information */ 809 + pcmcia_device_query(dev); 810 + 811 + /* does this cis override add or remove functions? */ 812 + old_funcs = s->functions; 813 + 814 + if (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_LONGLINK_MFC, &mfc)) 815 + no_funcs = mfc.nfn; 816 + else 817 + no_funcs = 1; 818 + s->functions = no_funcs; 819 + 820 + if (old_funcs > no_funcs) 821 + pcmcia_card_remove(s, dev); 822 + else if (no_funcs > old_funcs) 823 + pcmcia_add_device_later(s, 1); 824 + } 825 + release: 826 + release_firmware(fw); 827 + 828 + return (ret); 829 + } 830 + 831 + #else /* !CONFIG_PCMCIA_LOAD_CIS */ 832 + 833 + static inline int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename) 834 + { 835 + return -ENODEV; 836 + } 837 + 838 + #endif 839 + 737 840 738 841 static inline int pcmcia_devmatch(struct pcmcia_device *dev, 739 842 struct pcmcia_device_id *did) ··· 892 813 * after it has re-checked that there is no possible module 893 814 * with a prod_id/manf_id/card_id match. 894 815 */ 816 + ds_dbg(0, "skipping FUNC_ID match for %s until userspace " 817 + "interaction\n", dev->dev.bus_id); 895 818 if (!dev->allow_func_id_match) 896 819 return 0; 897 820 } 898 821 899 822 if (did->match_flags & PCMCIA_DEV_ID_MATCH_FAKE_CIS) { 823 + ds_dbg(0, "device %s needs a fake CIS\n", dev->dev.bus_id); 900 824 if (!dev->socket->fake_cis) 901 825 pcmcia_load_firmware(dev, did->cisfile); 902 826 ··· 929 847 930 848 #ifdef CONFIG_PCMCIA_IOCTL 931 849 /* matching by cardmgr */ 932 - if (p_dev->cardmgr == p_drv) 850 + if (p_dev->cardmgr == p_drv) { 851 + ds_dbg(0, "cardmgr matched %s to %s\n", dev->bus_id, 852 + drv->name); 933 853 return 1; 854 + } 934 855 #endif 935 856 936 857 while (did && did->match_flags) { 937 - if (pcmcia_devmatch(p_dev, did)) 858 + ds_dbg(3, "trying to match %s to %s\n", dev->bus_id, 859 + drv->name); 860 + if (pcmcia_devmatch(p_dev, did)) { 861 + ds_dbg(0, "matched %s to %s\n", dev->bus_id, 862 + drv->name); 938 863 return 1; 864 + } 939 865 did++; 940 866 } 941 867 ··· 1134 1044 struct pcmcia_driver *p_drv = NULL; 1135 1045 int ret = 0; 1136 1046 1047 + ds_dbg(2, "suspending %s\n", dev->bus_id); 1048 + 1137 1049 if (dev->driver) 1138 1050 p_drv = to_pcmcia_drv(dev->driver); 1139 1051 ··· 1144 1052 1145 1053 if (p_drv->suspend) { 1146 1054 ret = p_drv->suspend(p_dev); 1147 - if (ret) 1055 + if (ret) { 1056 + printk(KERN_ERR "pcmcia: device %s (driver %s) did " 1057 + "not want to go to sleep (%d)\n", 1058 + p_dev->devname, p_drv->drv.name, ret); 1148 1059 goto out; 1060 + } 1149 1061 } 1150 1062 1151 - if (p_dev->device_no == p_dev->func) 1063 + if (p_dev->device_no == p_dev->func) { 1064 + ds_dbg(2, "releasing configuration for %s\n", dev->bus_id); 1152 1065 pcmcia_release_configuration(p_dev); 1066 + } 1153 1067 1154 1068 out: 1155 1069 if (!ret) ··· 1170 1072 struct pcmcia_driver *p_drv = NULL; 1171 1073 int ret = 0; 1172 1074 1075 + ds_dbg(2, "resuming %s\n", dev->bus_id); 1076 + 1173 1077 if (dev->driver) 1174 1078 p_drv = to_pcmcia_drv(dev->driver); 1175 1079 ··· 1179 1079 goto out; 1180 1080 1181 1081 if (p_dev->device_no == p_dev->func) { 1082 + ds_dbg(2, "requesting configuration for %s\n", dev->bus_id); 1182 1083 ret = pcmcia_request_configuration(p_dev, &p_dev->conf); 1183 1084 if (ret) 1184 1085 goto out; ··· 1221 1120 1222 1121 static int pcmcia_bus_resume(struct pcmcia_socket *skt) 1223 1122 { 1123 + ds_dbg(2, "resuming socket %d\n", skt->sock); 1224 1124 bus_for_each_dev(&pcmcia_bus_type, NULL, skt, pcmcia_bus_resume_callback); 1225 1125 return 0; 1226 1126 } 1227 1127 1228 1128 static int pcmcia_bus_suspend(struct pcmcia_socket *skt) 1229 1129 { 1130 + ds_dbg(2, "suspending socket %d\n", skt->sock); 1230 1131 if (bus_for_each_dev(&pcmcia_bus_type, NULL, skt, 1231 1132 pcmcia_bus_suspend_callback)) { 1232 1133 pcmcia_bus_resume(skt); ··· 1349 1246 init_waitqueue_head(&socket->queue); 1350 1247 #endif 1351 1248 INIT_LIST_HEAD(&socket->devices_list); 1352 - INIT_WORK(&socket->device_add, pcmcia_delayed_add_pseudo_device, socket); 1249 + INIT_WORK(&socket->device_add, pcmcia_delayed_add_device, socket); 1353 1250 memset(&socket->pcmcia_state, 0, sizeof(u8)); 1354 1251 socket->device_count = 0; 1355 1252
+1 -1
drivers/pcmcia/m32r_cfc.c
··· 398 398 static void pcc_interrupt_wrapper(u_long data) 399 399 { 400 400 debug(3, "m32r_cfc: pcc_interrupt_wrapper:\n"); 401 - pcc_interrupt(0, NULL, NULL); 401 + pcc_interrupt(0, NULL); 402 402 init_timer(&poll_timer); 403 403 poll_timer.expires = jiffies + poll_interval; 404 404 add_timer(&poll_timer);
+6 -1
drivers/pcmcia/pcmcia_ioctl.c
··· 594 594 595 595 err = ret = 0; 596 596 597 - if (cmd & IOC_IN) __copy_from_user((char *)buf, uarg, size); 597 + if (cmd & IOC_IN) { 598 + if (__copy_from_user((char *)buf, uarg, size)) { 599 + err = -EFAULT; 600 + goto free_out; 601 + } 602 + } 598 603 599 604 switch (cmd) { 600 605 case DS_ADJUST_RESOURCE_INFO:
+4 -4
drivers/pcmcia/pd6729.c
··· 581 581 return IRQ_HANDLED; 582 582 } 583 583 584 - static int pd6729_check_irq(int irq, int flags) 584 + static int pd6729_check_irq(int irq) 585 585 { 586 - if (request_irq(irq, pd6729_test, flags, "x", pd6729_test) != 0) 587 - return -1; 586 + if (request_irq(irq, pd6729_test, IRQF_PROBE_SHARED, "x", pd6729_test) 587 + != 0) return -1; 588 588 free_irq(irq, pd6729_test); 589 589 return 0; 590 590 } ··· 610 610 611 611 /* just find interrupts that aren't in use */ 612 612 for (i = 0; i < 16; i++) 613 - if ((mask0 & (1 << i)) && (pd6729_check_irq(i, 0) == 0)) 613 + if ((mask0 & (1 << i)) && (pd6729_check_irq(i) == 0)) 614 614 mask |= (1 << i); 615 615 616 616 printk(KERN_INFO "pd6729: ISA irqs = ");
+2 -2
drivers/pcmcia/socket_sysfs.c
··· 188 188 (s->state & SOCKET_PRESENT) && 189 189 !(s->state & SOCKET_CARDBUS)) { 190 190 if (try_module_get(s->callback->owner)) { 191 - s->callback->requery(s); 191 + s->callback->requery(s, 0); 192 192 module_put(s->callback->owner); 193 193 } 194 194 } ··· 325 325 if ((s->callback) && (s->state & SOCKET_PRESENT) && 326 326 !(s->state & SOCKET_CARDBUS)) { 327 327 if (try_module_get(s->callback->owner)) { 328 - s->callback->requery(s); 328 + s->callback->requery(s, 1); 329 329 module_put(s->callback->owner); 330 330 } 331 331 }
+1 -6
drivers/scsi/pcmcia/aha152x_stub.c
··· 154 154 155 155 DEBUG(0, "aha152x_config(0x%p)\n", link); 156 156 157 - tuple.DesiredTuple = CISTPL_CONFIG; 158 157 tuple.TupleData = tuple_data; 159 158 tuple.TupleDataMax = 64; 160 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 160 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 161 + tuple.Attributes = 0; 167 162 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 168 163 while (1) { 169 164 if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
-5
drivers/scsi/pcmcia/fdomain_stub.c
··· 136 136 137 137 DEBUG(0, "fdomain_config(0x%p)\n", link); 138 138 139 - tuple.DesiredTuple = CISTPL_CONFIG; 140 139 tuple.TupleData = tuple_data; 141 140 tuple.TupleDataMax = 64; 142 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 143 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 149 144 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
-6
drivers/scsi/pcmcia/nsp_cs.c
··· 1685 1685 1686 1686 nsp_dbg(NSP_DEBUG_INIT, "in"); 1687 1687 1688 - tuple.DesiredTuple = CISTPL_CONFIG; 1689 1688 tuple.Attributes = 0; 1690 1689 tuple.TupleData = tuple_data; 1691 1690 tuple.TupleDataMax = sizeof(tuple_data); 1692 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 1693 /* Look up the current Vcc */ 1700 1694 CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &conf));
+2 -9
drivers/scsi/pcmcia/qlogic_stub.c
··· 208 208 209 209 DEBUG(0, "qlogic_config(0x%p)\n", link); 210 210 211 + info->manf_id = link->manf_id; 212 + 211 213 tuple.TupleData = (cisdata_t *) tuple_data; 212 214 tuple.TupleDataMax = 64; 213 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 - tuple.DesiredTuple = CISTPL_MANFID; 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 216 224 217 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 225 218 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
+2 -10
drivers/scsi/pcmcia/sym53c500_cs.c
··· 722 722 723 723 DEBUG(0, "SYM53C500_config(0x%p)\n", link); 724 724 725 + info->manf_id = link->manf_id; 726 + 725 727 tuple.TupleData = (cisdata_t *)tuple_data; 726 728 tuple.TupleDataMax = 64; 727 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 - tuple.DesiredTuple = CISTPL_MANFID; 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 730 739 731 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 740 732 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
+38 -27
drivers/serial/serial_cs.c
··· 723 723 u_char *buf; 724 724 cisparse_t *parse; 725 725 cistpl_cftable_entry_t *cf; 726 - int i, last_ret, last_fn; 726 + int i; 727 727 728 728 DEBUG(0, "serial_config(0x%p)\n", link); 729 729 ··· 740 740 tuple->TupleOffset = 0; 741 741 tuple->TupleDataMax = 255; 742 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 744 /* Is this a compliant multifunction card? */ 754 745 tuple->DesiredTuple = CISTPL_LONGLINK_MFC; ··· 748 757 749 758 /* Is this a multiport card? */ 750 759 tuple->DesiredTuple = CISTPL_MANFID; 751 - if (first_tuple(link, tuple, parse) == CS_SUCCESS) { 752 - info->manfid = parse->manfid.manf; 753 - info->prodid = parse->manfid.card; 760 + info->manfid = link->manf_id; 761 + info->prodid = link->card_id; 754 762 755 - for (i = 0; i < ARRAY_SIZE(quirks); i++) 756 - if ((quirks[i].manfid == ~0 || 757 - quirks[i].manfid == info->manfid) && 758 - (quirks[i].prodid == ~0 || 759 - quirks[i].prodid == info->prodid)) { 760 - info->quirk = &quirks[i]; 761 - break; 762 - } 763 - } 763 + for (i = 0; i < ARRAY_SIZE(quirks); i++) 764 + if ((quirks[i].manfid == ~0 || 765 + quirks[i].manfid == info->manfid) && 766 + (quirks[i].prodid == ~0 || 767 + quirks[i].prodid == info->prodid)) { 768 + info->quirk = &quirks[i]; 769 + break; 770 + } 764 771 765 772 /* Another check for dual-serial cards: look for either serial or 766 773 multifunction cards that ask for appropriate IO port ranges */ 767 774 tuple->DesiredTuple = CISTPL_FUNCID; 768 775 if ((info->multi == 0) && 769 - ((first_tuple(link, tuple, parse) != CS_SUCCESS) || 770 - (parse->funcid.func == CISTPL_FUNCID_MULTI) || 771 - (parse->funcid.func == CISTPL_FUNCID_SERIAL))) { 776 + (link->has_func_id) && 777 + ((link->func_id == CISTPL_FUNCID_MULTI) || 778 + (link->func_id == CISTPL_FUNCID_SERIAL))) { 772 779 tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY; 773 780 if (first_tuple(link, tuple, parse) == CS_SUCCESS) { 774 781 if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) ··· 803 814 kfree(cfg_mem); 804 815 return 0; 805 816 806 - cs_failed: 807 - cs_error(link, last_fn, last_ret); 808 817 failed: 809 818 serial_remove(link); 810 819 kfree(cfg_mem); ··· 912 925 PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "COMpad2.cis"), 913 926 PCMCIA_DEVICE_CIS_PROD_ID2("RS-COM 2P", 0xad20b156, "RS-COM-2P.cis"), 914 927 PCMCIA_DEVICE_CIS_MANF_CARD(0x0013, 0x0000, "GLOBETROTTER.cis"), 928 + PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100 1.00.",0x19ca78af,0xf964f42b), 929 + PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100",0x19ca78af,0x71d98e83), 930 + PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL232 1.00.",0x19ca78af,0x69fb7490), 931 + PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL232",0x19ca78af,0xb6bc0235), 932 + PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c2000.","SERIAL CARD: CF232",0x63f2e0bd,0xb9e175d3), 933 + PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c2000.","SERIAL CARD: CF232-5",0x63f2e0bd,0xfce33442), 934 + PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF232",0x3beb8cf2,0x171e7190), 935 + PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF232-5",0x3beb8cf2,0x20da4262), 936 + PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF428",0x3beb8cf2,0xea5dd57d), 937 + PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF500",0x3beb8cf2,0xd77255fa), 938 + PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: IC232",0x3beb8cf2,0x6a709903), 939 + PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: SL232",0x3beb8cf2,0x18430676), 940 + PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: XL232",0x3beb8cf2,0x6f933767), 941 + PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: CF332",0x3beb8cf2,0x16dc1ba7), 942 + PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: SL332",0x3beb8cf2,0x19816c41), 943 + PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: SL385",0x3beb8cf2,0x64112029), 944 + PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4), 945 + PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial+Parallel Port: SP230",0x3beb8cf2,0xdb9e58bc), 946 + PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: CF332",0x3beb8cf2,0x16dc1ba7), 947 + PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: SL332",0x3beb8cf2,0x19816c41), 948 + PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: SL385",0x3beb8cf2,0x64112029), 949 + PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4), 950 + PCMCIA_MFC_DEVICE_PROD_ID12(2,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4), 951 + PCMCIA_MFC_DEVICE_PROD_ID12(3,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4), 915 952 /* too generic */ 916 953 /* PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x0160, 0x0002), */ 917 954 /* PCMCIA_MFC_DEVICE_MANF_CARD(1, 0x0160, 0x0002), */
+14 -23
drivers/telephony/ixj_pcmcia.c
··· 69 69 70 70 static void ixj_get_serial(struct pcmcia_device * link, IXJ * j) 71 71 { 72 - tuple_t tuple; 73 - u_short buf[128]; 74 72 char *str; 75 - int last_ret, last_fn, i, place; 73 + int i, place; 76 74 DEBUG(0, "ixj_get_serial(0x%p)\n", link); 77 - tuple.TupleData = (cisdata_t *) buf; 78 - tuple.TupleOffset = 0; 79 - tuple.TupleDataMax = 80; 80 - tuple.Attributes = 0; 81 - tuple.DesiredTuple = CISTPL_VERS_1; 82 - CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 83 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); 84 - str = (char *) buf; 85 - printk("PCMCIA Version %d.%d\n", str[0], str[1]); 86 - str += 2; 75 + 76 + str = link->prod_id[0]; 77 + if (!str) 78 + goto cs_failed; 87 79 printk("%s", str); 88 - str = str + strlen(str) + 1; 80 + str = link->prod_id[1]; 81 + if (!str) 82 + goto cs_failed; 89 83 printk(" %s", str); 90 - str = str + strlen(str) + 1; 84 + str = link->prod_id[2]; 85 + if (!str) 86 + goto cs_failed; 91 87 place = 1; 92 88 for (i = strlen(str) - 1; i >= 0; i--) { 93 89 switch (str[i]) { ··· 118 122 } 119 123 place = place * 0x10; 120 124 } 121 - str = str + strlen(str) + 1; 125 + str = link->prod_id[3]; 126 + if (!str) 127 + goto cs_failed; 122 128 printk(" version %s\n", str); 123 129 cs_failed: 124 130 return; ··· 144 146 tuple.TupleData = (cisdata_t *) buf; 145 147 tuple.TupleOffset = 0; 146 148 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 149 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 155 150 tuple.Attributes = 0; 156 151 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
+4 -11
drivers/usb/host/sl811_cs.c
··· 169 169 170 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 172 /* Look up the current Vcc */ 184 173 CS_CHECK(GetConfigurationInfo, 185 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 180 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 188 181 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); 189 182 while (1) {
+3 -2
include/pcmcia/ss.h
··· 262 262 u8 present:1, /* PCMCIA card is present in socket */ 263 263 busy:1, /* "master" ioctl is used */ 264 264 dead:1, /* pcmcia module is being unloaded */ 265 - device_add_pending:1, /* a pseudo-multifunction-device 265 + device_add_pending:1, /* a multifunction-device 266 266 * add event is pending */ 267 - reserved:4; 267 + mfc_pfc:1, /* the pending event adds a mfc (1) or pfc (0) */ 268 + reserved:3; 268 269 } pcmcia_state; 269 270 270 271 struct work_struct device_add; /* for adding further pseudo-multifunction
+2 -22
sound/pcmcia/pdaudiocf/pdaudiocf.c
··· 219 219 static int pdacf_config(struct pcmcia_device *link) 220 220 { 221 221 struct snd_pdacf *pdacf = link->priv; 222 - tuple_t tuple; 223 - cisparse_t *parse = NULL; 224 - u_short buf[32]; 225 222 int last_fn, last_ret; 226 223 227 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 225 link->conf.ConfigIndex = 0x5; 244 226 245 227 CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); 246 228 CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); 247 229 CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); 248 - 249 - kfree(parse); 250 230 251 231 if (snd_pdacf_assign_resources(pdacf, link->io.BasePort1, link->irq.AssignedIRQ) < 0) 252 232 goto failed; ··· 235 255 return 0; 236 256 237 257 cs_failed: 238 - kfree(parse); 239 258 cs_error(link, last_fn, last_ret); 240 259 failed: 241 260 pcmcia_disable_device(link); ··· 278 299 * Module entry points 279 300 */ 280 301 static struct pcmcia_device_id snd_pdacf_ids[] = { 281 - PCMCIA_DEVICE_MANF_CARD(0x015d, 0x4c45), 302 + /* this is too general PCMCIA_DEVICE_MANF_CARD(0x015d, 0x4c45), */ 303 + PCMCIA_DEVICE_PROD_ID12("Core Sound","PDAudio-CF",0x396d19d2,0x71717b49), 282 304 PCMCIA_DEVICE_NULL 283 305 }; 284 306 MODULE_DEVICE_TABLE(pcmcia, snd_pdacf_ids);
+1 -25
sound/pcmcia/vx/vxpocket.c
··· 217 217 { 218 218 struct vx_core *chip = link->priv; 219 219 struct snd_vxpocket *vxp = (struct snd_vxpocket *)chip; 220 - tuple_t tuple; 221 - cisparse_t *parse; 222 - u_short buf[32]; 223 220 int last_fn, last_ret; 224 221 225 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 224 /* redefine hardware record according to the VERSION1 string */ 243 - tuple.DesiredTuple = CISTPL_VERS_1; 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")) { 225 + if (!strcmp(link->prod_id[1], "VX-POCKET")) { 248 226 snd_printdd("VX-pocket is detected\n"); 249 227 } else { 250 228 snd_printdd("VX-pocket 440 is detected\n"); ··· 243 265 goto failed; 244 266 245 267 link->dev_node = &vxp->node; 246 - kfree(parse); 247 268 return 0; 248 269 249 270 cs_failed: 250 271 cs_error(link, last_fn, last_ret); 251 272 failed: 252 273 pcmcia_disable_device(link); 253 - kfree(parse); 254 274 return -ENODEV; 255 275 } 256 276