Lines Matching refs:priv

127 static noinline void gfar_update_link_state(struct gfar_private *priv);
131 static void free_skb_resources(struct gfar_private *priv);
145 static void gfar_halt_nodisable(struct gfar_private *priv);
173 struct gfar_private *priv = netdev_priv(ndev); in gfar_init_bds() local
174 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_init_bds()
181 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_init_bds()
182 tx_queue = priv->tx_queue[i]; in gfar_init_bds()
205 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_init_bds()
206 rx_queue = priv->rx_queue[i]; in gfar_init_bds()
227 struct gfar_private *priv = netdev_priv(ndev); in gfar_alloc_skb_resources() local
228 struct device *dev = priv->dev; in gfar_alloc_skb_resources()
232 priv->total_tx_ring_size = 0; in gfar_alloc_skb_resources()
233 for (i = 0; i < priv->num_tx_queues; i++) in gfar_alloc_skb_resources()
234 priv->total_tx_ring_size += priv->tx_queue[i]->tx_ring_size; in gfar_alloc_skb_resources()
236 priv->total_rx_ring_size = 0; in gfar_alloc_skb_resources()
237 for (i = 0; i < priv->num_rx_queues; i++) in gfar_alloc_skb_resources()
238 priv->total_rx_ring_size += priv->rx_queue[i]->rx_ring_size; in gfar_alloc_skb_resources()
242 (priv->total_tx_ring_size * in gfar_alloc_skb_resources()
244 (priv->total_rx_ring_size * in gfar_alloc_skb_resources()
250 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_alloc_skb_resources()
251 tx_queue = priv->tx_queue[i]; in gfar_alloc_skb_resources()
261 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_alloc_skb_resources()
262 rx_queue = priv->rx_queue[i]; in gfar_alloc_skb_resources()
272 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_alloc_skb_resources()
273 tx_queue = priv->tx_queue[i]; in gfar_alloc_skb_resources()
285 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_alloc_skb_resources()
286 rx_queue = priv->rx_queue[i]; in gfar_alloc_skb_resources()
299 free_skb_resources(priv); in gfar_alloc_skb_resources()
303 static void gfar_init_tx_rx_base(struct gfar_private *priv) in gfar_init_tx_rx_base() argument
305 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_init_tx_rx_base()
310 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_init_tx_rx_base()
311 gfar_write(baddr, priv->tx_queue[i]->tx_bd_dma_base); in gfar_init_tx_rx_base()
316 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_init_tx_rx_base()
317 gfar_write(baddr, priv->rx_queue[i]->rx_bd_dma_base); in gfar_init_tx_rx_base()
322 static void gfar_init_rqprm(struct gfar_private *priv) in gfar_init_rqprm() argument
324 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_init_rqprm()
329 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_init_rqprm()
330 gfar_write(baddr, priv->rx_queue[i]->rx_ring_size | in gfar_init_rqprm()
336 static void gfar_rx_offload_en(struct gfar_private *priv) in gfar_rx_offload_en() argument
339 priv->uses_rxfcb = 0; in gfar_rx_offload_en()
341 if (priv->ndev->features & (NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX)) in gfar_rx_offload_en()
342 priv->uses_rxfcb = 1; in gfar_rx_offload_en()
344 if (priv->hwts_rx_en || priv->rx_filer_enable) in gfar_rx_offload_en()
345 priv->uses_rxfcb = 1; in gfar_rx_offload_en()
348 static void gfar_mac_rx_config(struct gfar_private *priv) in gfar_mac_rx_config() argument
350 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_mac_rx_config()
353 if (priv->rx_filer_enable) { in gfar_mac_rx_config()
356 if (priv->poll_mode == GFAR_SQ_POLLING) in gfar_mac_rx_config()
363 if (priv->ndev->flags & IFF_PROMISC) in gfar_mac_rx_config()
366 if (priv->ndev->features & NETIF_F_RXCSUM) in gfar_mac_rx_config()
369 if (priv->extended_hash) in gfar_mac_rx_config()
372 if (priv->padding) { in gfar_mac_rx_config()
374 rctrl |= RCTRL_PADDING(priv->padding); in gfar_mac_rx_config()
378 if (priv->hwts_rx_en) in gfar_mac_rx_config()
381 if (priv->ndev->features & NETIF_F_HW_VLAN_CTAG_RX) in gfar_mac_rx_config()
387 gfar_init_rqprm(priv); in gfar_mac_rx_config()
395 static void gfar_mac_tx_config(struct gfar_private *priv) in gfar_mac_tx_config() argument
397 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_mac_tx_config()
400 if (priv->ndev->features & NETIF_F_IP_CSUM) in gfar_mac_tx_config()
403 if (priv->prio_sched_en) in gfar_mac_tx_config()
411 if (priv->ndev->features & NETIF_F_HW_VLAN_CTAG_TX) in gfar_mac_tx_config()
417 static void gfar_configure_coalescing(struct gfar_private *priv, in gfar_configure_coalescing() argument
420 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_configure_coalescing()
423 if (priv->mode == MQ_MG_MODE) { in gfar_configure_coalescing()
427 for_each_set_bit(i, &tx_mask, priv->num_tx_queues) { in gfar_configure_coalescing()
429 if (likely(priv->tx_queue[i]->txcoalescing)) in gfar_configure_coalescing()
430 gfar_write(baddr + i, priv->tx_queue[i]->txic); in gfar_configure_coalescing()
434 for_each_set_bit(i, &rx_mask, priv->num_rx_queues) { in gfar_configure_coalescing()
436 if (likely(priv->rx_queue[i]->rxcoalescing)) in gfar_configure_coalescing()
437 gfar_write(baddr + i, priv->rx_queue[i]->rxic); in gfar_configure_coalescing()
444 if (likely(priv->tx_queue[0]->txcoalescing)) in gfar_configure_coalescing()
445 gfar_write(&regs->txic, priv->tx_queue[0]->txic); in gfar_configure_coalescing()
448 if (unlikely(priv->rx_queue[0]->rxcoalescing)) in gfar_configure_coalescing()
449 gfar_write(&regs->rxic, priv->rx_queue[0]->rxic); in gfar_configure_coalescing()
453 void gfar_configure_coalescing_all(struct gfar_private *priv) in gfar_configure_coalescing_all() argument
455 gfar_configure_coalescing(priv, 0xFF, 0xFF); in gfar_configure_coalescing_all()
460 struct gfar_private *priv = netdev_priv(dev); in gfar_get_stats() local
465 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_get_stats()
466 rx_packets += priv->rx_queue[i]->stats.rx_packets; in gfar_get_stats()
467 rx_bytes += priv->rx_queue[i]->stats.rx_bytes; in gfar_get_stats()
468 rx_dropped += priv->rx_queue[i]->stats.rx_dropped; in gfar_get_stats()
475 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_get_stats()
476 tx_bytes += priv->tx_queue[i]->stats.tx_bytes; in gfar_get_stats()
477 tx_packets += priv->tx_queue[i]->stats.tx_packets; in gfar_get_stats()
512 static void gfar_ints_disable(struct gfar_private *priv) in gfar_ints_disable() argument
515 for (i = 0; i < priv->num_grps; i++) { in gfar_ints_disable()
516 struct gfar __iomem *regs = priv->gfargrp[i].regs; in gfar_ints_disable()
525 static void gfar_ints_enable(struct gfar_private *priv) in gfar_ints_enable() argument
528 for (i = 0; i < priv->num_grps; i++) { in gfar_ints_enable()
529 struct gfar __iomem *regs = priv->gfargrp[i].regs; in gfar_ints_enable()
535 static int gfar_alloc_tx_queues(struct gfar_private *priv) in gfar_alloc_tx_queues() argument
539 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_alloc_tx_queues()
540 priv->tx_queue[i] = kzalloc(sizeof(struct gfar_priv_tx_q), in gfar_alloc_tx_queues()
542 if (!priv->tx_queue[i]) in gfar_alloc_tx_queues()
545 priv->tx_queue[i]->tx_skbuff = NULL; in gfar_alloc_tx_queues()
546 priv->tx_queue[i]->qindex = i; in gfar_alloc_tx_queues()
547 priv->tx_queue[i]->dev = priv->ndev; in gfar_alloc_tx_queues()
548 spin_lock_init(&(priv->tx_queue[i]->txlock)); in gfar_alloc_tx_queues()
553 static int gfar_alloc_rx_queues(struct gfar_private *priv) in gfar_alloc_rx_queues() argument
557 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_alloc_rx_queues()
558 priv->rx_queue[i] = kzalloc(sizeof(struct gfar_priv_rx_q), in gfar_alloc_rx_queues()
560 if (!priv->rx_queue[i]) in gfar_alloc_rx_queues()
563 priv->rx_queue[i]->qindex = i; in gfar_alloc_rx_queues()
564 priv->rx_queue[i]->ndev = priv->ndev; in gfar_alloc_rx_queues()
569 static void gfar_free_tx_queues(struct gfar_private *priv) in gfar_free_tx_queues() argument
573 for (i = 0; i < priv->num_tx_queues; i++) in gfar_free_tx_queues()
574 kfree(priv->tx_queue[i]); in gfar_free_tx_queues()
577 static void gfar_free_rx_queues(struct gfar_private *priv) in gfar_free_rx_queues() argument
581 for (i = 0; i < priv->num_rx_queues; i++) in gfar_free_rx_queues()
582 kfree(priv->rx_queue[i]); in gfar_free_rx_queues()
585 static void unmap_group_regs(struct gfar_private *priv) in unmap_group_regs() argument
590 if (priv->gfargrp[i].regs) in unmap_group_regs()
591 iounmap(priv->gfargrp[i].regs); in unmap_group_regs()
594 static void free_gfar_dev(struct gfar_private *priv) in free_gfar_dev() argument
598 for (i = 0; i < priv->num_grps; i++) in free_gfar_dev()
600 kfree(priv->gfargrp[i].irqinfo[j]); in free_gfar_dev()
601 priv->gfargrp[i].irqinfo[j] = NULL; in free_gfar_dev()
604 free_netdev(priv->ndev); in free_gfar_dev()
607 static void disable_napi(struct gfar_private *priv) in disable_napi() argument
611 for (i = 0; i < priv->num_grps; i++) { in disable_napi()
612 napi_disable(&priv->gfargrp[i].napi_rx); in disable_napi()
613 napi_disable(&priv->gfargrp[i].napi_tx); in disable_napi()
617 static void enable_napi(struct gfar_private *priv) in enable_napi() argument
621 for (i = 0; i < priv->num_grps; i++) { in enable_napi()
622 napi_enable(&priv->gfargrp[i].napi_rx); in enable_napi()
623 napi_enable(&priv->gfargrp[i].napi_tx); in enable_napi()
628 struct gfar_private *priv, const char *model) in gfar_parse_group() argument
630 struct gfar_priv_grp *grp = &priv->gfargrp[priv->num_grps]; in gfar_parse_group()
656 grp->priv = priv; in gfar_parse_group()
658 if (priv->mode == MQ_MG_MODE) { in gfar_parse_group()
662 grp->rx_bit_map = (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
663 grp->tx_bit_map = (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
668 rxq_mask : (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
674 txq_mask : (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
677 if (priv->poll_mode == GFAR_SQ_POLLING) { in gfar_parse_group()
679 grp->rx_bit_map = (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
680 grp->tx_bit_map = (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
696 for_each_set_bit(i, &grp->rx_bit_map, priv->num_rx_queues) { in gfar_parse_group()
698 grp->rx_queue = priv->rx_queue[i]; in gfar_parse_group()
701 priv->rqueue |= ((RQUEUE_EN0 | RQUEUE_EX0) >> i); in gfar_parse_group()
702 priv->rx_queue[i]->grp = grp; in gfar_parse_group()
705 for_each_set_bit(i, &grp->tx_bit_map, priv->num_tx_queues) { in gfar_parse_group()
707 grp->tx_queue = priv->tx_queue[i]; in gfar_parse_group()
710 priv->tqueue |= (TQUEUE_EN0 >> i); in gfar_parse_group()
711 priv->tx_queue[i]->grp = grp; in gfar_parse_group()
714 priv->num_grps++; in gfar_parse_group()
738 struct gfar_private *priv = NULL; in gfar_of_init() local
804 *pdev = alloc_etherdev_mq(sizeof(*priv), num_tx_qs); in gfar_of_init()
809 priv = netdev_priv(dev); in gfar_of_init()
810 priv->ndev = dev; in gfar_of_init()
812 priv->mode = mode; in gfar_of_init()
813 priv->poll_mode = poll_mode; in gfar_of_init()
815 priv->num_tx_queues = num_tx_qs; in gfar_of_init()
817 priv->num_rx_queues = num_rx_qs; in gfar_of_init()
819 err = gfar_alloc_tx_queues(priv); in gfar_of_init()
823 err = gfar_alloc_rx_queues(priv); in gfar_of_init()
834 INIT_LIST_HEAD(&priv->rx_list.list); in gfar_of_init()
835 priv->rx_list.count = 0; in gfar_of_init()
836 mutex_init(&priv->rx_queue_access); in gfar_of_init()
839 priv->gfargrp[i].regs = NULL; in gfar_of_init()
842 if (priv->mode == MQ_MG_MODE) { in gfar_of_init()
847 err = gfar_parse_group(child, priv, model); in gfar_of_init()
852 err = gfar_parse_group(np, priv, model); in gfar_of_init()
860 priv->device_flags |= FSL_GIANFAR_DEV_HAS_BD_STASHING; in gfar_of_init()
861 priv->bd_stash_en = 1; in gfar_of_init()
867 priv->rx_stash_size = stash_len; in gfar_of_init()
872 priv->rx_stash_index = stash_idx; in gfar_of_init()
875 priv->device_flags |= FSL_GIANFAR_DEV_HAS_BUF_STASHING; in gfar_of_init()
883 priv->device_flags |= FSL_GIANFAR_DEV_HAS_GIGABIT | in gfar_of_init()
889 priv->device_flags |= FSL_GIANFAR_DEV_HAS_GIGABIT | in gfar_of_init()
904 priv->interface = PHY_INTERFACE_MODE_RGMII_ID; in gfar_of_init()
906 priv->interface = PHY_INTERFACE_MODE_MII; in gfar_of_init()
909 priv->device_flags |= FSL_GIANFAR_DEV_HAS_MAGIC_PACKET; in gfar_of_init()
912 priv->device_flags |= FSL_GIANFAR_DEV_HAS_WAKE_ON_FILER; in gfar_of_init()
914 priv->phy_node = of_parse_phandle(np, "phy-handle", 0); in gfar_of_init()
919 if (!priv->phy_node && of_phy_is_fixed_link(np)) { in gfar_of_init()
924 priv->phy_node = of_node_get(np); in gfar_of_init()
928 priv->tbi_node = of_parse_phandle(np, "tbi-handle", 0); in gfar_of_init()
933 unmap_group_regs(priv); in gfar_of_init()
935 gfar_free_rx_queues(priv); in gfar_of_init()
937 gfar_free_tx_queues(priv); in gfar_of_init()
938 free_gfar_dev(priv); in gfar_of_init()
945 struct gfar_private *priv = netdev_priv(netdev); in gfar_hwtstamp_set() local
956 priv->hwts_tx_en = 0; in gfar_hwtstamp_set()
959 if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)) in gfar_hwtstamp_set()
961 priv->hwts_tx_en = 1; in gfar_hwtstamp_set()
969 if (priv->hwts_rx_en) { in gfar_hwtstamp_set()
970 priv->hwts_rx_en = 0; in gfar_hwtstamp_set()
975 if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)) in gfar_hwtstamp_set()
977 if (!priv->hwts_rx_en) { in gfar_hwtstamp_set()
978 priv->hwts_rx_en = 1; in gfar_hwtstamp_set()
992 struct gfar_private *priv = netdev_priv(netdev); in gfar_hwtstamp_get() local
995 config.tx_type = priv->hwts_tx_en ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF; in gfar_hwtstamp_get()
996 config.rx_filter = (priv->hwts_rx_en ? in gfar_hwtstamp_get()
1005 struct gfar_private *priv = netdev_priv(dev); in gfar_ioctl() local
1015 if (!priv->phydev) in gfar_ioctl()
1018 return phy_mii_ioctl(priv->phydev, rq, cmd); in gfar_ioctl()
1021 static u32 cluster_entry_per_class(struct gfar_private *priv, u32 rqfar, in cluster_entry_per_class() argument
1029 priv->ftp_rqfpr[rqfar] = rqfpr; in cluster_entry_per_class()
1030 priv->ftp_rqfcr[rqfar] = rqfcr; in cluster_entry_per_class()
1031 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in cluster_entry_per_class()
1035 priv->ftp_rqfpr[rqfar] = rqfpr; in cluster_entry_per_class()
1036 priv->ftp_rqfcr[rqfar] = rqfcr; in cluster_entry_per_class()
1037 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in cluster_entry_per_class()
1042 priv->ftp_rqfcr[rqfar] = rqfcr; in cluster_entry_per_class()
1043 priv->ftp_rqfpr[rqfar] = rqfpr; in cluster_entry_per_class()
1044 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in cluster_entry_per_class()
1049 priv->ftp_rqfcr[rqfar] = rqfcr; in cluster_entry_per_class()
1050 priv->ftp_rqfpr[rqfar] = rqfpr; in cluster_entry_per_class()
1051 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in cluster_entry_per_class()
1056 static void gfar_init_filer_table(struct gfar_private *priv) in gfar_init_filer_table() argument
1065 priv->ftp_rqfcr[rqfar] = rqfcr; in gfar_init_filer_table()
1066 priv->ftp_rqfpr[rqfar] = rqfpr; in gfar_init_filer_table()
1067 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in gfar_init_filer_table()
1069 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV6); in gfar_init_filer_table()
1070 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV6 | RQFPR_UDP); in gfar_init_filer_table()
1071 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV6 | RQFPR_TCP); in gfar_init_filer_table()
1072 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV4); in gfar_init_filer_table()
1073 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV4 | RQFPR_UDP); in gfar_init_filer_table()
1074 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV4 | RQFPR_TCP); in gfar_init_filer_table()
1077 priv->cur_filer_idx = rqfar; in gfar_init_filer_table()
1082 priv->ftp_rqfcr[i] = rqfcr; in gfar_init_filer_table()
1083 priv->ftp_rqfpr[i] = rqfpr; in gfar_init_filer_table()
1084 gfar_write_filer(priv, i, rqfcr, rqfpr); in gfar_init_filer_table()
1089 static void __gfar_detect_errata_83xx(struct gfar_private *priv) in __gfar_detect_errata_83xx() argument
1099 priv->errata |= GFAR_ERRATA_74; in __gfar_detect_errata_83xx()
1104 priv->errata |= GFAR_ERRATA_76; in __gfar_detect_errata_83xx()
1108 priv->errata |= GFAR_ERRATA_12; in __gfar_detect_errata_83xx()
1111 static void __gfar_detect_errata_85xx(struct gfar_private *priv) in __gfar_detect_errata_85xx() argument
1116 priv->errata |= GFAR_ERRATA_12; in __gfar_detect_errata_85xx()
1119 priv->errata |= GFAR_ERRATA_76; /* aka eTSEC 20 */ in __gfar_detect_errata_85xx()
1123 static void gfar_detect_errata(struct gfar_private *priv) in gfar_detect_errata() argument
1125 struct device *dev = &priv->ofdev->dev; in gfar_detect_errata()
1128 priv->errata |= GFAR_ERRATA_A002; in gfar_detect_errata()
1132 __gfar_detect_errata_85xx(priv); in gfar_detect_errata()
1134 __gfar_detect_errata_83xx(priv); in gfar_detect_errata()
1137 if (priv->errata) in gfar_detect_errata()
1139 priv->errata); in gfar_detect_errata()
1142 void gfar_mac_reset(struct gfar_private *priv) in gfar_mac_reset() argument
1144 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_mac_reset()
1160 gfar_rx_offload_en(priv); in gfar_mac_reset()
1176 if (gfar_has_errata(priv, GFAR_ERRATA_74)) in gfar_mac_reset()
1200 if (priv->extended_hash) in gfar_mac_reset()
1201 gfar_clear_exact_match(priv->ndev); in gfar_mac_reset()
1203 gfar_mac_rx_config(priv); in gfar_mac_reset()
1205 gfar_mac_tx_config(priv); in gfar_mac_reset()
1207 gfar_set_mac_address(priv->ndev); in gfar_mac_reset()
1209 gfar_set_multi(priv->ndev); in gfar_mac_reset()
1212 gfar_ints_disable(priv); in gfar_mac_reset()
1215 gfar_configure_coalescing_all(priv); in gfar_mac_reset()
1218 static void gfar_hw_init(struct gfar_private *priv) in gfar_hw_init() argument
1220 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_hw_init()
1226 gfar_halt(priv); in gfar_hw_init()
1228 gfar_mac_reset(priv); in gfar_hw_init()
1231 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { in gfar_hw_init()
1243 attrs = ATTRELI_EL(priv->rx_stash_size) | in gfar_hw_init()
1244 ATTRELI_EI(priv->rx_stash_index); in gfar_hw_init()
1253 if (priv->bd_stash_en) in gfar_hw_init()
1256 if (priv->rx_stash_size != 0) in gfar_hw_init()
1267 if (priv->num_grps > 1) in gfar_hw_init()
1268 gfar_write_isrg(priv); in gfar_hw_init()
1271 static void gfar_init_addr_hash_table(struct gfar_private *priv) in gfar_init_addr_hash_table() argument
1273 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_init_addr_hash_table()
1275 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_EXTENDED_HASH) { in gfar_init_addr_hash_table()
1276 priv->extended_hash = 1; in gfar_init_addr_hash_table()
1277 priv->hash_width = 9; in gfar_init_addr_hash_table()
1279 priv->hash_regs[0] = &regs->igaddr0; in gfar_init_addr_hash_table()
1280 priv->hash_regs[1] = &regs->igaddr1; in gfar_init_addr_hash_table()
1281 priv->hash_regs[2] = &regs->igaddr2; in gfar_init_addr_hash_table()
1282 priv->hash_regs[3] = &regs->igaddr3; in gfar_init_addr_hash_table()
1283 priv->hash_regs[4] = &regs->igaddr4; in gfar_init_addr_hash_table()
1284 priv->hash_regs[5] = &regs->igaddr5; in gfar_init_addr_hash_table()
1285 priv->hash_regs[6] = &regs->igaddr6; in gfar_init_addr_hash_table()
1286 priv->hash_regs[7] = &regs->igaddr7; in gfar_init_addr_hash_table()
1287 priv->hash_regs[8] = &regs->gaddr0; in gfar_init_addr_hash_table()
1288 priv->hash_regs[9] = &regs->gaddr1; in gfar_init_addr_hash_table()
1289 priv->hash_regs[10] = &regs->gaddr2; in gfar_init_addr_hash_table()
1290 priv->hash_regs[11] = &regs->gaddr3; in gfar_init_addr_hash_table()
1291 priv->hash_regs[12] = &regs->gaddr4; in gfar_init_addr_hash_table()
1292 priv->hash_regs[13] = &regs->gaddr5; in gfar_init_addr_hash_table()
1293 priv->hash_regs[14] = &regs->gaddr6; in gfar_init_addr_hash_table()
1294 priv->hash_regs[15] = &regs->gaddr7; in gfar_init_addr_hash_table()
1297 priv->extended_hash = 0; in gfar_init_addr_hash_table()
1298 priv->hash_width = 8; in gfar_init_addr_hash_table()
1300 priv->hash_regs[0] = &regs->gaddr0; in gfar_init_addr_hash_table()
1301 priv->hash_regs[1] = &regs->gaddr1; in gfar_init_addr_hash_table()
1302 priv->hash_regs[2] = &regs->gaddr2; in gfar_init_addr_hash_table()
1303 priv->hash_regs[3] = &regs->gaddr3; in gfar_init_addr_hash_table()
1304 priv->hash_regs[4] = &regs->gaddr4; in gfar_init_addr_hash_table()
1305 priv->hash_regs[5] = &regs->gaddr5; in gfar_init_addr_hash_table()
1306 priv->hash_regs[6] = &regs->gaddr6; in gfar_init_addr_hash_table()
1307 priv->hash_regs[7] = &regs->gaddr7; in gfar_init_addr_hash_table()
1317 struct gfar_private *priv = NULL; in gfar_probe() local
1325 priv = netdev_priv(dev); in gfar_probe()
1326 priv->ndev = dev; in gfar_probe()
1327 priv->ofdev = ofdev; in gfar_probe()
1328 priv->dev = &ofdev->dev; in gfar_probe()
1331 INIT_WORK(&priv->reset_task, gfar_reset_task); in gfar_probe()
1333 platform_set_drvdata(ofdev, priv); in gfar_probe()
1335 gfar_detect_errata(priv); in gfar_probe()
1338 dev->base_addr = (unsigned long) priv->gfargrp[0].regs; in gfar_probe()
1347 for (i = 0; i < priv->num_grps; i++) { in gfar_probe()
1348 if (priv->poll_mode == GFAR_SQ_POLLING) { in gfar_probe()
1349 netif_napi_add(dev, &priv->gfargrp[i].napi_rx, in gfar_probe()
1351 netif_napi_add(dev, &priv->gfargrp[i].napi_tx, in gfar_probe()
1354 netif_napi_add(dev, &priv->gfargrp[i].napi_rx, in gfar_probe()
1356 netif_napi_add(dev, &priv->gfargrp[i].napi_tx, in gfar_probe()
1361 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM) { in gfar_probe()
1368 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) { in gfar_probe()
1376 gfar_init_addr_hash_table(priv); in gfar_probe()
1379 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) in gfar_probe()
1380 priv->padding = 8; in gfar_probe()
1383 priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) in gfar_probe()
1387 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_probe()
1388 priv->tx_queue[i]->tx_ring_size = DEFAULT_TX_RING_SIZE; in gfar_probe()
1389 priv->tx_queue[i]->num_txbdfree = DEFAULT_TX_RING_SIZE; in gfar_probe()
1390 priv->tx_queue[i]->txcoalescing = DEFAULT_TX_COALESCE; in gfar_probe()
1391 priv->tx_queue[i]->txic = DEFAULT_TXIC; in gfar_probe()
1394 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_probe()
1395 priv->rx_queue[i]->rx_ring_size = DEFAULT_RX_RING_SIZE; in gfar_probe()
1396 priv->rx_queue[i]->rxcoalescing = DEFAULT_RX_COALESCE; in gfar_probe()
1397 priv->rx_queue[i]->rxic = DEFAULT_RXIC; in gfar_probe()
1401 priv->rx_filer_enable = in gfar_probe()
1402 (priv->device_flags & FSL_GIANFAR_DEV_HAS_RX_FILER) ? 1 : 0; in gfar_probe()
1404 priv->msg_enable = (NETIF_MSG_IFUP << 1 ) - 1; in gfar_probe()
1406 if (priv->num_tx_queues == 1) in gfar_probe()
1407 priv->prio_sched_en = 1; in gfar_probe()
1409 set_bit(GFAR_DOWN, &priv->state); in gfar_probe()
1411 gfar_hw_init(priv); in gfar_probe()
1423 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) in gfar_probe()
1424 priv->wol_supported |= GFAR_WOL_MAGIC; in gfar_probe()
1426 if ((priv->device_flags & FSL_GIANFAR_DEV_HAS_WAKE_ON_FILER) && in gfar_probe()
1427 priv->rx_filer_enable) in gfar_probe()
1428 priv->wol_supported |= GFAR_WOL_FILER_UCAST; in gfar_probe()
1430 device_set_wakeup_capable(&ofdev->dev, priv->wol_supported); in gfar_probe()
1433 for (i = 0; i < priv->num_grps; i++) { in gfar_probe()
1434 struct gfar_priv_grp *grp = &priv->gfargrp[i]; in gfar_probe()
1435 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { in gfar_probe()
1447 gfar_init_filer_table(priv); in gfar_probe()
1456 for (i = 0; i < priv->num_rx_queues; i++) in gfar_probe()
1458 i, priv->rx_queue[i]->rx_ring_size); in gfar_probe()
1459 for (i = 0; i < priv->num_tx_queues; i++) in gfar_probe()
1461 i, priv->tx_queue[i]->tx_ring_size); in gfar_probe()
1466 unmap_group_regs(priv); in gfar_probe()
1467 gfar_free_rx_queues(priv); in gfar_probe()
1468 gfar_free_tx_queues(priv); in gfar_probe()
1469 of_node_put(priv->phy_node); in gfar_probe()
1470 of_node_put(priv->tbi_node); in gfar_probe()
1471 free_gfar_dev(priv); in gfar_probe()
1477 struct gfar_private *priv = platform_get_drvdata(ofdev); in gfar_remove() local
1479 of_node_put(priv->phy_node); in gfar_remove()
1480 of_node_put(priv->tbi_node); in gfar_remove()
1482 unregister_netdev(priv->ndev); in gfar_remove()
1483 unmap_group_regs(priv); in gfar_remove()
1484 gfar_free_rx_queues(priv); in gfar_remove()
1485 gfar_free_tx_queues(priv); in gfar_remove()
1486 free_gfar_dev(priv); in gfar_remove()
1493 static void __gfar_filer_disable(struct gfar_private *priv) in __gfar_filer_disable() argument
1495 struct gfar __iomem *regs = priv->gfargrp[0].regs; in __gfar_filer_disable()
1503 static void __gfar_filer_enable(struct gfar_private *priv) in __gfar_filer_enable() argument
1505 struct gfar __iomem *regs = priv->gfargrp[0].regs; in __gfar_filer_enable()
1514 static void gfar_filer_config_wol(struct gfar_private *priv) in gfar_filer_config_wol() argument
1519 __gfar_filer_disable(priv); in gfar_filer_config_wol()
1524 gfar_write_filer(priv, i, rqfcr, 0); in gfar_filer_config_wol()
1527 if (priv->wol_opts & GFAR_WOL_FILER_UCAST) { in gfar_filer_config_wol()
1529 struct net_device *ndev = priv->ndev; in gfar_filer_config_wol()
1531 u8 qindex = (u8)priv->gfargrp[0].rx_queue->qindex; in gfar_filer_config_wol()
1539 gfar_write_filer(priv, i++, rqfcr, dest_mac_addr); in gfar_filer_config_wol()
1546 gfar_write_filer(priv, i++, rqfcr, dest_mac_addr); in gfar_filer_config_wol()
1549 __gfar_filer_enable(priv); in gfar_filer_config_wol()
1552 static void gfar_filer_restore_table(struct gfar_private *priv) in gfar_filer_restore_table() argument
1557 __gfar_filer_disable(priv); in gfar_filer_restore_table()
1560 rqfcr = priv->ftp_rqfcr[i]; in gfar_filer_restore_table()
1561 rqfpr = priv->ftp_rqfpr[i]; in gfar_filer_restore_table()
1562 gfar_write_filer(priv, i, rqfcr, rqfpr); in gfar_filer_restore_table()
1565 __gfar_filer_enable(priv); in gfar_filer_restore_table()
1569 static void gfar_start_wol_filer(struct gfar_private *priv) in gfar_start_wol_filer() argument
1571 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_start_wol_filer()
1576 gfar_write(&regs->rqueue, priv->rqueue); in gfar_start_wol_filer()
1588 for (i = 0; i < priv->num_grps; i++) { in gfar_start_wol_filer()
1589 regs = priv->gfargrp[i].regs; in gfar_start_wol_filer()
1591 gfar_write(&regs->rstat, priv->gfargrp[i].rstat); in gfar_start_wol_filer()
1604 struct gfar_private *priv = dev_get_drvdata(dev); in gfar_suspend() local
1605 struct net_device *ndev = priv->ndev; in gfar_suspend()
1606 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_suspend()
1608 u16 wol = priv->wol_opts; in gfar_suspend()
1613 disable_napi(priv); in gfar_suspend()
1618 gfar_halt(priv); in gfar_suspend()
1635 gfar_filer_config_wol(priv); in gfar_suspend()
1636 gfar_start_wol_filer(priv); in gfar_suspend()
1639 phy_stop(priv->phydev); in gfar_suspend()
1647 struct gfar_private *priv = dev_get_drvdata(dev); in gfar_resume() local
1648 struct net_device *ndev = priv->ndev; in gfar_resume()
1649 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_resume()
1651 u16 wol = priv->wol_opts; in gfar_resume()
1664 gfar_halt(priv); in gfar_resume()
1665 gfar_filer_restore_table(priv); in gfar_resume()
1668 phy_start(priv->phydev); in gfar_resume()
1671 gfar_start(priv); in gfar_resume()
1674 enable_napi(priv); in gfar_resume()
1681 struct gfar_private *priv = dev_get_drvdata(dev); in gfar_restore() local
1682 struct net_device *ndev = priv->ndev; in gfar_restore()
1692 gfar_mac_reset(priv); in gfar_restore()
1694 gfar_init_tx_rx_base(priv); in gfar_restore()
1696 gfar_start(priv); in gfar_restore()
1698 priv->oldlink = 0; in gfar_restore()
1699 priv->oldspeed = 0; in gfar_restore()
1700 priv->oldduplex = -1; in gfar_restore()
1702 if (priv->phydev) in gfar_restore()
1703 phy_start(priv->phydev); in gfar_restore()
1706 enable_napi(priv); in gfar_restore()
1732 struct gfar_private *priv = netdev_priv(dev); in gfar_get_interface() local
1733 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_get_interface()
1753 phy_interface_t interface = priv->interface; in gfar_get_interface()
1765 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT) in gfar_get_interface()
1777 struct gfar_private *priv = netdev_priv(dev); in init_phy() local
1779 priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT ? in init_phy()
1783 priv->oldlink = 0; in init_phy()
1784 priv->oldspeed = 0; in init_phy()
1785 priv->oldduplex = -1; in init_phy()
1789 priv->phydev = of_phy_connect(dev, priv->phy_node, &adjust_link, 0, in init_phy()
1791 if (!priv->phydev) { in init_phy()
1800 priv->phydev->supported &= (GFAR_SUPPORTED | gigabit_support); in init_phy()
1801 priv->phydev->advertising = priv->phydev->supported; in init_phy()
1804 priv->phydev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); in init_phy()
1819 struct gfar_private *priv = netdev_priv(dev); in gfar_configure_serdes() local
1822 if (!priv->tbi_node) { in gfar_configure_serdes()
1828 tbiphy = of_phy_find_device(priv->tbi_node); in gfar_configure_serdes()
1858 static int __gfar_is_rx_idle(struct gfar_private *priv) in __gfar_is_rx_idle() argument
1865 if (!gfar_has_errata(priv, GFAR_ERRATA_A002)) in __gfar_is_rx_idle()
1872 res = gfar_read((void __iomem *)priv->gfargrp[0].regs + 0xd1c); in __gfar_is_rx_idle()
1881 static void gfar_halt_nodisable(struct gfar_private *priv) in gfar_halt_nodisable() argument
1883 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_halt_nodisable()
1888 gfar_ints_disable(priv); in gfar_halt_nodisable()
1890 if (gfar_is_dma_stopped(priv)) in gfar_halt_nodisable()
1900 while (!(stopped = gfar_is_dma_stopped(priv)) && timeout) { in gfar_halt_nodisable()
1906 stopped = gfar_is_dma_stopped(priv); in gfar_halt_nodisable()
1908 if (!stopped && !gfar_is_rx_dma_stopped(priv) && in gfar_halt_nodisable()
1909 !__gfar_is_rx_idle(priv)) in gfar_halt_nodisable()
1914 void gfar_halt(struct gfar_private *priv) in gfar_halt() argument
1916 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_halt()
1925 gfar_halt_nodisable(priv); in gfar_halt()
1935 struct gfar_private *priv = netdev_priv(dev); in stop_gfar() local
1940 set_bit(GFAR_DOWN, &priv->state); in stop_gfar()
1943 disable_napi(priv); in stop_gfar()
1946 gfar_halt(priv); in stop_gfar()
1948 phy_stop(priv->phydev); in stop_gfar()
1950 free_skb_resources(priv); in stop_gfar()
1956 struct gfar_private *priv = netdev_priv(tx_queue->dev); in free_skb_tx_queue() local
1965 dma_unmap_single(priv->dev, be32_to_cpu(txbdp->bufPtr), in free_skb_tx_queue()
1971 dma_unmap_page(priv->dev, be32_to_cpu(txbdp->bufPtr), in free_skb_tx_queue()
2016 static void free_skb_resources(struct gfar_private *priv) in free_skb_resources() argument
2023 for (i = 0; i < priv->num_tx_queues; i++) { in free_skb_resources()
2026 tx_queue = priv->tx_queue[i]; in free_skb_resources()
2033 for (i = 0; i < priv->num_rx_queues; i++) { in free_skb_resources()
2034 rx_queue = priv->rx_queue[i]; in free_skb_resources()
2039 dma_free_coherent(priv->dev, in free_skb_resources()
2040 sizeof(struct txbd8) * priv->total_tx_ring_size + in free_skb_resources()
2041 sizeof(struct rxbd8) * priv->total_rx_ring_size, in free_skb_resources()
2042 priv->tx_queue[0]->tx_bd_base, in free_skb_resources()
2043 priv->tx_queue[0]->tx_bd_dma_base); in free_skb_resources()
2046 void gfar_start(struct gfar_private *priv) in gfar_start() argument
2048 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_start()
2053 gfar_write(&regs->rqueue, priv->rqueue); in gfar_start()
2054 gfar_write(&regs->tqueue, priv->tqueue); in gfar_start()
2066 for (i = 0; i < priv->num_grps; i++) { in gfar_start()
2067 regs = priv->gfargrp[i].regs; in gfar_start()
2069 gfar_write(&regs->tstat, priv->gfargrp[i].tstat); in gfar_start()
2070 gfar_write(&regs->rstat, priv->gfargrp[i].rstat); in gfar_start()
2078 gfar_ints_enable(priv); in gfar_start()
2080 priv->ndev->trans_start = jiffies; /* prevent tx timeout */ in gfar_start()
2092 struct gfar_private *priv = grp->priv; in register_grp_irqs() local
2093 struct net_device *dev = priv->ndev; in register_grp_irqs()
2099 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { in register_grp_irqs()
2106 netif_err(priv, intr, dev, "Can't get IRQ %d\n", in register_grp_irqs()
2116 netif_err(priv, intr, dev, "Can't get IRQ %d\n", in register_grp_irqs()
2123 netif_err(priv, intr, dev, "Can't get IRQ %d\n", in register_grp_irqs()
2133 netif_err(priv, intr, dev, "Can't get IRQ %d\n", in register_grp_irqs()
2151 static void gfar_free_irq(struct gfar_private *priv) in gfar_free_irq() argument
2156 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { in gfar_free_irq()
2157 for (i = 0; i < priv->num_grps; i++) in gfar_free_irq()
2158 free_grp_irqs(&priv->gfargrp[i]); in gfar_free_irq()
2160 for (i = 0; i < priv->num_grps; i++) in gfar_free_irq()
2161 free_irq(gfar_irq(&priv->gfargrp[i], TX)->irq, in gfar_free_irq()
2162 &priv->gfargrp[i]); in gfar_free_irq()
2166 static int gfar_request_irq(struct gfar_private *priv) in gfar_request_irq() argument
2170 for (i = 0; i < priv->num_grps; i++) { in gfar_request_irq()
2171 err = register_grp_irqs(&priv->gfargrp[i]); in gfar_request_irq()
2174 free_grp_irqs(&priv->gfargrp[j]); in gfar_request_irq()
2185 struct gfar_private *priv = netdev_priv(ndev); in startup_gfar() local
2188 gfar_mac_reset(priv); in startup_gfar()
2194 gfar_init_tx_rx_base(priv); in startup_gfar()
2197 clear_bit(GFAR_DOWN, &priv->state); in startup_gfar()
2201 gfar_start(priv); in startup_gfar()
2204 priv->oldlink = 0; in startup_gfar()
2205 priv->oldspeed = 0; in startup_gfar()
2206 priv->oldduplex = -1; in startup_gfar()
2208 phy_start(priv->phydev); in startup_gfar()
2210 enable_napi(priv); in startup_gfar()
2222 struct gfar_private *priv = netdev_priv(dev); in gfar_enet_open() local
2229 err = gfar_request_irq(priv); in gfar_enet_open()
2299 static inline bool gfar_csum_errata_12(struct gfar_private *priv, in gfar_csum_errata_12() argument
2302 return (gfar_has_errata(priv, GFAR_ERRATA_12) && in gfar_csum_errata_12()
2309 static inline bool gfar_csum_errata_76(struct gfar_private *priv, in gfar_csum_errata_76() argument
2312 return (gfar_has_errata(priv, GFAR_ERRATA_76) && in gfar_csum_errata_76()
2321 struct gfar_private *priv = netdev_priv(dev); in gfar_start_xmit() local
2334 tx_queue = priv->tx_queue[rq]; in gfar_start_xmit()
2342 priv->hwts_tx_en; in gfar_start_xmit()
2425 bufaddr = skb_frag_dma_map(priv->dev, in gfar_start_xmit()
2430 if (unlikely(dma_mapping_error(priv->dev, bufaddr))) in gfar_start_xmit()
2457 if (unlikely(gfar_csum_errata_12(priv, (unsigned long)fcb)) || in gfar_start_xmit()
2458 unlikely(gfar_csum_errata_76(priv, skb->len))) { in gfar_start_xmit()
2481 bufaddr = dma_map_single(priv->dev, skb->data, skb_headlen(skb), in gfar_start_xmit()
2483 if (unlikely(dma_mapping_error(priv->dev, bufaddr))) in gfar_start_xmit()
2562 dma_unmap_page(priv->dev, bufaddr, be16_to_cpu(txbdp->length), in gfar_start_xmit()
2574 struct gfar_private *priv = netdev_priv(dev); in gfar_close() local
2576 cancel_work_sync(&priv->reset_task); in gfar_close()
2580 phy_disconnect(priv->phydev); in gfar_close()
2581 priv->phydev = NULL; in gfar_close()
2583 gfar_free_irq(priv); in gfar_close()
2598 struct gfar_private *priv = netdev_priv(dev); in gfar_change_mtu() local
2602 netif_err(priv, drv, dev, "Invalid MTU setting\n"); in gfar_change_mtu()
2606 while (test_and_set_bit_lock(GFAR_RESETTING, &priv->state)) in gfar_change_mtu()
2617 clear_bit_unlock(GFAR_RESETTING, &priv->state); in gfar_change_mtu()
2624 struct gfar_private *priv = netdev_priv(ndev); in reset_gfar() local
2626 while (test_and_set_bit_lock(GFAR_RESETTING, &priv->state)) in reset_gfar()
2632 clear_bit_unlock(GFAR_RESETTING, &priv->state); in reset_gfar()
2642 struct gfar_private *priv = container_of(work, struct gfar_private, in gfar_reset_task() local
2644 reset_gfar(priv->ndev); in gfar_reset_task()
2649 struct gfar_private *priv = netdev_priv(dev); in gfar_timeout() local
2652 schedule_work(&priv->reset_task); in gfar_timeout()
2660 struct gfar_private *priv = netdev_priv(dev); in gfar_clean_tx_ring() local
2707 dma_unmap_single(priv->dev, be32_to_cpu(bdp->bufPtr), in gfar_clean_tx_ring()
2727 dma_unmap_page(priv->dev, be32_to_cpu(bdp->bufPtr), in gfar_clean_tx_ring()
2752 !(test_bit(GFAR_DOWN, &priv->state))) in gfar_clean_tx_ring()
2753 netif_wake_subqueue(priv->ndev, tqi); in gfar_clean_tx_ring()
2787 struct gfar_private *priv = netdev_priv(rx_queue->ndev); in gfar_rx_alloc_err() local
2788 struct gfar_extra_stats *estats = &priv->extra_stats; in gfar_rx_alloc_err()
2835 struct gfar_private *priv = netdev_priv(ndev); in count_errors() local
2837 struct gfar_extra_stats *estats = &priv->extra_stats; in count_errors()
3027 struct gfar_private *priv = netdev_priv(ndev); in gfar_process_frame() local
3036 if (priv->uses_rxfcb) in gfar_process_frame()
3040 if (priv->hwts_rx_en) { in gfar_process_frame()
3048 if (priv->padding) in gfar_process_frame()
3049 skb_pull(skb, priv->padding); in gfar_process_frame()
3074 struct gfar_private *priv = netdev_priv(ndev); in gfar_clean_rx_ring() local
3151 if (unlikely(priv->tx_actual_en)) { in gfar_clean_rx_ring()
3223 struct gfar_private *priv = gfargrp->priv; in gfar_poll_rx() local
3242 for_each_set_bit(i, &gfargrp->rx_bit_map, priv->num_rx_queues) { in gfar_poll_rx()
3247 rx_queue = priv->rx_queue[i]; in gfar_poll_rx()
3285 struct gfar_private *priv = gfargrp->priv; in gfar_poll_tx() local
3296 for_each_set_bit(i, &gfargrp->tx_bit_map, priv->num_tx_queues) { in gfar_poll_tx()
3297 tx_queue = priv->tx_queue[i]; in gfar_poll_tx()
3327 struct gfar_private *priv = netdev_priv(dev); in gfar_netpoll() local
3331 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { in gfar_netpoll()
3332 for (i = 0; i < priv->num_grps; i++) { in gfar_netpoll()
3333 struct gfar_priv_grp *grp = &priv->gfargrp[i]; in gfar_netpoll()
3344 for (i = 0; i < priv->num_grps; i++) { in gfar_netpoll()
3345 struct gfar_priv_grp *grp = &priv->gfargrp[i]; in gfar_netpoll()
3386 struct gfar_private *priv = netdev_priv(dev); in adjust_link() local
3387 struct phy_device *phydev = priv->phydev; in adjust_link()
3389 if (unlikely(phydev->link != priv->oldlink || in adjust_link()
3390 (phydev->link && (phydev->duplex != priv->oldduplex || in adjust_link()
3391 phydev->speed != priv->oldspeed)))) in adjust_link()
3392 gfar_update_link_state(priv); in adjust_link()
3403 struct gfar_private *priv = netdev_priv(dev); in gfar_set_multi() local
3404 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_set_multi()
3463 if (priv->extended_hash) { in gfar_set_multi()
3516 struct gfar_private *priv = netdev_priv(dev); in gfar_set_hash_for_addr() local
3518 int width = priv->hash_width; in gfar_set_hash_for_addr()
3523 tempval = gfar_read(priv->hash_regs[whichreg]); in gfar_set_hash_for_addr()
3525 gfar_write(priv->hash_regs[whichreg], tempval); in gfar_set_hash_for_addr()
3535 struct gfar_private *priv = netdev_priv(dev); in gfar_set_mac_for_addr() local
3536 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_set_mac_for_addr()
3561 struct gfar_private *priv= gfargrp->priv; in gfar_error() local
3562 struct net_device *dev = priv->ndev; in gfar_error()
3571 if ((priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) && in gfar_error()
3576 if (netif_msg_rx_err(priv) || netif_msg_tx_err(priv)) in gfar_error()
3590 netif_dbg(priv, tx_err, dev, in gfar_error()
3593 atomic64_inc(&priv->extra_stats.tx_underrun); in gfar_error()
3595 schedule_work(&priv->reset_task); in gfar_error()
3597 netif_dbg(priv, tx_err, dev, "Transmit Error\n"); in gfar_error()
3601 atomic64_inc(&priv->extra_stats.rx_bsy); in gfar_error()
3603 netif_dbg(priv, rx_err, dev, "busy error (rstat: %x)\n", in gfar_error()
3608 atomic64_inc(&priv->extra_stats.rx_babr); in gfar_error()
3610 netif_dbg(priv, rx_err, dev, "babbling RX error\n"); in gfar_error()
3613 atomic64_inc(&priv->extra_stats.eberr); in gfar_error()
3614 netif_dbg(priv, rx_err, dev, "bus error\n"); in gfar_error()
3617 netif_dbg(priv, rx_status, dev, "control frame\n"); in gfar_error()
3620 atomic64_inc(&priv->extra_stats.tx_babt); in gfar_error()
3621 netif_dbg(priv, tx_err, dev, "babbling TX error\n"); in gfar_error()
3626 static u32 gfar_get_flowctrl_cfg(struct gfar_private *priv) in gfar_get_flowctrl_cfg() argument
3628 struct phy_device *phydev = priv->phydev; in gfar_get_flowctrl_cfg()
3634 if (!priv->pause_aneg_en) { in gfar_get_flowctrl_cfg()
3635 if (priv->tx_pause_en) in gfar_get_flowctrl_cfg()
3637 if (priv->rx_pause_en) in gfar_get_flowctrl_cfg()
3665 static noinline void gfar_update_link_state(struct gfar_private *priv) in gfar_update_link_state() argument
3667 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_update_link_state()
3668 struct phy_device *phydev = priv->phydev; in gfar_update_link_state()
3672 if (unlikely(test_bit(GFAR_RESETTING, &priv->state))) in gfar_update_link_state()
3681 if (phydev->duplex != priv->oldduplex) { in gfar_update_link_state()
3687 priv->oldduplex = phydev->duplex; in gfar_update_link_state()
3690 if (phydev->speed != priv->oldspeed) { in gfar_update_link_state()
3712 netif_warn(priv, link, priv->ndev, in gfar_update_link_state()
3718 priv->oldspeed = phydev->speed; in gfar_update_link_state()
3722 tempval1 |= gfar_get_flowctrl_cfg(priv); in gfar_update_link_state()
3726 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_update_link_state()
3729 rx_queue = priv->rx_queue[i]; in gfar_update_link_state()
3734 priv->tx_actual_en = 1; in gfar_update_link_state()
3738 priv->tx_actual_en = 0; in gfar_update_link_state()
3744 if (!priv->oldlink) in gfar_update_link_state()
3745 priv->oldlink = 1; in gfar_update_link_state()
3747 } else if (priv->oldlink) { in gfar_update_link_state()
3748 priv->oldlink = 0; in gfar_update_link_state()
3749 priv->oldspeed = 0; in gfar_update_link_state()
3750 priv->oldduplex = -1; in gfar_update_link_state()
3753 if (netif_msg_link(priv)) in gfar_update_link_state()