result |= SUPPORTED_1000baseKX_Full;
                if (cap & (1 << MC_CMD_PHY_CAP_10000FDX_LBN))
                        result |= SUPPORTED_10000baseKX4_Full;
+               if (cap & (1 << MC_CMD_PHY_CAP_40000FDX_LBN))
+                       result |= SUPPORTED_40000baseKR4_Full;
                break;
 
        case MC_CMD_MEDIA_XFP:
                result |= SUPPORTED_FIBRE;
                break;
 
+       case MC_CMD_MEDIA_QSFP_PLUS:
+               result |= SUPPORTED_FIBRE;
+               if (cap & (1 << MC_CMD_PHY_CAP_40000FDX_LBN))
+                       result |= SUPPORTED_40000baseCR4_Full;
+               break;
+
        case MC_CMD_MEDIA_BASE_T:
                result |= SUPPORTED_TP;
                if (cap & (1 << MC_CMD_PHY_CAP_10HDX_LBN))
                result |= (1 << MC_CMD_PHY_CAP_1000FDX_LBN);
        if (cap & (SUPPORTED_10000baseT_Full | SUPPORTED_10000baseKX4_Full))
                result |= (1 << MC_CMD_PHY_CAP_10000FDX_LBN);
+       if (cap & (SUPPORTED_40000baseCR4_Full | SUPPORTED_40000baseKR4_Full))
+               result |= (1 << MC_CMD_PHY_CAP_40000FDX_LBN);
        if (cap & SUPPORTED_Pause)
                result |= (1 << MC_CMD_PHY_CAP_PAUSE_LBN);
        if (cap & SUPPORTED_Asym_Pause)
 
        case MC_CMD_MEDIA_XFP:
        case MC_CMD_MEDIA_SFP_PLUS:
+       case MC_CMD_MEDIA_QSFP_PLUS:
                return PORT_FIBRE;
 
        case MC_CMD_MEDIA_BASE_T: