diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 90b5780d..d2bfd913 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -8462,6 +8462,59 @@ enabling_started (MMBroadbandModem *self, ctx); } +/*****************************************************************************/ +/* First registration checks */ + +static void +modem_3gpp_run_registration_checks_ready (MMIfaceModem3gpp *self, + GAsyncResult *res) +{ + GError *error = NULL; + + if (!mm_iface_modem_3gpp_run_registration_checks_finish (self, res, &error)) { + mm_warn ("Initial 3GPP registration check failed: %s", error->message); + g_error_free (error); + return; + } + mm_dbg ("Initial 3GPP registration checks finished"); +} + +static void +modem_cdma_run_registration_checks_ready (MMIfaceModemCdma *self, + GAsyncResult *res) +{ + GError *error = NULL; + + if (!mm_iface_modem_cdma_run_registration_checks_finish (self, res, &error)) { + mm_warn ("Initial CDMA registration check failed: %s", error->message); + g_error_free (error); + return; + } + mm_dbg ("Initial CDMA registration checks finished"); +} + +static gboolean +schedule_initial_registration_checks_cb (MMBroadbandModem *self) +{ + if (mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self))) + mm_iface_modem_3gpp_run_registration_checks (MM_IFACE_MODEM_3GPP (self), + (GAsyncReadyCallback) modem_3gpp_run_registration_checks_ready, + NULL); + if (mm_iface_modem_is_cdma (MM_IFACE_MODEM (self))) + mm_iface_modem_cdma_run_registration_checks (MM_IFACE_MODEM_CDMA (self), + (GAsyncReadyCallback) modem_cdma_run_registration_checks_ready, + NULL); + /* We got a full reference, so balance it out here */ + g_object_unref (self); + return FALSE; +} + +static void +schedule_initial_registration_checks (MMBroadbandModem *self) +{ + g_idle_add ((GSourceFunc) schedule_initial_registration_checks_cb, g_object_ref (self)); +} + /*****************************************************************************/ typedef enum { @@ -9173,6 +9226,16 @@ enabling_step (EnablingContext *ctx) case ENABLING_STEP_LAST: ctx->enabled = TRUE; + + /* Once all interfaces have been enabled, trigger registration checks in + * 3GPP and CDMA modems. We have to do this at this point so that e.g. + * location interface gets proper registration related info reported. + * + * We do this in an idle so that we don't mess up the logs at this point + * with the new requests being triggered. + */ + schedule_initial_registration_checks (ctx->self); + /* All enabled without errors! */ g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); enabling_context_complete_and_free (ctx); diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c index 199b880f..c8f3c2e7 100644 --- a/src/mm-iface-modem-3gpp.c +++ b/src/mm-iface-modem-3gpp.c @@ -1551,7 +1551,6 @@ typedef enum { ENABLING_STEP_ENABLE_UNSOLICITED_EVENTS, ENABLING_STEP_SETUP_UNSOLICITED_REGISTRATION_EVENTS, ENABLING_STEP_ENABLE_UNSOLICITED_REGISTRATION_EVENTS, - ENABLING_STEP_RUN_REGISTRATION_CHECKS, ENABLING_STEP_LAST } EnablingStep; @@ -1689,25 +1688,6 @@ enable_unsolicited_registration_events_ready (MMIfaceModem3gpp *self, interface_enabling_step (ctx); } -static void -run_all_registration_checks_ready (MMIfaceModem3gpp *self, - GAsyncResult *res, - EnablingContext *ctx) -{ - GError *error = NULL; - - mm_iface_modem_3gpp_run_registration_checks_finish (self, res, &error); - if (error) { - g_simple_async_result_take_error (ctx->result, error); - enabling_context_complete_and_free (ctx); - return; - } - - /* Go on to next step */ - ctx->step++; - interface_enabling_step (ctx); -} - static void interface_enabling_step (EnablingContext *ctx) { @@ -1782,13 +1762,6 @@ interface_enabling_step (EnablingContext *ctx) ctx->step++; } - case ENABLING_STEP_RUN_REGISTRATION_CHECKS: - mm_iface_modem_3gpp_run_registration_checks ( - ctx->self, - (GAsyncReadyCallback)run_all_registration_checks_ready, - ctx); - return; - case ENABLING_STEP_LAST: /* We are done without errors! */ g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); diff --git a/src/mm-iface-modem-cdma.c b/src/mm-iface-modem-cdma.c index 853f1dbc..67d360a1 100644 --- a/src/mm-iface-modem-cdma.c +++ b/src/mm-iface-modem-cdma.c @@ -1414,7 +1414,6 @@ typedef enum { ENABLING_STEP_FIRST, ENABLING_STEP_SETUP_UNSOLICITED_EVENTS, ENABLING_STEP_ENABLE_UNSOLICITED_EVENTS, - ENABLING_STEP_RUN_REGISTRATION_CHECKS, ENABLING_STEP_PERIODIC_REGISTRATION_CHECKS, ENABLING_STEP_LAST } EnablingStep; @@ -1499,24 +1498,6 @@ enable_unsolicited_events_ready (MMIfaceModemCdma *self, interface_enabling_step (ctx); } -static void -run_registration_checks_ready (MMIfaceModemCdma *self, - GAsyncResult *res, - EnablingContext *ctx) -{ - GError *error = NULL; - - if (!mm_iface_modem_cdma_run_registration_checks_finish (self, res, &error)) { - g_simple_async_result_take_error (ctx->result, error); - enabling_context_complete_and_free (ctx); - return; - } - - /* Go on to next step */ - ctx->step++; - interface_enabling_step (ctx); -} - static void interface_enabling_step (EnablingContext *ctx) { @@ -1553,12 +1534,6 @@ interface_enabling_step (EnablingContext *ctx) /* Fall down to next step */ ctx->step++; - case ENABLING_STEP_RUN_REGISTRATION_CHECKS: - mm_iface_modem_cdma_run_registration_checks (ctx->self, - (GAsyncReadyCallback)run_registration_checks_ready, - ctx); - return; - case ENABLING_STEP_PERIODIC_REGISTRATION_CHECKS: periodic_registration_check_enable (ctx->self); /* Fall down to next step */