[PATCH] pcmcia: remove prod_id indirection
authorDominik Brodowski <linux@dominikbrodowski.net>
Sun, 4 Jun 2006 16:06:13 +0000 (18:06 +0200)
committerDominik Brodowski <linux@dominikbrodowski.net>
Tue, 5 Dec 2006 01:09:21 +0000 (20:09 -0500)
As we read out the product information strings (VERS_1) from the PCMCIA device
in the PCMCIA core, and device drivers can access those reliably in struct
pcmcia_device's fields prod_id[], remove additional product information string
detection logic from PCMCIA device drivers.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
drivers/isdn/hardware/avm/avm_cs.c
drivers/isdn/hisax/avma1_cs.c
drivers/net/pcmcia/3c574_cs.c
drivers/net/pcmcia/smc91c92_cs.c
drivers/net/pcmcia/xirc2ps_cs.c
drivers/net/wireless/ray_cs.c
drivers/telephony/ixj_pcmcia.c

index 7bbfd85ab793721bbe9a2fec29ef546256c5c8af..db3755b28f536be9752ac45538e18913d3f26728 100644 (file)
@@ -217,18 +217,10 @@ static int avmcs_config(struct pcmcia_device *link)
     }
 
     do {
-
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = 254;
-       tuple.TupleOffset = 0;
-       tuple.DesiredTuple = CISTPL_VERS_1;
-
        devname[0] = 0;
-       if( !first_tuple(link, &tuple, &parse) && parse.version_1.ns > 1 ) {
-           strlcpy(devname,parse.version_1.str + parse.version_1.ofs[1], 
-                       sizeof(devname));
-       }
+       if (link->prod_id[1])
+               strlcpy(devname, link->prod_id[1], sizeof(devname));
+
        /*
          * find IO port
          */
index ac28e3278ad91567ff710d572afce06b7ecfb31c..40c9b026729c1c136e5f681fbb0a22af1d46d5f1 100644 (file)
@@ -239,18 +239,10 @@ static int avma1cs_config(struct pcmcia_device *link)
     }
 
     do {
-
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = 254;
-       tuple.TupleOffset = 0;
-       tuple.DesiredTuple = CISTPL_VERS_1;
-
        devname[0] = 0;
-       if( !first_tuple(link, &tuple, &parse) && parse.version_1.ns > 1 ) {
-           strlcpy(devname,parse.version_1.str + parse.version_1.ofs[1], 
-                       sizeof(devname));
-       }
+       if (link->prod_id[1])
+               strlcpy(devname, link->prod_id[1], sizeof(devname));
+
        /*
          * find IO port
          */
index 046009928526c08e07f8c841ce009fc51f2dc81b..420f70b6b88a24b6a7f8649714543a98850dc1b3 100644 (file)
@@ -397,12 +397,9 @@ static int tc574_config(struct pcmcia_device *link)
                        goto failed;
                }
        }
-       tuple.DesiredTuple = CISTPL_VERS_1;
-       if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS &&
-               pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS &&
-               pcmcia_parse_tuple(link, &tuple, &parse) == CS_SUCCESS) {
-               cardname = parse.version_1.str + parse.version_1.ofs[1];
-       } else
+       if (link->prod_id[1])
+               cardname = link->prod_id[1];
+       else
                cardname = "3Com 3c574";
 
        {
index ae024bfc1ae46038209e753135192b528bf217fb..bf408482443eb9d34521144c7ac3047b22a43c67 100644 (file)
@@ -560,16 +560,8 @@ static int mhz_setup(struct pcmcia_device *link)
 
     /* Read the station address from the CIS.  It is stored as the last
        (fourth) string in the Version 1 Version/ID tuple. */
-    tuple->DesiredTuple = CISTPL_VERS_1;
-    if (first_tuple(link, tuple, parse) != CS_SUCCESS) {
-       rc = -1;
-       goto free_cfg_mem;
-    }
-    /* Ugh -- the EM1144 card has two VERS_1 tuples!?! */
-    if (next_tuple(link, tuple, parse) != CS_SUCCESS)
-       first_tuple(link, tuple, parse);
-    if (parse->version_1.ns > 3) {
-       station_addr = parse->version_1.str + parse->version_1.ofs[3];
+    if (link->prod_id[3]) {
+       station_addr = link->prod_id[3];
        if (cvt_ascii_address(dev, station_addr) == 0) {
                rc = 0;
                goto free_cfg_mem;
@@ -744,15 +736,12 @@ static int smc_setup(struct pcmcia_device *link)
        }
     }
     /* Try the third string in the Version 1 Version/ID tuple. */
-    tuple->DesiredTuple = CISTPL_VERS_1;
-    if (first_tuple(link, tuple, parse) != CS_SUCCESS) {
-       rc = -1;
-       goto free_cfg_mem;
-    }
-    station_addr = parse->version_1.str + parse->version_1.ofs[2];
-    if (cvt_ascii_address(dev, station_addr) == 0) {
-       rc = 0;
-       goto free_cfg_mem;
+    if (link->prod_id[2]) {
+       station_addr = link->prod_id[2];
+       if (cvt_ascii_address(dev, station_addr) == 0) {
+               rc = 0;
+               goto free_cfg_mem;
+       }
     }
 
     rc = -1;
index f3914f58d67f2ca95acc1a99403523c41bc4592d..d6273619686a1667cc5e8127af7321d501a97827 100644 (file)
@@ -707,22 +707,11 @@ set_card_type(struct pcmcia_device *link, const void *s)
  * Returns: true if this is a CE2
  */
 static int
-has_ce2_string(struct pcmcia_device * link)
+has_ce2_string(struct pcmcia_device * p_dev)
 {
-    tuple_t tuple;
-    cisparse_t parse;
-    u_char buf[256];
-
-    tuple.Attributes = 0;
-    tuple.TupleData = buf;
-    tuple.TupleDataMax = 254;
-    tuple.TupleOffset = 0;
-    tuple.DesiredTuple = CISTPL_VERS_1;
-    if (!first_tuple(link, &tuple, &parse) && parse.version_1.ns > 2) {
-       if (strstr(parse.version_1.str + parse.version_1.ofs[2], "CE2"))
-           return 1;
-    }
-    return 0;
+       if (p_dev->prod_id[2] && strstr(p_dev->prod_id[2], "CE2"))
+               return 1;
+       return 0;
 }
 
 /****************
index 7fbfc9e41d07b804dea4c7704d95da10f459f69c..75cdc3e5852af700cd1f482c953de0dc9eed2efe 100644 (file)
@@ -433,16 +433,11 @@ static int ray_config(struct pcmcia_device *link)
 
     /* Determine card type and firmware version */
     buf[0] = buf[MAX_TUPLE_SIZE - 1] = 0;
-    tuple.DesiredTuple = CISTPL_VERS_1;
-    CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
-    tuple.TupleData = buf;
-    tuple.TupleDataMax = MAX_TUPLE_SIZE;
-    tuple.TupleOffset = 2;
-    CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
-
-    for (i=0; i<tuple.TupleDataLen - 4; i++) 
-        if (buf[i] == 0) buf[i] = ' ';
-    printk(KERN_INFO "ray_cs Detected: %s\n",buf);
+    printk(KERN_INFO "ray_cs Detected: %s%s%s%s\n",
+          link->prod_id[0] ? link->prod_id[0] : " ",
+          link->prod_id[1] ? link->prod_id[1] : " ",
+          link->prod_id[2] ? link->prod_id[2] : " ",
+          link->prod_id[3] ? link->prod_id[3] : " ");
 
     /* Now allocate an interrupt line.  Note that this does not
        actually assign a handler to the interrupt.
index dda0ca45d904ff6b8323f83fb70d1a714b67f582..3f88978d5aeefc50b19303e00cb1b82ff774ed73 100644 (file)
@@ -69,25 +69,21 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
 
 static void ixj_get_serial(struct pcmcia_device * link, IXJ * j)
 {
-       tuple_t tuple;
-       u_short buf[128];
        char *str;
-       int last_ret, last_fn, i, place;
+       int i, place;
        DEBUG(0, "ixj_get_serial(0x%p)\n", link);
-       tuple.TupleData = (cisdata_t *) buf;
-       tuple.TupleOffset = 0;
-       tuple.TupleDataMax = 80;
-       tuple.Attributes = 0;
-       tuple.DesiredTuple = CISTPL_VERS_1;
-       CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
-       CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
-       str = (char *) buf;
-       printk("PCMCIA Version %d.%d\n", str[0], str[1]);
-       str += 2;
+
+       str = link->prod_id[0];
+       if (!str)
+               goto cs_failed;
        printk("%s", str);
-       str = str + strlen(str) + 1;
+       str = link->prod_id[1];
+       if (!str)
+               goto cs_failed;
        printk(" %s", str);
-       str = str + strlen(str) + 1;
+       str = link->prod_id[2];
+       if (!str)
+               goto cs_failed;
        place = 1;
        for (i = strlen(str) - 1; i >= 0; i--) {
                switch (str[i]) {
@@ -122,7 +118,9 @@ static void ixj_get_serial(struct pcmcia_device * link, IXJ * j)
                }
                place = place * 0x10;
        }
-       str = str + strlen(str) + 1;
+       str = link->prod_id[3];
+       if (!str)
+               goto cs_failed;
        printk(" version %s\n", str);
       cs_failed:
        return;