memac 510 drivers/net/ethernet/freescale/fman/fman_memac.c static void setup_sgmii_internal_phy(struct fman_mac *memac, memac 515 drivers/net/ethernet/freescale/fman/fman_memac.c if (WARN_ON(!memac->pcsphy)) memac 539 drivers/net/ethernet/freescale/fman/fman_memac.c phy_write(memac->pcsphy, MDIO_SGMII_IF_MODE, tmp_reg16); memac 543 drivers/net/ethernet/freescale/fman/fman_memac.c phy_write(memac->pcsphy, MDIO_SGMII_DEV_ABIL_SGMII, tmp_reg16); memac 557 drivers/net/ethernet/freescale/fman/fman_memac.c phy_write(memac->pcsphy, MDIO_SGMII_LINK_TMR_H, LINK_TMR_H); memac 558 drivers/net/ethernet/freescale/fman/fman_memac.c phy_write(memac->pcsphy, MDIO_SGMII_LINK_TMR_L, LINK_TMR_L); memac 566 drivers/net/ethernet/freescale/fman/fman_memac.c phy_write(memac->pcsphy, 0x0, tmp_reg16); memac 569 drivers/net/ethernet/freescale/fman/fman_memac.c static void setup_sgmii_internal_phy_base_x(struct fman_mac *memac) memac 575 drivers/net/ethernet/freescale/fman/fman_memac.c phy_write(memac->pcsphy, MDIO_SGMII_DEV_ABIL_SGMII, tmp_reg16); memac 589 drivers/net/ethernet/freescale/fman/fman_memac.c phy_write(memac->pcsphy, MDIO_SGMII_LINK_TMR_H, LINK_TMR_H_BASEX); memac 590 drivers/net/ethernet/freescale/fman/fman_memac.c phy_write(memac->pcsphy, MDIO_SGMII_LINK_TMR_L, LINK_TMR_L_BASEX); memac 594 drivers/net/ethernet/freescale/fman/fman_memac.c phy_write(memac->pcsphy, 0x0, tmp_reg16); memac 597 drivers/net/ethernet/freescale/fman/fman_memac.c static int check_init_parameters(struct fman_mac *memac) memac 599 drivers/net/ethernet/freescale/fman/fman_memac.c if (memac->addr == 0) { memac 603 drivers/net/ethernet/freescale/fman/fman_memac.c if (!memac->exception_cb) { memac 607 drivers/net/ethernet/freescale/fman/fman_memac.c if (!memac->event_cb) { memac 642 drivers/net/ethernet/freescale/fman/fman_memac.c struct fman_mac *memac = (struct fman_mac *)handle; memac 643 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 659 drivers/net/ethernet/freescale/fman/fman_memac.c memac->exception_cb(memac->dev_id, FM_MAC_EX_TS_FIFO_ECC_ERR); memac 661 drivers/net/ethernet/freescale/fman/fman_memac.c memac->exception_cb(memac->dev_id, FM_MAC_EX_10G_TX_ECC_ER); memac 663 drivers/net/ethernet/freescale/fman/fman_memac.c memac->exception_cb(memac->dev_id, FM_MAC_EX_10G_RX_ECC_ER); memac 668 drivers/net/ethernet/freescale/fman/fman_memac.c struct fman_mac *memac = (struct fman_mac *)handle; memac 669 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 685 drivers/net/ethernet/freescale/fman/fman_memac.c memac->exception_cb(memac->dev_id, memac 689 drivers/net/ethernet/freescale/fman/fman_memac.c static void free_init_resources(struct fman_mac *memac) memac 691 drivers/net/ethernet/freescale/fman/fman_memac.c fman_unregister_intr(memac->fm, FMAN_MOD_MAC, memac->mac_id, memac 694 drivers/net/ethernet/freescale/fman/fman_memac.c fman_unregister_intr(memac->fm, FMAN_MOD_MAC, memac->mac_id, memac 698 drivers/net/ethernet/freescale/fman/fman_memac.c free_hash_table(memac->multicast_addr_hash); memac 699 drivers/net/ethernet/freescale/fman/fman_memac.c memac->multicast_addr_hash = NULL; memac 702 drivers/net/ethernet/freescale/fman/fman_memac.c free_hash_table(memac->unicast_addr_hash); memac 703 drivers/net/ethernet/freescale/fman/fman_memac.c memac->unicast_addr_hash = NULL; memac 715 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_enable(struct fman_mac *memac, enum comm_mode mode) memac 717 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 720 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 734 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_disable(struct fman_mac *memac, enum comm_mode mode) memac 736 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 739 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 753 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_set_promiscuous(struct fman_mac *memac, bool new_val) memac 755 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 758 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 772 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_adjust_link(struct fman_mac *memac, u16 speed) memac 774 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 777 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 785 drivers/net/ethernet/freescale/fman/fman_memac.c if (memac->phy_if == PHY_INTERFACE_MODE_RGMII) { memac 812 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_cfg_max_frame_len(struct fman_mac *memac, u16 new_val) memac 814 drivers/net/ethernet/freescale/fman/fman_memac.c if (is_init_done(memac->memac_drv_param)) memac 817 drivers/net/ethernet/freescale/fman/fman_memac.c memac->memac_drv_param->max_frame_length = new_val; memac 822 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_cfg_reset_on_init(struct fman_mac *memac, bool enable) memac 824 drivers/net/ethernet/freescale/fman/fman_memac.c if (is_init_done(memac->memac_drv_param)) memac 827 drivers/net/ethernet/freescale/fman/fman_memac.c memac->memac_drv_param->reset_on_init = enable; memac 832 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_cfg_fixed_link(struct fman_mac *memac, memac 835 drivers/net/ethernet/freescale/fman/fman_memac.c if (is_init_done(memac->memac_drv_param)) memac 838 drivers/net/ethernet/freescale/fman/fman_memac.c memac->memac_drv_param->fixed_link = fixed_link; memac 843 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_set_tx_pause_frames(struct fman_mac *memac, u8 priority, memac 846 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 849 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 882 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_accept_rx_pause_frames(struct fman_mac *memac, bool en) memac 884 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 887 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 901 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_modify_mac_address(struct fman_mac *memac, enet_addr_t *enet_addr) memac 903 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 906 drivers/net/ethernet/freescale/fman/fman_memac.c add_addr_in_paddr(memac->regs, (u8 *)(*enet_addr), 0); memac 911 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_add_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr) memac 913 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 918 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 938 drivers/net/ethernet/freescale/fman/fman_memac.c &memac->multicast_addr_hash->lsts[hash]); memac 944 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_set_allmulti(struct fman_mac *memac, bool enable) memac 947 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 949 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 962 drivers/net/ethernet/freescale/fman/fman_memac.c memac->allmulti_enabled = enable; memac 967 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_set_tstamp(struct fman_mac *memac, bool enable) memac 972 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_del_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr) memac 974 drivers/net/ethernet/freescale/fman/fman_memac.c struct memac_regs __iomem *regs = memac->regs; memac 980 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 987 drivers/net/ethernet/freescale/fman/fman_memac.c list_for_each(pos, &memac->multicast_addr_hash->lsts[hash]) { memac 996 drivers/net/ethernet/freescale/fman/fman_memac.c if (!memac->allmulti_enabled) { memac 997 drivers/net/ethernet/freescale/fman/fman_memac.c if (list_empty(&memac->multicast_addr_hash->lsts[hash])) memac 1005 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_set_exception(struct fman_mac *memac, memac 1010 drivers/net/ethernet/freescale/fman/fman_memac.c if (!is_init_done(memac->memac_drv_param)) memac 1016 drivers/net/ethernet/freescale/fman/fman_memac.c memac->exceptions |= bit_mask; memac 1018 drivers/net/ethernet/freescale/fman/fman_memac.c memac->exceptions &= ~bit_mask; memac 1023 drivers/net/ethernet/freescale/fman/fman_memac.c set_exception(memac->regs, bit_mask, enable); memac 1028 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_init(struct fman_mac *memac) memac 1038 drivers/net/ethernet/freescale/fman/fman_memac.c if (is_init_done(memac->memac_drv_param)) memac 1041 drivers/net/ethernet/freescale/fman/fman_memac.c err = check_init_parameters(memac); memac 1045 drivers/net/ethernet/freescale/fman/fman_memac.c memac_drv_param = memac->memac_drv_param; memac 1047 drivers/net/ethernet/freescale/fman/fman_memac.c if (memac->fm_rev_info.major == 6 && memac->fm_rev_info.minor == 4) memac 1052 drivers/net/ethernet/freescale/fman/fman_memac.c err = reset(memac->regs); memac 1060 drivers/net/ethernet/freescale/fman/fman_memac.c MAKE_ENET_ADDR_FROM_UINT64(memac->addr, eth_addr); memac 1061 drivers/net/ethernet/freescale/fman/fman_memac.c add_addr_in_paddr(memac->regs, (u8 *)eth_addr, 0); memac 1065 drivers/net/ethernet/freescale/fman/fman_memac.c init(memac->regs, memac->memac_drv_param, memac->phy_if, memac 1066 drivers/net/ethernet/freescale/fman/fman_memac.c memac->max_speed, slow_10g_if, memac->exceptions); memac 1071 drivers/net/ethernet/freescale/fman/fman_memac.c if ((memac->fm_rev_info.major == 6) && memac 1072 drivers/net/ethernet/freescale/fman/fman_memac.c ((memac->fm_rev_info.minor == 0) || memac 1073 drivers/net/ethernet/freescale/fman/fman_memac.c (memac->fm_rev_info.minor == 3))) { memac 1077 drivers/net/ethernet/freescale/fman/fman_memac.c reg32 = ioread32be(&memac->regs->command_config); memac 1079 drivers/net/ethernet/freescale/fman/fman_memac.c iowrite32be(reg32, &memac->regs->command_config); memac 1082 drivers/net/ethernet/freescale/fman/fman_memac.c if (memac->phy_if == PHY_INTERFACE_MODE_SGMII) { memac 1084 drivers/net/ethernet/freescale/fman/fman_memac.c if (memac->basex_if) memac 1085 drivers/net/ethernet/freescale/fman/fman_memac.c setup_sgmii_internal_phy_base_x(memac); memac 1087 drivers/net/ethernet/freescale/fman/fman_memac.c setup_sgmii_internal_phy(memac, fixed_link); memac 1088 drivers/net/ethernet/freescale/fman/fman_memac.c } else if (memac->phy_if == PHY_INTERFACE_MODE_QSGMII) { memac 1097 drivers/net/ethernet/freescale/fman/fman_memac.c phy_addr = memac->pcsphy->mdio.addr; memac 1099 drivers/net/ethernet/freescale/fman/fman_memac.c memac->pcsphy->mdio.addr = qsmgii_phy_addr; memac 1100 drivers/net/ethernet/freescale/fman/fman_memac.c if (memac->basex_if) memac 1101 drivers/net/ethernet/freescale/fman/fman_memac.c setup_sgmii_internal_phy_base_x(memac); memac 1103 drivers/net/ethernet/freescale/fman/fman_memac.c setup_sgmii_internal_phy(memac, fixed_link); memac 1105 drivers/net/ethernet/freescale/fman/fman_memac.c memac->pcsphy->mdio.addr = phy_addr; memac 1110 drivers/net/ethernet/freescale/fman/fman_memac.c err = fman_set_mac_max_frame(memac->fm, memac->mac_id, memac 1117 drivers/net/ethernet/freescale/fman/fman_memac.c memac->multicast_addr_hash = alloc_hash_table(HASH_TABLE_SIZE); memac 1118 drivers/net/ethernet/freescale/fman/fman_memac.c if (!memac->multicast_addr_hash) { memac 1119 drivers/net/ethernet/freescale/fman/fman_memac.c free_init_resources(memac); memac 1124 drivers/net/ethernet/freescale/fman/fman_memac.c memac->unicast_addr_hash = alloc_hash_table(HASH_TABLE_SIZE); memac 1125 drivers/net/ethernet/freescale/fman/fman_memac.c if (!memac->unicast_addr_hash) { memac 1126 drivers/net/ethernet/freescale/fman/fman_memac.c free_init_resources(memac); memac 1131 drivers/net/ethernet/freescale/fman/fman_memac.c fman_register_intr(memac->fm, FMAN_MOD_MAC, memac->mac_id, memac 1132 drivers/net/ethernet/freescale/fman/fman_memac.c FMAN_INTR_TYPE_ERR, memac_err_exception, memac); memac 1134 drivers/net/ethernet/freescale/fman/fman_memac.c fman_register_intr(memac->fm, FMAN_MOD_MAC, memac->mac_id, memac 1135 drivers/net/ethernet/freescale/fman/fman_memac.c FMAN_INTR_TYPE_NORMAL, memac_exception, memac); memac 1138 drivers/net/ethernet/freescale/fman/fman_memac.c memac->memac_drv_param = NULL; memac 1143 drivers/net/ethernet/freescale/fman/fman_memac.c int memac_free(struct fman_mac *memac) memac 1145 drivers/net/ethernet/freescale/fman/fman_memac.c free_init_resources(memac); memac 1147 drivers/net/ethernet/freescale/fman/fman_memac.c if (memac->pcsphy) memac 1148 drivers/net/ethernet/freescale/fman/fman_memac.c put_device(&memac->pcsphy->mdio.dev); memac 1150 drivers/net/ethernet/freescale/fman/fman_memac.c kfree(memac->memac_drv_param); memac 1151 drivers/net/ethernet/freescale/fman/fman_memac.c kfree(memac); memac 1158 drivers/net/ethernet/freescale/fman/fman_memac.c struct fman_mac *memac; memac 1164 drivers/net/ethernet/freescale/fman/fman_memac.c memac = kzalloc(sizeof(*memac), GFP_KERNEL); memac 1165 drivers/net/ethernet/freescale/fman/fman_memac.c if (!memac) memac 1171 drivers/net/ethernet/freescale/fman/fman_memac.c memac_free(memac); memac 1176 drivers/net/ethernet/freescale/fman/fman_memac.c memac->memac_drv_param = memac_drv_param; memac 1180 drivers/net/ethernet/freescale/fman/fman_memac.c memac->addr = ENET_ADDR_TO_UINT64(params->addr); memac 1182 drivers/net/ethernet/freescale/fman/fman_memac.c memac->regs = base_addr; memac 1183 drivers/net/ethernet/freescale/fman/fman_memac.c memac->max_speed = params->max_speed; memac 1184 drivers/net/ethernet/freescale/fman/fman_memac.c memac->phy_if = params->phy_if; memac 1185 drivers/net/ethernet/freescale/fman/fman_memac.c memac->mac_id = params->mac_id; memac 1186 drivers/net/ethernet/freescale/fman/fman_memac.c memac->exceptions = (MEMAC_IMASK_TSECC_ER | MEMAC_IMASK_TECC_ER | memac 1188 drivers/net/ethernet/freescale/fman/fman_memac.c memac->exception_cb = params->exception_cb; memac 1189 drivers/net/ethernet/freescale/fman/fman_memac.c memac->event_cb = params->event_cb; memac 1190 drivers/net/ethernet/freescale/fman/fman_memac.c memac->dev_id = params->dev_id; memac 1191 drivers/net/ethernet/freescale/fman/fman_memac.c memac->fm = params->fm; memac 1192 drivers/net/ethernet/freescale/fman/fman_memac.c memac->basex_if = params->basex_if; memac 1195 drivers/net/ethernet/freescale/fman/fman_memac.c fman_get_revision(memac->fm, &memac->fm_rev_info); memac 1197 drivers/net/ethernet/freescale/fman/fman_memac.c if (memac->phy_if == PHY_INTERFACE_MODE_SGMII || memac 1198 drivers/net/ethernet/freescale/fman/fman_memac.c memac->phy_if == PHY_INTERFACE_MODE_QSGMII) { memac 1201 drivers/net/ethernet/freescale/fman/fman_memac.c memac_free(memac); memac 1205 drivers/net/ethernet/freescale/fman/fman_memac.c memac->pcsphy = of_phy_find_device(params->internal_phy_node); memac 1206 drivers/net/ethernet/freescale/fman/fman_memac.c if (!memac->pcsphy) { memac 1208 drivers/net/ethernet/freescale/fman/fman_memac.c memac_free(memac); memac 1213 drivers/net/ethernet/freescale/fman/fman_memac.c return memac; memac 42 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_set_promiscuous(struct fman_mac *memac, bool new_val); memac 43 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_modify_mac_address(struct fman_mac *memac, enet_addr_t *enet_addr); memac 44 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_adjust_link(struct fman_mac *memac, u16 speed); memac 45 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_cfg_max_frame_len(struct fman_mac *memac, u16 new_val); memac 46 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_cfg_reset_on_init(struct fman_mac *memac, bool enable); memac 47 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_cfg_fixed_link(struct fman_mac *memac, memac 49 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_enable(struct fman_mac *memac, enum comm_mode mode); memac 50 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_disable(struct fman_mac *memac, enum comm_mode mode); memac 51 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_init(struct fman_mac *memac); memac 52 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_free(struct fman_mac *memac); memac 53 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_accept_rx_pause_frames(struct fman_mac *memac, bool en); memac 54 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_set_tx_pause_frames(struct fman_mac *memac, u8 priority, memac 56 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_set_exception(struct fman_mac *memac, memac 58 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_add_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr); memac 59 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_del_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr); memac 60 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_set_allmulti(struct fman_mac *memac, bool enable); memac 61 drivers/net/ethernet/freescale/fman/fman_memac.h int memac_set_tstamp(struct fman_mac *memac, bool enable);