aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/char/pcmcia/ipwireless/main.c14
-rw-r--r--drivers/isdn/hisax/sedlbauer_cs.c7
-rw-r--r--drivers/mtd/maps/pcmciamtd.c13
-rw-r--r--drivers/net/pcmcia/fmvj18x_cs.c10
-rw-r--r--drivers/net/pcmcia/ibmtr_cs.c11
-rw-r--r--drivers/net/pcmcia/pcnet_cs.c14
-rw-r--r--drivers/net/pcmcia/smc91c92_cs.c9
-rw-r--r--drivers/net/pcmcia/xirc2ps_cs.c5
-rw-r--r--drivers/net/wireless/airo_cs.c6
-rw-r--r--drivers/net/wireless/b43/pcmcia.c5
-rw-r--r--drivers/net/wireless/ray_cs.c13
-rw-r--r--drivers/pcmcia/pcmcia_resource.c9
-rw-r--r--drivers/scsi/pcmcia/nsp_cs.c5
-rw-r--r--drivers/staging/comedi/drivers/ni_daq_700.c6
-rw-r--r--drivers/staging/comedi/drivers/ni_daq_dio24.c6
-rw-r--r--drivers/staging/comedi/drivers/ni_labpc_cs.c6
-rw-r--r--include/pcmcia/cs.h6
-rw-r--r--include/pcmcia/ds.h2
18 files changed, 42 insertions, 105 deletions
diff --git a/drivers/char/pcmcia/ipwireless/main.c b/drivers/char/pcmcia/ipwireless/main.c
index 5f87b9f7b6d2..6c4aa4b0be99 100644
--- a/drivers/char/pcmcia/ipwireless/main.c
+++ b/drivers/char/pcmcia/ipwireless/main.c
@@ -84,8 +84,6 @@ static int ipwireless_probe(struct pcmcia_device *p_dev,
84{ 84{
85 struct ipw_dev *ipw = priv_data; 85 struct ipw_dev *ipw = priv_data;
86 struct resource *io_resource; 86 struct resource *io_resource;
87 memreq_t memreq_attr_memory;
88 memreq_t memreq_common_memory;
89 int ret; 87 int ret;
90 88
91 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO; 89 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
@@ -121,11 +119,8 @@ static int ipwireless_probe(struct pcmcia_device *p_dev,
121 if (ret != 0) 119 if (ret != 0)
122 goto exit1; 120 goto exit1;
123 121
124 memreq_common_memory.CardOffset = cfg->mem.win[0].card_addr;
125 memreq_common_memory.Page = 0;
126
127 ret = pcmcia_map_mem_page(p_dev, ipw->handle_common_memory, 122 ret = pcmcia_map_mem_page(p_dev, ipw->handle_common_memory,
128 &memreq_common_memory); 123 cfg->mem.win[0].card_addr);
129 124
130 if (ret != 0) 125 if (ret != 0)
131 goto exit2; 126 goto exit2;
@@ -150,12 +145,7 @@ static int ipwireless_probe(struct pcmcia_device *p_dev,
150 if (ret != 0) 145 if (ret != 0)
151 goto exit2; 146 goto exit2;
152 147
153 memreq_attr_memory.CardOffset = 0; 148 ret = pcmcia_map_mem_page(p_dev, ipw->handle_attr_memory, 0);
154 memreq_attr_memory.Page = 0;
155
156 ret = pcmcia_map_mem_page(p_dev, ipw->handle_attr_memory,
157 &memreq_attr_memory);
158
159 if (ret != 0) 149 if (ret != 0)
160 goto exit3; 150 goto exit3;
161 151
diff --git a/drivers/isdn/hisax/sedlbauer_cs.c b/drivers/isdn/hisax/sedlbauer_cs.c
index 4755eb440f7e..0b06dbb2d52d 100644
--- a/drivers/isdn/hisax/sedlbauer_cs.c
+++ b/drivers/isdn/hisax/sedlbauer_cs.c
@@ -232,7 +232,6 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev,
232 */ 232 */
233 if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) { 233 if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
234 cistpl_mem_t *mem = (cfg->mem.nwin) ? &cfg->mem : &dflt->mem; 234 cistpl_mem_t *mem = (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
235 memreq_t map;
236 req->Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM; 235 req->Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
237 req->Attributes |= WIN_ENABLE; 236 req->Attributes |= WIN_ENABLE;
238 req->Base = mem->win[0].host_addr; 237 req->Base = mem->win[0].host_addr;
@@ -240,9 +239,9 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev,
240 req->AccessSpeed = 0; 239 req->AccessSpeed = 0;
241 if (pcmcia_request_window(p_dev, req, &p_dev->win) != 0) 240 if (pcmcia_request_window(p_dev, req, &p_dev->win) != 0)
242 return -ENODEV; 241 return -ENODEV;
243 map.Page = 0; 242
244 map.CardOffset = mem->win[0].card_addr; 243 if (pcmcia_map_mem_page(p_dev, p_dev->win,
245 if (pcmcia_map_mem_page(p_dev, p_dev->win, &map) != 0) 244 mem->win[0].card_addr) != 0)
246 return -ENODEV; 245 return -ENODEV;
247 } 246 }
248 return 0; 247 return 0;
diff --git a/drivers/mtd/maps/pcmciamtd.c b/drivers/mtd/maps/pcmciamtd.c
index 79488164e432..f97463ecfc5e 100644
--- a/drivers/mtd/maps/pcmciamtd.c
+++ b/drivers/mtd/maps/pcmciamtd.c
@@ -102,7 +102,7 @@ static caddr_t remap_window(struct map_info *map, unsigned long to)
102{ 102{
103 struct pcmciamtd_dev *dev = (struct pcmciamtd_dev *)map->map_priv_1; 103 struct pcmciamtd_dev *dev = (struct pcmciamtd_dev *)map->map_priv_1;
104 window_handle_t win = (window_handle_t)map->map_priv_2; 104 window_handle_t win = (window_handle_t)map->map_priv_2;
105 memreq_t mrq; 105 unsigned int offset;
106 int ret; 106 int ret;
107 107
108 if (!pcmcia_dev_present(dev->p_dev)) { 108 if (!pcmcia_dev_present(dev->p_dev)) {
@@ -110,15 +110,14 @@ static caddr_t remap_window(struct map_info *map, unsigned long to)
110 return 0; 110 return 0;
111 } 111 }
112 112
113 mrq.CardOffset = to & ~(dev->win_size-1); 113 offset = to & ~(dev->win_size-1);
114 if(mrq.CardOffset != dev->offset) { 114 if (offset != dev->offset) {
115 DEBUG(2, "Remapping window from 0x%8.8x to 0x%8.8x", 115 DEBUG(2, "Remapping window from 0x%8.8x to 0x%8.8x",
116 dev->offset, mrq.CardOffset); 116 dev->offset, offset);
117 mrq.Page = 0; 117 ret = pcmcia_map_mem_page(dev->p_dev, win, offset);
118 ret = pcmcia_map_mem_page(dev->p_dev, win, &mrq);
119 if (ret != 0) 118 if (ret != 0)
120 return NULL; 119 return NULL;
121 dev->offset = mrq.CardOffset; 120 dev->offset = offset;
122 } 121 }
123 return dev->win_base + (to & (dev->win_size-1)); 122 return dev->win_base + (to & (dev->win_size-1));
124} 123}
diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c
index 699304480aed..98fffb03ecd7 100644
--- a/drivers/net/pcmcia/fmvj18x_cs.c
+++ b/drivers/net/pcmcia/fmvj18x_cs.c
@@ -545,7 +545,6 @@ failed:
545static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id) 545static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id)
546{ 546{
547 win_req_t req; 547 win_req_t req;
548 memreq_t mem;
549 u_char __iomem *base; 548 u_char __iomem *base;
550 int i, j; 549 int i, j;
551 550
@@ -558,9 +557,7 @@ static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id)
558 return -1; 557 return -1;
559 558
560 base = ioremap(req.Base, req.Size); 559 base = ioremap(req.Base, req.Size);
561 mem.Page = 0; 560 pcmcia_map_mem_page(link, link->win, 0);
562 mem.CardOffset = 0;
563 pcmcia_map_mem_page(link, link->win, &mem);
564 561
565 /* 562 /*
566 * MBH10304 CISTPL_FUNCE_LAN_NODE_ID format 563 * MBH10304 CISTPL_FUNCE_LAN_NODE_ID format
@@ -594,7 +591,6 @@ static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id)
594static int fmvj18x_setup_mfc(struct pcmcia_device *link) 591static int fmvj18x_setup_mfc(struct pcmcia_device *link)
595{ 592{
596 win_req_t req; 593 win_req_t req;
597 memreq_t mem;
598 int i; 594 int i;
599 struct net_device *dev = link->priv; 595 struct net_device *dev = link->priv;
600 unsigned int ioaddr; 596 unsigned int ioaddr;
@@ -614,9 +610,7 @@ static int fmvj18x_setup_mfc(struct pcmcia_device *link)
614 return -1; 610 return -1;
615 } 611 }
616 612
617 mem.Page = 0; 613 i = pcmcia_map_mem_page(link, link->win, 0);
618 mem.CardOffset = 0;
619 i = pcmcia_map_mem_page(link, link->win, &mem);
620 if (i != 0) { 614 if (i != 0) {
621 iounmap(lp->base); 615 iounmap(lp->base);
622 lp->base = NULL; 616 lp->base = NULL;
diff --git a/drivers/net/pcmcia/ibmtr_cs.c b/drivers/net/pcmcia/ibmtr_cs.c
index 3fd859570db3..c0b3cdd49c6a 100644
--- a/drivers/net/pcmcia/ibmtr_cs.c
+++ b/drivers/net/pcmcia/ibmtr_cs.c
@@ -211,7 +211,6 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
211 struct net_device *dev = info->dev; 211 struct net_device *dev = info->dev;
212 struct tok_info *ti = netdev_priv(dev); 212 struct tok_info *ti = netdev_priv(dev);
213 win_req_t req; 213 win_req_t req;
214 memreq_t mem;
215 int i, ret; 214 int i, ret;
216 215
217 dev_dbg(&link->dev, "ibmtr_config\n"); 216 dev_dbg(&link->dev, "ibmtr_config\n");
@@ -250,9 +249,7 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
250 if (ret) 249 if (ret)
251 goto failed; 250 goto failed;
252 251
253 mem.CardOffset = mmiobase; 252 ret = pcmcia_map_mem_page(link, link->win, mmiobase);
254 mem.Page = 0;
255 ret = pcmcia_map_mem_page(link, link->win, &mem);
256 if (ret) 253 if (ret)
257 goto failed; 254 goto failed;
258 ti->mmio = ioremap(req.Base, req.Size); 255 ti->mmio = ioremap(req.Base, req.Size);
@@ -267,13 +264,11 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
267 if (ret) 264 if (ret)
268 goto failed; 265 goto failed;
269 266
270 mem.CardOffset = srambase; 267 ret = pcmcia_map_mem_page(link, info->sram_win_handle, srambase);
271 mem.Page = 0;
272 ret = pcmcia_map_mem_page(link, info->sram_win_handle, &mem);
273 if (ret) 268 if (ret)
274 goto failed; 269 goto failed;
275 270
276 ti->sram_base = mem.CardOffset >> 12; 271 ti->sram_base = srambase >> 12;
277 ti->sram_virt = ioremap(req.Base, req.Size); 272 ti->sram_virt = ioremap(req.Base, req.Size);
278 ti->sram_phys = req.Base; 273 ti->sram_phys = req.Base;
279 274
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c
index 9c5fc9dfc55d..c3edfe4c2651 100644
--- a/drivers/net/pcmcia/pcnet_cs.c
+++ b/drivers/net/pcmcia/pcnet_cs.c
@@ -301,7 +301,6 @@ static hw_info_t *get_hwinfo(struct pcmcia_device *link)
301{ 301{
302 struct net_device *dev = link->priv; 302 struct net_device *dev = link->priv;
303 win_req_t req; 303 win_req_t req;
304 memreq_t mem;
305 u_char __iomem *base, *virt; 304 u_char __iomem *base, *virt;
306 int i, j; 305 int i, j;
307 306
@@ -314,10 +313,8 @@ static hw_info_t *get_hwinfo(struct pcmcia_device *link)
314 return NULL; 313 return NULL;
315 314
316 virt = ioremap(req.Base, req.Size); 315 virt = ioremap(req.Base, req.Size);
317 mem.Page = 0;
318 for (i = 0; i < NR_INFO; i++) { 316 for (i = 0; i < NR_INFO; i++) {
319 mem.CardOffset = hw_info[i].offset & ~(req.Size-1); 317 pcmcia_map_mem_page(link, link->win, hw_info[i].offset & ~(req.Size-1));
320 pcmcia_map_mem_page(link, link->win, &mem);
321 base = &virt[hw_info[i].offset & (req.Size-1)]; 318 base = &virt[hw_info[i].offset & (req.Size-1)];
322 if ((readb(base+0) == hw_info[i].a0) && 319 if ((readb(base+0) == hw_info[i].a0) &&
323 (readb(base+2) == hw_info[i].a1) && 320 (readb(base+2) == hw_info[i].a1) &&
@@ -1463,7 +1460,6 @@ static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
1463 struct net_device *dev = link->priv; 1460 struct net_device *dev = link->priv;
1464 pcnet_dev_t *info = PRIV(dev); 1461 pcnet_dev_t *info = PRIV(dev);
1465 win_req_t req; 1462 win_req_t req;
1466 memreq_t mem;
1467 int i, window_size, offset, ret; 1463 int i, window_size, offset, ret;
1468 1464
1469 window_size = (stop_pg - start_pg) << 8; 1465 window_size = (stop_pg - start_pg) << 8;
@@ -1482,11 +1478,9 @@ static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
1482 if (ret) 1478 if (ret)
1483 goto failed; 1479 goto failed;
1484 1480
1485 mem.CardOffset = (start_pg << 8) + cm_offset; 1481 offset = (start_pg << 8) + cm_offset;
1486 offset = mem.CardOffset % window_size; 1482 offset -= offset % window_size;
1487 mem.CardOffset -= offset; 1483 ret = pcmcia_map_mem_page(link, link->win, offset);
1488 mem.Page = 0;
1489 ret = pcmcia_map_mem_page(link, link->win, &mem);
1490 if (ret) 1484 if (ret)
1491 goto failed; 1485 goto failed;
1492 1486
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c
index a5e47796f6ae..377367d03b41 100644
--- a/drivers/net/pcmcia/smc91c92_cs.c
+++ b/drivers/net/pcmcia/smc91c92_cs.c
@@ -443,7 +443,7 @@ static int mhz_mfc_config(struct pcmcia_device *link)
443 struct net_device *dev = link->priv; 443 struct net_device *dev = link->priv;
444 struct smc_private *smc = netdev_priv(dev); 444 struct smc_private *smc = netdev_priv(dev);
445 win_req_t req; 445 win_req_t req;
446 memreq_t mem; 446 unsigned int offset;
447 int i; 447 int i;
448 448
449 link->conf.Attributes |= CONF_ENABLE_SPKR; 449 link->conf.Attributes |= CONF_ENABLE_SPKR;
@@ -467,11 +467,8 @@ static int mhz_mfc_config(struct pcmcia_device *link)
467 return -ENODEV; 467 return -ENODEV;
468 468
469 smc->base = ioremap(req.Base, req.Size); 469 smc->base = ioremap(req.Base, req.Size);
470 mem.CardOffset = mem.Page = 0; 470 offset = (smc->manfid == MANFID_MOTOROLA) ? link->conf.ConfigBase : 0;
471 if (smc->manfid == MANFID_MOTOROLA) 471 i = pcmcia_map_mem_page(link, link->win, offset);
472 mem.CardOffset = link->conf.ConfigBase;
473 i = pcmcia_map_mem_page(link, link->win, &mem);
474
475 if ((i == 0) && 472 if ((i == 0) &&
476 (smc->manfid == MANFID_MEGAHERTZ) && 473 (smc->manfid == MANFID_MEGAHERTZ) &&
477 (smc->cardid == PRODID_MEGAHERTZ_EM3288)) 474 (smc->cardid == PRODID_MEGAHERTZ_EM3288))
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c
index 8fb0eb1dc341..4eb6f986703b 100644
--- a/drivers/net/pcmcia/xirc2ps_cs.c
+++ b/drivers/net/pcmcia/xirc2ps_cs.c
@@ -870,7 +870,6 @@ xirc2ps_config(struct pcmcia_device * link)
870 870
871 if (local->dingo) { 871 if (local->dingo) {
872 win_req_t req; 872 win_req_t req;
873 memreq_t mem;
874 873
875 /* Reset the modem's BAR to the correct value 874 /* Reset the modem's BAR to the correct value
876 * This is necessary because in the RequestConfiguration call, 875 * This is necessary because in the RequestConfiguration call,
@@ -898,9 +897,7 @@ xirc2ps_config(struct pcmcia_device * link)
898 goto config_error; 897 goto config_error;
899 898
900 local->dingo_ccr = ioremap(req.Base,0x1000) + 0x0800; 899 local->dingo_ccr = ioremap(req.Base,0x1000) + 0x0800;
901 mem.CardOffset = 0x0; 900 if ((err = pcmcia_map_mem_page(link, link->win, 0)))
902 mem.Page = 0;
903 if ((err = pcmcia_map_mem_page(link, link->win, &mem)))
904 goto config_error; 901 goto config_error;
905 902
906 /* Setup the CCRs; there are no infos in the CIS about the Ethernet 903 /* Setup the CCRs; there are no infos in the CIS about the Ethernet
diff --git a/drivers/net/wireless/airo_cs.c b/drivers/net/wireless/airo_cs.c
index d241b4aed71e..d47672cb4196 100644
--- a/drivers/net/wireless/airo_cs.c
+++ b/drivers/net/wireless/airo_cs.c
@@ -207,16 +207,14 @@ static int airo_cs_config_check(struct pcmcia_device *p_dev,
207 */ 207 */
208 if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) { 208 if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
209 cistpl_mem_t *mem = (cfg->mem.nwin) ? &cfg->mem : &dflt->mem; 209 cistpl_mem_t *mem = (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
210 memreq_t map;
211 req->Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM; 210 req->Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
212 req->Base = mem->win[0].host_addr; 211 req->Base = mem->win[0].host_addr;
213 req->Size = mem->win[0].len; 212 req->Size = mem->win[0].len;
214 req->AccessSpeed = 0; 213 req->AccessSpeed = 0;
215 if (pcmcia_request_window(p_dev, req, &p_dev->win) != 0) 214 if (pcmcia_request_window(p_dev, req, &p_dev->win) != 0)
216 return -ENODEV; 215 return -ENODEV;
217 map.Page = 0; 216 if (pcmcia_map_mem_page(p_dev, p_dev->win,
218 map.CardOffset = mem->win[0].card_addr; 217 mem->win[0].card_addr) != 0)
219 if (pcmcia_map_mem_page(p_dev, p_dev->win, &map) != 0)
220 return -ENODEV; 218 return -ENODEV;
221 } 219 }
222 /* If we got this far, we're cool! */ 220 /* If we got this far, we're cool! */
diff --git a/drivers/net/wireless/b43/pcmcia.c b/drivers/net/wireless/b43/pcmcia.c
index 7c9af82fcf7e..ffe1f89d5f72 100644
--- a/drivers/net/wireless/b43/pcmcia.c
+++ b/drivers/net/wireless/b43/pcmcia.c
@@ -64,7 +64,6 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
64{ 64{
65 struct ssb_bus *ssb; 65 struct ssb_bus *ssb;
66 win_req_t win; 66 win_req_t win;
67 memreq_t mem;
68 int err = -ENOMEM; 67 int err = -ENOMEM;
69 int res = 0; 68 int res = 0;
70 69
@@ -87,9 +86,7 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
87 if (res != 0) 86 if (res != 0)
88 goto err_kfree_ssb; 87 goto err_kfree_ssb;
89 88
90 mem.CardOffset = 0; 89 res = pcmcia_map_mem_page(dev, dev->win, 0);
91 mem.Page = 0;
92 res = pcmcia_map_mem_page(dev, dev->win, &mem);
93 if (res != 0) 90 if (res != 0)
94 goto err_disable; 91 goto err_disable;
95 92
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
index b83d5ef1dffe..7eb339af351b 100644
--- a/drivers/net/wireless/ray_cs.c
+++ b/drivers/net/wireless/ray_cs.c
@@ -393,7 +393,6 @@ static int ray_config(struct pcmcia_device *link)
393 int ret = 0; 393 int ret = 0;
394 int i; 394 int i;
395 win_req_t req; 395 win_req_t req;
396 memreq_t mem;
397 struct net_device *dev = (struct net_device *)link->priv; 396 struct net_device *dev = (struct net_device *)link->priv;
398 ray_dev_t *local = netdev_priv(dev); 397 ray_dev_t *local = netdev_priv(dev);
399 398
@@ -430,9 +429,7 @@ static int ray_config(struct pcmcia_device *link)
430 ret = pcmcia_request_window(link, &req, &link->win); 429 ret = pcmcia_request_window(link, &req, &link->win);
431 if (ret) 430 if (ret)
432 goto failed; 431 goto failed;
433 mem.CardOffset = 0x0000; 432 ret = pcmcia_map_mem_page(link, link->win, 0);
434 mem.Page = 0;
435 ret = pcmcia_map_mem_page(link, link->win, &mem);
436 if (ret) 433 if (ret)
437 goto failed; 434 goto failed;
438 local->sram = ioremap(req.Base, req.Size); 435 local->sram = ioremap(req.Base, req.Size);
@@ -446,9 +443,7 @@ static int ray_config(struct pcmcia_device *link)
446 ret = pcmcia_request_window(link, &req, &local->rmem_handle); 443 ret = pcmcia_request_window(link, &req, &local->rmem_handle);
447 if (ret) 444 if (ret)
448 goto failed; 445 goto failed;
449 mem.CardOffset = 0x8000; 446 ret = pcmcia_map_mem_page(link, local->rmem_handle, 0x8000);
450 mem.Page = 0;
451 ret = pcmcia_map_mem_page(link, local->rmem_handle, &mem);
452 if (ret) 447 if (ret)
453 goto failed; 448 goto failed;
454 local->rmem = ioremap(req.Base, req.Size); 449 local->rmem = ioremap(req.Base, req.Size);
@@ -462,9 +457,7 @@ static int ray_config(struct pcmcia_device *link)
462 ret = pcmcia_request_window(link, &req, &local->amem_handle); 457 ret = pcmcia_request_window(link, &req, &local->amem_handle);
463 if (ret) 458 if (ret)
464 goto failed; 459 goto failed;
465 mem.CardOffset = 0x0000; 460 ret = pcmcia_map_mem_page(link, local->amem_handle, 0);
466 mem.Page = 0;
467 ret = pcmcia_map_mem_page(link, local->amem_handle, &mem);
468 if (ret) 461 if (ret)
469 goto failed; 462 goto failed;
470 local->amem = ioremap(req.Base, req.Size); 463 local->amem = ioremap(req.Base, req.Size);
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c
index a48d4a91d440..975baaa8168b 100644
--- a/drivers/pcmcia/pcmcia_resource.c
+++ b/drivers/pcmcia/pcmcia_resource.c
@@ -193,7 +193,7 @@ EXPORT_SYMBOL(pcmcia_write_config_byte);
193 193
194 194
195int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t wh, 195int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t wh,
196 memreq_t *req) 196 unsigned int offset)
197{ 197{
198 struct pcmcia_socket *s = p_dev->socket; 198 struct pcmcia_socket *s = p_dev->socket;
199 int ret; 199 int ret;
@@ -201,12 +201,9 @@ int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t wh,
201 wh--; 201 wh--;
202 if (wh >= MAX_WIN) 202 if (wh >= MAX_WIN)
203 return -EINVAL; 203 return -EINVAL;
204 if (req->Page != 0) { 204
205 dev_dbg(&s->dev, "failure: requested page is zero\n");
206 return -EINVAL;
207 }
208 mutex_lock(&s->ops_mutex); 205 mutex_lock(&s->ops_mutex);
209 s->win[wh].card_start = req->CardOffset; 206 s->win[wh].card_start = offset;
210 ret = s->ops->set_mem_map(s, &s->win[wh]); 207 ret = s->ops->set_mem_map(s, &s->win[wh]);
211 if (ret) 208 if (ret)
212 dev_warn(&s->dev, "failed to set_mem_map\n"); 209 dev_warn(&s->dev, "failed to set_mem_map\n");
diff --git a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c
index 8bb598bb440d..dd9b40306f3d 100644
--- a/drivers/scsi/pcmcia/nsp_cs.c
+++ b/drivers/scsi/pcmcia/nsp_cs.c
@@ -1661,7 +1661,6 @@ static int nsp_cs_config_check(struct pcmcia_device *p_dev,
1661 } 1661 }
1662 1662
1663 if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) { 1663 if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
1664 memreq_t map;
1665 cistpl_mem_t *mem = 1664 cistpl_mem_t *mem =
1666 (cfg->mem.nwin) ? &cfg->mem : &dflt->mem; 1665 (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
1667 cfg_mem->req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM; 1666 cfg_mem->req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
@@ -1673,8 +1672,8 @@ static int nsp_cs_config_check(struct pcmcia_device *p_dev,
1673 cfg_mem->req.AccessSpeed = 0; 1672 cfg_mem->req.AccessSpeed = 0;
1674 if (pcmcia_request_window(p_dev, &cfg_mem->req, &p_dev->win) != 0) 1673 if (pcmcia_request_window(p_dev, &cfg_mem->req, &p_dev->win) != 0)
1675 goto next_entry; 1674 goto next_entry;
1676 map.Page = 0; map.CardOffset = mem->win[0].card_addr; 1675 if (pcmcia_map_mem_page(p_dev, p_dev->win,
1677 if (pcmcia_map_mem_page(p_dev, p_dev->win, &map) != 0) 1676 mem->win[0].card_addr) != 0)
1678 goto next_entry; 1677 goto next_entry;
1679 1678
1680 cfg_mem->data->MmioAddress = (unsigned long) ioremap_nocache(cfg_mem->req.Base, cfg_mem->req.Size); 1679 cfg_mem->data->MmioAddress = (unsigned long) ioremap_nocache(cfg_mem->req.Base, cfg_mem->req.Size);
diff --git a/drivers/staging/comedi/drivers/ni_daq_700.c b/drivers/staging/comedi/drivers/ni_daq_700.c
index 7e41ad93703d..abaa40b8be7e 100644
--- a/drivers/staging/comedi/drivers/ni_daq_700.c
+++ b/drivers/staging/comedi/drivers/ni_daq_700.c
@@ -556,7 +556,6 @@ static int dio700_pcmcia_config_loop(struct pcmcia_device *p_dev,
556 void *priv_data) 556 void *priv_data)
557{ 557{
558 win_req_t *req = priv_data; 558 win_req_t *req = priv_data;
559 memreq_t map;
560 559
561 if (cfg->index == 0) 560 if (cfg->index == 0)
562 return -ENODEV; 561 return -ENODEV;
@@ -602,9 +601,8 @@ static int dio700_pcmcia_config_loop(struct pcmcia_device *p_dev,
602 req->AccessSpeed = 0; 601 req->AccessSpeed = 0;
603 if (pcmcia_request_window(p_dev, req, &p_dev->win)) 602 if (pcmcia_request_window(p_dev, req, &p_dev->win))
604 return -ENODEV; 603 return -ENODEV;
605 map.Page = 0; 604 if (pcmcia_map_mem_page(p_dev, p_dev->win,
606 map.CardOffset = mem->win[0].card_addr; 605 mem->win[0].card_addr))
607 if (pcmcia_map_mem_page(p_dev, p_dev->win, &map))
608 return -ENODEV; 606 return -ENODEV;
609 } 607 }
610 /* If we got this far, we're cool! */ 608 /* If we got this far, we're cool! */
diff --git a/drivers/staging/comedi/drivers/ni_daq_dio24.c b/drivers/staging/comedi/drivers/ni_daq_dio24.c
index b2483f86c242..caccece20855 100644
--- a/drivers/staging/comedi/drivers/ni_daq_dio24.c
+++ b/drivers/staging/comedi/drivers/ni_daq_dio24.c
@@ -308,7 +308,6 @@ static int dio24_pcmcia_config_loop(struct pcmcia_device *p_dev,
308 void *priv_data) 308 void *priv_data)
309{ 309{
310 win_req_t *req = priv_data; 310 win_req_t *req = priv_data;
311 memreq_t map;
312 311
313 if (cfg->index == 0) 312 if (cfg->index == 0)
314 return -ENODEV; 313 return -ENODEV;
@@ -354,9 +353,8 @@ static int dio24_pcmcia_config_loop(struct pcmcia_device *p_dev,
354 req->AccessSpeed = 0; 353 req->AccessSpeed = 0;
355 if (pcmcia_request_window(p_dev, req, &p_dev->win)) 354 if (pcmcia_request_window(p_dev, req, &p_dev->win))
356 return -ENODEV; 355 return -ENODEV;
357 map.Page = 0; 356 if (pcmcia_map_mem_page(p_dev, p_dev->win,
358 map.CardOffset = mem->win[0].card_addr; 357 mem->win[0].card_addr))
359 if (pcmcia_map_mem_page(p_dev, p_dev->win, &map))
360 return -ENODEV; 358 return -ENODEV;
361 } 359 }
362 /* If we got this far, we're cool! */ 360 /* If we got this far, we're cool! */
diff --git a/drivers/staging/comedi/drivers/ni_labpc_cs.c b/drivers/staging/comedi/drivers/ni_labpc_cs.c
index c1444b4a5b4c..94d9f7fe6f2c 100644
--- a/drivers/staging/comedi/drivers/ni_labpc_cs.c
+++ b/drivers/staging/comedi/drivers/ni_labpc_cs.c
@@ -286,7 +286,6 @@ static int labpc_pcmcia_config_loop(struct pcmcia_device *p_dev,
286 void *priv_data) 286 void *priv_data)
287{ 287{
288 win_req_t *req = priv_data; 288 win_req_t *req = priv_data;
289 memreq_t map;
290 289
291 if (cfg->index == 0) 290 if (cfg->index == 0)
292 return -ENODEV; 291 return -ENODEV;
@@ -332,9 +331,8 @@ static int labpc_pcmcia_config_loop(struct pcmcia_device *p_dev,
332 req->AccessSpeed = 0; 331 req->AccessSpeed = 0;
333 if (pcmcia_request_window(p_dev, req, &p_dev->win)) 332 if (pcmcia_request_window(p_dev, req, &p_dev->win))
334 return -ENODEV; 333 return -ENODEV;
335 map.Page = 0; 334 if (pcmcia_map_mem_page(p_dev, p_dev->win,
336 map.CardOffset = mem->win[0].card_addr; 335 mem->win[0].card_addr))
337 if (pcmcia_map_mem_page(p_dev, p_dev->win, &map))
338 return -ENODEV; 336 return -ENODEV;
339 } 337 }
340 /* If we got this far, we're cool! */ 338 /* If we got this far, we're cool! */
diff --git a/include/pcmcia/cs.h b/include/pcmcia/cs.h
index 583a4e33039a..e4faf4420f2a 100644
--- a/include/pcmcia/cs.h
+++ b/include/pcmcia/cs.h
@@ -68,12 +68,6 @@ typedef struct config_req_t {
68#define PRESENT_IOBASE_3 0x100 68#define PRESENT_IOBASE_3 0x100
69#define PRESENT_IOSIZE 0x200 69#define PRESENT_IOSIZE 0x200
70 70
71/* For GetMemPage, MapMemPage */
72typedef struct memreq_t {
73 u_int CardOffset;
74 u_short Page;
75} memreq_t;
76
77/* For RequestWindow */ 71/* For RequestWindow */
78typedef struct win_req_t { 72typedef struct win_req_t {
79 u_int Attributes; 73 u_int Attributes;
diff --git a/include/pcmcia/ds.h b/include/pcmcia/ds.h
index 0748bec0a87a..a2bf3a702c08 100644
--- a/include/pcmcia/ds.h
+++ b/include/pcmcia/ds.h
@@ -202,7 +202,7 @@ int pcmcia_request_window(struct pcmcia_device *p_dev, win_req_t *req,
202 window_handle_t *wh); 202 window_handle_t *wh);
203int pcmcia_release_window(struct pcmcia_device *p_dev, window_handle_t win); 203int pcmcia_release_window(struct pcmcia_device *p_dev, window_handle_t win);
204int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t win, 204int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t win,
205 memreq_t *req); 205 unsigned int offset);
206 206
207int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod); 207int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod);
208void pcmcia_disable_device(struct pcmcia_device *p_dev); 208void pcmcia_disable_device(struct pcmcia_device *p_dev);