Lines Matching refs:link

267 static int smc91c92_config(struct pcmcia_device *link);
268 static void smc91c92_release(struct pcmcia_device *link);
302 static int smc91c92_probe(struct pcmcia_device *link) in smc91c92_probe() argument
307 dev_dbg(&link->dev, "smc91c92_attach()\n"); in smc91c92_probe()
314 smc->p_dev = link; in smc91c92_probe()
315 link->priv = dev; in smc91c92_probe()
330 return smc91c92_config(link); in smc91c92_probe()
333 static void smc91c92_detach(struct pcmcia_device *link) in smc91c92_detach() argument
335 struct net_device *dev = link->priv; in smc91c92_detach()
337 dev_dbg(&link->dev, "smc91c92_detach\n"); in smc91c92_detach()
341 smc91c92_release(link); in smc91c92_detach()
378 static int mhz_3288_power(struct pcmcia_device *link) in mhz_3288_power() argument
380 struct net_device *dev = link->priv; in mhz_3288_power()
393 tmp = readb(smc->base + link->config_base + CISREG_COR); in mhz_3288_power()
395 writeb(tmp, smc->base + link->config_base + CISREG_COR); in mhz_3288_power()
421 static int mhz_mfc_config(struct pcmcia_device *link) in mhz_mfc_config() argument
423 struct net_device *dev = link->priv; in mhz_mfc_config()
428 link->config_flags |= CONF_ENABLE_SPKR | CONF_ENABLE_IRQ | in mhz_mfc_config()
433 if (pcmcia_loop_config(link, mhz_mfc_config_check, NULL)) in mhz_mfc_config()
436 dev->base_addr = link->resource[0]->start; in mhz_mfc_config()
439 link->resource[2]->flags = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE; in mhz_mfc_config()
440 link->resource[2]->start = link->resource[2]->end = 0; in mhz_mfc_config()
441 i = pcmcia_request_window(link, link->resource[2], 0); in mhz_mfc_config()
445 smc->base = ioremap(link->resource[2]->start, in mhz_mfc_config()
446 resource_size(link->resource[2])); in mhz_mfc_config()
447 offset = (smc->manfid == MANFID_MOTOROLA) ? link->config_base : 0; in mhz_mfc_config()
448 i = pcmcia_map_mem_page(link, link->resource[2], offset); in mhz_mfc_config()
452 mhz_3288_power(link); in mhz_mfc_config()
476 static int mhz_setup(struct pcmcia_device *link) in mhz_setup() argument
478 struct net_device *dev = link->priv; in mhz_setup()
485 if ((link->prod_id[3]) && in mhz_setup()
486 (cvt_ascii_address(dev, link->prod_id[3]) == 0)) in mhz_setup()
491 if (!pcmcia_loop_tuple(link, CISTPL_VERS_1, pcmcia_get_versmac, dev)) in mhz_setup()
496 len = pcmcia_get_tuple(link, 0x81, &buf); in mhz_setup()
516 static void mot_config(struct pcmcia_device *link) in mot_config() argument
518 struct net_device *dev = link->priv; in mot_config()
521 unsigned int iouart = link->resource[1]->start; in mot_config()
537 static int mot_setup(struct pcmcia_device *link) in mot_setup() argument
539 struct net_device *dev = link->priv; in mot_setup()
580 static int smc_config(struct pcmcia_device *link) in smc_config() argument
582 struct net_device *dev = link->priv; in smc_config()
585 link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; in smc_config()
587 i = pcmcia_loop_config(link, smc_configcheck, NULL); in smc_config()
589 dev->base_addr = link->resource[0]->start; in smc_config()
595 static int smc_setup(struct pcmcia_device *link) in smc_setup() argument
597 struct net_device *dev = link->priv; in smc_setup()
600 if (!pcmcia_get_mac_from_cis(link, dev)) in smc_setup()
604 if (link->prod_id[2]) { in smc_setup()
605 if (cvt_ascii_address(dev, link->prod_id[2]) == 0) in smc_setup()
613 static int osi_config(struct pcmcia_device *link) in osi_config() argument
615 struct net_device *dev = link->priv; in osi_config()
619 link->config_flags |= CONF_ENABLE_SPKR | CONF_ENABLE_IRQ; in osi_config()
620 link->resource[0]->end = 64; in osi_config()
621 link->resource[1]->flags |= IO_DATA_PATH_WIDTH_8; in osi_config()
622 link->resource[1]->end = 8; in osi_config()
625 link->io_lines = 16; in osi_config()
626 link->config_index = 0x23; in osi_config()
629 link->resource[1]->start = com[j]; in osi_config()
630 i = pcmcia_request_io(link); in osi_config()
636 link->config_index = 0x03; in osi_config()
637 link->resource[1]->end = 0; in osi_config()
638 i = pcmcia_request_io(link); in osi_config()
640 dev->base_addr = link->resource[0]->start + 0x10; in osi_config()
644 static int osi_load_firmware(struct pcmcia_device *link) in osi_load_firmware() argument
649 err = request_firmware(&fw, FIRMWARE_NAME, &link->dev); in osi_load_firmware()
657 outb(fw->data[i], link->resource[0]->start + 2); in osi_load_firmware()
681 static int osi_setup(struct pcmcia_device *link, u_short manfid, u_short cardid) in osi_setup() argument
683 struct net_device *dev = link->priv; in osi_setup()
687 if (pcmcia_loop_tuple(link, 0x90, pcmcia_osi_mac, dev)) in osi_setup()
694 rc = osi_load_firmware(link); in osi_setup()
699 set_bits(0x300, link->resource[0]->start + OSITECH_AUI_PWR); in osi_setup()
701 set_bits(0x300, link->resource[0]->start + OSITECH_RESET_ISR); in osi_setup()
702 dev_dbg(&link->dev, "AUI/PWR: %4.4x RESET/ISR: %4.4x\n", in osi_setup()
703 inw(link->resource[0]->start + OSITECH_AUI_PWR), in osi_setup()
704 inw(link->resource[0]->start + OSITECH_RESET_ISR)); in osi_setup()
709 static int smc91c92_suspend(struct pcmcia_device *link) in smc91c92_suspend() argument
711 struct net_device *dev = link->priv; in smc91c92_suspend()
713 if (link->open) in smc91c92_suspend()
719 static int smc91c92_resume(struct pcmcia_device *link) in smc91c92_resume() argument
721 struct net_device *dev = link->priv; in smc91c92_resume()
727 mhz_3288_power(link); in smc91c92_resume()
729 mot_config(link); in smc91c92_resume()
740 i = osi_load_firmware(link); in smc91c92_resume()
746 if (link->open) { in smc91c92_resume()
762 static int check_sig(struct pcmcia_device *link) in check_sig() argument
764 struct net_device *dev = link->priv; in check_sig()
777 width = (link->resource[0]->flags == IO_DATA_PATH_WIDTH_AUTO); in check_sig()
797 smc91c92_suspend(link); in check_sig()
798 pcmcia_fixup_iowidth(link); in check_sig()
799 smc91c92_resume(link); in check_sig()
800 return check_sig(link); in check_sig()
805 static int smc91c92_config(struct pcmcia_device *link) in smc91c92_config() argument
807 struct net_device *dev = link->priv; in smc91c92_config()
814 dev_dbg(&link->dev, "smc91c92_config\n"); in smc91c92_config()
816 smc->manfid = link->manf_id; in smc91c92_config()
817 smc->cardid = link->card_id; in smc91c92_config()
821 i = osi_config(link); in smc91c92_config()
826 i = mhz_mfc_config(link); in smc91c92_config()
828 i = smc_config(link); in smc91c92_config()
833 i = pcmcia_request_irq(link, smc_interrupt); in smc91c92_config()
836 i = pcmcia_enable_device(link); in smc91c92_config()
841 mot_config(link); in smc91c92_config()
843 dev->irq = link->irq; in smc91c92_config()
848 dev_notice(&link->dev, "invalid if_port requested\n"); in smc91c92_config()
853 i = osi_setup(link, smc->manfid, smc->cardid); break; in smc91c92_config()
856 i = smc_setup(link); break; in smc91c92_config()
859 i = mhz_setup(link); break; in smc91c92_config()
862 i = mot_setup(link); break; in smc91c92_config()
866 dev_notice(&link->dev, "Unable to find hardware address.\n"); in smc91c92_config()
873 rev = check_sig(link); in smc91c92_config()
916 SET_NETDEV_DEV(dev, &link->dev); in smc91c92_config()
919 dev_err(&link->dev, "register_netdev() failed\n"); in smc91c92_config()
948 smc91c92_release(link); in smc91c92_config()
953 static void smc91c92_release(struct pcmcia_device *link) in smc91c92_release() argument
955 dev_dbg(&link->dev, "smc91c92_release\n"); in smc91c92_release()
956 if (link->resource[2]->end) { in smc91c92_release()
957 struct net_device *dev = link->priv; in smc91c92_release()
961 pcmcia_disable_device(link); in smc91c92_release()
1050 struct pcmcia_device *link = smc->p_dev; in smc_open() local
1052 dev_dbg(&link->dev, "%s: smc_open(%p), ID/Window %4.4x.\n", in smc_open()
1059 if (!pcmcia_dev_present(link)) in smc_open()
1062 if (check_sig(link) < 0) { in smc_open()
1066 link->open++; in smc_open()
1084 struct pcmcia_device *link = smc->p_dev; in smc_close() local
1087 dev_dbg(&link->dev, "%s: smc_close(), status %4.4x.\n", in smc_close()
1104 link->open--; in smc_close()
1716 u_short link; in media_check() local
1768 link = mdio_read(dev, smc->mii_if.phy_id, 1); in media_check()
1769 if (!link || (link == 0xffff)) { in media_check()
1775 link &= 0x0004; in media_check()
1776 if (link != smc->link_status) { in media_check()
1778 netdev_info(dev, "%s link beat\n", link ? "found" : "lost"); in media_check()
1781 if (link) { in media_check()
1788 smc->link_status = link; in media_check()