Lines Matching refs:tgec

270 static int check_init_parameters(struct fman_mac *tgec)  in check_init_parameters()  argument
272 if (tgec->max_speed < SPEED_10000) { in check_init_parameters()
276 if (tgec->addr == 0) { in check_init_parameters()
280 if (!tgec->exception_cb) { in check_init_parameters()
284 if (!tgec->event_cb) { in check_init_parameters()
358 struct fman_mac *tgec = (struct fman_mac *)handle; in tgec_err_exception() local
359 struct tgec_regs __iomem *regs = tgec->regs; in tgec_err_exception()
372 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_REM_FAULT); in tgec_err_exception()
374 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_LOC_FAULT); in tgec_err_exception()
376 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_ECC_ER); in tgec_err_exception()
378 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_FIFO_UNFL); in tgec_err_exception()
380 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_FIFO_OVFL); in tgec_err_exception()
382 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_ER); in tgec_err_exception()
384 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_FIFO_OVFL); in tgec_err_exception()
386 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_ECC_ER); in tgec_err_exception()
388 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_JAB_FRM); in tgec_err_exception()
390 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_OVRSZ_FRM); in tgec_err_exception()
392 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_RUNT_FRM); in tgec_err_exception()
394 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_FRAG_FRM); in tgec_err_exception()
396 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_LEN_ER); in tgec_err_exception()
398 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_CRC_ER); in tgec_err_exception()
400 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_ALIGN_ER); in tgec_err_exception()
403 static void free_init_resources(struct fman_mac *tgec) in free_init_resources() argument
405 fman_unregister_intr(tgec->fm, FMAN_MOD_MAC, tgec->mac_id, in free_init_resources()
409 free_hash_table(tgec->multicast_addr_hash); in free_init_resources()
410 tgec->multicast_addr_hash = NULL; in free_init_resources()
413 free_hash_table(tgec->unicast_addr_hash); in free_init_resources()
414 tgec->unicast_addr_hash = NULL; in free_init_resources()
426 int tgec_enable(struct fman_mac *tgec, enum comm_mode mode) in tgec_enable() argument
428 struct tgec_regs __iomem *regs = tgec->regs; in tgec_enable()
431 if (!is_init_done(tgec->cfg)) in tgec_enable()
444 int tgec_disable(struct fman_mac *tgec, enum comm_mode mode) in tgec_disable() argument
446 struct tgec_regs __iomem *regs = tgec->regs; in tgec_disable()
449 if (!is_init_done(tgec->cfg)) in tgec_disable()
462 int tgec_set_promiscuous(struct fman_mac *tgec, bool new_val) in tgec_set_promiscuous() argument
464 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_promiscuous()
467 if (!is_init_done(tgec->cfg)) in tgec_set_promiscuous()
480 int tgec_cfg_max_frame_len(struct fman_mac *tgec, u16 new_val) in tgec_cfg_max_frame_len() argument
482 if (is_init_done(tgec->cfg)) in tgec_cfg_max_frame_len()
485 tgec->cfg->max_frame_length = new_val; in tgec_cfg_max_frame_len()
490 int tgec_set_tx_pause_frames(struct fman_mac *tgec, u8 __maybe_unused priority, in tgec_set_tx_pause_frames() argument
493 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_tx_pause_frames()
495 if (!is_init_done(tgec->cfg)) in tgec_set_tx_pause_frames()
503 int tgec_accept_rx_pause_frames(struct fman_mac *tgec, bool en) in tgec_accept_rx_pause_frames() argument
505 struct tgec_regs __iomem *regs = tgec->regs; in tgec_accept_rx_pause_frames()
508 if (!is_init_done(tgec->cfg)) in tgec_accept_rx_pause_frames()
521 int tgec_modify_mac_address(struct fman_mac *tgec, enet_addr_t *p_enet_addr) in tgec_modify_mac_address() argument
523 if (!is_init_done(tgec->cfg)) in tgec_modify_mac_address()
526 tgec->addr = ENET_ADDR_TO_UINT64(*p_enet_addr); in tgec_modify_mac_address()
527 set_mac_address(tgec->regs, (u8 *)(*p_enet_addr)); in tgec_modify_mac_address()
532 int tgec_add_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr) in tgec_add_hash_mac_address() argument
534 struct tgec_regs __iomem *regs = tgec->regs; in tgec_add_hash_mac_address()
539 if (!is_init_done(tgec->cfg)) in tgec_add_hash_mac_address()
563 &tgec->multicast_addr_hash->lsts[hash]); in tgec_add_hash_mac_address()
569 int tgec_set_allmulti(struct fman_mac *tgec, bool enable) in tgec_set_allmulti() argument
572 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_allmulti()
574 if (!is_init_done(tgec->cfg)) in tgec_set_allmulti()
587 tgec->allmulti_enabled = enable; in tgec_set_allmulti()
592 int tgec_set_tstamp(struct fman_mac *tgec, bool enable) in tgec_set_tstamp() argument
594 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_tstamp()
597 if (!is_init_done(tgec->cfg)) in tgec_set_tstamp()
612 int tgec_del_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr) in tgec_del_hash_mac_address() argument
614 struct tgec_regs __iomem *regs = tgec->regs; in tgec_del_hash_mac_address()
620 if (!is_init_done(tgec->cfg)) in tgec_del_hash_mac_address()
631 list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) { in tgec_del_hash_mac_address()
640 if (!tgec->allmulti_enabled) { in tgec_del_hash_mac_address()
641 if (list_empty(&tgec->multicast_addr_hash->lsts[hash])) in tgec_del_hash_mac_address()
649 int tgec_get_version(struct fman_mac *tgec, u32 *mac_version) in tgec_get_version() argument
651 struct tgec_regs __iomem *regs = tgec->regs; in tgec_get_version()
653 if (!is_init_done(tgec->cfg)) in tgec_get_version()
661 int tgec_set_exception(struct fman_mac *tgec, in tgec_set_exception() argument
664 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_exception()
667 if (!is_init_done(tgec->cfg)) in tgec_set_exception()
673 tgec->exceptions |= bit_mask; in tgec_set_exception()
675 tgec->exceptions &= ~bit_mask; in tgec_set_exception()
688 int tgec_init(struct fman_mac *tgec) in tgec_init() argument
694 if (is_init_done(tgec->cfg)) in tgec_init()
698 (fman_reset_mac(tgec->fm, tgec->mac_id) != 0)) { in tgec_init()
703 err = check_init_parameters(tgec); in tgec_init()
707 cfg = tgec->cfg; in tgec_init()
709 MAKE_ENET_ADDR_FROM_UINT64(tgec->addr, eth_addr); in tgec_init()
710 set_mac_address(tgec->regs, (u8 *)eth_addr); in tgec_init()
714 if (tgec->fm_rev_info.major <= 2) in tgec_init()
715 tgec->exceptions &= ~(TGEC_IMASK_REM_FAULT | in tgec_init()
718 err = init(tgec->regs, cfg, tgec->exceptions); in tgec_init()
720 free_init_resources(tgec); in tgec_init()
726 err = fman_set_mac_max_frame(tgec->fm, tgec->mac_id, in tgec_init()
730 free_init_resources(tgec); in tgec_init()
735 if (tgec->fm_rev_info.major == 2) { in tgec_init()
736 struct tgec_regs __iomem *regs = tgec->regs; in tgec_init()
746 tgec->multicast_addr_hash = alloc_hash_table(TGEC_HASH_TABLE_SIZE); in tgec_init()
747 if (!tgec->multicast_addr_hash) { in tgec_init()
748 free_init_resources(tgec); in tgec_init()
753 tgec->unicast_addr_hash = alloc_hash_table(TGEC_HASH_TABLE_SIZE); in tgec_init()
754 if (!tgec->unicast_addr_hash) { in tgec_init()
755 free_init_resources(tgec); in tgec_init()
760 fman_register_intr(tgec->fm, FMAN_MOD_MAC, tgec->mac_id, in tgec_init()
761 FMAN_INTR_TYPE_ERR, tgec_err_exception, tgec); in tgec_init()
764 tgec->cfg = NULL; in tgec_init()
769 int tgec_free(struct fman_mac *tgec) in tgec_free() argument
771 free_init_resources(tgec); in tgec_free()
773 kfree(tgec->cfg); in tgec_free()
774 kfree(tgec); in tgec_free()
781 struct fman_mac *tgec; in tgec_config() local
787 tgec = kzalloc(sizeof(*tgec), GFP_KERNEL); in tgec_config()
788 if (!tgec) in tgec_config()
794 tgec_free(tgec); in tgec_config()
799 tgec->cfg = cfg; in tgec_config()
803 tgec->regs = base_addr; in tgec_config()
804 tgec->addr = ENET_ADDR_TO_UINT64(params->addr); in tgec_config()
805 tgec->max_speed = params->max_speed; in tgec_config()
806 tgec->mac_id = params->mac_id; in tgec_config()
807 tgec->exceptions = (TGEC_IMASK_MDIO_SCAN_EVENT | in tgec_config()
822 tgec->exception_cb = params->exception_cb; in tgec_config()
823 tgec->event_cb = params->event_cb; in tgec_config()
824 tgec->dev_id = params->dev_id; in tgec_config()
825 tgec->fm = params->fm; in tgec_config()
828 fman_get_revision(tgec->fm, &tgec->fm_rev_info); in tgec_config()
830 return tgec; in tgec_config()