Lines Matching refs:tgec
245 static int check_init_parameters(struct fman_mac *tgec) in check_init_parameters() argument
247 if (!tgec->exception_cb) { in check_init_parameters()
251 if (!tgec->event_cb) { in check_init_parameters()
325 struct fman_mac *tgec = (struct fman_mac *)handle; in tgec_err_exception() local
326 struct tgec_regs __iomem *regs = tgec->regs; in tgec_err_exception()
339 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_REM_FAULT); in tgec_err_exception()
341 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_LOC_FAULT); in tgec_err_exception()
343 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_ECC_ER); in tgec_err_exception()
345 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_FIFO_UNFL); in tgec_err_exception()
347 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_FIFO_OVFL); in tgec_err_exception()
349 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_ER); in tgec_err_exception()
351 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_FIFO_OVFL); in tgec_err_exception()
353 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_ECC_ER); in tgec_err_exception()
355 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_JAB_FRM); in tgec_err_exception()
357 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_OVRSZ_FRM); in tgec_err_exception()
359 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_RUNT_FRM); in tgec_err_exception()
361 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_FRAG_FRM); in tgec_err_exception()
363 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_LEN_ER); in tgec_err_exception()
365 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_CRC_ER); in tgec_err_exception()
367 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_ALIGN_ER); in tgec_err_exception()
370 static void free_init_resources(struct fman_mac *tgec) in free_init_resources() argument
372 fman_unregister_intr(tgec->fm, FMAN_MOD_MAC, tgec->mac_id, in free_init_resources()
376 free_hash_table(tgec->multicast_addr_hash); in free_init_resources()
377 tgec->multicast_addr_hash = NULL; in free_init_resources()
380 free_hash_table(tgec->unicast_addr_hash); in free_init_resources()
381 tgec->unicast_addr_hash = NULL; in free_init_resources()
384 static int tgec_enable(struct fman_mac *tgec) in tgec_enable() argument
389 static void tgec_disable(struct fman_mac *tgec) in tgec_disable() argument
393 static int tgec_set_promiscuous(struct fman_mac *tgec, bool new_val) in tgec_set_promiscuous() argument
395 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_promiscuous()
408 static int tgec_set_tx_pause_frames(struct fman_mac *tgec, in tgec_set_tx_pause_frames() argument
412 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_tx_pause_frames()
419 static int tgec_accept_rx_pause_frames(struct fman_mac *tgec, bool en) in tgec_accept_rx_pause_frames() argument
421 struct tgec_regs __iomem *regs = tgec->regs; in tgec_accept_rx_pause_frames()
444 struct fman_mac *tgec = mac_dev->fman_mac; in tgec_link_up() local
445 struct tgec_regs __iomem *regs = tgec->regs; in tgec_link_up()
450 tgec_set_tx_pause_frames(tgec, 0, pause_time, 0); in tgec_link_up()
451 tgec_accept_rx_pause_frames(tgec, rx_pause); in tgec_link_up()
462 struct fman_mac *tgec = fman_config_to_mac(config)->fman_mac; in tgec_link_down() local
463 struct tgec_regs __iomem *regs = tgec->regs; in tgec_link_down()
477 static int tgec_modify_mac_address(struct fman_mac *tgec, in tgec_modify_mac_address() argument
480 tgec->addr = ENET_ADDR_TO_UINT64(*p_enet_addr); in tgec_modify_mac_address()
481 set_mac_address(tgec->regs, (const u8 *)(*p_enet_addr)); in tgec_modify_mac_address()
486 static int tgec_add_hash_mac_address(struct fman_mac *tgec, in tgec_add_hash_mac_address() argument
489 struct tgec_regs __iomem *regs = tgec->regs; in tgec_add_hash_mac_address()
515 &tgec->multicast_addr_hash->lsts[hash]); in tgec_add_hash_mac_address()
521 static int tgec_set_allmulti(struct fman_mac *tgec, bool enable) in tgec_set_allmulti() argument
524 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_allmulti()
536 tgec->allmulti_enabled = enable; in tgec_set_allmulti()
541 static int tgec_set_tstamp(struct fman_mac *tgec, bool enable) in tgec_set_tstamp() argument
543 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_tstamp()
558 static int tgec_del_hash_mac_address(struct fman_mac *tgec, in tgec_del_hash_mac_address() argument
561 struct tgec_regs __iomem *regs = tgec->regs; in tgec_del_hash_mac_address()
575 list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) { in tgec_del_hash_mac_address()
584 if (!tgec->allmulti_enabled) { in tgec_del_hash_mac_address()
585 if (list_empty(&tgec->multicast_addr_hash->lsts[hash])) in tgec_del_hash_mac_address()
593 static int tgec_set_exception(struct fman_mac *tgec, in tgec_set_exception() argument
596 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_exception()
602 tgec->exceptions |= bit_mask; in tgec_set_exception()
604 tgec->exceptions &= ~bit_mask; in tgec_set_exception()
617 static int tgec_init(struct fman_mac *tgec) in tgec_init() argument
624 (fman_reset_mac(tgec->fm, tgec->mac_id) != 0)) { in tgec_init()
629 err = check_init_parameters(tgec); in tgec_init()
633 cfg = tgec->cfg; in tgec_init()
635 if (tgec->addr) { in tgec_init()
636 MAKE_ENET_ADDR_FROM_UINT64(tgec->addr, eth_addr); in tgec_init()
637 set_mac_address(tgec->regs, (const u8 *)eth_addr); in tgec_init()
642 if (tgec->fm_rev_info.major <= 2) in tgec_init()
643 tgec->exceptions &= ~(TGEC_IMASK_REM_FAULT | in tgec_init()
646 err = init(tgec->regs, cfg, tgec->exceptions); in tgec_init()
648 free_init_resources(tgec); in tgec_init()
654 err = fman_set_mac_max_frame(tgec->fm, tgec->mac_id, in tgec_init()
658 free_init_resources(tgec); in tgec_init()
663 if (tgec->fm_rev_info.major == 2) { in tgec_init()
664 struct tgec_regs __iomem *regs = tgec->regs; in tgec_init()
674 tgec->multicast_addr_hash = alloc_hash_table(TGEC_HASH_TABLE_SIZE); in tgec_init()
675 if (!tgec->multicast_addr_hash) { in tgec_init()
676 free_init_resources(tgec); in tgec_init()
681 tgec->unicast_addr_hash = alloc_hash_table(TGEC_HASH_TABLE_SIZE); in tgec_init()
682 if (!tgec->unicast_addr_hash) { in tgec_init()
683 free_init_resources(tgec); in tgec_init()
688 fman_register_intr(tgec->fm, FMAN_MOD_MAC, tgec->mac_id, in tgec_init()
689 FMAN_INTR_TYPE_ERR, tgec_err_exception, tgec); in tgec_init()
692 tgec->cfg = NULL; in tgec_init()
697 static int tgec_free(struct fman_mac *tgec) in tgec_free() argument
699 free_init_resources(tgec); in tgec_free()
701 kfree(tgec->cfg); in tgec_free()
702 kfree(tgec); in tgec_free()
710 struct fman_mac *tgec; in tgec_config() local
714 tgec = kzalloc(sizeof(*tgec), GFP_KERNEL); in tgec_config()
715 if (!tgec) in tgec_config()
721 tgec_free(tgec); in tgec_config()
726 tgec->cfg = cfg; in tgec_config()
730 tgec->regs = mac_dev->vaddr; in tgec_config()
731 tgec->addr = ENET_ADDR_TO_UINT64(mac_dev->addr); in tgec_config()
732 tgec->mac_id = params->mac_id; in tgec_config()
733 tgec->exceptions = (TGEC_IMASK_MDIO_SCAN_EVENT | in tgec_config()
748 tgec->exception_cb = params->exception_cb; in tgec_config()
749 tgec->event_cb = params->event_cb; in tgec_config()
750 tgec->dev_id = mac_dev; in tgec_config()
751 tgec->fm = params->fm; in tgec_config()
754 fman_get_revision(tgec->fm, &tgec->fm_rev_info); in tgec_config()
756 return tgec; in tgec_config()
764 struct fman_mac *tgec; in tgec_initialization() local
797 tgec = mac_dev->fman_mac; in tgec_initialization()
798 tgec->cfg->max_frame_length = fman_get_max_frm(); in tgec_initialization()
799 err = tgec_init(tgec); in tgec_initialization()
804 err = tgec_set_exception(tgec, FM_MAC_EX_10G_TX_ECC_ER, false); in tgec_initialization()
809 ioread32be(&tgec->regs->tgec_id)); in tgec_initialization()