diff options
| -rw-r--r-- | drivers/net/cxgb4/cxgb4.h | 4 | ||||
| -rw-r--r-- | drivers/net/cxgb4/cxgb4_main.c | 9 | ||||
| -rw-r--r-- | drivers/net/cxgb4/t4_hw.c | 31 | ||||
| -rw-r--r-- | drivers/net/cxgb4/t4fw_api.h | 4 |
4 files changed, 20 insertions, 28 deletions
diff --git a/drivers/net/cxgb4/cxgb4.h b/drivers/net/cxgb4/cxgb4.h index 8856a75fcc94..d3a5c3433df7 100644 --- a/drivers/net/cxgb4/cxgb4.h +++ b/drivers/net/cxgb4/cxgb4.h | |||
| @@ -656,7 +656,6 @@ int t4_check_fw_version(struct adapter *adapter); | |||
| 656 | int t4_prep_adapter(struct adapter *adapter); | 656 | int t4_prep_adapter(struct adapter *adapter); |
| 657 | int t4_port_init(struct adapter *adap, int mbox, int pf, int vf); | 657 | int t4_port_init(struct adapter *adap, int mbox, int pf, int vf); |
| 658 | void t4_fatal_err(struct adapter *adapter); | 658 | void t4_fatal_err(struct adapter *adapter); |
| 659 | void t4_set_vlan_accel(struct adapter *adapter, unsigned int ports, int on); | ||
| 660 | int t4_set_trace_filter(struct adapter *adapter, const struct trace_params *tp, | 659 | int t4_set_trace_filter(struct adapter *adapter, const struct trace_params *tp, |
| 661 | int filter_index, int enable); | 660 | int filter_index, int enable); |
| 662 | void t4_get_trace_filter(struct adapter *adapter, struct trace_params *tp, | 661 | void t4_get_trace_filter(struct adapter *adapter, struct trace_params *tp, |
| @@ -707,7 +706,8 @@ int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port, | |||
| 707 | int t4_free_vi(struct adapter *adap, unsigned int mbox, unsigned int pf, | 706 | int t4_free_vi(struct adapter *adap, unsigned int mbox, unsigned int pf, |
| 708 | unsigned int vf, unsigned int viid); | 707 | unsigned int vf, unsigned int viid); |
| 709 | int t4_set_rxmode(struct adapter *adap, unsigned int mbox, unsigned int viid, | 708 | int t4_set_rxmode(struct adapter *adap, unsigned int mbox, unsigned int viid, |
| 710 | int mtu, int promisc, int all_multi, int bcast, bool sleep_ok); | 709 | int mtu, int promisc, int all_multi, int bcast, int vlanex, |
| 710 | bool sleep_ok); | ||
| 711 | int t4_alloc_mac_filt(struct adapter *adap, unsigned int mbox, | 711 | int t4_alloc_mac_filt(struct adapter *adap, unsigned int mbox, |
| 712 | unsigned int viid, bool free, unsigned int naddr, | 712 | unsigned int viid, bool free, unsigned int naddr, |
| 713 | const u8 **addr, u16 *idx, u64 *hash, bool sleep_ok); | 713 | const u8 **addr, u16 *idx, u64 *hash, bool sleep_ok); |
diff --git a/drivers/net/cxgb4/cxgb4_main.c b/drivers/net/cxgb4/cxgb4_main.c index 1bad50041427..a73cda9c9de8 100644 --- a/drivers/net/cxgb4/cxgb4_main.c +++ b/drivers/net/cxgb4/cxgb4_main.c | |||
| @@ -290,7 +290,7 @@ static int set_rxmode(struct net_device *dev, int mtu, bool sleep_ok) | |||
| 290 | if (ret == 0) | 290 | if (ret == 0) |
| 291 | ret = t4_set_rxmode(pi->adapter, 0, pi->viid, mtu, | 291 | ret = t4_set_rxmode(pi->adapter, 0, pi->viid, mtu, |
| 292 | (dev->flags & IFF_PROMISC) ? 1 : 0, | 292 | (dev->flags & IFF_PROMISC) ? 1 : 0, |
| 293 | (dev->flags & IFF_ALLMULTI) ? 1 : 0, 1, | 293 | (dev->flags & IFF_ALLMULTI) ? 1 : 0, 1, -1, |
| 294 | sleep_ok); | 294 | sleep_ok); |
| 295 | return ret; | 295 | return ret; |
| 296 | } | 296 | } |
| @@ -311,7 +311,7 @@ static int link_start(struct net_device *dev) | |||
| 311 | * that step explicitly. | 311 | * that step explicitly. |
| 312 | */ | 312 | */ |
| 313 | ret = t4_set_rxmode(pi->adapter, 0, pi->viid, dev->mtu, -1, -1, -1, | 313 | ret = t4_set_rxmode(pi->adapter, 0, pi->viid, dev->mtu, -1, -1, -1, |
| 314 | true); | 314 | pi->vlan_grp != NULL, true); |
| 315 | if (ret == 0) { | 315 | if (ret == 0) { |
| 316 | ret = t4_change_mac(pi->adapter, 0, pi->viid, | 316 | ret = t4_change_mac(pi->adapter, 0, pi->viid, |
| 317 | pi->xact_addr_filt, dev->dev_addr, true, | 317 | pi->xact_addr_filt, dev->dev_addr, true, |
| @@ -2614,7 +2614,7 @@ static int cxgb_change_mtu(struct net_device *dev, int new_mtu) | |||
| 2614 | 2614 | ||
| 2615 | if (new_mtu < 81 || new_mtu > MAX_MTU) /* accommodate SACK */ | 2615 | if (new_mtu < 81 || new_mtu > MAX_MTU) /* accommodate SACK */ |
| 2616 | return -EINVAL; | 2616 | return -EINVAL; |
| 2617 | ret = t4_set_rxmode(pi->adapter, 0, pi->viid, new_mtu, -1, -1, -1, | 2617 | ret = t4_set_rxmode(pi->adapter, 0, pi->viid, new_mtu, -1, -1, -1, -1, |
| 2618 | true); | 2618 | true); |
| 2619 | if (!ret) | 2619 | if (!ret) |
| 2620 | dev->mtu = new_mtu; | 2620 | dev->mtu = new_mtu; |
| @@ -2645,7 +2645,8 @@ static void vlan_rx_register(struct net_device *dev, struct vlan_group *grp) | |||
| 2645 | struct port_info *pi = netdev_priv(dev); | 2645 | struct port_info *pi = netdev_priv(dev); |
| 2646 | 2646 | ||
| 2647 | pi->vlan_grp = grp; | 2647 | pi->vlan_grp = grp; |
| 2648 | t4_set_vlan_accel(pi->adapter, 1 << pi->tx_chan, grp != NULL); | 2648 | t4_set_rxmode(pi->adapter, 0, pi->viid, -1, -1, -1, -1, grp != NULL, |
| 2649 | true); | ||
| 2649 | } | 2650 | } |
| 2650 | 2651 | ||
| 2651 | #ifdef CONFIG_NET_POLL_CONTROLLER | 2652 | #ifdef CONFIG_NET_POLL_CONTROLLER |
diff --git a/drivers/net/cxgb4/t4_hw.c b/drivers/net/cxgb4/t4_hw.c index 2923dd43523d..da272a98fdbc 100644 --- a/drivers/net/cxgb4/t4_hw.c +++ b/drivers/net/cxgb4/t4_hw.c | |||
| @@ -886,22 +886,6 @@ int t4_restart_aneg(struct adapter *adap, unsigned int mbox, unsigned int port) | |||
| 886 | return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); | 886 | return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); |
| 887 | } | 887 | } |
| 888 | 888 | ||
| 889 | /** | ||
| 890 | * t4_set_vlan_accel - configure HW VLAN extraction | ||
| 891 | * @adap: the adapter | ||
| 892 | * @ports: bitmap of adapter ports to operate on | ||
| 893 | * @on: enable (1) or disable (0) HW VLAN extraction | ||
| 894 | * | ||
| 895 | * Enables or disables HW extraction of VLAN tags for the ports specified | ||
| 896 | * by @ports. @ports is a bitmap with the ith bit designating the port | ||
| 897 | * associated with the ith adapter channel. | ||
| 898 | */ | ||
| 899 | void t4_set_vlan_accel(struct adapter *adap, unsigned int ports, int on) | ||
| 900 | { | ||
| 901 | ports <<= VLANEXTENABLE_SHIFT; | ||
| 902 | t4_set_reg_field(adap, TP_OUT_CONFIG, ports, on ? ports : 0); | ||
| 903 | } | ||
| 904 | |||
| 905 | struct intr_info { | 889 | struct intr_info { |
| 906 | unsigned int mask; /* bits to check in interrupt status */ | 890 | unsigned int mask; /* bits to check in interrupt status */ |
| 907 | const char *msg; /* message to print or NULL */ | 891 | const char *msg; /* message to print or NULL */ |
| @@ -2624,12 +2608,14 @@ int t4_free_vi(struct adapter *adap, unsigned int mbox, unsigned int pf, | |||
| 2624 | * @promisc: 1 to enable promiscuous mode, 0 to disable it, -1 no change | 2608 | * @promisc: 1 to enable promiscuous mode, 0 to disable it, -1 no change |
| 2625 | * @all_multi: 1 to enable all-multi mode, 0 to disable it, -1 no change | 2609 | * @all_multi: 1 to enable all-multi mode, 0 to disable it, -1 no change |
| 2626 | * @bcast: 1 to enable broadcast Rx, 0 to disable it, -1 no change | 2610 | * @bcast: 1 to enable broadcast Rx, 0 to disable it, -1 no change |
| 2611 | * @vlanex: 1 to enable HW VLAN extraction, 0 to disable it, -1 no change | ||
| 2627 | * @sleep_ok: if true we may sleep while awaiting command completion | 2612 | * @sleep_ok: if true we may sleep while awaiting command completion |
| 2628 | * | 2613 | * |
| 2629 | * Sets Rx properties of a virtual interface. | 2614 | * Sets Rx properties of a virtual interface. |
| 2630 | */ | 2615 | */ |
| 2631 | int t4_set_rxmode(struct adapter *adap, unsigned int mbox, unsigned int viid, | 2616 | int t4_set_rxmode(struct adapter *adap, unsigned int mbox, unsigned int viid, |
| 2632 | int mtu, int promisc, int all_multi, int bcast, bool sleep_ok) | 2617 | int mtu, int promisc, int all_multi, int bcast, int vlanex, |
| 2618 | bool sleep_ok) | ||
| 2633 | { | 2619 | { |
| 2634 | struct fw_vi_rxmode_cmd c; | 2620 | struct fw_vi_rxmode_cmd c; |
| 2635 | 2621 | ||
| @@ -2642,15 +2628,18 @@ int t4_set_rxmode(struct adapter *adap, unsigned int mbox, unsigned int viid, | |||
| 2642 | all_multi = FW_VI_RXMODE_CMD_ALLMULTIEN_MASK; | 2628 | all_multi = FW_VI_RXMODE_CMD_ALLMULTIEN_MASK; |
| 2643 | if (bcast < 0) | 2629 | if (bcast < 0) |
| 2644 | bcast = FW_VI_RXMODE_CMD_BROADCASTEN_MASK; | 2630 | bcast = FW_VI_RXMODE_CMD_BROADCASTEN_MASK; |
| 2631 | if (vlanex < 0) | ||
| 2632 | vlanex = FW_VI_RXMODE_CMD_VLANEXEN_MASK; | ||
| 2645 | 2633 | ||
| 2646 | memset(&c, 0, sizeof(c)); | 2634 | memset(&c, 0, sizeof(c)); |
| 2647 | c.op_to_viid = htonl(FW_CMD_OP(FW_VI_RXMODE_CMD) | FW_CMD_REQUEST | | 2635 | c.op_to_viid = htonl(FW_CMD_OP(FW_VI_RXMODE_CMD) | FW_CMD_REQUEST | |
| 2648 | FW_CMD_WRITE | FW_VI_RXMODE_CMD_VIID(viid)); | 2636 | FW_CMD_WRITE | FW_VI_RXMODE_CMD_VIID(viid)); |
| 2649 | c.retval_len16 = htonl(FW_LEN16(c)); | 2637 | c.retval_len16 = htonl(FW_LEN16(c)); |
| 2650 | c.mtu_to_broadcasten = htonl(FW_VI_RXMODE_CMD_MTU(mtu) | | 2638 | c.mtu_to_vlanexen = htonl(FW_VI_RXMODE_CMD_MTU(mtu) | |
| 2651 | FW_VI_RXMODE_CMD_PROMISCEN(promisc) | | 2639 | FW_VI_RXMODE_CMD_PROMISCEN(promisc) | |
| 2652 | FW_VI_RXMODE_CMD_ALLMULTIEN(all_multi) | | 2640 | FW_VI_RXMODE_CMD_ALLMULTIEN(all_multi) | |
| 2653 | FW_VI_RXMODE_CMD_BROADCASTEN(bcast)); | 2641 | FW_VI_RXMODE_CMD_BROADCASTEN(bcast) | |
| 2642 | FW_VI_RXMODE_CMD_VLANEXEN(vlanex)); | ||
| 2654 | return t4_wr_mbox_meat(adap, mbox, &c, sizeof(c), NULL, sleep_ok); | 2643 | return t4_wr_mbox_meat(adap, mbox, &c, sizeof(c), NULL, sleep_ok); |
| 2655 | } | 2644 | } |
| 2656 | 2645 | ||
diff --git a/drivers/net/cxgb4/t4fw_api.h b/drivers/net/cxgb4/t4fw_api.h index 3393d05a388a..63991d68950e 100644 --- a/drivers/net/cxgb4/t4fw_api.h +++ b/drivers/net/cxgb4/t4fw_api.h | |||
| @@ -876,7 +876,7 @@ struct fw_vi_mac_cmd { | |||
| 876 | struct fw_vi_rxmode_cmd { | 876 | struct fw_vi_rxmode_cmd { |
| 877 | __be32 op_to_viid; | 877 | __be32 op_to_viid; |
| 878 | __be32 retval_len16; | 878 | __be32 retval_len16; |
| 879 | __be32 mtu_to_broadcasten; | 879 | __be32 mtu_to_vlanexen; |
| 880 | __be32 r4_lo; | 880 | __be32 r4_lo; |
| 881 | }; | 881 | }; |
| 882 | 882 | ||
| @@ -888,6 +888,8 @@ struct fw_vi_rxmode_cmd { | |||
| 888 | #define FW_VI_RXMODE_CMD_ALLMULTIEN(x) ((x) << 12) | 888 | #define FW_VI_RXMODE_CMD_ALLMULTIEN(x) ((x) << 12) |
| 889 | #define FW_VI_RXMODE_CMD_BROADCASTEN_MASK 0x3 | 889 | #define FW_VI_RXMODE_CMD_BROADCASTEN_MASK 0x3 |
| 890 | #define FW_VI_RXMODE_CMD_BROADCASTEN(x) ((x) << 10) | 890 | #define FW_VI_RXMODE_CMD_BROADCASTEN(x) ((x) << 10) |
| 891 | #define FW_VI_RXMODE_CMD_VLANEXEN_MASK 0x3 | ||
| 892 | #define FW_VI_RXMODE_CMD_VLANEXEN(x) ((x) << 8) | ||
| 891 | 893 | ||
| 892 | struct fw_vi_enable_cmd { | 894 | struct fw_vi_enable_cmd { |
| 893 | __be32 op_to_viid; | 895 | __be32 op_to_viid; |
