hw->subsystem_vendor_id = pdev->subsystem_vendor;
        hw->subsystem_device_id = pdev->subsystem_device;
 
-       /* Set capability flags */
+       /* Set common capability flags and settings */
        rss = min_t(int, IXGBE_MAX_RSS_INDICES, num_online_cpus());
        adapter->ring_feature[RING_F_RSS].limit = rss;
+       adapter->flags2 |= IXGBE_FLAG2_RSC_CAPABLE;
+       adapter->flags2 |= IXGBE_FLAG2_RSC_ENABLED;
+       adapter->ring_feature[RING_F_FDIR].limit = IXGBE_MAX_FDIR_INDICES;
+       adapter->max_q_vectors = MAX_Q_VECTORS_82599;
+       adapter->atr_sample_rate = 20;
+       adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_64K;
+#ifdef CONFIG_IXGBE_DCA
+       adapter->flags |= IXGBE_FLAG_DCA_CAPABLE;
+#endif
+#ifdef IXGBE_FCOE
+       adapter->flags |= IXGBE_FLAG_FCOE_CAPABLE;
+       adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED;
+#ifdef CONFIG_IXGBE_DCB
+       /* Default traffic class to use for FCoE */
+       adapter->fcoe.up = IXGBE_FCOE_DEFTC;
+#endif /* CONFIG_IXGBE_DCB */
+#endif /* IXGBE_FCOE */
+
+       /* Set MAC specific capability flags and exceptions */
        switch (hw->mac.type) {
        case ixgbe_mac_82598EB:
+               adapter->flags2 &= ~IXGBE_FLAG2_RSC_CAPABLE;
+               adapter->flags2 &= ~IXGBE_FLAG2_RSC_ENABLED;
+
                if (hw->device_id == IXGBE_DEV_ID_82598AT)
                        adapter->flags |= IXGBE_FLAG_FAN_FAIL_CAPABLE;
+
                adapter->max_q_vectors = MAX_Q_VECTORS_82598;
+               adapter->ring_feature[RING_F_FDIR].limit = 0;
+               adapter->atr_sample_rate = 0;
+               adapter->fdir_pballoc = 0;
+#ifdef IXGBE_FCOE
+               adapter->flags &= ~IXGBE_FLAG_FCOE_CAPABLE;
+               adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED;
+#ifdef CONFIG_IXGBE_DCB
+               adapter->fcoe.up = 0;
+#endif /* IXGBE_DCB */
+#endif /* IXGBE_FCOE */
+               break;
+       case ixgbe_mac_82599EB:
+               if (hw->device_id == IXGBE_DEV_ID_82599_T3_LOM)
+                       adapter->flags2 |= IXGBE_FLAG2_TEMP_SENSOR_CAPABLE;
                break;
        case ixgbe_mac_X540:
                fwsm = IXGBE_READ_REG(hw, IXGBE_FWSM);
                if (fwsm & IXGBE_FWSM_TS_ENABLED)
                        adapter->flags2 |= IXGBE_FLAG2_TEMP_SENSOR_CAPABLE;
-       case ixgbe_mac_82599EB:
-               adapter->max_q_vectors = MAX_Q_VECTORS_82599;
-               adapter->flags2 |= IXGBE_FLAG2_RSC_CAPABLE;
-               adapter->flags2 |= IXGBE_FLAG2_RSC_ENABLED;
-               if (hw->device_id == IXGBE_DEV_ID_82599_T3_LOM)
-                       adapter->flags2 |= IXGBE_FLAG2_TEMP_SENSOR_CAPABLE;
-               /* Flow Director hash filters enabled */
-               adapter->atr_sample_rate = 20;
-               adapter->ring_feature[RING_F_FDIR].limit =
-                                                        IXGBE_MAX_FDIR_INDICES;
-               adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_64K;
-#ifdef IXGBE_FCOE
-               adapter->flags |= IXGBE_FLAG_FCOE_CAPABLE;
-               adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED;
-#ifdef CONFIG_IXGBE_DCB
-               /* Default traffic class to use for FCoE */
-               adapter->fcoe.up = IXGBE_FCOE_DEFTC;
-#endif
-#endif /* IXGBE_FCOE */
                break;
        default:
                break;