link->conf.ConfigBase = parse.config.base; link->conf.Present = parse.config.rmask[0]; 
link->conf.ConfigBase = parse->config.base; link->conf.Present = parse->config.rmask[0]; 
void serial_config(dev_link_t * link){	client_handle_t handle = link->handle;	struct serial_info *info = link->priv;	tuple_t tuple;	u_short buf[128];	cisparse_t parse;	cistpl_cftable_entry_t *cf = &parse.cftable_entry;	int i, last_ret, last_fn;	DEBUG(0, "serial_config(0x%p)\n", link);	tuple.TupleData = (cisdata_t *) buf;	tuple.TupleOffset = 0;	tuple.TupleDataMax = 255;	tuple.Attributes = 0;	/* Get configuration register information */	tuple.DesiredTuple = CISTPL_CONFIG;	last_ret = first_tuple(handle, &tuple, &parse);	if (last_ret != CS_SUCCESS) {		last_fn = ParseTuple;		goto cs_failed;	}	link->conf.ConfigBase = parse.config.base;	link->conf.Present = parse.config.rmask[0];	/* Configure card */	link->state |= DEV_CONFIG;	/* Is this a compliant multifunction card? */	tuple.DesiredTuple = CISTPL_LONGLINK_MFC;	tuple.Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK;	info->multi = (first_tuple(handle, &tuple, &parse) == CS_SUCCESS);	/* Is this a multiport card? */	tuple.DesiredTuple = CISTPL_MANFID;	if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) {		info->manfid = le16_to_cpu(buf[0]);		for (i = 0; i < MULTI_COUNT; i++)			if ((info->manfid == multi_id[i].manfid) &&			    (le16_to_cpu(buf[1]) == multi_id[i].prodid))				break;		if (i < MULTI_COUNT)			info->multi = multi_id[i].multi;	}	/* Another check for dual-serial cards: look for either serial or	   multifunction cards that ask for appropriate IO port ranges */	tuple.DesiredTuple = CISTPL_FUNCID;	if ((info->multi == 0) &&	    ((first_tuple(handle, &tuple, &parse) != CS_SUCCESS) ||	     (parse.funcid.func == CISTPL_FUNCID_MULTI) ||	     (parse.funcid.func == CISTPL_FUNCID_SERIAL))) {		tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;		if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) {			if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0))				info->multi = cf->io.win[0].len >> 3;			if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) &&			    (cf->io.win[1].len == 8))				info->multi = 2;		}	}	if (info->multi > 1)		multi_config(link);	else		simple_config(link);	if (info->ndev == 0)		goto failed;	if (info->manfid == MANFID_IBM) {		conf_reg_t reg = { 0, CS_READ, 0x800, 0 };		last_ret = pcmcia_access_configuration_register(link->handle, &reg);		if (last_ret) {			last_fn = AccessConfigurationRegister;			goto cs_failed;		}		reg.Action = CS_WRITE;		reg.Value = reg.Value | 1;		last_ret = pcmcia_access_configuration_register(link->handle, &reg);		if (last_ret) {			last_fn = AccessConfigurationRegister;			goto cs_failed;		}	}	link->dev = &info->node[0];	link->state &= ~DEV_CONFIG_PENDING;	return; cs_failed:	cs_error(link->handle, last_fn, last_ret); failed:	serial_remove(link);	link->state &= ~DEV_CONFIG_PENDING;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/16f31113a614a35acc2da64f4ae39ab0ed7e194f/serial_cs.c/clean/drivers/serial/serial_cs.c