aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authormajd@mellanox.com <majd@mellanox.com>2016-01-14 12:13:07 -0500
committerDoug Ledford <dledford@redhat.com>2016-01-21 12:01:09 -0500
commit427c1e7bcd7e5cd62160fcda0ce215ebbe0da3a1 (patch)
tree79230a0252c15cb83a469903f9625bcd9568ed02 /drivers/net
parent75850d0bcece42416ba81bd38e4c719f101c832d (diff)
{IB, net}/mlx5: Move the modify QP operation table to mlx5_ib
When modifying a QP, the desired operation was determined in the mlx5_core using a transition table that takes the current state, the final state, and returns the desired operation. Since this logic will be used for Raw Packet QP, move the operation table to the mlx5_ib. Signed-off-by: Majd Dibbiny <majd@mellanox.com> Reviewed-by: Matan Barak <matanb@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/qp.c48
1 files changed, 2 insertions, 46 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/qp.c b/drivers/net/ethernet/mellanox/mlx5/core/qp.c
index c46024910736..def289375ecb 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/qp.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/qp.c
@@ -348,59 +348,15 @@ int mlx5_core_destroy_qp(struct mlx5_core_dev *dev,
348} 348}
349EXPORT_SYMBOL_GPL(mlx5_core_destroy_qp); 349EXPORT_SYMBOL_GPL(mlx5_core_destroy_qp);
350 350
351int mlx5_core_qp_modify(struct mlx5_core_dev *dev, enum mlx5_qp_state cur_state, 351int mlx5_core_qp_modify(struct mlx5_core_dev *dev, u16 operation,
352 enum mlx5_qp_state new_state,
353 struct mlx5_modify_qp_mbox_in *in, int sqd_event, 352 struct mlx5_modify_qp_mbox_in *in, int sqd_event,
354 struct mlx5_core_qp *qp) 353 struct mlx5_core_qp *qp)
355{ 354{
356 static const u16 optab[MLX5_QP_NUM_STATE][MLX5_QP_NUM_STATE] = {
357 [MLX5_QP_STATE_RST] = {
358 [MLX5_QP_STATE_RST] = MLX5_CMD_OP_2RST_QP,
359 [MLX5_QP_STATE_ERR] = MLX5_CMD_OP_2ERR_QP,
360 [MLX5_QP_STATE_INIT] = MLX5_CMD_OP_RST2INIT_QP,
361 },
362 [MLX5_QP_STATE_INIT] = {
363 [MLX5_QP_STATE_RST] = MLX5_CMD_OP_2RST_QP,
364 [MLX5_QP_STATE_ERR] = MLX5_CMD_OP_2ERR_QP,
365 [MLX5_QP_STATE_INIT] = MLX5_CMD_OP_INIT2INIT_QP,
366 [MLX5_QP_STATE_RTR] = MLX5_CMD_OP_INIT2RTR_QP,
367 },
368 [MLX5_QP_STATE_RTR] = {
369 [MLX5_QP_STATE_RST] = MLX5_CMD_OP_2RST_QP,
370 [MLX5_QP_STATE_ERR] = MLX5_CMD_OP_2ERR_QP,
371 [MLX5_QP_STATE_RTS] = MLX5_CMD_OP_RTR2RTS_QP,
372 },
373 [MLX5_QP_STATE_RTS] = {
374 [MLX5_QP_STATE_RST] = MLX5_CMD_OP_2RST_QP,
375 [MLX5_QP_STATE_ERR] = MLX5_CMD_OP_2ERR_QP,
376 [MLX5_QP_STATE_RTS] = MLX5_CMD_OP_RTS2RTS_QP,
377 },
378 [MLX5_QP_STATE_SQD] = {
379 [MLX5_QP_STATE_RST] = MLX5_CMD_OP_2RST_QP,
380 [MLX5_QP_STATE_ERR] = MLX5_CMD_OP_2ERR_QP,
381 },
382 [MLX5_QP_STATE_SQER] = {
383 [MLX5_QP_STATE_RST] = MLX5_CMD_OP_2RST_QP,
384 [MLX5_QP_STATE_ERR] = MLX5_CMD_OP_2ERR_QP,
385 [MLX5_QP_STATE_RTS] = MLX5_CMD_OP_SQERR2RTS_QP,
386 },
387 [MLX5_QP_STATE_ERR] = {
388 [MLX5_QP_STATE_RST] = MLX5_CMD_OP_2RST_QP,
389 [MLX5_QP_STATE_ERR] = MLX5_CMD_OP_2ERR_QP,
390 }
391 };
392
393 struct mlx5_modify_qp_mbox_out out; 355 struct mlx5_modify_qp_mbox_out out;
394 int err = 0; 356 int err = 0;
395 u16 op;
396
397 if (cur_state >= MLX5_QP_NUM_STATE || new_state >= MLX5_QP_NUM_STATE ||
398 !optab[cur_state][new_state])
399 return -EINVAL;
400 357
401 memset(&out, 0, sizeof(out)); 358 memset(&out, 0, sizeof(out));
402 op = optab[cur_state][new_state]; 359 in->hdr.opcode = cpu_to_be16(operation);
403 in->hdr.opcode = cpu_to_be16(op);
404 in->qpn = cpu_to_be32(qp->qpn); 360 in->qpn = cpu_to_be32(qp->qpn);
405 err = mlx5_cmd_exec(dev, in, sizeof(*in), &out, sizeof(out)); 361 err = mlx5_cmd_exec(dev, in, sizeof(*in), &out, sizeof(out));
406 if (err) 362 if (err)