Lines Matching refs:link
96 static int pcnet_config(struct pcmcia_device *link);
97 static void pcnet_release(struct pcmcia_device *link);
105 static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
107 static int setup_dma_config(struct pcmcia_device *link, int start_pg,
238 static int pcnet_probe(struct pcmcia_device *link) in pcnet_probe() argument
243 dev_dbg(&link->dev, "pcnet_attach()\n"); in pcnet_probe()
249 info->p_dev = link; in pcnet_probe()
250 link->priv = dev; in pcnet_probe()
252 link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; in pcnet_probe()
256 return pcnet_config(link); in pcnet_probe()
259 static void pcnet_detach(struct pcmcia_device *link) in pcnet_detach() argument
261 struct net_device *dev = link->priv; in pcnet_detach()
263 dev_dbg(&link->dev, "pcnet_detach\n"); in pcnet_detach()
267 pcnet_release(link); in pcnet_detach()
279 static struct hw_info *get_hwinfo(struct pcmcia_device *link) in get_hwinfo() argument
281 struct net_device *dev = link->priv; in get_hwinfo()
286 link->resource[2]->flags |= WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE; in get_hwinfo()
287 link->resource[2]->start = 0; link->resource[2]->end = 0; in get_hwinfo()
288 i = pcmcia_request_window(link, link->resource[2], 0); in get_hwinfo()
292 virt = ioremap(link->resource[2]->start, in get_hwinfo()
293 resource_size(link->resource[2])); in get_hwinfo()
295 pcmcia_map_mem_page(link, link->resource[2], in get_hwinfo()
296 hw_info[i].offset & ~(resource_size(link->resource[2])-1)); in get_hwinfo()
297 base = &virt[hw_info[i].offset & (resource_size(link->resource[2])-1)]; in get_hwinfo()
308 j = pcmcia_release_window(link, link->resource[2]); in get_hwinfo()
320 static struct hw_info *get_prom(struct pcmcia_device *link) in get_prom() argument
322 struct net_device *dev = link->priv; in get_prom()
374 static struct hw_info *get_dl10019(struct pcmcia_device *link) in get_dl10019() argument
376 struct net_device *dev = link->priv; in get_dl10019()
396 static struct hw_info *get_ax88190(struct pcmcia_device *link) in get_ax88190() argument
398 struct net_device *dev = link->priv; in get_ax88190()
403 if (link->config_base != 0x03c0) in get_ax88190()
427 static struct hw_info *get_hwired(struct pcmcia_device *link) in get_hwired() argument
429 struct net_device *dev = link->priv; in get_hwired()
443 static int try_io_port(struct pcmcia_device *link) in try_io_port() argument
446 link->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; in try_io_port()
447 link->resource[1]->flags &= ~IO_DATA_PATH_WIDTH; in try_io_port()
448 if (link->resource[0]->end == 32) { in try_io_port()
449 link->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO; in try_io_port()
450 if (link->resource[1]->end > 0) { in try_io_port()
452 link->resource[1]->flags |= IO_DATA_PATH_WIDTH_8; in try_io_port()
456 link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in try_io_port()
457 link->resource[1]->flags |= IO_DATA_PATH_WIDTH_16; in try_io_port()
459 if (link->resource[0]->start == 0) { in try_io_port()
461 link->resource[0]->start = j ^ 0x300; in try_io_port()
462 link->resource[1]->start = (j ^ 0x300) + 0x10; in try_io_port()
463 link->io_lines = 16; in try_io_port()
464 ret = pcmcia_request_io(link); in try_io_port()
470 return pcmcia_request_io(link); in try_io_port()
492 static struct hw_info *pcnet_try_config(struct pcmcia_device *link, in pcnet_try_config() argument
495 struct net_device *dev = link->priv; in pcnet_try_config()
501 ret = pcmcia_loop_config(link, pcnet_confcheck, &priv); in pcnet_try_config()
503 dev_warn(&link->dev, "no useable port range found\n"); in pcnet_try_config()
508 if (!link->irq) in pcnet_try_config()
511 if (resource_size(link->resource[1]) == 8) in pcnet_try_config()
512 link->config_flags |= CONF_ENABLE_SPKR; in pcnet_try_config()
514 if ((link->manf_id == MANFID_IBM) && in pcnet_try_config()
515 (link->card_id == PRODID_IBM_HOME_AND_AWAY)) in pcnet_try_config()
516 link->config_index |= 0x10; in pcnet_try_config()
518 ret = pcmcia_enable_device(link); in pcnet_try_config()
522 dev->irq = link->irq; in pcnet_try_config()
523 dev->base_addr = link->resource[0]->start; in pcnet_try_config()
529 dev_notice(&link->dev, "invalid if_port requested\n"); in pcnet_try_config()
533 if ((link->config_base == 0x03c0) && in pcnet_try_config()
534 (link->manf_id == 0x149) && (link->card_id == 0xc1ab)) { in pcnet_try_config()
535 dev_info(&link->dev, in pcnet_try_config()
540 local_hw_info = get_hwinfo(link); in pcnet_try_config()
542 local_hw_info = get_prom(link); in pcnet_try_config()
544 local_hw_info = get_dl10019(link); in pcnet_try_config()
546 local_hw_info = get_ax88190(link); in pcnet_try_config()
548 local_hw_info = get_hwired(link); in pcnet_try_config()
553 static int pcnet_config(struct pcmcia_device *link) in pcnet_config() argument
555 struct net_device *dev = link->priv; in pcnet_config()
562 dev_dbg(&link->dev, "pcnet_config\n"); in pcnet_config()
564 local_hw_info = pcnet_try_config(link, &has_shmem, 0); in pcnet_config()
567 pcmcia_disable_device(link); in pcnet_config()
568 local_hw_info = pcnet_try_config(link, &has_shmem, 1); in pcnet_config()
570 dev_notice(&link->dev, "unable to read hardware net" in pcnet_config()
579 if ((link->manf_id == MANFID_SOCKET) && in pcnet_config()
580 ((link->card_id == PRODID_SOCKET_LPE) || in pcnet_config()
581 (link->card_id == PRODID_SOCKET_LPE_CF) || in pcnet_config()
582 (link->card_id == PRODID_SOCKET_EIO))) in pcnet_config()
599 (setup_shmem_window(link, start_pg, stop_pg, cm_offset) != 0)) in pcnet_config()
600 setup_dma_config(link, start_pg, stop_pg); in pcnet_config()
609 SET_NETDEV_DEV(dev, &link->dev); in pcnet_config()
636 pcnet_release(link); in pcnet_config()
640 static void pcnet_release(struct pcmcia_device *link) in pcnet_release() argument
642 struct pcnet_dev *info = PRIV(link->priv); in pcnet_release()
644 dev_dbg(&link->dev, "pcnet_release\n"); in pcnet_release()
649 pcmcia_disable_device(link); in pcnet_release()
652 static int pcnet_suspend(struct pcmcia_device *link) in pcnet_suspend() argument
654 struct net_device *dev = link->priv; in pcnet_suspend()
656 if (link->open) in pcnet_suspend()
662 static int pcnet_resume(struct pcmcia_device *link) in pcnet_resume() argument
664 struct net_device *dev = link->priv; in pcnet_resume()
666 if (link->open) { in pcnet_resume()
902 struct pcmcia_device *link = info->p_dev; in pcnet_open() local
905 dev_dbg(&link->dev, "pcnet_open('%s')\n", dev->name); in pcnet_open()
907 if (!pcmcia_dev_present(link)) in pcnet_open()
917 link->open++; in pcnet_open()
932 struct pcmcia_device *link = info->p_dev; in pcnet_close() local
934 dev_dbg(&link->dev, "pcnet_close('%s')\n", dev->name); in pcnet_close()
939 link->open--; in pcnet_close()
1016 u_short link; in ei_watchdog() local
1039 link = mdio_read(mii_addr, info->phy_id, 1); in ei_watchdog()
1040 if (!link || (link == 0xffff)) { in ei_watchdog()
1050 link &= 0x0004; in ei_watchdog()
1051 if (link != info->link_status) { in ei_watchdog()
1053 netdev_info(dev, "%s link beat\n", link ? "found" : "lost"); in ei_watchdog()
1054 if (link && (info->flags & IS_DL10022)) { in ei_watchdog()
1057 } else if (link && (info->flags & IS_DL10019)) { in ei_watchdog()
1061 if (link) { in ei_watchdog()
1073 info->link_status = link; in ei_watchdog()
1076 link = mdio_read(mii_addr, info->eth_phy, 1) & 0x0004; in ei_watchdog()
1077 if (((info->phy_id == info->pna_phy) && link) || in ei_watchdog()
1078 ((info->phy_id != info->pna_phy) && !link)) { in ei_watchdog()
1296 static int setup_dma_config(struct pcmcia_device *link, int start_pg, in setup_dma_config() argument
1299 struct net_device *dev = link->priv; in setup_dma_config()
1399 static int setup_shmem_window(struct pcmcia_device *link, int start_pg, in setup_shmem_window() argument
1402 struct net_device *dev = link->priv; in setup_shmem_window()
1414 link->resource[3]->flags |= WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE; in setup_shmem_window()
1415 link->resource[3]->flags |= WIN_USE_WAIT; in setup_shmem_window()
1416 link->resource[3]->start = 0; link->resource[3]->end = window_size; in setup_shmem_window()
1417 ret = pcmcia_request_window(link, link->resource[3], mem_speed); in setup_shmem_window()
1423 ret = pcmcia_map_mem_page(link, link->resource[3], offset); in setup_shmem_window()
1428 info->base = ioremap(link->resource[3]->start, in setup_shmem_window()
1429 resource_size(link->resource[3])); in setup_shmem_window()
1438 pcmcia_release_window(link, link->resource[3]); in setup_shmem_window()
1444 ei_status.priv = resource_size(link->resource[3]); in setup_shmem_window()
1446 dev->mem_end = dev->mem_start + resource_size(link->resource[3]); in setup_shmem_window()
1451 (resource_size(link->resource[3]) - offset) >> 8); in setup_shmem_window()