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->exception_cb) { in check_init_parameters()
280 if (!tgec->event_cb) { in check_init_parameters()
354 struct fman_mac *tgec = (struct fman_mac *)handle; in tgec_err_exception() local
355 struct tgec_regs __iomem *regs = tgec->regs; in tgec_err_exception()
368 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_REM_FAULT); in tgec_err_exception()
370 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_LOC_FAULT); in tgec_err_exception()
372 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_ECC_ER); in tgec_err_exception()
374 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_FIFO_UNFL); in tgec_err_exception()
376 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_FIFO_OVFL); in tgec_err_exception()
378 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_ER); in tgec_err_exception()
380 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_FIFO_OVFL); in tgec_err_exception()
382 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_ECC_ER); in tgec_err_exception()
384 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_JAB_FRM); in tgec_err_exception()
386 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_OVRSZ_FRM); in tgec_err_exception()
388 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_RUNT_FRM); in tgec_err_exception()
390 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_FRAG_FRM); in tgec_err_exception()
392 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_LEN_ER); in tgec_err_exception()
394 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_CRC_ER); in tgec_err_exception()
396 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_ALIGN_ER); in tgec_err_exception()
399 static void free_init_resources(struct fman_mac *tgec) in free_init_resources() argument
401 fman_unregister_intr(tgec->fm, FMAN_MOD_MAC, tgec->mac_id, in free_init_resources()
405 free_hash_table(tgec->multicast_addr_hash); in free_init_resources()
406 tgec->multicast_addr_hash = NULL; in free_init_resources()
409 free_hash_table(tgec->unicast_addr_hash); in free_init_resources()
410 tgec->unicast_addr_hash = NULL; in free_init_resources()
422 int tgec_enable(struct fman_mac *tgec, enum comm_mode mode) in tgec_enable() argument
424 struct tgec_regs __iomem *regs = tgec->regs; in tgec_enable()
427 if (!is_init_done(tgec->cfg)) in tgec_enable()
440 int tgec_disable(struct fman_mac *tgec, enum comm_mode mode) in tgec_disable() argument
442 struct tgec_regs __iomem *regs = tgec->regs; in tgec_disable()
445 if (!is_init_done(tgec->cfg)) in tgec_disable()
458 int tgec_set_promiscuous(struct fman_mac *tgec, bool new_val) in tgec_set_promiscuous() argument
460 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_promiscuous()
463 if (!is_init_done(tgec->cfg)) in tgec_set_promiscuous()
476 int tgec_cfg_max_frame_len(struct fman_mac *tgec, u16 new_val) in tgec_cfg_max_frame_len() argument
478 if (is_init_done(tgec->cfg)) in tgec_cfg_max_frame_len()
481 tgec->cfg->max_frame_length = new_val; in tgec_cfg_max_frame_len()
486 int tgec_set_tx_pause_frames(struct fman_mac *tgec, u8 __maybe_unused priority, in tgec_set_tx_pause_frames() argument
489 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_tx_pause_frames()
491 if (!is_init_done(tgec->cfg)) in tgec_set_tx_pause_frames()
499 int tgec_accept_rx_pause_frames(struct fman_mac *tgec, bool en) in tgec_accept_rx_pause_frames() argument
501 struct tgec_regs __iomem *regs = tgec->regs; in tgec_accept_rx_pause_frames()
504 if (!is_init_done(tgec->cfg)) in tgec_accept_rx_pause_frames()
517 int tgec_modify_mac_address(struct fman_mac *tgec, enet_addr_t *p_enet_addr) in tgec_modify_mac_address() argument
519 if (!is_init_done(tgec->cfg)) in tgec_modify_mac_address()
522 tgec->addr = ENET_ADDR_TO_UINT64(*p_enet_addr); in tgec_modify_mac_address()
523 set_mac_address(tgec->regs, (u8 *)(*p_enet_addr)); in tgec_modify_mac_address()
528 int tgec_add_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr) in tgec_add_hash_mac_address() argument
530 struct tgec_regs __iomem *regs = tgec->regs; in tgec_add_hash_mac_address()
535 if (!is_init_done(tgec->cfg)) in tgec_add_hash_mac_address()
559 &tgec->multicast_addr_hash->lsts[hash]); in tgec_add_hash_mac_address()
565 int tgec_set_allmulti(struct fman_mac *tgec, bool enable) in tgec_set_allmulti() argument
568 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_allmulti()
570 if (!is_init_done(tgec->cfg)) in tgec_set_allmulti()
583 tgec->allmulti_enabled = enable; in tgec_set_allmulti()
588 int tgec_set_tstamp(struct fman_mac *tgec, bool enable) in tgec_set_tstamp() argument
590 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_tstamp()
593 if (!is_init_done(tgec->cfg)) in tgec_set_tstamp()
608 int tgec_del_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr) in tgec_del_hash_mac_address() argument
610 struct tgec_regs __iomem *regs = tgec->regs; in tgec_del_hash_mac_address()
616 if (!is_init_done(tgec->cfg)) in tgec_del_hash_mac_address()
627 list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) { in tgec_del_hash_mac_address()
636 if (!tgec->allmulti_enabled) { in tgec_del_hash_mac_address()
637 if (list_empty(&tgec->multicast_addr_hash->lsts[hash])) in tgec_del_hash_mac_address()
645 int tgec_get_version(struct fman_mac *tgec, u32 *mac_version) in tgec_get_version() argument
647 struct tgec_regs __iomem *regs = tgec->regs; in tgec_get_version()
649 if (!is_init_done(tgec->cfg)) in tgec_get_version()
657 int tgec_set_exception(struct fman_mac *tgec, in tgec_set_exception() argument
660 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_exception()
663 if (!is_init_done(tgec->cfg)) in tgec_set_exception()
669 tgec->exceptions |= bit_mask; in tgec_set_exception()
671 tgec->exceptions &= ~bit_mask; in tgec_set_exception()
684 int tgec_init(struct fman_mac *tgec) in tgec_init() argument
690 if (is_init_done(tgec->cfg)) in tgec_init()
694 (fman_reset_mac(tgec->fm, tgec->mac_id) != 0)) { in tgec_init()
699 err = check_init_parameters(tgec); in tgec_init()
703 cfg = tgec->cfg; in tgec_init()
705 if (tgec->addr) { in tgec_init()
706 MAKE_ENET_ADDR_FROM_UINT64(tgec->addr, eth_addr); in tgec_init()
707 set_mac_address(tgec->regs, (u8 *)eth_addr); in tgec_init()
712 if (tgec->fm_rev_info.major <= 2) in tgec_init()
713 tgec->exceptions &= ~(TGEC_IMASK_REM_FAULT | in tgec_init()
716 err = init(tgec->regs, cfg, tgec->exceptions); in tgec_init()
718 free_init_resources(tgec); in tgec_init()
724 err = fman_set_mac_max_frame(tgec->fm, tgec->mac_id, in tgec_init()
728 free_init_resources(tgec); in tgec_init()
733 if (tgec->fm_rev_info.major == 2) { in tgec_init()
734 struct tgec_regs __iomem *regs = tgec->regs; in tgec_init()
744 tgec->multicast_addr_hash = alloc_hash_table(TGEC_HASH_TABLE_SIZE); in tgec_init()
745 if (!tgec->multicast_addr_hash) { in tgec_init()
746 free_init_resources(tgec); in tgec_init()
751 tgec->unicast_addr_hash = alloc_hash_table(TGEC_HASH_TABLE_SIZE); in tgec_init()
752 if (!tgec->unicast_addr_hash) { in tgec_init()
753 free_init_resources(tgec); in tgec_init()
758 fman_register_intr(tgec->fm, FMAN_MOD_MAC, tgec->mac_id, in tgec_init()
759 FMAN_INTR_TYPE_ERR, tgec_err_exception, tgec); in tgec_init()
762 tgec->cfg = NULL; in tgec_init()
767 int tgec_free(struct fman_mac *tgec) in tgec_free() argument
769 free_init_resources(tgec); in tgec_free()
771 kfree(tgec->cfg); in tgec_free()
772 kfree(tgec); in tgec_free()
779 struct fman_mac *tgec; in tgec_config() local
785 tgec = kzalloc(sizeof(*tgec), GFP_KERNEL); in tgec_config()
786 if (!tgec) in tgec_config()
792 tgec_free(tgec); in tgec_config()
797 tgec->cfg = cfg; in tgec_config()
801 tgec->regs = base_addr; in tgec_config()
802 tgec->addr = ENET_ADDR_TO_UINT64(params->addr); in tgec_config()
803 tgec->max_speed = params->max_speed; in tgec_config()
804 tgec->mac_id = params->mac_id; in tgec_config()
805 tgec->exceptions = (TGEC_IMASK_MDIO_SCAN_EVENT | in tgec_config()
820 tgec->exception_cb = params->exception_cb; in tgec_config()
821 tgec->event_cb = params->event_cb; in tgec_config()
822 tgec->dev_id = params->dev_id; in tgec_config()
823 tgec->fm = params->fm; in tgec_config()
826 fman_get_revision(tgec->fm, &tgec->fm_rev_info); in tgec_config()
828 return tgec; in tgec_config()