net/mlx4_core: Introduce nic_info new flag in QUERY_FUNC_CAP
authorHadar Hen Zion <hadarh@mellanox.com>
Thu, 19 Dec 2013 19:20:11 +0000 (21:20 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Dec 2013 00:04:43 +0000 (19:04 -0500)
Set nic_info field in QUERY_FUNC_CAP, which designates
supplementary NIC information is provided by the hypervisor.
When set, the following fields are valid: nic_num_rings,
nic_indirection_tbl_sz, cur_mac and phys_port_id.

Signed-off-by: Hadar Hen Zion <hadarh@mellanox.com>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/fw.c
drivers/net/ethernet/mellanox/mlx4/fw.h

index 58ca7de..bfe91ae 100644 (file)
@@ -217,10 +217,15 @@ int mlx4_QUERY_FUNC_CAP_wrapper(struct mlx4_dev *dev, int slave,
 
 #define QUERY_FUNC_CAP_FLAGS1_FORCE_MAC                0x40
 #define QUERY_FUNC_CAP_FLAGS1_FORCE_VLAN       0x80
+#define QUERY_FUNC_CAP_FLAGS1_NIC_INFO                 0x10
 
 #define QUERY_FUNC_CAP_FLAGS0_FORCE_PHY_WQE_GID 0x80
 
        if (vhcr->op_modifier == 1) {
+               /* Set nic_info bit to mark new fields support */
+               field  = QUERY_FUNC_CAP_FLAGS1_NIC_INFO;
+               MLX4_PUT(outbox->buf, field, QUERY_FUNC_CAP_FLAGS1_OFFSET);
+
                field = vhcr->in_modifier; /* phys-port = logical-port */
                MLX4_PUT(outbox->buf, field, QUERY_FUNC_CAP_PHYS_PORT_OFFSET);
 
@@ -385,15 +390,15 @@ int mlx4_QUERY_FUNC_CAP(struct mlx4_dev *dev, u32 gen_or_port,
                goto out;
        }
 
+       MLX4_GET(func_cap->flags1, outbox, QUERY_FUNC_CAP_FLAGS1_OFFSET);
        if (dev->caps.port_type[gen_or_port] == MLX4_PORT_TYPE_ETH) {
-               MLX4_GET(field, outbox, QUERY_FUNC_CAP_FLAGS1_OFFSET);
-               if (field & QUERY_FUNC_CAP_FLAGS1_FORCE_VLAN) {
+               if (func_cap->flags1 & QUERY_FUNC_CAP_FLAGS1_OFFSET) {
                        mlx4_err(dev, "VLAN is enforced on this port\n");
                        err = -EPROTONOSUPPORT;
                        goto out;
                }
 
-               if (field & QUERY_FUNC_CAP_FLAGS1_FORCE_MAC) {
+               if (func_cap->flags1 & QUERY_FUNC_CAP_FLAGS1_FORCE_MAC) {
                        mlx4_err(dev, "Force mac is enabled on this port\n");
                        err = -EPROTONOSUPPORT;
                        goto out;
index a0a368b..9d95298 100644 (file)
@@ -140,6 +140,7 @@ struct mlx4_func_cap {
        u32     qp1_proxy_qpn;
        u8      physical_port;
        u8      port_flags;
+       u8      flags1;
 };
 
 struct mlx4_adapter {