broadband-modem-qmi: update current capabilities loading logic
Changes being: * Don't rely on the band preference TLVs presence. The band preference TLVs are always given, even if the modem doesn't support the specific capability right away. E.g. a GSM/UMTS/LTE modem configured with 'gsm-umts' capability (no 'lte') still shows the LTE band preference TLV in the SSP responses. * Don't automatically add LTE as current capability. We needed this when we were not able to change capabilities, so that we didn't lose the ability to set 4G mode as allowed.
This commit is contained in:
@@ -444,21 +444,10 @@ load_current_capabilities_get_system_selection_preference_ready (QmiClientNas *c
|
||||
mm_dbg ("Couldn't get system selection preference: %s", error->message);
|
||||
g_error_free (error);
|
||||
} else {
|
||||
/* Get Mode Preference */
|
||||
qmi_message_nas_get_system_selection_preference_output_get_mode_preference (
|
||||
output,
|
||||
&ctx->capabilities_context.nas_ssp_mode_preference_mask,
|
||||
NULL);
|
||||
/* Get Band Preference */
|
||||
qmi_message_nas_get_system_selection_preference_output_get_band_preference (
|
||||
output,
|
||||
&ctx->capabilities_context.nas_ssp_band_preference_mask,
|
||||
NULL);
|
||||
/* Get LTE Band Preference */
|
||||
qmi_message_nas_get_system_selection_preference_output_get_lte_band_preference (
|
||||
output,
|
||||
&ctx->capabilities_context.nas_ssp_lte_band_preference_mask,
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (output)
|
||||
|
||||
@@ -1225,8 +1225,6 @@ mm_modem_capability_from_qmi_capabilities_context (MMQmiCapabilitiesContext *ctx
|
||||
{
|
||||
MMModemCapability tmp = MM_MODEM_CAPABILITY_NONE;
|
||||
gchar *nas_ssp_mode_preference_str;
|
||||
gchar *nas_ssp_band_preference_str;
|
||||
gchar *nas_ssp_lte_band_preference_str;
|
||||
gchar *nas_tp_str;
|
||||
gchar *dms_capabilities_str;
|
||||
gchar *tmp_str;
|
||||
@@ -1235,12 +1233,6 @@ mm_modem_capability_from_qmi_capabilities_context (MMQmiCapabilitiesContext *ctx
|
||||
* and if not available it falls back to using Band Preference TLVs */
|
||||
if (ctx->nas_ssp_mode_preference_mask)
|
||||
tmp = mm_modem_capability_from_qmi_rat_mode_preference (ctx->nas_ssp_mode_preference_mask);
|
||||
else if (ctx->nas_ssp_band_preference_mask) {
|
||||
tmp = mm_modem_capability_from_qmi_band_preference (ctx->nas_ssp_band_preference_mask);
|
||||
/* Just the presence of the LTE band preference tells us it's LTE */
|
||||
if (ctx->nas_ssp_lte_band_preference_mask)
|
||||
tmp |= MM_MODEM_CAPABILITY_LTE;
|
||||
}
|
||||
|
||||
/* If no value retrieved from SSP, check TP. We only process TP
|
||||
* values if not 'auto'. */
|
||||
@@ -1259,34 +1251,20 @@ mm_modem_capability_from_qmi_capabilities_context (MMQmiCapabilitiesContext *ctx
|
||||
else
|
||||
tmp &= ctx->dms_capabilities;
|
||||
|
||||
/* Modems which have 'LTE' capability reported by DMS will always have it
|
||||
* reported in 'current capabilities', even if it may not be currently
|
||||
* allowed (i.e. not selected in 'allowed-modes') */
|
||||
if (ctx->dms_capabilities & MM_MODEM_CAPABILITY_LTE)
|
||||
tmp |= MM_MODEM_CAPABILITY_LTE;
|
||||
|
||||
/* Log about the logic applied */
|
||||
nas_ssp_mode_preference_str = qmi_nas_rat_mode_preference_build_string_from_mask (ctx->nas_ssp_mode_preference_mask);
|
||||
nas_ssp_band_preference_str = qmi_nas_band_preference_build_string_from_mask (ctx->nas_ssp_band_preference_mask);
|
||||
nas_ssp_lte_band_preference_str = qmi_nas_lte_band_preference_build_string_from_mask (ctx->nas_ssp_band_preference_mask);
|
||||
nas_tp_str = qmi_nas_radio_technology_preference_build_string_from_mask (ctx->nas_tp_mask);
|
||||
dms_capabilities_str = mm_modem_capability_build_string_from_mask (ctx->dms_capabilities);
|
||||
tmp_str = mm_modem_capability_build_string_from_mask (tmp);
|
||||
mm_dbg ("Current capabilities built: '%s'\n"
|
||||
" SSP mode preference: '%s'\n"
|
||||
" SSP band preference: '%s'\n"
|
||||
" SSP LTE band preference: '%s'\n"
|
||||
" TP: '%s'\n"
|
||||
" DMS Capabilities: '%s'",
|
||||
tmp_str,
|
||||
nas_ssp_mode_preference_str ? nas_ssp_mode_preference_str : "unknown",
|
||||
nas_ssp_band_preference_str ? nas_ssp_band_preference_str : "unknown",
|
||||
nas_ssp_lte_band_preference_str ? nas_ssp_lte_band_preference_str : "unknown",
|
||||
nas_tp_str ? nas_tp_str : "unknown",
|
||||
dms_capabilities_str);
|
||||
g_free (nas_ssp_mode_preference_str);
|
||||
g_free (nas_ssp_band_preference_str);
|
||||
g_free (nas_ssp_lte_band_preference_str);
|
||||
g_free (nas_tp_str);
|
||||
g_free (dms_capabilities_str);
|
||||
g_free (tmp_str);
|
||||
|
||||
@@ -100,8 +100,6 @@ QmiWdsAuthentication mm_bearer_allowed_auth_to_qmi_authentication (MMBearerAllow
|
||||
typedef struct {
|
||||
/* NAS System Selection Preference */
|
||||
QmiNasRatModePreference nas_ssp_mode_preference_mask;
|
||||
QmiNasBandPreference nas_ssp_band_preference_mask;
|
||||
QmiNasLteBandPreference nas_ssp_lte_band_preference_mask;
|
||||
/* NAS Technology Preference */
|
||||
QmiNasRadioTechnologyPreference nas_tp_mask;
|
||||
/* DMS Capabilities */
|
||||
|
||||
@@ -64,33 +64,23 @@ test_uml290 (void)
|
||||
/* QCDM -> CDMA/EVDO */
|
||||
ctx.nas_ssp_mode_preference_mask = (QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1X |
|
||||
QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1XEVDO);
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_tp_mask = 0; /* Unsupported */
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS |
|
||||
MM_MODEM_CAPABILITY_CDMA_EVDO |
|
||||
MM_MODEM_CAPABILITY_LTE);
|
||||
test_capabilities_expected (&ctx,
|
||||
(MM_MODEM_CAPABILITY_CDMA_EVDO |
|
||||
MM_MODEM_CAPABILITY_LTE));
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
|
||||
/* QCDM -> GSM/UMTS */
|
||||
ctx.nas_ssp_mode_preference_mask = (QMI_NAS_RAT_MODE_PREFERENCE_GSM |
|
||||
QMI_NAS_RAT_MODE_PREFERENCE_UMTS);
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_tp_mask = 0; /* Unsupported */
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS |
|
||||
MM_MODEM_CAPABILITY_CDMA_EVDO |
|
||||
MM_MODEM_CAPABILITY_LTE);
|
||||
test_capabilities_expected (&ctx,
|
||||
(MM_MODEM_CAPABILITY_GSM_UMTS |
|
||||
MM_MODEM_CAPABILITY_LTE));
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
|
||||
/* QCDM -> Automatic */
|
||||
ctx.nas_ssp_mode_preference_mask = 0;
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_tp_mask = 0; /* Unsupported */
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS |
|
||||
MM_MODEM_CAPABILITY_CDMA_EVDO |
|
||||
@@ -117,8 +107,6 @@ test_adu960s (void)
|
||||
MMQmiCapabilitiesContext ctx;
|
||||
|
||||
ctx.nas_ssp_mode_preference_mask = 0;
|
||||
ctx.nas_ssp_band_preference_mask = 0;
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0;
|
||||
ctx.nas_tp_mask = 0; /* Unsupported */
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS |
|
||||
MM_MODEM_CAPABILITY_CDMA_EVDO |
|
||||
@@ -144,10 +132,8 @@ test_gobi1k_gsm (void)
|
||||
MMQmiCapabilitiesContext ctx;
|
||||
|
||||
ctx.nas_ssp_mode_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_tp_mask = QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AUTO;
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_GSM_UMTS;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
}
|
||||
|
||||
@@ -166,10 +152,8 @@ test_gobi1k_cdma (void)
|
||||
MMQmiCapabilitiesContext ctx;
|
||||
|
||||
ctx.nas_ssp_mode_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_tp_mask = QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AUTO;
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_CDMA_EVDO;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
}
|
||||
|
||||
@@ -191,26 +175,20 @@ test_gobi2k_gsm (void)
|
||||
|
||||
/* QCDM -> Automatic */
|
||||
ctx.nas_ssp_mode_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_tp_mask = QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AUTO;
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_GSM_UMTS;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
|
||||
/* QCDM -> UMTS only */
|
||||
ctx.nas_ssp_mode_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_tp_mask = (QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP | QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA);
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_GSM_UMTS;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
|
||||
/* QCDM -> GPRS only */
|
||||
ctx.nas_ssp_mode_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_tp_mask = (QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP | QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AMPS_OR_GSM);
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_GSM_UMTS;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
}
|
||||
|
||||
@@ -232,26 +210,20 @@ test_gobi2k_cdma (void)
|
||||
|
||||
/* QCDM -> Automatic */
|
||||
ctx.nas_ssp_mode_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_tp_mask = QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AUTO;
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_CDMA_EVDO;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
|
||||
/* QCDM -> CDMA only */
|
||||
ctx.nas_ssp_mode_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_tp_mask = (QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP2 | QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA);
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_CDMA_EVDO;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
|
||||
/* QCDM -> EVDO only */
|
||||
ctx.nas_ssp_mode_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* Unsupported */
|
||||
ctx.nas_tp_mask = (QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP2 | QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_HDR);
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_CDMA_EVDO;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
}
|
||||
|
||||
@@ -278,26 +250,20 @@ test_gobi3k_gsm (void)
|
||||
QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1XEVDO |
|
||||
QMI_NAS_RAT_MODE_PREFERENCE_GSM |
|
||||
QMI_NAS_RAT_MODE_PREFERENCE_UMTS);
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_tp_mask = QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AUTO;
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_GSM_UMTS;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
|
||||
/* QCDM -> GSM only */
|
||||
ctx.nas_ssp_mode_preference_mask = (QMI_NAS_RAT_MODE_PREFERENCE_GSM);
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_tp_mask = (QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP | QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AMPS_OR_GSM);
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_GSM_UMTS;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
|
||||
/* QCDM -> UMTS only */
|
||||
ctx.nas_ssp_mode_preference_mask = (QMI_NAS_RAT_MODE_PREFERENCE_UMTS);
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_tp_mask = (QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP | QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA);
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_GSM_UMTS;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_GSM_UMTS);
|
||||
}
|
||||
|
||||
@@ -324,26 +290,20 @@ test_gobi3k_cdma (void)
|
||||
QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1XEVDO |
|
||||
QMI_NAS_RAT_MODE_PREFERENCE_GSM |
|
||||
QMI_NAS_RAT_MODE_PREFERENCE_UMTS);
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_tp_mask = QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AUTO;
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_CDMA_EVDO;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
|
||||
/* QCDM -> CDMA only */
|
||||
ctx.nas_ssp_mode_preference_mask = (QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1X);
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_tp_mask = (QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP2 | QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA);
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_CDMA_EVDO;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
|
||||
/* QCDM -> EVDO only */
|
||||
ctx.nas_ssp_mode_preference_mask = (QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1XEVDO);
|
||||
ctx.nas_ssp_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_ssp_lte_band_preference_mask = 0; /* TODO: Add proper value */
|
||||
ctx.nas_tp_mask = (QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP2 | QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_HDR);
|
||||
ctx.dms_capabilities = (MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
ctx.dms_capabilities = MM_MODEM_CAPABILITY_CDMA_EVDO;
|
||||
test_capabilities_expected (&ctx, MM_MODEM_CAPABILITY_CDMA_EVDO);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user