aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-03-11 09:34:03 +0100
committerAleksander Morgado <aleksander@aleksander.es>2021-03-17 09:39:10 +0100
commit8f3df02ba14297ba1fd84e56225dcf7625a83240 (patch)
treed818fe38cb4585357345537d99671a5317ba55ed
parent2d374b1c41ab3412101dee8600d4424b94900f23 (diff)
broadband-modem-mbim: report up to 256 multiplexed bearers
As defined in the MBIM protocol (session id 0 to 255).
-rw-r--r--src/mm-broadband-modem-mbim.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index baae397b..241a6dc6 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -1990,6 +1990,28 @@ modem_create_bearer (MMIfaceModem *self,
}
/*****************************************************************************/
+/* Create Bearer List (Modem interface) */
+
+static MMBearerList *
+modem_create_bearer_list (MMIfaceModem *self)
+{
+ 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 defined by the MBIM protocol */
+ n_multiplexed = (MBIM_DEVICE_SESSION_ID_MAX - MBIM_DEVICE_SESSION_ID_MIN + 1);
+ mm_obj_dbg (self, "allowed up to %u active multiplexed bearers", n_multiplexed);
+
+ /* by default, no multiplexing support */
+ return mm_bearer_list_new (n, n_multiplexed);
+}
+
+/*****************************************************************************/
/* Create SIM (Modem interface) */
static MMBaseSim *
@@ -5803,9 +5825,10 @@ iface_modem_init (MMIfaceModem *iface)
iface->set_primary_sim_slot_finish = mm_shared_qmi_set_primary_sim_slot_finish;
#endif
- /* Create MBIM-specific bearer */
+ /* Create MBIM-specific bearer and bearer list */
iface->create_bearer = modem_create_bearer;
iface->create_bearer_finish = modem_create_bearer_finish;
+ iface->create_bearer_list = modem_create_bearer_list;
/* SIM hot swapping */
iface->setup_sim_hot_swap = modem_setup_sim_hot_swap;