diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-07-11 15:24:33 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-07-11 15:24:33 +0200 |
commit | 5cc5bfbb97d0e8c4a70fe18ffbc68db9d5704ddb (patch) | |
tree | 5c5e05e1b20f2a01e73d09104d6110c6ad84e5d9 /src | |
parent | dc09d3350c5a21750c6609d14681d458098c737a (diff) |
broadband-modem-mbim: allow disabling the use of the Intel Firmware Update service
Not all manufacturers expect this service to be used for the simple
purpose of reseting the modem.
It works with Sierra Wireless devices (e.g. EM7345,
XMM7160_V1.1_MODEM_01.1349.12), but it doesn't work with Cinterion
devices (e.g. mPLS62-w, XMM7160_V1.1_MBIM_NAND_ADAPT_R).
So allow plugins to disable its use entirely.
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 33 | ||||
-rw-r--r-- | src/mm-broadband-modem-mbim.h | 1 |
2 files changed, 28 insertions, 6 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index 0b48ae0d..5c7e28d7 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -90,13 +90,14 @@ typedef enum { PROCESS_NOTIFICATION_FLAG_PROVISIONED_CONTEXTS = 1 << 9, } ProcessNotificationFlag; -#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED enum { PROP_0, +#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED PROP_QMI_UNSUPPORTED, +#endif + PROP_INTEL_FIRMWARE_UPDATE_UNSUPPORTED, PROP_LAST }; -#endif struct _MMBroadbandModemMbimPrivate { /* Queried and cached capabilities */ @@ -146,6 +147,8 @@ struct _MMBroadbandModemMbimPrivate { /* Flag when QMI-based capability/mode switching is in use */ gboolean qmi_capability_and_mode_switching; #endif + + gboolean intel_firmware_update_unsupported; }; /*****************************************************************************/ @@ -2271,6 +2274,10 @@ query_device_services_ready (MbimDevice *device, } if (service == MBIM_SERVICE_INTEL_FIRMWARE_UPDATE) { + if (self->priv->intel_firmware_update_unsupported) { + mm_obj_dbg (self, "Intel firmware update service is explicitly ignored"); + continue; + } for (j = 0; j < device_services[i]->cids_count; j++) { if (device_services[i]->cids[j] == MBIM_CID_INTEL_FIRMWARE_UPDATE_MODEM_REBOOT) { mm_obj_dbg (self, "Intel reset is supported"); @@ -6104,7 +6111,7 @@ messaging_create_sms (MMIfaceModemMessaging *self) /*****************************************************************************/ -#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED + static void set_property (GObject *object, guint prop_id, @@ -6114,9 +6121,14 @@ set_property (GObject *object, MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (object); switch (prop_id) { +#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED case PROP_QMI_UNSUPPORTED: self->priv->qmi_unsupported = g_value_get_boolean (value); break; +#endif + case PROP_INTEL_FIRMWARE_UPDATE_UNSUPPORTED: + self->priv->intel_firmware_update_unsupported = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -6132,15 +6144,19 @@ get_property (GObject *object, MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (object); switch (prop_id) { +#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED case PROP_QMI_UNSUPPORTED: g_value_set_boolean (value, self->priv->qmi_unsupported); break; +#endif + case PROP_INTEL_FIRMWARE_UPDATE_UNSUPPORTED: + g_value_set_boolean (value, self->priv->intel_firmware_update_unsupported); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } -#endif MMBroadbandModemMbim * mm_broadband_modem_mbim_new (const gchar *device, @@ -6514,10 +6530,8 @@ mm_broadband_modem_mbim_class_init (MMBroadbandModemMbimClass *klass) klass->peek_port_mbim_for_data = peek_port_mbim_for_data; -#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED object_class->set_property = set_property; object_class->get_property = get_property; -#endif object_class->dispose = dispose; object_class->finalize = finalize; @@ -6537,4 +6551,11 @@ mm_broadband_modem_mbim_class_init (MMBroadbandModemMbimClass *klass) FALSE, G_PARAM_READWRITE)); #endif + + g_object_class_install_property (object_class, PROP_INTEL_FIRMWARE_UPDATE_UNSUPPORTED, + g_param_spec_boolean (MM_BROADBAND_MODEM_MBIM_INTEL_FIRMWARE_UPDATE_UNSUPPORTED, + "Intel Firmware Update service unsupported", + "TRUE when the Intel Firmware Update service should not be considered.", + FALSE, + G_PARAM_READWRITE)); } diff --git a/src/mm-broadband-modem-mbim.h b/src/mm-broadband-modem-mbim.h index 66a12f2a..d2c5d7c6 100644 --- a/src/mm-broadband-modem-mbim.h +++ b/src/mm-broadband-modem-mbim.h @@ -30,6 +30,7 @@ typedef struct _MMBroadbandModemMbimClass MMBroadbandModemMbimClass; typedef struct _MMBroadbandModemMbimPrivate MMBroadbandModemMbimPrivate; #define MM_BROADBAND_MODEM_MBIM_QMI_UNSUPPORTED "broadband-modem-mbim-qmi-unsupported" +#define MM_BROADBAND_MODEM_MBIM_INTEL_FIRMWARE_UPDATE_UNSUPPORTED "broadband-modem-mbim-intel-firmware-update-unsupported" struct _MMBroadbandModemMbim { MMBroadbandModem parent; |