Lines Matching defs:link

97 static int pcnet_config(struct pcmcia_device *link);
98 static void pcnet_release(struct pcmcia_device *link);
106 static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
108 static int setup_dma_config(struct pcmcia_device *link, int start_pg,
239 static int pcnet_probe(struct pcmcia_device *link)
244 dev_dbg(&link->dev, "pcnet_attach()\n");
250 info->p_dev = link;
251 link->priv = dev;
253 link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO;
257 return pcnet_config(link);
260 static void pcnet_detach(struct pcmcia_device *link)
262 struct net_device *dev = link->priv;
264 dev_dbg(&link->dev, "pcnet_detach\n");
268 pcnet_release(link);
280 static hw_info_t *get_hwinfo(struct pcmcia_device *link)
282 struct net_device *dev = link->priv;
287 link->resource[2]->flags |= WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
288 link->resource[2]->start = 0; link->resource[2]->end = 0;
289 i = pcmcia_request_window(link, link->resource[2], 0);
293 virt = ioremap(link->resource[2]->start,
294 resource_size(link->resource[2]));
296 pcmcia_map_mem_page(link, link->resource[2],
297 hw_info[i].offset & ~(resource_size(link->resource[2])-1));
298 base = &virt[hw_info[i].offset & (resource_size(link->resource[2])-1)];
309 j = pcmcia_release_window(link, link->resource[2]);
321 static hw_info_t *get_prom(struct pcmcia_device *link)
323 struct net_device *dev = link->priv;
375 static hw_info_t *get_dl10019(struct pcmcia_device *link)
377 struct net_device *dev = link->priv;
397 static hw_info_t *get_ax88190(struct pcmcia_device *link)
399 struct net_device *dev = link->priv;
404 if (link->config_base != 0x03c0)
428 static hw_info_t *get_hwired(struct pcmcia_device *link)
430 struct net_device *dev = link->priv;
444 static int try_io_port(struct pcmcia_device *link)
447 link->resource[0]->flags &= ~IO_DATA_PATH_WIDTH;
448 link->resource[1]->flags &= ~IO_DATA_PATH_WIDTH;
449 if (link->resource[0]->end == 32) {
450 link->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
451 if (link->resource[1]->end > 0) {
453 link->resource[1]->flags |= IO_DATA_PATH_WIDTH_8;
457 link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
458 link->resource[1]->flags |= IO_DATA_PATH_WIDTH_16;
460 if (link->resource[0]->start == 0) {
462 link->resource[0]->start = j ^ 0x300;
463 link->resource[1]->start = (j ^ 0x300) + 0x10;
464 link->io_lines = 16;
465 ret = pcmcia_request_io(link);
471 return pcmcia_request_io(link);
493 static hw_info_t *pcnet_try_config(struct pcmcia_device *link,
496 struct net_device *dev = link->priv;
502 ret = pcmcia_loop_config(link, pcnet_confcheck, &priv);
504 dev_warn(&link->dev, "no useable port range found\n");
509 if (!link->irq)
512 if (resource_size(link->resource[1]) == 8)
513 link->config_flags |= CONF_ENABLE_SPKR;
515 if ((link->manf_id == MANFID_IBM) &&
516 (link->card_id == PRODID_IBM_HOME_AND_AWAY))
517 link->config_index |= 0x10;
519 ret = pcmcia_enable_device(link);
523 dev->irq = link->irq;
524 dev->base_addr = link->resource[0]->start;
530 dev_notice(&link->dev, "invalid if_port requested\n");
534 if ((link->config_base == 0x03c0) &&
535 (link->manf_id == 0x149) && (link->card_id == 0xc1ab)) {
536 dev_info(&link->dev,
541 local_hw_info = get_hwinfo(link);
543 local_hw_info = get_prom(link);
545 local_hw_info = get_dl10019(link);
547 local_hw_info = get_ax88190(link);
549 local_hw_info = get_hwired(link);
554 static int pcnet_config(struct pcmcia_device *link)
556 struct net_device *dev = link->priv;
562 dev_dbg(&link->dev, "pcnet_config\n");
564 local_hw_info = pcnet_try_config(link, &has_shmem, 0);
567 pcmcia_disable_device(link);
568 local_hw_info = pcnet_try_config(link, &has_shmem, 1);
570 dev_notice(&link->dev, "unable to read hardware net"
579 if ((link->manf_id == MANFID_SOCKET) &&
580 ((link->card_id == PRODID_SOCKET_LPE) ||
581 (link->card_id == PRODID_SOCKET_LPE_CF) ||
582 (link->card_id == PRODID_SOCKET_EIO)))
599 (setup_shmem_window(link, start_pg, stop_pg, cm_offset) != 0))
600 setup_dma_config(link, start_pg, stop_pg);
609 SET_NETDEV_DEV(dev, &link->dev);
634 pcnet_release(link);
638 static void pcnet_release(struct pcmcia_device *link)
640 pcnet_dev_t *info = PRIV(link->priv);
642 dev_dbg(&link->dev, "pcnet_release\n");
647 pcmcia_disable_device(link);
650 static int pcnet_suspend(struct pcmcia_device *link)
652 struct net_device *dev = link->priv;
654 if (link->open)
660 static int pcnet_resume(struct pcmcia_device *link)
662 struct net_device *dev = link->priv;
664 if (link->open) {
900 struct pcmcia_device *link = info->p_dev;
903 dev_dbg(&link->dev, "pcnet_open('%s')\n", dev->name);
905 if (!pcmcia_dev_present(link))
915 link->open++;
933 struct pcmcia_device *link = info->p_dev;
935 dev_dbg(&link->dev, "pcnet_close('%s')\n", dev->name);
940 link->open--;
1017 u_short link;
1040 link = mdio_read(mii_addr, info->phy_id, 1);
1041 if (!link || (link == 0xffff)) {
1051 link &= 0x0004;
1052 if (link != info->link_status) {
1054 netdev_info(dev, "%s link beat\n", link ? "found" : "lost");
1055 if (link && (info->flags & IS_DL10022)) {
1058 } else if (link && (info->flags & IS_DL10019)) {
1062 if (link) {
1070 netdev_info(dev, "link partner did not autonegotiate\n");
1074 info->link_status = link;
1077 link = mdio_read(mii_addr, info->eth_phy, 1) & 0x0004;
1078 if (((info->phy_id == info->pna_phy) && link) ||
1079 ((info->phy_id != info->pna_phy) && !link)) {
1294 static int setup_dma_config(struct pcmcia_device *link, int start_pg,
1297 struct net_device *dev = link->priv;
1397 static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
1400 struct net_device *dev = link->priv;
1412 link->resource[3]->flags |= WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE;
1413 link->resource[3]->flags |= WIN_USE_WAIT;
1414 link->resource[3]->start = 0; link->resource[3]->end = window_size;
1415 ret = pcmcia_request_window(link, link->resource[3], mem_speed);
1421 ret = pcmcia_map_mem_page(link, link->resource[3], offset);
1426 info->base = ioremap(link->resource[3]->start,
1427 resource_size(link->resource[3]));
1436 pcmcia_release_window(link, link->resource[3]);
1442 ei_status.priv = resource_size(link->resource[3]);
1444 dev->mem_end = dev->mem_start + resource_size(link->resource[3]);
1449 (resource_size(link->resource[3]) - offset) >> 8);