aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-07-11 15:24:33 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-07-11 15:24:33 +0200
commit5cc5bfbb97d0e8c4a70fe18ffbc68db9d5704ddb (patch)
tree5c5e05e1b20f2a01e73d09104d6110c6ad84e5d9
parentdc09d3350c5a21750c6609d14681d458098c737a (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.
-rw-r--r--src/mm-broadband-modem-mbim.c33
-rw-r--r--src/mm-broadband-modem-mbim.h1
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;