aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/pcmcia
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2008-08-02 09:30:31 -0400
committerDominik Brodowski <linux@dominikbrodowski.net>2008-08-22 19:22:00 -0400
commit8e2fc39ddea7fe8c6798837da282db88a09af793 (patch)
tree7cba37b5b86f4ff25562012a14e29424e3872de0 /drivers/scsi/pcmcia
parent498ac1899b62626bf6879a251d75c22ec564c559 (diff)
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>
Diffstat (limited to 'drivers/scsi/pcmcia')
-rw-r--r--drivers/scsi/pcmcia/aha152x_stub.c5
-rw-r--r--drivers/scsi/pcmcia/fdomain_stub.c5
-rw-r--r--drivers/scsi/pcmcia/nsp_cs.c23
-rw-r--r--drivers/scsi/pcmcia/qlogic_stub.c5
-rw-r--r--drivers/scsi/pcmcia/sym53c500_cs.c1
5 files changed, 20 insertions, 19 deletions
diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c
index 5e4d8e42ba0b..2ed3077b826a 100644
--- a/drivers/scsi/pcmcia/aha152x_stub.c
+++ b/drivers/scsi/pcmcia/aha152x_stub.c
@@ -141,8 +141,9 @@ static void aha152x_detach(struct pcmcia_device *link)
141do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) 141do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
142 142
143static int aha152x_config_check(struct pcmcia_device *p_dev, 143static int aha152x_config_check(struct pcmcia_device *p_dev,
144 cistpl_cftable_entry_t *cfg, 144 cistpl_cftable_entry_t *cfg,
145 void *priv_data) 145 cistpl_cftable_entry_t *dflt,
146 void *priv_data)
146{ 147{
147 /* For New Media T&J, look for a SCSI window */ 148 /* For New Media T&J, look for a SCSI window */
148 if (cfg->io.win[0].len >= 0x20) 149 if (cfg->io.win[0].len >= 0x20)
diff --git a/drivers/scsi/pcmcia/fdomain_stub.c b/drivers/scsi/pcmcia/fdomain_stub.c
index e3d6937c9200..2b6e92d7be07 100644
--- a/drivers/scsi/pcmcia/fdomain_stub.c
+++ b/drivers/scsi/pcmcia/fdomain_stub.c
@@ -124,8 +124,9 @@ static void fdomain_detach(struct pcmcia_device *link)
124do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) 124do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
125 125
126static int fdomain_config_check(struct pcmcia_device *p_dev, 126static int fdomain_config_check(struct pcmcia_device *p_dev,
127 cistpl_cftable_entry_t *cfg, 127 cistpl_cftable_entry_t *cfg,
128 void *priv_data) 128 cistpl_cftable_entry_t *dflt,
129 void *priv_data)
129{ 130{
130 p_dev->io.BasePort1 = cfg->io.win[0].base; 131 p_dev->io.BasePort1 = cfg->io.win[0].base;
131 return pcmcia_request_io(p_dev, &p_dev->io); 132 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 aee24b745dc9..aa4523462578 100644
--- a/drivers/scsi/pcmcia/nsp_cs.c
+++ b/drivers/scsi/pcmcia/nsp_cs.c
@@ -1612,17 +1612,15 @@ struct nsp_cs_configdata {
1612 nsp_hw_data *data; 1612 nsp_hw_data *data;
1613 win_req_t req; 1613 win_req_t req;
1614 config_info_t conf; 1614 config_info_t conf;
1615 cistpl_cftable_entry_t dflt;
1616}; 1615};
1617 1616
1618static int nsp_cs_config_check(struct pcmcia_device *p_dev, 1617static int nsp_cs_config_check(struct pcmcia_device *p_dev,
1619 cistpl_cftable_entry_t *cfg, 1618 cistpl_cftable_entry_t *cfg,
1619 cistpl_cftable_entry_t *dflt,
1620 void *priv_data) 1620 void *priv_data)
1621{ 1621{
1622 struct nsp_cs_configdata *cfg_mem = priv_data; 1622 struct nsp_cs_configdata *cfg_mem = priv_data;
1623 1623
1624 if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
1625 memcpy(&cfg_mem->dflt, cfg, sizeof(cistpl_cftable_entry_t));
1626 if (cfg->index == 0) 1624 if (cfg->index == 0)
1627 return -ENODEV; 1625 return -ENODEV;
1628 1626
@@ -1637,28 +1635,27 @@ static int nsp_cs_config_check(struct pcmcia_device *p_dev,
1637 if (cfg->vcc.present & (1<<CISTPL_POWER_VNOM)) { 1635 if (cfg->vcc.present & (1<<CISTPL_POWER_VNOM)) {
1638 if (cfg_mem->conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM]/10000) 1636 if (cfg_mem->conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM]/10000)
1639 return -ENODEV; 1637 return -ENODEV;
1640 else if (cfg_mem->dflt.vcc.present & (1<<CISTPL_POWER_VNOM)) { 1638 else if (dflt->vcc.present & (1<<CISTPL_POWER_VNOM)) {
1641 if (cfg_mem->conf.Vcc != cfg_mem->dflt.vcc.param[CISTPL_POWER_VNOM]/10000) 1639 if (cfg_mem->conf.Vcc != dflt->vcc.param[CISTPL_POWER_VNOM]/10000)
1642 return -ENODEV; 1640 return -ENODEV;
1643 } 1641 }
1644 1642
1645 if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM)) { 1643 if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM)) {
1646 p_dev->conf.Vpp = 1644 p_dev->conf.Vpp =
1647 cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000; 1645 cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
1648 } else if (cfg_mem->dflt.vpp1.present & (1 << CISTPL_POWER_VNOM)) { 1646 } else if (dflt->vpp1.present & (1 << CISTPL_POWER_VNOM)) {
1649 p_dev->conf.Vpp = 1647 p_dev->conf.Vpp =
1650 cfg_mem->dflt.vpp1.param[CISTPL_POWER_VNOM] / 10000; 1648 dflt->vpp1.param[CISTPL_POWER_VNOM] / 10000;
1651 } 1649 }
1652 1650
1653 /* Do we need to allocate an interrupt? */ 1651 /* Do we need to allocate an interrupt? */
1654 if (cfg->irq.IRQInfo1 || cfg_mem->dflt.irq.IRQInfo1) { 1652 if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
1655 p_dev->conf.Attributes |= CONF_ENABLE_IRQ; 1653 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
1656 }
1657 1654
1658 /* IO window settings */ 1655 /* IO window settings */
1659 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0; 1656 p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
1660 if ((cfg->io.nwin > 0) || (cfg_mem->dflt.io.nwin > 0)) { 1657 if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
1661 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &cfg_mem->dflt.io; 1658 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
1662 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 1659 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
1663 if (!(io->flags & CISTPL_IO_8BIT)) 1660 if (!(io->flags & CISTPL_IO_8BIT))
1664 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16; 1661 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
@@ -1677,10 +1674,10 @@ static int nsp_cs_config_check(struct pcmcia_device *p_dev,
1677 goto next_entry; 1674 goto next_entry;
1678 } 1675 }
1679 1676
1680 if ((cfg->mem.nwin > 0) || (cfg_mem->dflt.mem.nwin > 0)) { 1677 if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
1681 memreq_t map; 1678 memreq_t map;
1682 cistpl_mem_t *mem = 1679 cistpl_mem_t *mem =
1683 (cfg->mem.nwin) ? &cfg->mem : &cfg_mem->dflt.mem; 1680 (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
1684 cfg_mem->req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM; 1681 cfg_mem->req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
1685 cfg_mem->req.Attributes |= WIN_ENABLE; 1682 cfg_mem->req.Attributes |= WIN_ENABLE;
1686 cfg_mem->req.Base = mem->win[0].host_addr; 1683 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 a361275b20a3..da6b3603198b 100644
--- a/drivers/scsi/pcmcia/qlogic_stub.c
+++ b/drivers/scsi/pcmcia/qlogic_stub.c
@@ -196,8 +196,9 @@ static void qlogic_detach(struct pcmcia_device *link)
196do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) 196do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
197 197
198static int qlogic_config_check(struct pcmcia_device *p_dev, 198static int qlogic_config_check(struct pcmcia_device *p_dev,
199 cistpl_cftable_entry_t *cfg, 199 cistpl_cftable_entry_t *cfg,
200 void *priv_data) 200 cistpl_cftable_entry_t *dflt,
201 void *priv_data)
201{ 202{
202 p_dev->io.BasePort1 = cfg->io.win[0].base; 203 p_dev->io.BasePort1 = cfg->io.win[0].base;
203 p_dev->io.NumPorts1 = cfg->io.win[0].len; 204 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 23a5219051a9..eba193134dfa 100644
--- a/drivers/scsi/pcmcia/sym53c500_cs.c
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c
@@ -702,6 +702,7 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
702 702
703static int SYM53C500_config_check(struct pcmcia_device *p_dev, 703static int SYM53C500_config_check(struct pcmcia_device *p_dev,
704 cistpl_cftable_entry_t *cfg, 704 cistpl_cftable_entry_t *cfg,
705 cistpl_cftable_entry_t *dflt,
705 void *priv_data) 706 void *priv_data)
706{ 707{
707 p_dev->io.BasePort1 = cfg->io.win[0].base; 708 p_dev->io.BasePort1 = cfg->io.win[0].base;