aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom
diff options
context:
space:
mode:
authorBaoyou Xie <baoyou.xie@linaro.org>2016-09-25 02:23:15 -0400
committerDavid S. Miller <davem@davemloft.net>2016-09-26 02:23:45 -0400
commite2072600a24161b7ddcfb26814f69f5fbc8ef85a (patch)
tree2bca48b4bad12fcd0605875e35e624e6ec661fa7 /drivers/net/ethernet/broadcom
parent50935857f878c014d92be49cbf651bcfbfdacdc0 (diff)
net: bcmgenet: remove unused function in bcmgenet.c
We get 1 warning when building kernel with W=1: drivers/net/ethernet/broadcom/genet/bcmgenet.c:2763:5: warning: no previous prototype for 'bcmgenet_hfb_add_filter' [-Wmissing-prototypes] In fact, this function is implemented in drivers/net/ethernet/broadcom/genet/bcmgenet.c, but be called by no one, thus can be removed. So this patch removes the unused functions. Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom')
-rw-r--r--drivers/net/ethernet/broadcom/genet/bcmgenet.c122
1 files changed, 0 insertions, 122 deletions
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 2013474bfdbf..7f478499b649 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -2664,128 +2664,6 @@ static void bcmgenet_enable_dma(struct bcmgenet_priv *priv, u32 dma_ctrl)
2664 bcmgenet_tdma_writel(priv, reg, DMA_CTRL); 2664 bcmgenet_tdma_writel(priv, reg, DMA_CTRL);
2665} 2665}
2666 2666
2667static bool bcmgenet_hfb_is_filter_enabled(struct bcmgenet_priv *priv,
2668 u32 f_index)
2669{
2670 u32 offset;
2671 u32 reg;
2672
2673 offset = HFB_FLT_ENABLE_V3PLUS + (f_index < 32) * sizeof(u32);
2674 reg = bcmgenet_hfb_reg_readl(priv, offset);
2675 return !!(reg & (1 << (f_index % 32)));
2676}
2677
2678static void bcmgenet_hfb_enable_filter(struct bcmgenet_priv *priv, u32 f_index)
2679{
2680 u32 offset;
2681 u32 reg;
2682
2683 offset = HFB_FLT_ENABLE_V3PLUS + (f_index < 32) * sizeof(u32);
2684 reg = bcmgenet_hfb_reg_readl(priv, offset);
2685 reg |= (1 << (f_index % 32));
2686 bcmgenet_hfb_reg_writel(priv, reg, offset);
2687}
2688
2689static void bcmgenet_hfb_set_filter_rx_queue_mapping(struct bcmgenet_priv *priv,
2690 u32 f_index, u32 rx_queue)
2691{
2692 u32 offset;
2693 u32 reg;
2694
2695 offset = f_index / 8;
2696 reg = bcmgenet_rdma_readl(priv, DMA_INDEX2RING_0 + offset);
2697 reg &= ~(0xF << (4 * (f_index % 8)));
2698 reg |= ((rx_queue & 0xF) << (4 * (f_index % 8)));
2699 bcmgenet_rdma_writel(priv, reg, DMA_INDEX2RING_0 + offset);
2700}
2701
2702static void bcmgenet_hfb_set_filter_length(struct bcmgenet_priv *priv,
2703 u32 f_index, u32 f_length)
2704{
2705 u32 offset;
2706 u32 reg;
2707
2708 offset = HFB_FLT_LEN_V3PLUS +
2709 ((priv->hw_params->hfb_filter_cnt - 1 - f_index) / 4) *
2710 sizeof(u32);
2711 reg = bcmgenet_hfb_reg_readl(priv, offset);
2712 reg &= ~(0xFF << (8 * (f_index % 4)));
2713 reg |= ((f_length & 0xFF) << (8 * (f_index % 4)));
2714 bcmgenet_hfb_reg_writel(priv, reg, offset);
2715}
2716
2717static int bcmgenet_hfb_find_unused_filter(struct bcmgenet_priv *priv)
2718{
2719 u32 f_index;
2720
2721 for (f_index = 0; f_index < priv->hw_params->hfb_filter_cnt; f_index++)
2722 if (!bcmgenet_hfb_is_filter_enabled(priv, f_index))
2723 return f_index;
2724
2725 return -ENOMEM;
2726}
2727
2728/* bcmgenet_hfb_add_filter
2729 *
2730 * Add new filter to Hardware Filter Block to match and direct Rx traffic to
2731 * desired Rx queue.
2732 *
2733 * f_data is an array of unsigned 32-bit integers where each 32-bit integer
2734 * provides filter data for 2 bytes (4 nibbles) of Rx frame:
2735 *
2736 * bits 31:20 - unused
2737 * bit 19 - nibble 0 match enable
2738 * bit 18 - nibble 1 match enable
2739 * bit 17 - nibble 2 match enable
2740 * bit 16 - nibble 3 match enable
2741 * bits 15:12 - nibble 0 data
2742 * bits 11:8 - nibble 1 data
2743 * bits 7:4 - nibble 2 data
2744 * bits 3:0 - nibble 3 data
2745 *
2746 * Example:
2747 * In order to match:
2748 * - Ethernet frame type = 0x0800 (IP)
2749 * - IP version field = 4
2750 * - IP protocol field = 0x11 (UDP)
2751 *
2752 * The following filter is needed:
2753 * u32 hfb_filter_ipv4_udp[] = {
2754 * Rx frame offset 0x00: 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2755 * Rx frame offset 0x08: 0x00000000, 0x00000000, 0x000F0800, 0x00084000,
2756 * Rx frame offset 0x10: 0x00000000, 0x00000000, 0x00000000, 0x00030011,
2757 * };
2758 *
2759 * To add the filter to HFB and direct the traffic to Rx queue 0, call:
2760 * bcmgenet_hfb_add_filter(priv, hfb_filter_ipv4_udp,
2761 * ARRAY_SIZE(hfb_filter_ipv4_udp), 0);
2762 */
2763int bcmgenet_hfb_add_filter(struct bcmgenet_priv *priv, u32 *f_data,
2764 u32 f_length, u32 rx_queue)
2765{
2766 int f_index;
2767 u32 i;
2768
2769 f_index = bcmgenet_hfb_find_unused_filter(priv);
2770 if (f_index < 0)
2771 return -ENOMEM;
2772
2773 if (f_length > priv->hw_params->hfb_filter_size)
2774 return -EINVAL;
2775
2776 for (i = 0; i < f_length; i++)
2777 bcmgenet_hfb_writel(priv, f_data[i],
2778 (f_index * priv->hw_params->hfb_filter_size + i) *
2779 sizeof(u32));
2780
2781 bcmgenet_hfb_set_filter_length(priv, f_index, 2 * f_length);
2782 bcmgenet_hfb_set_filter_rx_queue_mapping(priv, f_index, rx_queue);
2783 bcmgenet_hfb_enable_filter(priv, f_index);
2784 bcmgenet_hfb_reg_writel(priv, 0x1, HFB_CTRL);
2785
2786 return 0;
2787}
2788
2789/* bcmgenet_hfb_clear 2667/* bcmgenet_hfb_clear
2790 * 2668 *
2791 * Clear Hardware Filter Block and disable all filtering. 2669 * Clear Hardware Filter Block and disable all filtering.