aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/pcmcia/pcnet_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/pcmcia/pcnet_cs.c')
-rw-r--r--drivers/net/pcmcia/pcnet_cs.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c
index f9b509a6b09a..aa6ee6b264cd 100644
--- a/drivers/net/pcmcia/pcnet_cs.c
+++ b/drivers/net/pcmcia/pcnet_cs.c
@@ -300,22 +300,22 @@ static void pcnet_detach(struct pcmcia_device *link)
300static hw_info_t *get_hwinfo(struct pcmcia_device *link) 300static 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;
304 u_char __iomem *base, *virt; 303 u_char __iomem *base, *virt;
305 int i, j; 304 int i, j;
306 305
307 /* Allocate a small memory window */ 306 /* Allocate a small memory window */
308 req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE; 307 link->resource[2]->flags |= WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
309 req.Base = 0; req.Size = 0; 308 link->resource[2]->start = 0; link->resource[2]->end = 0;
310 req.AccessSpeed = 0; 309 i = pcmcia_request_window(link, link->resource[2], 0);
311 i = pcmcia_request_window(link, &req, &link->win);
312 if (i != 0) 310 if (i != 0)
313 return NULL; 311 return NULL;
314 312
315 virt = ioremap(req.Base, req.Size); 313 virt = ioremap(link->resource[2]->start,
314 resource_size(link->resource[2]));
316 for (i = 0; i < NR_INFO; i++) { 315 for (i = 0; i < NR_INFO; i++) {
317 pcmcia_map_mem_page(link, link->win, hw_info[i].offset & ~(req.Size-1)); 316 pcmcia_map_mem_page(link, link->resource[2],
318 base = &virt[hw_info[i].offset & (req.Size-1)]; 317 hw_info[i].offset & ~(resource_size(link->resource[2])-1));
318 base = &virt[hw_info[i].offset & (resource_size(link->resource[2])-1)];
319 if ((readb(base+0) == hw_info[i].a0) && 319 if ((readb(base+0) == hw_info[i].a0) &&
320 (readb(base+2) == hw_info[i].a1) && 320 (readb(base+2) == hw_info[i].a1) &&
321 (readb(base+4) == hw_info[i].a2)) { 321 (readb(base+4) == hw_info[i].a2)) {
@@ -326,7 +326,7 @@ static hw_info_t *get_hwinfo(struct pcmcia_device *link)
326 } 326 }
327 327
328 iounmap(virt); 328 iounmap(virt);
329 j = pcmcia_release_window(link, link->win); 329 j = pcmcia_release_window(link, link->resource[2]);
330 return (i < NR_INFO) ? hw_info+i : NULL; 330 return (i < NR_INFO) ? hw_info+i : NULL;
331} /* get_hwinfo */ 331} /* get_hwinfo */
332 332
@@ -1486,7 +1486,6 @@ static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
1486{ 1486{
1487 struct net_device *dev = link->priv; 1487 struct net_device *dev = link->priv;
1488 pcnet_dev_t *info = PRIV(dev); 1488 pcnet_dev_t *info = PRIV(dev);
1489 win_req_t req;
1490 int i, window_size, offset, ret; 1489 int i, window_size, offset, ret;
1491 1490
1492 window_size = (stop_pg - start_pg) << 8; 1491 window_size = (stop_pg - start_pg) << 8;
@@ -1497,22 +1496,22 @@ static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
1497 window_size = roundup_pow_of_two(window_size); 1496 window_size = roundup_pow_of_two(window_size);
1498 1497
1499 /* Allocate a memory window */ 1498 /* Allocate a memory window */
1500 req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE; 1499 link->resource[3]->flags |= WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE;
1501 req.Attributes |= WIN_USE_WAIT; 1500 link->resource[3]->flags |= WIN_USE_WAIT;
1502 req.Base = 0; req.Size = window_size; 1501 link->resource[3]->start = 0; link->resource[3]->end = window_size;
1503 req.AccessSpeed = mem_speed; 1502 ret = pcmcia_request_window(link, link->resource[3], mem_speed);
1504 ret = pcmcia_request_window(link, &req, &link->win);
1505 if (ret) 1503 if (ret)
1506 goto failed; 1504 goto failed;
1507 1505
1508 offset = (start_pg << 8) + cm_offset; 1506 offset = (start_pg << 8) + cm_offset;
1509 offset -= offset % window_size; 1507 offset -= offset % window_size;
1510 ret = pcmcia_map_mem_page(link, link->win, offset); 1508 ret = pcmcia_map_mem_page(link, link->resource[3], offset);
1511 if (ret) 1509 if (ret)
1512 goto failed; 1510 goto failed;
1513 1511
1514 /* Try scribbling on the buffer */ 1512 /* Try scribbling on the buffer */
1515 info->base = ioremap(req.Base, window_size); 1513 info->base = ioremap(link->resource[3]->start,
1514 resource_size(link->resource[3]));
1516 for (i = 0; i < (TX_PAGES<<8); i += 2) 1515 for (i = 0; i < (TX_PAGES<<8); i += 2)
1517 __raw_writew((i>>1), info->base+offset+i); 1516 __raw_writew((i>>1), info->base+offset+i);
1518 udelay(100); 1517 udelay(100);
@@ -1521,19 +1520,20 @@ static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
1521 pcnet_reset_8390(dev); 1520 pcnet_reset_8390(dev);
1522 if (i != (TX_PAGES<<8)) { 1521 if (i != (TX_PAGES<<8)) {
1523 iounmap(info->base); 1522 iounmap(info->base);
1524 pcmcia_release_window(link, link->win); 1523 pcmcia_release_window(link, link->resource[3]);
1525 info->base = NULL; link->win = 0; 1524 info->base = NULL;
1526 goto failed; 1525 goto failed;
1527 } 1526 }
1528 1527
1529 ei_status.mem = info->base + offset; 1528 ei_status.mem = info->base + offset;
1530 ei_status.priv = req.Size; 1529 ei_status.priv = resource_size(link->resource[3]);
1531 dev->mem_start = (u_long)ei_status.mem; 1530 dev->mem_start = (u_long)ei_status.mem;
1532 dev->mem_end = dev->mem_start + req.Size; 1531 dev->mem_end = dev->mem_start + resource_size(link->resource[3]);
1533 1532
1534 ei_status.tx_start_page = start_pg; 1533 ei_status.tx_start_page = start_pg;
1535 ei_status.rx_start_page = start_pg + TX_PAGES; 1534 ei_status.rx_start_page = start_pg + TX_PAGES;
1536 ei_status.stop_page = start_pg + ((req.Size - offset) >> 8); 1535 ei_status.stop_page = start_pg + (
1536 (resource_size(link->resource[3]) - offset) >> 8);
1537 1537
1538 /* set up block i/o functions */ 1538 /* set up block i/o functions */
1539 ei_status.get_8390_hdr = &shmem_get_8390_hdr; 1539 ei_status.get_8390_hdr = &shmem_get_8390_hdr;