be2net: query FW to check if EVB is enabled
authorKalesh Purayil <kalesh.purayil@avagotech.com>
Fri, 10 Jul 2015 09:32:44 +0000 (05:32 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sat, 11 Jul 2015 06:24:29 +0000 (23:24 -0700)
The current code assumes that bridge functionality (EVB) in the adapter
is enabled only when SR-IOV is enabled. This is not always true.
This patch uses the GET_HSW_CONFIG FW cmd to query this from the FW.

Signed-off-by: Kalesh AP <kalesh.purayil@avagotech.com>
Signed-off-by: Sathya Perla <sathya.perla@avagotech.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_cmds.h
drivers/net/ethernet/emulex/benet/be_main.c

index 2716e6f..f0a92b7 100644 (file)
@@ -1758,6 +1758,7 @@ struct be_cmd_req_set_mac_list {
 /*********************** HSW Config ***********************/
 #define PORT_FWD_TYPE_VEPA             0x3
 #define PORT_FWD_TYPE_VEB              0x2
+#define PORT_FWD_TYPE_PASSTHRU         0x1
 
 #define ENABLE_MAC_SPOOFCHK            0x2
 #define DISABLE_MAC_SPOOFCHK           0x3
index 635c62f..f21c56a 100644 (file)
@@ -5073,9 +5073,6 @@ static int be_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
        int status = 0;
        u8 hsw_mode;
 
-       if (!sriov_enabled(adapter))
-               return 0;
-
        /* BE and Lancer chips support VEB mode only */
        if (BEx_chip(adapter) || lancer_chip(adapter)) {
                hsw_mode = PORT_FWD_TYPE_VEB;
@@ -5085,6 +5082,9 @@ static int be_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
                                               NULL);
                if (status)
                        return 0;
+
+               if (hsw_mode == PORT_FWD_TYPE_PASSTHRU)
+                       return 0;
        }
 
        return ndo_dflt_bridge_getlink(skb, pid, seq, dev,