u16 max_iface_count;
        u16 max_mcc_count;
        u16 max_evt_qs;
+       u16 max_nic_evt_qs;     /* NIC's share of evt qs */
        u32 if_cap_flags;
        u32 vf_if_cap_flags;    /* VF if capability flags */
        u32 flags;
 #define be_max_txqs(adapter)           (adapter->res.max_tx_qs)
 #define be_max_prio_txqs(adapter)      (adapter->res.max_prio_tx_qs)
 #define be_max_rxqs(adapter)           (adapter->res.max_rx_qs)
-#define be_max_eqs(adapter)            (adapter->res.max_evt_qs)
+/* Max number of EQs available for the function (NIC + RoCE (if enabled)) */
+#define be_max_func_eqs(adapter)       (adapter->res.max_evt_qs)
+/* Max number of EQs available avaialble only for NIC */
+#define be_max_nic_eqs(adapter)                (adapter->res.max_nic_evt_qs)
 #define be_if_cap_flags(adapter)       (adapter->res.if_cap_flags)
 #define be_max_pf_pool_rss_tables(adapter)     \
                                (adapter->pool_res.max_rss_tables)
        /* If no RSS, need atleast the one def RXQ */
        u16 num = max_t(u16, be_max_rss(adapter), 1);
 
-       num = min(num, be_max_eqs(adapter));
+       num = min(num, be_max_nic_eqs(adapter));
        return min_t(u16, num, num_online_cpus());
 }
 
 
        int i, num_vec;
        struct device *dev = &adapter->pdev->dev;
 
-       /* If RoCE is supported, program the max number of NIC vectors that
-        * may be configured via set-channels, along with vectors needed for
-        * RoCe. Else, just program the number we'll use initially.
+       /* If RoCE is supported, program the max number of vectors that
+        * could be used for NIC and RoCE, else, just program the number
+        * we'll use initially.
         */
        if (be_roce_supported(adapter))
-               num_vec = min_t(int, 2 * be_max_eqs(adapter),
+               num_vec = min_t(int, be_max_func_eqs(adapter),
                                2 * num_online_cpus());
        else
                num_vec = adapter->cfg_num_qs;
        struct be_resources res = {0};
        int status;
 
-       if (BEx_chip(adapter)) {
-               BEx_get_resources(adapter, &res);
-               adapter->res = res;
-       }
-
        /* For Lancer, SH etc read per-function resource limits from FW.
         * GET_FUNC_CONFIG returns per function guaranteed limits.
         * GET_PROFILE_CONFIG returns PCI-E related limits PF-pool limits
         */
-       if (!BEx_chip(adapter)) {
+       if (BEx_chip(adapter)) {
+               BEx_get_resources(adapter, &res);
+       } else {
                status = be_cmd_get_func_config(adapter, &res);
                if (status)
                        return status;
                if (res.max_rss_qs && res.max_rss_qs == res.max_rx_qs &&
                    !(res.if_cap_flags & BE_IF_FLAGS_DEFQ_RSS))
                        res.max_rss_qs -= 1;
-
-               /* If RoCE may be enabled stash away half the EQs for RoCE */
-               if (be_roce_supported(adapter))
-                       res.max_evt_qs /= 2;
-               adapter->res = res;
        }
 
+       /* If RoCE is supported stash away half the EQs for RoCE */
+       res.max_nic_evt_qs = be_roce_supported(adapter) ?
+                               res.max_evt_qs / 2 : res.max_evt_qs;
+       adapter->res = res;
+
        /* If FW supports RSS default queue, then skip creating non-RSS
         * queue for non-IP traffic.
         */
 
        dev_info(dev, "Max: txqs %d, rxqs %d, rss %d, eqs %d, vfs %d\n",
                 be_max_txqs(adapter), be_max_rxqs(adapter),
-                be_max_rss(adapter), be_max_eqs(adapter),
+                be_max_rss(adapter), be_max_nic_eqs(adapter),
                 be_max_vfs(adapter));
        dev_info(dev, "Max: uc-macs %d, mc-macs %d, vlans %d\n",
                 be_max_uc(adapter), be_max_mc(adapter),