aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-broadband-modem-qmi.c26
-rw-r--r--src/mm-modem-helpers-qmi.c58
-rw-r--r--src/mm-modem-helpers-qmi.h2
3 files changed, 86 insertions, 0 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 11f697a1..929722e5 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -316,7 +316,33 @@ load_current_capabilities_get_system_selection_preference_ready (QmiClientNas *c
output,
&mode_preference_mask,
NULL)) {
+ QmiNasBandPreference band_preference_mask;
+
mm_dbg ("Mode preference not reported in system selection preference");
+
+ if (qmi_message_nas_get_system_selection_preference_output_get_band_preference (
+ output,
+ &band_preference_mask,
+ NULL)) {
+ gchar *str;
+
+ str = qmi_nas_band_preference_build_string_from_mask (band_preference_mask);
+ ctx->capabilities = mm_modem_capability_from_qmi_band_preference (band_preference_mask);
+ mm_dbg ("%s bands reported in system selection preference: '%s'",
+ ctx->capabilities == MM_MODEM_CAPABILITY_NONE ? "Unsupported" : "Valid",
+ str);
+ g_free (str);
+
+ /* Just the presence of the LTE band preference tells us it's LTE */
+ if (qmi_message_nas_get_system_selection_preference_output_get_lte_band_preference (
+ output,
+ NULL,
+ NULL)) {
+ mm_dbg ("LTE band preference found");
+ ctx->capabilities |= MM_MODEM_CAPABILITY_LTE;
+ }
+ } else
+ mm_dbg ("Band preference not reported in system selection preference");
} else {
gchar *str;
diff --git a/src/mm-modem-helpers-qmi.c b/src/mm-modem-helpers-qmi.c
index 9a986cac..af1a390c 100644
--- a/src/mm-modem-helpers-qmi.c
+++ b/src/mm-modem-helpers-qmi.c
@@ -687,6 +687,64 @@ mm_modem_capability_from_qmi_radio_technology_preference (QmiNasRadioTechnologyP
/*****************************************************************************/
+#define ALL_3GPP2_BANDS \
+ (QMI_NAS_BAND_PREFERENCE_BC_0_A_SYSTEM | \
+ QMI_NAS_BAND_PREFERENCE_BC_0_B_SYSTEM | \
+ QMI_NAS_BAND_PREFERENCE_BC_1_ALL_BLOCKS | \
+ QMI_NAS_BAND_PREFERENCE_BC_2 | \
+ QMI_NAS_BAND_PREFERENCE_BC_3_A_SYSTEM | \
+ QMI_NAS_BAND_PREFERENCE_BC_4_ALL_BLOCKS | \
+ QMI_NAS_BAND_PREFERENCE_BC_5_ALL_BLOCKS | \
+ QMI_NAS_BAND_PREFERENCE_BC_6 | \
+ QMI_NAS_BAND_PREFERENCE_BC_7 | \
+ QMI_NAS_BAND_PREFERENCE_BC_8 | \
+ QMI_NAS_BAND_PREFERENCE_BC_9 | \
+ QMI_NAS_BAND_PREFERENCE_BC_10 | \
+ QMI_NAS_BAND_PREFERENCE_BC_11 | \
+ QMI_NAS_BAND_PREFERENCE_BC_12 | \
+ QMI_NAS_BAND_PREFERENCE_BC_14 | \
+ QMI_NAS_BAND_PREFERENCE_BC_15 | \
+ QMI_NAS_BAND_PREFERENCE_BC_16 | \
+ QMI_NAS_BAND_PREFERENCE_BC_17 | \
+ QMI_NAS_BAND_PREFERENCE_BC_18 | \
+ QMI_NAS_BAND_PREFERENCE_BC_19)
+
+#define ALL_3GPP_BANDS \
+ (QMI_NAS_BAND_PREFERENCE_GSM_DCS_1800 | \
+ QMI_NAS_BAND_PREFERENCE_GSM_900_EXTENDED | \
+ QMI_NAS_BAND_PREFERENCE_GSM_900_PRIMARY | \
+ QMI_NAS_BAND_PREFERENCE_GSM_450 | \
+ QMI_NAS_BAND_PREFERENCE_GSM_480 | \
+ QMI_NAS_BAND_PREFERENCE_GSM_750 | \
+ QMI_NAS_BAND_PREFERENCE_GSM_850 | \
+ QMI_NAS_BAND_PREFERENCE_GSM_900_RAILWAYS | \
+ QMI_NAS_BAND_PREFERENCE_GSM_PCS_1900 | \
+ QMI_NAS_BAND_PREFERENCE_WCDMA_2100 | \
+ QMI_NAS_BAND_PREFERENCE_WCDMA_PCS_1900 | \
+ QMI_NAS_BAND_PREFERENCE_WCDMA_DCS_1800 | \
+ QMI_NAS_BAND_PREFERENCE_WCDMA_1700_US | \
+ QMI_NAS_BAND_PREFERENCE_WCDMA_850_US | \
+ QMI_NAS_BAND_PREFERENCE_WCDMA_800 | \
+ QMI_NAS_BAND_PREFERENCE_WCDMA_2600 | \
+ QMI_NAS_BAND_PREFERENCE_WCDMA_900 | \
+ QMI_NAS_BAND_PREFERENCE_WCDMA_1700_JAPAN)
+
+MMModemCapability
+mm_modem_capability_from_qmi_band_preference (QmiNasBandPreference qmi)
+{
+ MMModemCapability caps = MM_MODEM_CAPABILITY_NONE;
+
+ if (qmi & ALL_3GPP_BANDS)
+ caps |= MM_MODEM_CAPABILITY_GSM_UMTS;
+
+ if (qmi & ALL_3GPP2_BANDS)
+ caps |= MM_MODEM_CAPABILITY_CDMA_EVDO;
+
+ return caps;
+}
+
+/*****************************************************************************/
+
MMModemMode
mm_modem_mode_from_qmi_gsm_wcdma_acquisition_order_preference (QmiNasGsmWcdmaAcquisitionOrderPreference qmi)
{
diff --git a/src/mm-modem-helpers-qmi.h b/src/mm-modem-helpers-qmi.h
index 8bdf6e67..9c3b1966 100644
--- a/src/mm-modem-helpers-qmi.h
+++ b/src/mm-modem-helpers-qmi.h
@@ -56,6 +56,8 @@ MMModemCapability mm_modem_capability_from_qmi_rat_mode_preference (QmiNasRatMod
MMModemCapability mm_modem_capability_from_qmi_radio_technology_preference (QmiNasRadioTechnologyPreference qmi);
+MMModemCapability mm_modem_capability_from_qmi_band_preference (QmiNasBandPreference qmi);
+
MMModemMode mm_modem_mode_from_qmi_gsm_wcdma_acquisition_order_preference (QmiNasGsmWcdmaAcquisitionOrderPreference qmi);
QmiNasGsmWcdmaAcquisitionOrderPreference mm_modem_mode_to_qmi_gsm_wcdma_acquisition_order_preference (MMModemMode mode);