int hieth_glb_preinit_dummy(struct hieth_netdev_local *ld) { local_lock_init(ld); //FIXME: hieth_glb_preinit_dummy //HW MAX DEFAULT RX-PKT-LEN [42,1518] //HW MAC FILTER TABLE DISABLE /*soft reset */ hieth_writel_bits(ld, 1, GLB_SOFT_RESET, BITS_ETH_SOFT_RESET); udelay(1000); hieth_writel_bits(ld, 0, GLB_SOFT_RESET, BITS_ETH_SOFT_RESET); hieth_set_endian_mode(ld, HIETH_LITTLE_ENDIAN); hieth_set_linkstat(ld, 0); hieth_set_negmode(ld, HIETH_NEGMODE_CPUSET); /* RMII mode */ hieth_set_mii_mode(ld, UD_BIT_NAME(HIETH_MII_RMII_MODE)); hieth_writel_bits(ld, ~0, GLB_RW_IRQ_ENA, UD_BIT_NAME(BITS_IRQS)); hieth_writel_bits(ld, ~0, GLB_RW_IRQ_ENA, UD_BIT_NAME(BITS_IRQS_ENA)); hieth_writel_bits(ld, ~0, GLB_RW_IRQ_ENA, BITS_IRQS_ENA_ALLPORT); hieth_irq_disable(ld, ~0); /* init */ hieth_writel(ld, 0, GLB_FWCTRL); hieth_writel(ld, 0, GLB_MACTCTRL); /*disable vlan func */ hieth_writel_bits(ld, 0, GLB_FWCTRL, BITS_VLAN_ENABLE); /*enable UpEther<->CPU */ hieth_writel_bits(ld, 1, GLB_FWCTRL, BITS_FW2CPU_ENA_UP); hieth_writel_bits(ld, 0, GLB_FWCTRL, BITS_FWALL2CPU_UP); hieth_writel_bits(ld, 0, GLB_MACTCTRL, BITS_BROAD2CPU_UP); hieth_writel_bits(ld, 1, GLB_MACTCTRL, BITS_MACT_ENA_UP); /*enable DownEther<->CPU and UpEther<->CPU */ hieth_writel_bits(ld, 1, GLB_FWCTRL, BITS_FW2CPU_ENA_DOWN); hieth_writel_bits(ld, 0, GLB_FWCTRL, BITS_FWALL2CPU_DOWN); hieth_writel_bits(ld, 0, GLB_MACTCTRL, BITS_BROAD2CPU_DOWN); hieth_writel_bits(ld, 1, GLB_MACTCTRL, BITS_MACT_ENA_DOWN); hieth_set_mac_leadcode_cnt_limit(ld, 0); return 0; }
static void hieth_adjust_link(struct net_device *dev) { int stat = 0; struct hieth_netdev_local *ld = netdev_priv(dev); stat |= (ld->phy->link) ? HIETH_LINKED : 0; stat |= (ld->phy->duplex == DUPLEX_FULL) ? HIETH_DUP_FULL : 0; stat |= (ld->phy->speed == SPEED_100) ? HIETH_SPD_100M : 0; if (stat != ld->link_stat) { if (ld->phy->link == 0) { printk(KERN_INFO "***link down status changed***.\n"); writel(0x0, ld->iobase + 0x490); writel(0x0, ld->iobase + 0x484); } else { writel(0x1, ld->iobase + 0x490); hanbang_asshole(); #ifdef CONFIG_EEE_SUPPORT if (eee_available > NO_EEE) { int data = ld->driver->eee_enable(); if (DEBUG) printk(KERN_INFO "adjust_link " "data:(=2?): %d\n", data); if (eee_available == MAC_EEE) { writel(0x10, ld->iobase + 0x484); /* enable intr */ writel(0x1f, ld->iobase + 0x480); } else writel(0x0, ld->iobase + 0x484); } #endif } hieth_set_linkstat(ld, stat); phy_print_status(ld->phy); ld->link_stat = stat; } }