if ((cfg->io.nwin > 0) || (stk->dflt.io.nwin > 0)) {
                cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &stk->dflt.io;
-               pdev->conf.ConfigIndex = cfg->index;
                pdev->io.BasePort1 = io->win[0].base;
                pdev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
                if (!(io->flags & CISTPL_IO_16BIT))
 
                p_dev->conf.Vpp = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
        if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) &&
            (cf->io.win[0].base != 0)) {
-               p_dev->conf.ConfigIndex = cf->index;
                p_dev->io.BasePort1 = cf->io.win[0].base;
                p_dev->io.IOAddrLines = (try == 0) ? 16 :
                        cf->io.flags & CISTPL_IO_LINES_MASK;
        int j;
 
        if ((cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
-               p_dev->conf.ConfigIndex = cf->index;
                for (j = 0; j < 5; j++) {
                        p_dev->io.BasePort1 = base[j];
                        p_dev->io.IOAddrLines = base[j] ? 16 : 3;
 
                p_dev->conf.Vpp = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
        if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) &&
            (cf->io.win[0].base != 0)) {
-               p_dev->conf.ConfigIndex = cf->index;
                p_dev->io.BasePort1 = cf->io.win[0].base;
                p_dev->io.IOAddrLines = (try == 0) ? 16 :
                        cf->io.flags & CISTPL_IO_LINES_MASK;
        int j;
 
        if ((cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
-               p_dev->conf.ConfigIndex = cf->index;
                for (j = 0; j < 5; j++) {
                        p_dev->io.BasePort1 = base[j];
                        p_dev->io.IOAddrLines = base[j] ? 16 : 3;
 
                          void *priv_data)
 {
        if ((cf->io.nwin == 1) && (cf->io.win[0].len > 8)) {
-               p_dev->conf.ConfigIndex = cf->index;
                p_dev->io.BasePort1 = cf->io.win[0].base;
                p_dev->io.NumPorts1 = cf->io.win[0].len;        /*yo */
                p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
 
                               cistpl_cftable_entry_t *cfg,
                               void *priv_data)
 {
-       p_dev->conf.ConfigIndex = cfg->index;
-
        if (!cfg->io.nwin)
                return -ENODEV;
 
 
                               void *priv_data)
 {
        int rc;
-       p_dev->conf.ConfigIndex = cfg->index;
-
        if (!cfg->io.nwin)
                return -ENODEV;
 
 
        if (cf->io.nwin <= 0)
                return -ENODEV;
 
-       p_dev->conf.ConfigIndex = cf->index;
        p_dev->io.BasePort1 = cf->io.win[0].base;
        p_dev->io.NumPorts1 = cf->io.win[0].len;
        p_dev->io.NumPorts2 = 0;
 
        if (cf->io.nwin <= 0)
                return -ENODEV;
 
-       p_dev->conf.ConfigIndex = cf->index;
        p_dev->io.BasePort1 = cf->io.win[0].base;
        p_dev->io.NumPorts1 = cf->io.win[0].len;
        p_dev->io.NumPorts2 = 0;
 
 
        if ((cf->io.nwin > 0) && cf->io.win[0].base) {
                printk(KERN_INFO "(elsa_cs: looks like the 96 model)\n");
-               p_dev->conf.ConfigIndex = cf->index;
                p_dev->io.BasePort1 = cf->io.win[0].base;
                if (!pcmcia_request_io(p_dev, &p_dev->io))
                        return 0;
        } else {
                printk(KERN_INFO "(elsa_cs: looks like the 97 model)\n");
-               p_dev->conf.ConfigIndex = cf->index;
                for (j = 0x2f0; j > 0x100; j -= 0x10) {
                        p_dev->io.BasePort1 = j;
                        if (!pcmcia_request_io(p_dev, &p_dev->io))
 
                cfg_mem->dflt = *cfg;
        if (cfg->index == 0)
                return -ENODEV;
-       p_dev->conf.ConfigIndex = cfg->index;
 
        /* Does this card need audio output? */
        if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
 
 
        if ((cf->io.nwin > 0) && cf->io.win[0].base) {
                printk(KERN_INFO "(teles_cs: looks like the 96 model)\n");
-               p_dev->conf.ConfigIndex = cf->index;
                p_dev->io.BasePort1 = cf->io.win[0].base;
                if (!pcmcia_request_io(p_dev, &p_dev->io))
                        return 0;
        } else {
                printk(KERN_INFO "(teles_cs: looks like the 97 model)\n");
-               p_dev->conf.ConfigIndex = cf->index;
                for (j = 0x2f0; j > 0x100; j -= 0x10) {
                        p_dev->io.BasePort1 = j;
                        if (!pcmcia_request_io(p_dev, &p_dev->io))
 
        if (cfg->index == 0 || cfg->io.nwin == 0)
                return -EINVAL;
 
-       p_dev->conf.ConfigIndex = cfg->index;
-
        /* For multifunction cards, by convention, we configure the
           network function with window 0, and serial with window 1 */
        if (io->nwin > 1) {
 
                                void *priv_data)
 {
        int k;
-       p_dev->conf.ConfigIndex = cf->index;
        p_dev->io.BasePort2 = cf->io.win[0].base;
        for (k = 0; k < 0x400; k += 0x10) {
                if (k & 0x80)
                           cistpl_cftable_entry_t *cf,
                           void *priv_data)
 {
-       p_dev->conf.ConfigIndex = cf->index;
        p_dev->io.BasePort1 = cf->io.win[0].base;
        p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
        return pcmcia_request_io(p_dev, &p_dev->io);
 
 
        if (cf->io.nwin > 0  &&  (cf->io.win[0].base & 0xf) == 8) {
                for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) {
-                       p_dev->conf.ConfigIndex = cf->index ;
                        p_dev->io.BasePort2 = cf->io.win[0].base;
                        p_dev->io.BasePort1 = ioaddr;
                        if (!pcmcia_request_io(p_dev, &p_dev->io))
        int *pass = priv_data;
 
        if (cf->io.nwin > 0 && (cf->io.win[0].base & 0xf) == 8) {
-               p_dev->conf.ConfigIndex = cf->index ;
                p_dev->io.BasePort2 = cf->io.win[0].base;
                p_dev->io.BasePort1 = p_dev->io.BasePort2
                        + (*pass ? (cf->index & 0x20 ? -24:8)
 
        if (cfg->index == 0)
                return -ENODEV;
 
-       p_dev->conf.ConfigIndex = cfg->index;
-
        /* Does this card need audio output? */
        if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
                p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
 
                *dflt = *cfg;
        if (cfg->index == 0)
                return -ENODEV;
-       p_dev->conf.ConfigIndex = cfg->index;
-
        /* Does this card need audio output? */
        if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
                p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
 
        if (cfg->index == 0)
                return -ENODEV;
 
-       p_dev->conf.ConfigIndex = cfg->index;
        PDEBUG(DEBUG_EXTRA, "Checking CFTABLE_ENTRY 0x%02X "
               "(default 0x%02X)\n", cfg->index, cfg_mem->dflt.index);
 
 
                cfg_mem->dflt = *cfg;
        if (cfg->index == 0)
                goto next_entry;
-       p_dev->conf.ConfigIndex = cfg->index;
 
        /* Use power settings for Vcc and Vpp if present */
        /* Note that the CIS values need to be rescaled */
 
                cfg_mem->dflt = *cfg;
        if (cfg->index == 0)
                goto next_entry;
-       p_dev->conf.ConfigIndex = cfg->index;
 
        /* Use power settings for Vcc and Vpp if present */
        /* Note that the CIS values need to be rescaled */
 
        cistpl_cftable_entry_t *dflt = priv_data;
        if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
                cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
-               p_dev->conf.ConfigIndex = cfg->index;
                if (epp_mode)
                        p_dev->conf.ConfigIndex |= FORCE_EPP_MODE;
                p_dev->io.BasePort1 = io->win[0].base;
 
 
        ret = pcmcia_get_first_tuple(p_dev, tuple);
        while (!ret) {
+               cistpl_cftable_entry_t *cfg = &cfg_mem->parse.cftable_entry;
+
                if (pcmcia_get_tuple_data(p_dev, tuple))
                        goto next_entry;
 
                if (pcmcia_parse_tuple(p_dev, tuple, &cfg_mem->parse))
                        goto next_entry;
 
-               ret = conf_check(p_dev, &cfg_mem->parse.cftable_entry,
-                                priv_data);
+               /* default values */
+               p_dev->conf.ConfigIndex = cfg->index;
+
+               ret = conf_check(p_dev, cfg, priv_data);
                if (!ret)
                        break;
 
 
                p_dev->io.BasePort1 = cfg->io.win[1].base;
        if ((cfg->io.nwin > 0) &&
            (p_dev->io.BasePort1 < 0xffff)) {
-               p_dev->conf.ConfigIndex = cfg->index;
                if (!pcmcia_request_io(p_dev, &p_dev->io))
                        return 0;
        }
 
                                  cistpl_cftable_entry_t *cfg,
                                  void *priv_data)
 {
-       p_dev->conf.ConfigIndex = cfg->index;
        p_dev->io.BasePort1 = cfg->io.win[0].base;
        return pcmcia_request_io(p_dev, &p_dev->io);
 }
 
        if (cfg->index == 0)
                return -ENODEV;
 
-       p_dev->conf.ConfigIndex = cfg->index;
-
        /* Does this card need audio output? */
        if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
                p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
 
                                  cistpl_cftable_entry_t *cfg,
                                  void *priv_data)
 {
-       p_dev->conf.ConfigIndex = cfg->index;
        p_dev->io.BasePort1 = cfg->io.win[0].base;
        p_dev->io.NumPorts1 = cfg->io.win[0].len;
 
 
                                  cistpl_cftable_entry_t *cfg,
                                  void *priv_data)
 {
-       p_dev->conf.ConfigIndex = cfg->index;
        p_dev->io.BasePort1 = cfg->io.win[0].base;
        p_dev->io.NumPorts1 = cfg->io.win[0].len;
 
 
 
        if ((cf->io.nwin > 0) && (cf->io.win[0].len == size_table[(*try >> 1)])
            && (cf->io.win[0].base != 0)) {
-               p_dev->conf.ConfigIndex = cf->index;
                p_dev->io.BasePort1 = cf->io.win[0].base;
                p_dev->io.IOAddrLines = ((*try & 0x1) == 0) ?
                        16 : cf->io.flags & CISTPL_IO_LINES_MASK;
        int j;
 
        if ((cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
-               p_dev->conf.ConfigIndex = cf->index;
                for (j = 0; j < 5; j++) {
                        p_dev->io.BasePort1 = base[j];
                        p_dev->io.IOAddrLines = base[j] ? 16 : 3;
        /* The quad port cards have bad CIS's, so just look for a
           window larger than 8 ports and assume it will be right */
        if ((cf->io.nwin == 1) && (cf->io.win[0].len > 8)) {
-               p_dev->conf.ConfigIndex = cf->index;
                p_dev->io.BasePort1 = cf->io.win[0].base;
                p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
                if (!pcmcia_request_io(p_dev, &p_dev->io)) {
        int *base2 = priv_data;
 
        if (cf->io.nwin == 2) {
-               p_dev->conf.ConfigIndex = cf->index;
                p_dev->io.BasePort1 = cf->io.win[0].base;
                p_dev->io.BasePort2 = cf->io.win[1].base;
                p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
 
 
        if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
                cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
-               p_dev->conf.ConfigIndex = cfg->index;
                p_dev->io.BasePort1 = io->win[0].base;
                p_dev->io.NumPorts1 = io->win[0].len;
                if (io->nwin == 2) {
 
        if (cfg->index == 0)
                return -ENODEV;
 
-       p_dev->conf.ConfigIndex = cfg->index;
-
        /* Use power settings for Vcc and Vpp if present */
        /*  Note that the CIS values need to be rescaled */
        if (cfg->vcc.present & (1<<CISTPL_POWER_VNOM)) {