diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-08 18:29:48 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-08 18:29:48 -0400 |
commit | e0fd9affeb64088eff407dfc98bbd3a5c17ea479 (patch) | |
tree | 94ee7e3410fffb305aa6901053b85245686444a2 /drivers/net/ethernet/mellanox | |
parent | 3d15b798eafd3b6b3cc25f20747008ab9401a57f (diff) | |
parent | ea9627c800e99a902e2668ac8e6377f02d6f720a (diff) |
Merge tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
Pull InfiniBand/RDMA changes from Roland Dreier:
- XRC transport fixes
- Fix DHCP on IPoIB
- mlx4 preparations for flow steering
- iSER fixes
- miscellaneous other fixes
* tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (23 commits)
IB/iser: Add support for iser CM REQ additional info
IB/iser: Return error to upper layers on EAGAIN registration failures
IB/iser: Move informational messages from error to info level
IB/iser: Add module version
mlx4_core: Expose a few helpers to fill DMFS HW strucutures
mlx4_core: Directly expose fields of DMFS HW rule control segment
mlx4_core: Change a few DMFS fields names to match firmare spec
mlx4: Match DMFS promiscuous field names to firmware spec
mlx4_core: Move DMFS HW structs to common header file
IB/mlx4: Set link type for RAW PACKET QPs in the QP context
IB/mlx4: Disable VLAN stripping for RAW PACKET QPs
mlx4_core: Reduce warning message for SRQ_LIMIT event to debug level
RDMA/iwcm: Don't touch cmid after dropping reference
IB/qib: Correct qib_verbs_register_sysfs() error handling
IB/ipath: Correct ipath_verbs_register_sysfs() error handling
RDMA/cxgb4: Fix SQ allocation when on-chip SQ is disabled
SRPT: Fix odd use of WARN_ON()
IPoIB: Fix ipoib_hard_header() return value
RDMA: Rename random32() to prandom_u32()
RDMA/cxgb3: Fix uninitialized variable
...
Diffstat (limited to 'drivers/net/ethernet/mellanox')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 16 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/eq.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mcg.c | 120 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mlx4.h | 79 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/srq.c | 15 |
6 files changed, 102 insertions, 134 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c index bcf4d118e98c..c9e6b62dd000 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | |||
@@ -889,7 +889,7 @@ static int mlx4_en_flow_replace(struct net_device *dev, | |||
889 | .queue_mode = MLX4_NET_TRANS_Q_FIFO, | 889 | .queue_mode = MLX4_NET_TRANS_Q_FIFO, |
890 | .exclusive = 0, | 890 | .exclusive = 0, |
891 | .allow_loopback = 1, | 891 | .allow_loopback = 1, |
892 | .promisc_mode = MLX4_FS_PROMISC_NONE, | 892 | .promisc_mode = MLX4_FS_REGULAR, |
893 | }; | 893 | }; |
894 | 894 | ||
895 | rule.port = priv->port; | 895 | rule.port = priv->port; |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index a69a908614e6..b35f94700093 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |||
@@ -127,7 +127,7 @@ static void mlx4_en_filter_work(struct work_struct *work) | |||
127 | .queue_mode = MLX4_NET_TRANS_Q_LIFO, | 127 | .queue_mode = MLX4_NET_TRANS_Q_LIFO, |
128 | .exclusive = 1, | 128 | .exclusive = 1, |
129 | .allow_loopback = 1, | 129 | .allow_loopback = 1, |
130 | .promisc_mode = MLX4_FS_PROMISC_NONE, | 130 | .promisc_mode = MLX4_FS_REGULAR, |
131 | .port = priv->port, | 131 | .port = priv->port, |
132 | .priority = MLX4_DOMAIN_RFS, | 132 | .priority = MLX4_DOMAIN_RFS, |
133 | }; | 133 | }; |
@@ -448,7 +448,7 @@ static int mlx4_en_uc_steer_add(struct mlx4_en_priv *priv, | |||
448 | .queue_mode = MLX4_NET_TRANS_Q_FIFO, | 448 | .queue_mode = MLX4_NET_TRANS_Q_FIFO, |
449 | .exclusive = 0, | 449 | .exclusive = 0, |
450 | .allow_loopback = 1, | 450 | .allow_loopback = 1, |
451 | .promisc_mode = MLX4_FS_PROMISC_NONE, | 451 | .promisc_mode = MLX4_FS_REGULAR, |
452 | .priority = MLX4_DOMAIN_NIC, | 452 | .priority = MLX4_DOMAIN_NIC, |
453 | }; | 453 | }; |
454 | 454 | ||
@@ -795,7 +795,7 @@ static void mlx4_en_set_promisc_mode(struct mlx4_en_priv *priv, | |||
795 | err = mlx4_flow_steer_promisc_add(mdev->dev, | 795 | err = mlx4_flow_steer_promisc_add(mdev->dev, |
796 | priv->port, | 796 | priv->port, |
797 | priv->base_qpn, | 797 | priv->base_qpn, |
798 | MLX4_FS_PROMISC_UPLINK); | 798 | MLX4_FS_ALL_DEFAULT); |
799 | if (err) | 799 | if (err) |
800 | en_err(priv, "Failed enabling promiscuous mode\n"); | 800 | en_err(priv, "Failed enabling promiscuous mode\n"); |
801 | priv->flags |= MLX4_EN_FLAG_MC_PROMISC; | 801 | priv->flags |= MLX4_EN_FLAG_MC_PROMISC; |
@@ -858,7 +858,7 @@ static void mlx4_en_clear_promisc_mode(struct mlx4_en_priv *priv, | |||
858 | case MLX4_STEERING_MODE_DEVICE_MANAGED: | 858 | case MLX4_STEERING_MODE_DEVICE_MANAGED: |
859 | err = mlx4_flow_steer_promisc_remove(mdev->dev, | 859 | err = mlx4_flow_steer_promisc_remove(mdev->dev, |
860 | priv->port, | 860 | priv->port, |
861 | MLX4_FS_PROMISC_UPLINK); | 861 | MLX4_FS_ALL_DEFAULT); |
862 | if (err) | 862 | if (err) |
863 | en_err(priv, "Failed disabling promiscuous mode\n"); | 863 | en_err(priv, "Failed disabling promiscuous mode\n"); |
864 | priv->flags &= ~MLX4_EN_FLAG_MC_PROMISC; | 864 | priv->flags &= ~MLX4_EN_FLAG_MC_PROMISC; |
@@ -919,7 +919,7 @@ static void mlx4_en_do_multicast(struct mlx4_en_priv *priv, | |||
919 | err = mlx4_flow_steer_promisc_add(mdev->dev, | 919 | err = mlx4_flow_steer_promisc_add(mdev->dev, |
920 | priv->port, | 920 | priv->port, |
921 | priv->base_qpn, | 921 | priv->base_qpn, |
922 | MLX4_FS_PROMISC_ALL_MULTI); | 922 | MLX4_FS_MC_DEFAULT); |
923 | break; | 923 | break; |
924 | 924 | ||
925 | case MLX4_STEERING_MODE_B0: | 925 | case MLX4_STEERING_MODE_B0: |
@@ -942,7 +942,7 @@ static void mlx4_en_do_multicast(struct mlx4_en_priv *priv, | |||
942 | case MLX4_STEERING_MODE_DEVICE_MANAGED: | 942 | case MLX4_STEERING_MODE_DEVICE_MANAGED: |
943 | err = mlx4_flow_steer_promisc_remove(mdev->dev, | 943 | err = mlx4_flow_steer_promisc_remove(mdev->dev, |
944 | priv->port, | 944 | priv->port, |
945 | MLX4_FS_PROMISC_ALL_MULTI); | 945 | MLX4_FS_MC_DEFAULT); |
946 | break; | 946 | break; |
947 | 947 | ||
948 | case MLX4_STEERING_MODE_B0: | 948 | case MLX4_STEERING_MODE_B0: |
@@ -1621,10 +1621,10 @@ void mlx4_en_stop_port(struct net_device *dev, int detach) | |||
1621 | MLX4_EN_FLAG_MC_PROMISC); | 1621 | MLX4_EN_FLAG_MC_PROMISC); |
1622 | mlx4_flow_steer_promisc_remove(mdev->dev, | 1622 | mlx4_flow_steer_promisc_remove(mdev->dev, |
1623 | priv->port, | 1623 | priv->port, |
1624 | MLX4_FS_PROMISC_UPLINK); | 1624 | MLX4_FS_ALL_DEFAULT); |
1625 | mlx4_flow_steer_promisc_remove(mdev->dev, | 1625 | mlx4_flow_steer_promisc_remove(mdev->dev, |
1626 | priv->port, | 1626 | priv->port, |
1627 | MLX4_FS_PROMISC_ALL_MULTI); | 1627 | MLX4_FS_MC_DEFAULT); |
1628 | } else if (priv->flags & MLX4_EN_FLAG_PROMISC) { | 1628 | } else if (priv->flags & MLX4_EN_FLAG_PROMISC) { |
1629 | priv->flags &= ~MLX4_EN_FLAG_PROMISC; | 1629 | priv->flags &= ~MLX4_EN_FLAG_PROMISC; |
1630 | 1630 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx4/eq.c b/drivers/net/ethernet/mellanox/mlx4/eq.c index 8e3123a1df88..6000342f9725 100644 --- a/drivers/net/ethernet/mellanox/mlx4/eq.c +++ b/drivers/net/ethernet/mellanox/mlx4/eq.c | |||
@@ -497,8 +497,8 @@ static int mlx4_eq_int(struct mlx4_dev *dev, struct mlx4_eq *eq) | |||
497 | break; | 497 | break; |
498 | 498 | ||
499 | case MLX4_EVENT_TYPE_SRQ_LIMIT: | 499 | case MLX4_EVENT_TYPE_SRQ_LIMIT: |
500 | mlx4_warn(dev, "%s: MLX4_EVENT_TYPE_SRQ_LIMIT\n", | 500 | mlx4_dbg(dev, "%s: MLX4_EVENT_TYPE_SRQ_LIMIT\n", |
501 | __func__); | 501 | __func__); |
502 | case MLX4_EVENT_TYPE_SRQ_CATAS_ERROR: | 502 | case MLX4_EVENT_TYPE_SRQ_CATAS_ERROR: |
503 | if (mlx4_is_master(dev)) { | 503 | if (mlx4_is_master(dev)) { |
504 | /* forward only to slave owning the SRQ */ | 504 | /* forward only to slave owning the SRQ */ |
diff --git a/drivers/net/ethernet/mellanox/mlx4/mcg.c b/drivers/net/ethernet/mellanox/mlx4/mcg.c index ffc78d2cb0cf..f3e804f2a35f 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mcg.c +++ b/drivers/net/ethernet/mellanox/mlx4/mcg.c | |||
@@ -645,25 +645,37 @@ static int find_entry(struct mlx4_dev *dev, u8 port, | |||
645 | return err; | 645 | return err; |
646 | } | 646 | } |
647 | 647 | ||
648 | static const u8 __promisc_mode[] = { | ||
649 | [MLX4_FS_REGULAR] = 0x0, | ||
650 | [MLX4_FS_ALL_DEFAULT] = 0x1, | ||
651 | [MLX4_FS_MC_DEFAULT] = 0x3, | ||
652 | [MLX4_FS_UC_SNIFFER] = 0x4, | ||
653 | [MLX4_FS_MC_SNIFFER] = 0x5, | ||
654 | }; | ||
655 | |||
656 | int mlx4_map_sw_to_hw_steering_mode(struct mlx4_dev *dev, | ||
657 | enum mlx4_net_trans_promisc_mode flow_type) | ||
658 | { | ||
659 | if (flow_type >= MLX4_FS_MODE_NUM || flow_type < 0) { | ||
660 | mlx4_err(dev, "Invalid flow type. type = %d\n", flow_type); | ||
661 | return -EINVAL; | ||
662 | } | ||
663 | return __promisc_mode[flow_type]; | ||
664 | } | ||
665 | EXPORT_SYMBOL_GPL(mlx4_map_sw_to_hw_steering_mode); | ||
666 | |||
648 | static void trans_rule_ctrl_to_hw(struct mlx4_net_trans_rule *ctrl, | 667 | static void trans_rule_ctrl_to_hw(struct mlx4_net_trans_rule *ctrl, |
649 | struct mlx4_net_trans_rule_hw_ctrl *hw) | 668 | struct mlx4_net_trans_rule_hw_ctrl *hw) |
650 | { | 669 | { |
651 | static const u8 __promisc_mode[] = { | 670 | u8 flags = 0; |
652 | [MLX4_FS_PROMISC_NONE] = 0x0, | 671 | |
653 | [MLX4_FS_PROMISC_UPLINK] = 0x1, | 672 | flags = ctrl->queue_mode == MLX4_NET_TRANS_Q_LIFO ? 1 : 0; |
654 | [MLX4_FS_PROMISC_FUNCTION_PORT] = 0x2, | 673 | flags |= ctrl->exclusive ? (1 << 2) : 0; |
655 | [MLX4_FS_PROMISC_ALL_MULTI] = 0x3, | 674 | flags |= ctrl->allow_loopback ? (1 << 3) : 0; |
656 | }; | 675 | |
657 | 676 | hw->flags = flags; | |
658 | u32 dw = 0; | 677 | hw->type = __promisc_mode[ctrl->promisc_mode]; |
659 | 678 | hw->prio = cpu_to_be16(ctrl->priority); | |
660 | dw = ctrl->queue_mode == MLX4_NET_TRANS_Q_LIFO ? 1 : 0; | ||
661 | dw |= ctrl->exclusive ? (1 << 2) : 0; | ||
662 | dw |= ctrl->allow_loopback ? (1 << 3) : 0; | ||
663 | dw |= __promisc_mode[ctrl->promisc_mode] << 8; | ||
664 | dw |= ctrl->priority << 16; | ||
665 | |||
666 | hw->ctrl = cpu_to_be32(dw); | ||
667 | hw->port = ctrl->port; | 679 | hw->port = ctrl->port; |
668 | hw->qpn = cpu_to_be32(ctrl->qpn); | 680 | hw->qpn = cpu_to_be32(ctrl->qpn); |
669 | } | 681 | } |
@@ -677,29 +689,51 @@ const u16 __sw_id_hw[] = { | |||
677 | [MLX4_NET_TRANS_RULE_ID_UDP] = 0xE006 | 689 | [MLX4_NET_TRANS_RULE_ID_UDP] = 0xE006 |
678 | }; | 690 | }; |
679 | 691 | ||
692 | int mlx4_map_sw_to_hw_steering_id(struct mlx4_dev *dev, | ||
693 | enum mlx4_net_trans_rule_id id) | ||
694 | { | ||
695 | if (id >= MLX4_NET_TRANS_RULE_NUM || id < 0) { | ||
696 | mlx4_err(dev, "Invalid network rule id. id = %d\n", id); | ||
697 | return -EINVAL; | ||
698 | } | ||
699 | return __sw_id_hw[id]; | ||
700 | } | ||
701 | EXPORT_SYMBOL_GPL(mlx4_map_sw_to_hw_steering_id); | ||
702 | |||
703 | static const int __rule_hw_sz[] = { | ||
704 | [MLX4_NET_TRANS_RULE_ID_ETH] = | ||
705 | sizeof(struct mlx4_net_trans_rule_hw_eth), | ||
706 | [MLX4_NET_TRANS_RULE_ID_IB] = | ||
707 | sizeof(struct mlx4_net_trans_rule_hw_ib), | ||
708 | [MLX4_NET_TRANS_RULE_ID_IPV6] = 0, | ||
709 | [MLX4_NET_TRANS_RULE_ID_IPV4] = | ||
710 | sizeof(struct mlx4_net_trans_rule_hw_ipv4), | ||
711 | [MLX4_NET_TRANS_RULE_ID_TCP] = | ||
712 | sizeof(struct mlx4_net_trans_rule_hw_tcp_udp), | ||
713 | [MLX4_NET_TRANS_RULE_ID_UDP] = | ||
714 | sizeof(struct mlx4_net_trans_rule_hw_tcp_udp) | ||
715 | }; | ||
716 | |||
717 | int mlx4_hw_rule_sz(struct mlx4_dev *dev, | ||
718 | enum mlx4_net_trans_rule_id id) | ||
719 | { | ||
720 | if (id >= MLX4_NET_TRANS_RULE_NUM || id < 0) { | ||
721 | mlx4_err(dev, "Invalid network rule id. id = %d\n", id); | ||
722 | return -EINVAL; | ||
723 | } | ||
724 | |||
725 | return __rule_hw_sz[id]; | ||
726 | } | ||
727 | EXPORT_SYMBOL_GPL(mlx4_hw_rule_sz); | ||
728 | |||
680 | static int parse_trans_rule(struct mlx4_dev *dev, struct mlx4_spec_list *spec, | 729 | static int parse_trans_rule(struct mlx4_dev *dev, struct mlx4_spec_list *spec, |
681 | struct _rule_hw *rule_hw) | 730 | struct _rule_hw *rule_hw) |
682 | { | 731 | { |
683 | static const size_t __rule_hw_sz[] = { | 732 | if (mlx4_hw_rule_sz(dev, spec->id) < 0) |
684 | [MLX4_NET_TRANS_RULE_ID_ETH] = | ||
685 | sizeof(struct mlx4_net_trans_rule_hw_eth), | ||
686 | [MLX4_NET_TRANS_RULE_ID_IB] = | ||
687 | sizeof(struct mlx4_net_trans_rule_hw_ib), | ||
688 | [MLX4_NET_TRANS_RULE_ID_IPV6] = 0, | ||
689 | [MLX4_NET_TRANS_RULE_ID_IPV4] = | ||
690 | sizeof(struct mlx4_net_trans_rule_hw_ipv4), | ||
691 | [MLX4_NET_TRANS_RULE_ID_TCP] = | ||
692 | sizeof(struct mlx4_net_trans_rule_hw_tcp_udp), | ||
693 | [MLX4_NET_TRANS_RULE_ID_UDP] = | ||
694 | sizeof(struct mlx4_net_trans_rule_hw_tcp_udp) | ||
695 | }; | ||
696 | if (spec->id >= MLX4_NET_TRANS_RULE_NUM) { | ||
697 | mlx4_err(dev, "Invalid network rule id. id = %d\n", spec->id); | ||
698 | return -EINVAL; | 733 | return -EINVAL; |
699 | } | 734 | memset(rule_hw, 0, mlx4_hw_rule_sz(dev, spec->id)); |
700 | memset(rule_hw, 0, __rule_hw_sz[spec->id]); | ||
701 | rule_hw->id = cpu_to_be16(__sw_id_hw[spec->id]); | 735 | rule_hw->id = cpu_to_be16(__sw_id_hw[spec->id]); |
702 | rule_hw->size = __rule_hw_sz[spec->id] >> 2; | 736 | rule_hw->size = mlx4_hw_rule_sz(dev, spec->id) >> 2; |
703 | 737 | ||
704 | switch (spec->id) { | 738 | switch (spec->id) { |
705 | case MLX4_NET_TRANS_RULE_ID_ETH: | 739 | case MLX4_NET_TRANS_RULE_ID_ETH: |
@@ -713,12 +747,12 @@ static int parse_trans_rule(struct mlx4_dev *dev, struct mlx4_spec_list *spec, | |||
713 | rule_hw->eth.ether_type_enable = 1; | 747 | rule_hw->eth.ether_type_enable = 1; |
714 | rule_hw->eth.ether_type = spec->eth.ether_type; | 748 | rule_hw->eth.ether_type = spec->eth.ether_type; |
715 | } | 749 | } |
716 | rule_hw->eth.vlan_id = spec->eth.vlan_id; | 750 | rule_hw->eth.vlan_tag = spec->eth.vlan_id; |
717 | rule_hw->eth.vlan_id_msk = spec->eth.vlan_id_msk; | 751 | rule_hw->eth.vlan_tag_msk = spec->eth.vlan_id_msk; |
718 | break; | 752 | break; |
719 | 753 | ||
720 | case MLX4_NET_TRANS_RULE_ID_IB: | 754 | case MLX4_NET_TRANS_RULE_ID_IB: |
721 | rule_hw->ib.qpn = spec->ib.r_qpn; | 755 | rule_hw->ib.l3_qpn = spec->ib.l3_qpn; |
722 | rule_hw->ib.qpn_mask = spec->ib.qpn_msk; | 756 | rule_hw->ib.qpn_mask = spec->ib.qpn_msk; |
723 | memcpy(&rule_hw->ib.dst_gid, &spec->ib.dst_gid, 16); | 757 | memcpy(&rule_hw->ib.dst_gid, &spec->ib.dst_gid, 16); |
724 | memcpy(&rule_hw->ib.dst_gid_msk, &spec->ib.dst_gid_msk, 16); | 758 | memcpy(&rule_hw->ib.dst_gid_msk, &spec->ib.dst_gid_msk, 16); |
@@ -1136,7 +1170,7 @@ int mlx4_trans_to_dmfs_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, | |||
1136 | struct mlx4_net_trans_rule rule = { | 1170 | struct mlx4_net_trans_rule rule = { |
1137 | .queue_mode = MLX4_NET_TRANS_Q_FIFO, | 1171 | .queue_mode = MLX4_NET_TRANS_Q_FIFO, |
1138 | .exclusive = 0, | 1172 | .exclusive = 0, |
1139 | .promisc_mode = MLX4_FS_PROMISC_NONE, | 1173 | .promisc_mode = MLX4_FS_REGULAR, |
1140 | .priority = MLX4_DOMAIN_NIC, | 1174 | .priority = MLX4_DOMAIN_NIC, |
1141 | }; | 1175 | }; |
1142 | 1176 | ||
@@ -1229,11 +1263,10 @@ int mlx4_flow_steer_promisc_add(struct mlx4_dev *dev, u8 port, | |||
1229 | u64 *regid_p; | 1263 | u64 *regid_p; |
1230 | 1264 | ||
1231 | switch (mode) { | 1265 | switch (mode) { |
1232 | case MLX4_FS_PROMISC_UPLINK: | 1266 | case MLX4_FS_ALL_DEFAULT: |
1233 | case MLX4_FS_PROMISC_FUNCTION_PORT: | ||
1234 | regid_p = &dev->regid_promisc_array[port]; | 1267 | regid_p = &dev->regid_promisc_array[port]; |
1235 | break; | 1268 | break; |
1236 | case MLX4_FS_PROMISC_ALL_MULTI: | 1269 | case MLX4_FS_MC_DEFAULT: |
1237 | regid_p = &dev->regid_allmulti_array[port]; | 1270 | regid_p = &dev->regid_allmulti_array[port]; |
1238 | break; | 1271 | break; |
1239 | default: | 1272 | default: |
@@ -1260,11 +1293,10 @@ int mlx4_flow_steer_promisc_remove(struct mlx4_dev *dev, u8 port, | |||
1260 | u64 *regid_p; | 1293 | u64 *regid_p; |
1261 | 1294 | ||
1262 | switch (mode) { | 1295 | switch (mode) { |
1263 | case MLX4_FS_PROMISC_UPLINK: | 1296 | case MLX4_FS_ALL_DEFAULT: |
1264 | case MLX4_FS_PROMISC_FUNCTION_PORT: | ||
1265 | regid_p = &dev->regid_promisc_array[port]; | 1297 | regid_p = &dev->regid_promisc_array[port]; |
1266 | break; | 1298 | break; |
1267 | case MLX4_FS_PROMISC_ALL_MULTI: | 1299 | case MLX4_FS_MC_DEFAULT: |
1268 | regid_p = &dev->regid_allmulti_array[port]; | 1300 | regid_p = &dev->regid_allmulti_array[port]; |
1269 | break; | 1301 | break; |
1270 | default: | 1302 | default: |
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h index eac3dae10efe..df15bb6631cc 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h | |||
@@ -730,85 +730,6 @@ struct mlx4_steer { | |||
730 | struct list_head steer_entries[MLX4_NUM_STEERS]; | 730 | struct list_head steer_entries[MLX4_NUM_STEERS]; |
731 | }; | 731 | }; |
732 | 732 | ||
733 | struct mlx4_net_trans_rule_hw_ctrl { | ||
734 | __be32 ctrl; | ||
735 | u8 rsvd1; | ||
736 | u8 funcid; | ||
737 | u8 vep; | ||
738 | u8 port; | ||
739 | __be32 qpn; | ||
740 | __be32 rsvd2; | ||
741 | }; | ||
742 | |||
743 | struct mlx4_net_trans_rule_hw_ib { | ||
744 | u8 size; | ||
745 | u8 rsvd1; | ||
746 | __be16 id; | ||
747 | u32 rsvd2; | ||
748 | __be32 qpn; | ||
749 | __be32 qpn_mask; | ||
750 | u8 dst_gid[16]; | ||
751 | u8 dst_gid_msk[16]; | ||
752 | } __packed; | ||
753 | |||
754 | struct mlx4_net_trans_rule_hw_eth { | ||
755 | u8 size; | ||
756 | u8 rsvd; | ||
757 | __be16 id; | ||
758 | u8 rsvd1[6]; | ||
759 | u8 dst_mac[6]; | ||
760 | u16 rsvd2; | ||
761 | u8 dst_mac_msk[6]; | ||
762 | u16 rsvd3; | ||
763 | u8 src_mac[6]; | ||
764 | u16 rsvd4; | ||
765 | u8 src_mac_msk[6]; | ||
766 | u8 rsvd5; | ||
767 | u8 ether_type_enable; | ||
768 | __be16 ether_type; | ||
769 | __be16 vlan_id_msk; | ||
770 | __be16 vlan_id; | ||
771 | } __packed; | ||
772 | |||
773 | struct mlx4_net_trans_rule_hw_tcp_udp { | ||
774 | u8 size; | ||
775 | u8 rsvd; | ||
776 | __be16 id; | ||
777 | __be16 rsvd1[3]; | ||
778 | __be16 dst_port; | ||
779 | __be16 rsvd2; | ||
780 | __be16 dst_port_msk; | ||
781 | __be16 rsvd3; | ||
782 | __be16 src_port; | ||
783 | __be16 rsvd4; | ||
784 | __be16 src_port_msk; | ||
785 | } __packed; | ||
786 | |||
787 | struct mlx4_net_trans_rule_hw_ipv4 { | ||
788 | u8 size; | ||
789 | u8 rsvd; | ||
790 | __be16 id; | ||
791 | __be32 rsvd1; | ||
792 | __be32 dst_ip; | ||
793 | __be32 dst_ip_msk; | ||
794 | __be32 src_ip; | ||
795 | __be32 src_ip_msk; | ||
796 | } __packed; | ||
797 | |||
798 | struct _rule_hw { | ||
799 | union { | ||
800 | struct { | ||
801 | u8 size; | ||
802 | u8 rsvd; | ||
803 | __be16 id; | ||
804 | }; | ||
805 | struct mlx4_net_trans_rule_hw_eth eth; | ||
806 | struct mlx4_net_trans_rule_hw_ib ib; | ||
807 | struct mlx4_net_trans_rule_hw_ipv4 ipv4; | ||
808 | struct mlx4_net_trans_rule_hw_tcp_udp tcp_udp; | ||
809 | }; | ||
810 | }; | ||
811 | |||
812 | enum { | 733 | enum { |
813 | MLX4_PCI_DEV_IS_VF = 1 << 0, | 734 | MLX4_PCI_DEV_IS_VF = 1 << 0, |
814 | MLX4_PCI_DEV_FORCE_SENSE_PORT = 1 << 1, | 735 | MLX4_PCI_DEV_FORCE_SENSE_PORT = 1 << 1, |
diff --git a/drivers/net/ethernet/mellanox/mlx4/srq.c b/drivers/net/ethernet/mellanox/mlx4/srq.c index e329fe1f11b7..79fd269e2c54 100644 --- a/drivers/net/ethernet/mellanox/mlx4/srq.c +++ b/drivers/net/ethernet/mellanox/mlx4/srq.c | |||
@@ -298,3 +298,18 @@ void mlx4_cleanup_srq_table(struct mlx4_dev *dev) | |||
298 | return; | 298 | return; |
299 | mlx4_bitmap_cleanup(&mlx4_priv(dev)->srq_table.bitmap); | 299 | mlx4_bitmap_cleanup(&mlx4_priv(dev)->srq_table.bitmap); |
300 | } | 300 | } |
301 | |||
302 | struct mlx4_srq *mlx4_srq_lookup(struct mlx4_dev *dev, u32 srqn) | ||
303 | { | ||
304 | struct mlx4_srq_table *srq_table = &mlx4_priv(dev)->srq_table; | ||
305 | struct mlx4_srq *srq; | ||
306 | unsigned long flags; | ||
307 | |||
308 | spin_lock_irqsave(&srq_table->lock, flags); | ||
309 | srq = radix_tree_lookup(&srq_table->tree, | ||
310 | srqn & (dev->caps.num_srqs - 1)); | ||
311 | spin_unlock_irqrestore(&srq_table->lock, flags); | ||
312 | |||
313 | return srq; | ||
314 | } | ||
315 | EXPORT_SYMBOL_GPL(mlx4_srq_lookup); | ||