mlx4_core: Get rid of redundant ext_port_cap flags
[cascardo/linux.git] / drivers / infiniband / hw / mlx4 / main.c
index 18836cd..abce99e 100644 (file)
@@ -177,7 +177,7 @@ mlx4_ib_port_link_layer(struct ib_device *device, u8 port_num)
 {
        struct mlx4_dev *dev = to_mdev(device)->dev;
 
-       return dev->caps.port_mask & (1 << (port_num - 1)) ?
+       return dev->caps.port_mask[port_num] == MLX4_PORT_TYPE_IB ?
                IB_LINK_LAYER_INFINIBAND : IB_LINK_LAYER_ETHERNET;
 }
 
@@ -215,31 +215,28 @@ static int ib_link_query_port(struct ib_device *ibdev, u8 port,
 
                switch (ext_active_speed) {
                case 1:
-                       props->active_speed = 16; /* FDR */
+                       props->active_speed = IB_SPEED_FDR;
                        break;
                case 2:
-                       props->active_speed = 32; /* EDR */
+                       props->active_speed = IB_SPEED_EDR;
                        break;
                }
        }
 
        /* If reported active speed is QDR, check if is FDR-10 */
-       if (props->active_speed == 4) {
-               if (to_mdev(ibdev)->dev->caps.ext_port_cap[port] &
-                   MLX_EXT_PORT_CAP_FLAG_EXTENDED_PORT_INFO) {
-                       init_query_mad(in_mad);
-                       in_mad->attr_id = MLX4_ATTR_EXTENDED_PORT_INFO;
-                       in_mad->attr_mod = cpu_to_be32(port);
-
-                       err = mlx4_MAD_IFC(to_mdev(ibdev), 1, 1, port,
-                                          NULL, NULL, in_mad, out_mad);
-                       if (err)
-                               return err;
+       if (props->active_speed == IB_SPEED_QDR) {
+               init_query_mad(in_mad);
+               in_mad->attr_id = MLX4_ATTR_EXTENDED_PORT_INFO;
+               in_mad->attr_mod = cpu_to_be32(port);
 
-                       /* Checking LinkSpeedActive for FDR-10 */
-                       if (out_mad->data[15] & 0x1)
-                               props->active_speed = 8;
-               }
+               err = mlx4_MAD_IFC(to_mdev(ibdev), 1, 1, port,
+                                  NULL, NULL, in_mad, out_mad);
+               if (err)
+                       return err;
+
+               /* Checking LinkSpeedActive for FDR-10 */
+               if (out_mad->data[15] & 0x1)
+                       props->active_speed = IB_SPEED_FDR10;
        }
 
        return 0;
@@ -259,7 +256,7 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port,
        enum ib_mtu tmp;
 
        props->active_width     = IB_WIDTH_1X;
-       props->active_speed     = 4;
+       props->active_speed     = IB_SPEED_QDR;
        props->port_cap_flags   = IB_PORT_CM_SUP;
        props->gid_tbl_len      = to_mdev(ibdev)->dev->caps.gid_table_len[port];
        props->max_msg_sz       = to_mdev(ibdev)->dev->caps.max_msg_sz;
@@ -434,7 +431,7 @@ static int mlx4_ib_modify_device(struct ib_device *ibdev, int mask,
        memset(mailbox->buf, 0, 256);
        memcpy(mailbox->buf, props->node_desc, 64);
        mlx4_cmd(to_mdev(ibdev)->dev, mailbox->dma, 1, 0,
-                MLX4_CMD_SET_NODE, MLX4_CMD_TIME_CLASS_A);
+                MLX4_CMD_SET_NODE, MLX4_CMD_TIME_CLASS_A, MLX4_CMD_WRAPPED);
 
        mlx4_free_cmd_mailbox(to_mdev(ibdev)->dev, mailbox);
 
@@ -463,7 +460,7 @@ static int mlx4_SET_PORT(struct mlx4_ib_dev *dev, u8 port, int reset_qkey_viols,
        }
 
        err = mlx4_cmd(dev->dev, mailbox->dma, port, is_eth, MLX4_CMD_SET_PORT,
-                      MLX4_CMD_TIME_CLASS_B);
+                      MLX4_CMD_TIME_CLASS_B, MLX4_CMD_NATIVE);
 
        mlx4_free_cmd_mailbox(dev->dev, mailbox);
        return err;
@@ -899,7 +896,8 @@ static void update_gids_task(struct work_struct *work)
        memcpy(gids, gw->gids, sizeof gw->gids);
 
        err = mlx4_cmd(dev, mailbox->dma, MLX4_SET_PORT_GID_TABLE << 8 | gw->port,
-                      1, MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B);
+                      1, MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B,
+                      MLX4_CMD_NATIVE);
        if (err)
                printk(KERN_WARNING "set port command failed\n");
        else {
@@ -1074,6 +1072,11 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
 
        printk_once(KERN_INFO "%s", mlx4_ib_version);
 
+       if (mlx4_is_mfunc(dev)) {
+               printk(KERN_WARNING "IB not yet supported in SRIOV\n");
+               return NULL;
+       }
+
        mlx4_foreach_ib_transport_port(i, dev)
                num_ports++;