diff options
author | Aleksander Morgado <aleksandermj@chromium.org> | 2024-02-14 13:16:42 +0000 |
---|---|---|
committer | Aleksander Morgado <aleksandermj@chromium.org> | 2024-02-15 21:08:57 +0000 |
commit | 8dffb76f1ea37b608b509f8ff5dab0b1dbe8f773 (patch) | |
tree | b78b3b211e229d633c8fc57c6b4d266d78e269c1 /src/mm-bearer-mbim.c | |
parent | b313a603aa0eb9ad2d3315aee2762cbb4eb25651 (diff) |
broadband-modem-mbim: allow normalizing the nw error value
Required for modems that don't provide a correct 3GPP network error
value.
Diffstat (limited to 'src/mm-bearer-mbim.c')
-rw-r--r-- | src/mm-bearer-mbim.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c index bb0b80d5..33a1b8f1 100644 --- a/src/mm-bearer-mbim.c +++ b/src/mm-bearer-mbim.c @@ -927,6 +927,7 @@ connect_set_ready (MbimDevice *device, error = g_steal_pointer (&inner_error); } else { /* Report the IP type we asked for and the one returned by the modem */ + nw_error = mm_broadband_modem_mbim_normalize_nw_error (ctx->modem, nw_error); mm_obj_dbg (self, "session ID '%u': %s (requested IP type: %s, activated IP type: %s, nw error: %s)", session_id, mbim_activation_state_get_string (activation_state), @@ -1604,15 +1605,17 @@ typedef enum { } DisconnectStep; typedef struct { - MMPortMbim *mbim; - guint session_id; - DisconnectStep step; + MMPortMbim *mbim; + MMBroadbandModemMbim *modem; + guint session_id; + DisconnectStep step; } DisconnectContext; static void disconnect_context_free (DisconnectContext *ctx) { g_object_unref (ctx->mbim); + g_object_unref (ctx->modem); g_slice_free (DisconnectContext, ctx); } @@ -1732,6 +1735,7 @@ disconnect_set_ready (MbimDevice *device, goto out; } + nw_error = mm_broadband_modem_mbim_normalize_nw_error (ctx->modem, nw_error); if (g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_FAILURE) && parsed_result && nw_error != 0) { g_assert (!inner_error); g_error_free (error); @@ -1801,9 +1805,10 @@ disconnect (MMBaseBearer *_self, GAsyncReadyCallback callback, gpointer user_data) { - MMBearerMbim *self = MM_BEARER_MBIM (_self); - DisconnectContext *ctx; - GTask *task; + MMBearerMbim *self = MM_BEARER_MBIM (_self); + DisconnectContext *ctx; + GTask *task; + g_autoptr(MMBaseModem) modem = NULL; task = g_task_new (self, NULL, callback, user_data); @@ -1815,11 +1820,17 @@ disconnect (MMBaseBearer *_self, return; } + g_object_get (self, + MM_BASE_BEARER_MODEM, &modem, + NULL); + g_assert (modem); + mm_obj_dbg (self, "launching disconnection on data port (%s/%s)", mm_port_subsys_get_string (mm_port_get_subsys (self->priv->data)), mm_port_get_device (self->priv->data)); ctx = g_slice_new0 (DisconnectContext); + ctx->modem = MM_BROADBAND_MODEM_MBIM (g_object_ref (modem)); ctx->mbim = g_object_ref (self->priv->mbim); ctx->session_id = self->priv->session_id; ctx->step = DISCONNECT_STEP_FIRST; |