aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-broadband-modem-qmi.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 1dd3295b..9d508216 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -360,24 +360,35 @@ static MMBearerList *
modem_create_bearer_list (MMIfaceModem *self)
{
MMPortQmi *port;
- guint n;
- guint n_multiplexed;
-
- /* The maximum number of available/connected modems is guessed from
- * the size of the data ports list. */
- n = g_list_length (mm_base_modem_peek_data_ports (MM_BASE_MODEM (self)));
- mm_obj_dbg (self, "allowed up to %u active bearers", n);
-
- /* The maximum number of multiplexed links is retrieved from the
- * MMPortQmi */
+ guint n = 0;
+ guint n_multiplexed = 0;
port = mm_broadband_modem_qmi_peek_port_qmi (MM_BROADBAND_MODEM_QMI (self));
if (!port) {
+ /* this should not happen, just fallback to defaults */
mm_obj_warn (self, "no port to query maximum number of supported network links");
- n_multiplexed = 0;
} else {
- n_multiplexed = mm_port_qmi_get_max_multiplexed_links (port);
- mm_obj_dbg (self, "allowed up to %u active multiplexed bearers", n_multiplexed);
+ MMPortQmiKernelDataMode kernel_data_modes;
+
+ kernel_data_modes = mm_port_qmi_get_kernel_data_modes (port);
+
+ /* There are setups, like IPA, where there is ONLY multiplexing expected
+ * and supported. In those cases, there isn't any expected non-multiplexed
+ * bearer */
+
+ if (kernel_data_modes & (QMI_WDA_LINK_LAYER_PROTOCOL_RAW_IP | MM_PORT_QMI_KERNEL_DATA_MODE_802_3)) {
+ /* The maximum number of available/connected modems is guessed from
+ * the size of the data ports list. */
+ n = g_list_length (mm_base_modem_peek_data_ports (MM_BASE_MODEM (self)));
+ mm_obj_dbg (self, "allowed up to %u active bearers", n);
+ }
+
+ if (kernel_data_modes & (MM_PORT_QMI_KERNEL_DATA_MODE_MUX_RMNET | MM_PORT_QMI_KERNEL_DATA_MODE_MUX_QMIWWAN)) {
+ /* The maximum number of multiplexed links is retrieved from the
+ * MMPortQmi */
+ n_multiplexed = mm_port_qmi_get_max_multiplexed_links (port);
+ mm_obj_dbg (self, "allowed up to %u active multiplexed bearers", n_multiplexed);
+ }
}
/* by default, no multiplexing support */