aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2023-05-24 08:38:15 +0000
committerAleksander Morgado <aleksandermj@chromium.org>2023-05-25 08:19:37 +0000
commit3424c1768893a21f5a968d56a002bc28960b78e4 (patch)
tree9dc7d4d112f6551894bddec8fc5112109769d019 /src
parentb7d94a4daa584efe3c9bcf5b5be9d4cd39cd8d6f (diff)
broadband-modem-mbim: run explicit packet service query
When running the 3GPP registration checks (e.g. after reaching enabled state, or when synchronizing state after a quick suspend/resume), we also update the current packet service state explicitly, without needing to fully rely on the indications.
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem-mbim.c36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index fbf54a89..58eba40e 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -6369,11 +6369,37 @@ modem_3gpp_run_registration_checks_finish (MMIfaceModem3gpp *self,
}
static void
+packet_service_query_ready (MbimDevice *device,
+ GAsyncResult *res,
+ GTask *task)
+{
+ MMBroadbandModemMbim *self;
+ g_autoptr(MbimMessage) response = NULL;
+ g_autoptr(GError) error = NULL;
+
+ self = g_task_get_source_object (task);
+
+ response = mbim_device_command_finish (device, res, &error);
+ if (response &&
+ (mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error) ||
+ g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_FAILURE))) {
+ g_autoptr(GError) inner_error = NULL;
+
+ if (!common_process_packet_service (self, device, response, NULL, NULL, &inner_error))
+ mm_obj_warn (self, "%s", inner_error->message);
+ }
+
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
+}
+
+static void
register_state_query_ready (MbimDevice *device,
GAsyncResult *res,
GTask *task)
{
g_autoptr(MbimMessage) response = NULL;
+ g_autoptr(MbimMessage) message = NULL;
MMBroadbandModemMbim *self;
GError *error = NULL;
MbimRegisterState register_state;
@@ -6438,8 +6464,14 @@ register_state_query_ready (MbimDevice *device,
provider_id,
provider_name);
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
+ /* Now queue packet service state update */
+ message = mbim_message_packet_service_query_new (NULL);
+ mbim_device_command (device,
+ message,
+ 10,
+ NULL,
+ (GAsyncReadyCallback)packet_service_query_ready,
+ task);
}
static void