|
@@ -669,6 +669,28 @@ out:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+int mlx4_QUERY_DEV_CAP_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
+ struct mlx4_vhcr *vhcr,
|
|
|
+ struct mlx4_cmd_mailbox *inbox,
|
|
|
+ struct mlx4_cmd_mailbox *outbox,
|
|
|
+ struct mlx4_cmd_info *cmd)
|
|
|
+{
|
|
|
+ int err = 0;
|
|
|
+ u8 field;
|
|
|
+
|
|
|
+ err = mlx4_cmd_box(dev, 0, outbox->dma, 0, 0, MLX4_CMD_QUERY_DEV_CAP,
|
|
|
+ MLX4_CMD_TIME_CLASS_A, MLX4_CMD_NATIVE);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+
|
|
|
+ /* For guests, report Blueflame disabled */
|
|
|
+ MLX4_GET(field, outbox->buf, QUERY_DEV_CAP_BF_OFFSET);
|
|
|
+ field &= 0x7f;
|
|
|
+ MLX4_PUT(outbox->buf, field, QUERY_DEV_CAP_BF_OFFSET);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
int mlx4_QUERY_PORT_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
struct mlx4_vhcr *vhcr,
|
|
|
struct mlx4_cmd_mailbox *inbox,
|
|
@@ -860,6 +882,9 @@ int mlx4_QUERY_FW(struct mlx4_dev *dev)
|
|
|
((fw_ver & 0xffff0000ull) >> 16) |
|
|
|
((fw_ver & 0x0000ffffull) << 16);
|
|
|
|
|
|
+ if (mlx4_is_slave(dev))
|
|
|
+ goto out;
|
|
|
+
|
|
|
MLX4_GET(lg, outbox, QUERY_FW_PPF_ID);
|
|
|
dev->caps.function = lg;
|
|
|
|
|
@@ -927,6 +952,27 @@ out:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+int mlx4_QUERY_FW_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
+ struct mlx4_vhcr *vhcr,
|
|
|
+ struct mlx4_cmd_mailbox *inbox,
|
|
|
+ struct mlx4_cmd_mailbox *outbox,
|
|
|
+ struct mlx4_cmd_info *cmd)
|
|
|
+{
|
|
|
+ u8 *outbuf;
|
|
|
+ int err;
|
|
|
+
|
|
|
+ outbuf = outbox->buf;
|
|
|
+ err = mlx4_cmd_box(dev, 0, outbox->dma, 0, 0, MLX4_CMD_QUERY_FW,
|
|
|
+ MLX4_CMD_TIME_CLASS_A, MLX4_CMD_NATIVE);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+
|
|
|
+ /* for slaves, zero out everything except FW version */
|
|
|
+ outbuf[0] = outbuf[1] = 0;
|
|
|
+ memset(&outbuf[8], 0, QUERY_FW_OUT_SIZE - 8);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static void get_board_id(void *vsd, char *board_id)
|
|
|
{
|
|
|
int i;
|