[PATCH 4/9] pcmcia: remove prod_id indirection

Karsten Keil kkeil at suse.de
Tue Dec 5 18:35:08 EST 2006


On Mon, Dec 04, 2006 at 09:12:51PM -0500, Dominik Brodowski wrote:
> From: Dominik Brodowski <linux at dominikbrodowski.net>
> Date: Sun, 4 Jun 2006 18:06:13 +0200
> Subject: [PATCH] pcmcia: remove prod_id indirection
> 
> 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 at dominikbrodowski.net>
> ---
>  drivers/isdn/hardware/avm/avm_cs.c |   14 +++-----------
>  drivers/isdn/hisax/avma1_cs.c      |   14 +++-----------

Acked-by: Karsten Keil <kkeil at suse.de>
for ISDN.

>  drivers/net/pcmcia/3c574_cs.c      |    9 +++------
>  drivers/net/pcmcia/smc91c92_cs.c   |   27 ++++++++-------------------
>  drivers/net/pcmcia/xirc2ps_cs.c    |   19 ++++---------------
>  drivers/net/wireless/ray_cs.c      |   15 +++++----------
>  drivers/telephony/ixj_pcmcia.c     |   30 ++++++++++++++----------------
>  7 files changed, 40 insertions(+), 88 deletions(-)
> 
> diff --git a/drivers/isdn/hardware/avm/avm_cs.c b/drivers/isdn/hardware/avm/avm_cs.c
> index 7bbfd85..db3755b 100644
> --- a/drivers/isdn/hardware/avm/avm_cs.c
> +++ b/drivers/isdn/hardware/avm/avm_cs.c
> @@ -217,18 +217,10 @@ static int avmcs_config(struct pcmcia_de
>      }
>  
>      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
>           */
> diff --git a/drivers/isdn/hisax/avma1_cs.c b/drivers/isdn/hisax/avma1_cs.c
> index ac28e32..40c9b02 100644
> --- a/drivers/isdn/hisax/avma1_cs.c
> +++ b/drivers/isdn/hisax/avma1_cs.c
> @@ -239,18 +239,10 @@ static int avma1cs_config(struct pcmcia_
>      }
>  
>      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
>           */
> diff --git a/drivers/net/pcmcia/3c574_cs.c b/drivers/net/pcmcia/3c574_cs.c
> index 0460099..420f70b 100644
> --- a/drivers/net/pcmcia/3c574_cs.c
> +++ b/drivers/net/pcmcia/3c574_cs.c
> @@ -397,12 +397,9 @@ static int tc574_config(struct pcmcia_de
>  			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";
>  
>  	{
> diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c
> index ae024bf..bf40848 100644
> --- a/drivers/net/pcmcia/smc91c92_cs.c
> +++ b/drivers/net/pcmcia/smc91c92_cs.c
> @@ -560,16 +560,8 @@ static int mhz_setup(struct pcmcia_devic
>  
>      /* 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_devic
>  	}
>      }
>      /* 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;
> diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c
> index f3914f5..d627361 100644
> --- a/drivers/net/pcmcia/xirc2ps_cs.c
> +++ b/drivers/net/pcmcia/xirc2ps_cs.c
> @@ -707,22 +707,11 @@ set_card_type(struct pcmcia_device *link
>   * 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;
>  }
>  
>  /****************
> diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
> index 7fbfc9e..75cdc3e 100644
> --- a/drivers/net/wireless/ray_cs.c
> +++ b/drivers/net/wireless/ray_cs.c
> @@ -433,16 +433,11 @@ static int ray_config(struct pcmcia_devi
>  
>      /* 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.
> diff --git a/drivers/telephony/ixj_pcmcia.c b/drivers/telephony/ixj_pcmcia.c
> index dda0ca4..3f88978 100644
> --- a/drivers/telephony/ixj_pcmcia.c
> +++ b/drivers/telephony/ixj_pcmcia.c
> @@ -69,25 +69,21 @@ do { last_fn = (fn); if ((last_ret = (re
>  
>  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
>  		}
>  		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;
> -- 
> 1.4.4
> 
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Karsten Keil
SuSE Labs
ISDN development



More information about the linux-pcmcia mailing list