Lines Matching refs:tgec

244 static int check_init_parameters(struct fman_mac *tgec)  in check_init_parameters()  argument
246 if (tgec->max_speed < SPEED_10000) { in check_init_parameters()
250 if (!tgec->exception_cb) { in check_init_parameters()
254 if (!tgec->event_cb) { in check_init_parameters()
328 struct fman_mac *tgec = (struct fman_mac *)handle; in tgec_err_exception() local
329 struct tgec_regs __iomem *regs = tgec->regs; in tgec_err_exception()
342 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_REM_FAULT); in tgec_err_exception()
344 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_LOC_FAULT); in tgec_err_exception()
346 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_ECC_ER); in tgec_err_exception()
348 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_FIFO_UNFL); in tgec_err_exception()
350 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_FIFO_OVFL); in tgec_err_exception()
352 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_TX_ER); in tgec_err_exception()
354 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_FIFO_OVFL); in tgec_err_exception()
356 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_ECC_ER); in tgec_err_exception()
358 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_JAB_FRM); in tgec_err_exception()
360 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_OVRSZ_FRM); in tgec_err_exception()
362 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_RUNT_FRM); in tgec_err_exception()
364 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_FRAG_FRM); in tgec_err_exception()
366 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_LEN_ER); in tgec_err_exception()
368 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_CRC_ER); in tgec_err_exception()
370 tgec->exception_cb(tgec->dev_id, FM_MAC_EX_10G_RX_ALIGN_ER); in tgec_err_exception()
373 static void free_init_resources(struct fman_mac *tgec) in free_init_resources() argument
375 fman_unregister_intr(tgec->fm, FMAN_MOD_MAC, tgec->mac_id, in free_init_resources()
379 free_hash_table(tgec->multicast_addr_hash); in free_init_resources()
380 tgec->multicast_addr_hash = NULL; in free_init_resources()
383 free_hash_table(tgec->unicast_addr_hash); in free_init_resources()
384 tgec->unicast_addr_hash = NULL; in free_init_resources()
396 static int tgec_enable(struct fman_mac *tgec) in tgec_enable() argument
398 struct tgec_regs __iomem *regs = tgec->regs; in tgec_enable()
401 if (!is_init_done(tgec->cfg)) in tgec_enable()
411 static void tgec_disable(struct fman_mac *tgec) in tgec_disable() argument
413 struct tgec_regs __iomem *regs = tgec->regs; in tgec_disable()
416 WARN_ON_ONCE(!is_init_done(tgec->cfg)); in tgec_disable()
423 static int tgec_set_promiscuous(struct fman_mac *tgec, bool new_val) in tgec_set_promiscuous() argument
425 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_promiscuous()
428 if (!is_init_done(tgec->cfg)) in tgec_set_promiscuous()
441 static int tgec_set_tx_pause_frames(struct fman_mac *tgec, in tgec_set_tx_pause_frames() argument
445 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_tx_pause_frames()
447 if (!is_init_done(tgec->cfg)) in tgec_set_tx_pause_frames()
455 static int tgec_accept_rx_pause_frames(struct fman_mac *tgec, bool en) in tgec_accept_rx_pause_frames() argument
457 struct tgec_regs __iomem *regs = tgec->regs; in tgec_accept_rx_pause_frames()
460 if (!is_init_done(tgec->cfg)) in tgec_accept_rx_pause_frames()
473 static int tgec_modify_mac_address(struct fman_mac *tgec, in tgec_modify_mac_address() argument
476 if (!is_init_done(tgec->cfg)) in tgec_modify_mac_address()
479 tgec->addr = ENET_ADDR_TO_UINT64(*p_enet_addr); in tgec_modify_mac_address()
480 set_mac_address(tgec->regs, (const u8 *)(*p_enet_addr)); in tgec_modify_mac_address()
485 static int tgec_add_hash_mac_address(struct fman_mac *tgec, in tgec_add_hash_mac_address() argument
488 struct tgec_regs __iomem *regs = tgec->regs; in tgec_add_hash_mac_address()
493 if (!is_init_done(tgec->cfg)) in tgec_add_hash_mac_address()
517 &tgec->multicast_addr_hash->lsts[hash]); in tgec_add_hash_mac_address()
523 static int tgec_set_allmulti(struct fman_mac *tgec, bool enable) in tgec_set_allmulti() argument
526 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_allmulti()
528 if (!is_init_done(tgec->cfg)) in tgec_set_allmulti()
541 tgec->allmulti_enabled = enable; in tgec_set_allmulti()
546 static int tgec_set_tstamp(struct fman_mac *tgec, bool enable) in tgec_set_tstamp() argument
548 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_tstamp()
551 if (!is_init_done(tgec->cfg)) in tgec_set_tstamp()
566 static int tgec_del_hash_mac_address(struct fman_mac *tgec, in tgec_del_hash_mac_address() argument
569 struct tgec_regs __iomem *regs = tgec->regs; in tgec_del_hash_mac_address()
575 if (!is_init_done(tgec->cfg)) in tgec_del_hash_mac_address()
586 list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) { in tgec_del_hash_mac_address()
595 if (!tgec->allmulti_enabled) { in tgec_del_hash_mac_address()
596 if (list_empty(&tgec->multicast_addr_hash->lsts[hash])) in tgec_del_hash_mac_address()
611 static int tgec_set_exception(struct fman_mac *tgec, in tgec_set_exception() argument
614 struct tgec_regs __iomem *regs = tgec->regs; in tgec_set_exception()
617 if (!is_init_done(tgec->cfg)) in tgec_set_exception()
623 tgec->exceptions |= bit_mask; in tgec_set_exception()
625 tgec->exceptions &= ~bit_mask; in tgec_set_exception()
638 static int tgec_init(struct fman_mac *tgec) in tgec_init() argument
644 if (is_init_done(tgec->cfg)) in tgec_init()
648 (fman_reset_mac(tgec->fm, tgec->mac_id) != 0)) { in tgec_init()
653 err = check_init_parameters(tgec); in tgec_init()
657 cfg = tgec->cfg; in tgec_init()
659 if (tgec->addr) { in tgec_init()
660 MAKE_ENET_ADDR_FROM_UINT64(tgec->addr, eth_addr); in tgec_init()
661 set_mac_address(tgec->regs, (const u8 *)eth_addr); in tgec_init()
666 if (tgec->fm_rev_info.major <= 2) in tgec_init()
667 tgec->exceptions &= ~(TGEC_IMASK_REM_FAULT | in tgec_init()
670 err = init(tgec->regs, cfg, tgec->exceptions); in tgec_init()
672 free_init_resources(tgec); in tgec_init()
678 err = fman_set_mac_max_frame(tgec->fm, tgec->mac_id, in tgec_init()
682 free_init_resources(tgec); in tgec_init()
687 if (tgec->fm_rev_info.major == 2) { in tgec_init()
688 struct tgec_regs __iomem *regs = tgec->regs; in tgec_init()
698 tgec->multicast_addr_hash = alloc_hash_table(TGEC_HASH_TABLE_SIZE); in tgec_init()
699 if (!tgec->multicast_addr_hash) { in tgec_init()
700 free_init_resources(tgec); in tgec_init()
705 tgec->unicast_addr_hash = alloc_hash_table(TGEC_HASH_TABLE_SIZE); in tgec_init()
706 if (!tgec->unicast_addr_hash) { in tgec_init()
707 free_init_resources(tgec); in tgec_init()
712 fman_register_intr(tgec->fm, FMAN_MOD_MAC, tgec->mac_id, in tgec_init()
713 FMAN_INTR_TYPE_ERR, tgec_err_exception, tgec); in tgec_init()
716 tgec->cfg = NULL; in tgec_init()
721 static int tgec_free(struct fman_mac *tgec) in tgec_free() argument
723 free_init_resources(tgec); in tgec_free()
725 kfree(tgec->cfg); in tgec_free()
726 kfree(tgec); in tgec_free()
734 struct fman_mac *tgec; in tgec_config() local
738 tgec = kzalloc(sizeof(*tgec), GFP_KERNEL); in tgec_config()
739 if (!tgec) in tgec_config()
745 tgec_free(tgec); in tgec_config()
750 tgec->cfg = cfg; in tgec_config()
754 tgec->regs = mac_dev->vaddr; in tgec_config()
755 tgec->addr = ENET_ADDR_TO_UINT64(mac_dev->addr); in tgec_config()
756 tgec->max_speed = params->max_speed; in tgec_config()
757 tgec->mac_id = params->mac_id; in tgec_config()
758 tgec->exceptions = (TGEC_IMASK_MDIO_SCAN_EVENT | in tgec_config()
773 tgec->exception_cb = params->exception_cb; in tgec_config()
774 tgec->event_cb = params->event_cb; in tgec_config()
775 tgec->dev_id = mac_dev; in tgec_config()
776 tgec->fm = params->fm; in tgec_config()
779 fman_get_revision(tgec->fm, &tgec->fm_rev_info); in tgec_config()
781 return tgec; in tgec_config()
789 struct fman_mac *tgec; in tgec_initialization() local
811 tgec = mac_dev->fman_mac; in tgec_initialization()
812 tgec->cfg->max_frame_length = fman_get_max_frm(); in tgec_initialization()
813 err = tgec_init(tgec); in tgec_initialization()
818 err = tgec_set_exception(tgec, FM_MAC_EX_10G_TX_ECC_ER, false); in tgec_initialization()
823 ioread32be(&tgec->regs->tgec_id)); in tgec_initialization()