pcmcia: pcmcia_config_loop() default CIS entry handling

Many drivers use the default CIS entry within their pcmcia_config_loop()
callback function. Therefore, factor the default CIS entry handling out.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c
index 5e4d8e4..2ed3077b 100644
--- a/drivers/scsi/pcmcia/aha152x_stub.c
+++ b/drivers/scsi/pcmcia/aha152x_stub.c
@@ -141,8 +141,9 @@
 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
 
 static int aha152x_config_check(struct pcmcia_device *p_dev,
-			   cistpl_cftable_entry_t *cfg,
-			   void *priv_data)
+				cistpl_cftable_entry_t *cfg,
+				cistpl_cftable_entry_t *dflt,
+				void *priv_data)
 {
 	/* For New Media T&J, look for a SCSI window */
 	if (cfg->io.win[0].len >= 0x20)
diff --git a/drivers/scsi/pcmcia/fdomain_stub.c b/drivers/scsi/pcmcia/fdomain_stub.c
index e3d6937..2b6e92d 100644
--- a/drivers/scsi/pcmcia/fdomain_stub.c
+++ b/drivers/scsi/pcmcia/fdomain_stub.c
@@ -124,8 +124,9 @@
 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
 
 static int fdomain_config_check(struct pcmcia_device *p_dev,
-				  cistpl_cftable_entry_t *cfg,
-				  void *priv_data)
+				cistpl_cftable_entry_t *cfg,
+				cistpl_cftable_entry_t *dflt,
+				void *priv_data)
 {
 	p_dev->io.BasePort1 = cfg->io.win[0].base;
 	return pcmcia_request_io(p_dev, &p_dev->io);
diff --git a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c
index aee24b7..aa45234 100644
--- a/drivers/scsi/pcmcia/nsp_cs.c
+++ b/drivers/scsi/pcmcia/nsp_cs.c
@@ -1612,17 +1612,15 @@
 	nsp_hw_data		*data;
 	win_req_t		req;
 	config_info_t		conf;
-	cistpl_cftable_entry_t	dflt;
 };
 
 static int nsp_cs_config_check(struct pcmcia_device *p_dev,
 			       cistpl_cftable_entry_t *cfg,
+			       cistpl_cftable_entry_t *dflt,
 			       void *priv_data)
 {
 	struct nsp_cs_configdata *cfg_mem = priv_data;
 
-	if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-		memcpy(&cfg_mem->dflt, cfg, sizeof(cistpl_cftable_entry_t));
 	if (cfg->index == 0)
 		return -ENODEV;
 
@@ -1637,28 +1635,27 @@
 	if (cfg->vcc.present & (1<<CISTPL_POWER_VNOM)) {
 		if (cfg_mem->conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM]/10000)
 			return -ENODEV;
-		else if (cfg_mem->dflt.vcc.present & (1<<CISTPL_POWER_VNOM)) {
-			if (cfg_mem->conf.Vcc != cfg_mem->dflt.vcc.param[CISTPL_POWER_VNOM]/10000)
+		else if (dflt->vcc.present & (1<<CISTPL_POWER_VNOM)) {
+			if (cfg_mem->conf.Vcc != dflt->vcc.param[CISTPL_POWER_VNOM]/10000)
 				return -ENODEV;
 		}
 
 		if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM)) {
 			p_dev->conf.Vpp =
 				cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
-		} else if (cfg_mem->dflt.vpp1.present & (1 << CISTPL_POWER_VNOM)) {
+		} else if (dflt->vpp1.present & (1 << CISTPL_POWER_VNOM)) {
 			p_dev->conf.Vpp =
-				cfg_mem->dflt.vpp1.param[CISTPL_POWER_VNOM] / 10000;
+				dflt->vpp1.param[CISTPL_POWER_VNOM] / 10000;
 		}
 
 		/* Do we need to allocate an interrupt? */
-		if (cfg->irq.IRQInfo1 || cfg_mem->dflt.irq.IRQInfo1) {
+		if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
 			p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
-		}
 
 		/* IO window settings */
 		p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
-		if ((cfg->io.nwin > 0) || (cfg_mem->dflt.io.nwin > 0)) {
-			cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &cfg_mem->dflt.io;
+		if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
+			cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
 			p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
 			if (!(io->flags & CISTPL_IO_8BIT))
 				p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
@@ -1677,10 +1674,10 @@
 				goto next_entry;
 		}
 
-		if ((cfg->mem.nwin > 0) || (cfg_mem->dflt.mem.nwin > 0)) {
+		if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
 			memreq_t	map;
 			cistpl_mem_t	*mem =
-				(cfg->mem.nwin) ? &cfg->mem : &cfg_mem->dflt.mem;
+				(cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
 			cfg_mem->req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
 			cfg_mem->req.Attributes |= WIN_ENABLE;
 			cfg_mem->req.Base = mem->win[0].host_addr;
diff --git a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c
index a361275..da6b360 100644
--- a/drivers/scsi/pcmcia/qlogic_stub.c
+++ b/drivers/scsi/pcmcia/qlogic_stub.c
@@ -196,8 +196,9 @@
 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
 
 static int qlogic_config_check(struct pcmcia_device *p_dev,
-				  cistpl_cftable_entry_t *cfg,
-				  void *priv_data)
+			       cistpl_cftable_entry_t *cfg,
+			       cistpl_cftable_entry_t *dflt,
+			       void *priv_data)
 {
 	p_dev->io.BasePort1 = cfg->io.win[0].base;
 	p_dev->io.NumPorts1 = cfg->io.win[0].len;
diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c
index 23a5219..eba1931 100644
--- a/drivers/scsi/pcmcia/sym53c500_cs.c
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c
@@ -702,6 +702,7 @@
 
 static int SYM53C500_config_check(struct pcmcia_device *p_dev,
 				  cistpl_cftable_entry_t *cfg,
+				  cistpl_cftable_entry_t *dflt,
 				  void *priv_data)
 {
 	p_dev->io.BasePort1 = cfg->io.win[0].base;