@@ -534,6 +534,32 @@ static int mlx4_RESOURCE_wrapper(struct mlx4_dev *dev, int slave, struct mlx4_vh
return 0;
}
+static int mlx4_DMA_wrapper(struct mlx4_dev *dev, int slave,
+ struct mlx4_vhcr *vhcr,
+ struct mlx4_cmd_mailbox *inbox,
+ struct mlx4_cmd_mailbox *outbox)
+{
+ u64 in_param = inbox ? inbox->dma : vhcr->in_param;
+
+ in_param |= (u64) slave;
+ return mlx4_cmd(dev, in_param, vhcr->in_modifier,
+ vhcr->op_modifier, vhcr->op, MLX4_CMD_TIME_CLASS_C);
+}
+
+static int mlx4_DMA_outbox_wrapper(struct mlx4_dev *dev, int slave,
+ struct mlx4_vhcr *vhcr,
+ struct mlx4_cmd_mailbox *inbox,
+ struct mlx4_cmd_mailbox *outbox)
+{
+ u64 in_param = inbox ? inbox->dma : vhcr->in_param;
+ u64 out_param = outbox ? outbox->dma : vhcr->out_param;
+
+ in_param |= (u64) slave;
+ return mlx4_cmd_box(dev, in_param, out_param,
+ vhcr->in_modifier, vhcr->op_modifier, vhcr->op,
+ MLX4_CMD_TIME_CLASS_C);
+}
+
static struct mlx4_cmd_info {
u16 opcode;
bool has_inbox;
@@ -608,7 +634,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /*need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_NOP,
@@ -657,7 +683,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL,
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_QUERY_MPT,
@@ -703,10 +729,10 @@ static struct mlx4_cmd_info {
{
.opcode = MLX4_CMD_HW2SW_EQ,
.has_inbox = false,
- .has_outbox = false,
+ .has_outbox = true,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_outbox_wrapper
},
{
.opcode = MLX4_CMD_QUERY_EQ,
@@ -722,7 +748,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_HW2SW_CQ,
@@ -730,7 +756,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_QUERY_CQ,
@@ -754,7 +780,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_HW2SW_SRQ,
@@ -786,7 +812,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_INIT2RTR_QP,
@@ -794,7 +820,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_RTR2RTS_QP,
@@ -802,7 +828,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_RTS2RTS_QP,
@@ -810,7 +836,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_SQERR2RTS_QP,
@@ -818,7 +844,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_2ERR_QP,
@@ -826,7 +852,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_RTS2SQD_QP,
@@ -834,7 +860,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_SQD2SQD_QP,
@@ -842,7 +868,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_SQD2RTS_QP,
@@ -850,7 +876,7 @@ static struct mlx4_cmd_info {
.has_outbox = false,
.out_is_imm = false,
.verify = NULL, /* need verifier */
- .wrapper = NULL
+ .wrapper = mlx4_DMA_wrapper
},
{
.opcode = MLX4_CMD_2RST_QP,