diff options
author | Jack Morgenstein <jackm@dev.mellanox.co.il> | 2013-06-27 12:05:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-07-01 16:10:22 -0400 |
commit | b01978cacfd7e3a4ca703b0e48f2e18de8865df5 (patch) | |
tree | 73beae91335dbcf4a4129b3970be68f1082aff0b /include | |
parent | 4e144d3a807d6d2aa03d2cb234d88ef1a140e8c3 (diff) |
net/mlx4_core: Dynamic VST to VST vlan/qos changes
Within VST mode, enable modifying the vlan and/or qos
for a VF without requiring unbind/rebind.
This requires firmware which supports the UPDATE_QP command.
(If the command is not available, we fall back to requiring
unbind/bind to activate these changes).
To avoid race conditions with modify-qp on QPs that are affected
by update-qp, this operation is performed on the comm_wq.
If the update operation succeeds for all the necessary QPs, a
vlan_unregister is performed for the abandoned vlan id.
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/mlx4/cmd.h | 1 | ||||
-rw-r--r-- | include/linux/mlx4/device.h | 3 | ||||
-rw-r--r-- | include/linux/mlx4/qp.h | 34 |
3 files changed, 37 insertions, 1 deletions
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h index 8074a9711cf1..bb1c8096a7eb 100644 --- a/include/linux/mlx4/cmd.h +++ b/include/linux/mlx4/cmd.h | |||
@@ -111,6 +111,7 @@ enum { | |||
111 | MLX4_CMD_INIT2INIT_QP = 0x2d, | 111 | MLX4_CMD_INIT2INIT_QP = 0x2d, |
112 | MLX4_CMD_SUSPEND_QP = 0x32, | 112 | MLX4_CMD_SUSPEND_QP = 0x32, |
113 | MLX4_CMD_UNSUSPEND_QP = 0x33, | 113 | MLX4_CMD_UNSUSPEND_QP = 0x33, |
114 | MLX4_CMD_UPDATE_QP = 0x61, | ||
114 | /* special QP and management commands */ | 115 | /* special QP and management commands */ |
115 | MLX4_CMD_CONF_SPECIAL_QP = 0x23, | 116 | MLX4_CMD_CONF_SPECIAL_QP = 0x23, |
116 | MLX4_CMD_MAD_IFC = 0x24, | 117 | MLX4_CMD_MAD_IFC = 0x24, |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index a51b0134ce18..52c23a892bab 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -157,7 +157,8 @@ enum { | |||
157 | MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN = 1LL << 4, | 157 | MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN = 1LL << 4, |
158 | MLX4_DEV_CAP_FLAG2_TS = 1LL << 5, | 158 | MLX4_DEV_CAP_FLAG2_TS = 1LL << 5, |
159 | MLX4_DEV_CAP_FLAG2_VLAN_CONTROL = 1LL << 6, | 159 | MLX4_DEV_CAP_FLAG2_VLAN_CONTROL = 1LL << 6, |
160 | MLX4_DEV_CAP_FLAG2_FSM = 1LL << 7 | 160 | MLX4_DEV_CAP_FLAG2_FSM = 1LL << 7, |
161 | MLX4_DEV_CAP_FLAG2_UPDATE_QP = 1LL << 8 | ||
161 | }; | 162 | }; |
162 | 163 | ||
163 | enum { | 164 | enum { |
diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h index 352eec9df1b8..f43e32aa054a 100644 --- a/include/linux/mlx4/qp.h +++ b/include/linux/mlx4/qp.h | |||
@@ -206,6 +206,40 @@ struct mlx4_qp_context { | |||
206 | u32 reserved5[10]; | 206 | u32 reserved5[10]; |
207 | }; | 207 | }; |
208 | 208 | ||
209 | struct mlx4_update_qp_context { | ||
210 | __be64 qp_mask; | ||
211 | __be64 primary_addr_path_mask; | ||
212 | __be64 secondary_addr_path_mask; | ||
213 | u64 reserved1; | ||
214 | struct mlx4_qp_context qp_context; | ||
215 | u64 reserved2[58]; | ||
216 | }; | ||
217 | |||
218 | enum { | ||
219 | MLX4_UPD_QP_MASK_PM_STATE = 32, | ||
220 | MLX4_UPD_QP_MASK_VSD = 33, | ||
221 | }; | ||
222 | |||
223 | enum { | ||
224 | MLX4_UPD_QP_PATH_MASK_PKEY_INDEX = 0 + 32, | ||
225 | MLX4_UPD_QP_PATH_MASK_FSM = 1 + 32, | ||
226 | MLX4_UPD_QP_PATH_MASK_MAC_INDEX = 2 + 32, | ||
227 | MLX4_UPD_QP_PATH_MASK_FVL = 3 + 32, | ||
228 | MLX4_UPD_QP_PATH_MASK_CV = 4 + 32, | ||
229 | MLX4_UPD_QP_PATH_MASK_VLAN_INDEX = 5 + 32, | ||
230 | MLX4_UPD_QP_PATH_MASK_ETH_HIDE_CQE_VLAN = 6 + 32, | ||
231 | MLX4_UPD_QP_PATH_MASK_ETH_TX_BLOCK_UNTAGGED = 7 + 32, | ||
232 | MLX4_UPD_QP_PATH_MASK_ETH_TX_BLOCK_1P = 8 + 32, | ||
233 | MLX4_UPD_QP_PATH_MASK_ETH_TX_BLOCK_TAGGED = 9 + 32, | ||
234 | MLX4_UPD_QP_PATH_MASK_ETH_RX_BLOCK_UNTAGGED = 10 + 32, | ||
235 | MLX4_UPD_QP_PATH_MASK_ETH_RX_BLOCK_1P = 11 + 32, | ||
236 | MLX4_UPD_QP_PATH_MASK_ETH_RX_BLOCK_TAGGED = 12 + 32, | ||
237 | MLX4_UPD_QP_PATH_MASK_FEUP = 13 + 32, | ||
238 | MLX4_UPD_QP_PATH_MASK_SCHED_QUEUE = 14 + 32, | ||
239 | MLX4_UPD_QP_PATH_MASK_IF_COUNTER_INDEX = 15 + 32, | ||
240 | MLX4_UPD_QP_PATH_MASK_FVL_RX = 16 + 32, | ||
241 | }; | ||
242 | |||
209 | enum { /* param3 */ | 243 | enum { /* param3 */ |
210 | MLX4_STRIP_VLAN = 1 << 30 | 244 | MLX4_STRIP_VLAN = 1 << 30 |
211 | }; | 245 | }; |