diff options
-rw-r--r-- | src/mm-base-modem.c | 10 | ||||
-rw-r--r-- | src/mm-port-qmi.c | 14 | ||||
-rw-r--r-- | src/mm-port-qmi.h | 3 |
3 files changed, 27 insertions, 0 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c index 54e28b0d..bb2e51dd 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -1440,6 +1440,16 @@ mm_base_modem_organize_ports (MMBaseModem *self, #if defined WITH_QMI if (qmi) { + /* The first item in the data list must be a net port, because + * QMI modems only expect net ports */ + g_assert (MM_IS_PORT_NET (self->priv->data->data)); + /* let the MMPortQmi know which net driver is being used, taken + * from the first item in the net port list */ + g_list_foreach (qmi, + (GFunc)mm_port_qmi_set_net_driver, + (gpointer) mm_kernel_device_get_driver ( + mm_port_peek_kernel_device ( + MM_PORT (self->priv->data->data)))); g_list_foreach (qmi, (GFunc)g_object_ref, NULL); self->priv->qmi = qmi; } diff --git a/src/mm-port-qmi.c b/src/mm-port-qmi.c index 759a9196..0bbcd5ed 100644 --- a/src/mm-port-qmi.c +++ b/src/mm-port-qmi.c @@ -40,6 +40,7 @@ struct _MMPortQmiPrivate { gboolean in_progress; QmiDevice *qmi_device; GList *services; + gchar *net_driver; /* endpoint info */ gulong endpoint_info_signal_id; QmiDataEndpointType endpoint_type; @@ -2279,6 +2280,17 @@ mm_port_qmi_is_open (MMPortQmi *self) /*****************************************************************************/ +void +mm_port_qmi_set_net_driver (MMPortQmi *self, + const gchar *net_driver) +{ + g_assert (MM_IS_PORT_QMI (self)); + g_assert (!self->priv->net_driver); + self->priv->net_driver = g_strdup (net_driver); +} + +/*****************************************************************************/ + typedef struct { QmiDevice *qmi_device; } PortQmiCloseContext; @@ -2440,6 +2452,8 @@ dispose (GObject *object) /* Clear device object */ g_clear_object (&self->priv->qmi_device); + g_clear_pointer (&self->priv->net_driver, g_free); + G_OBJECT_CLASS (mm_port_qmi_parent_class)->dispose (object); } diff --git a/src/mm-port-qmi.h b/src/mm-port-qmi.h index 61369a43..efdc2ad4 100644 --- a/src/mm-port-qmi.h +++ b/src/mm-port-qmi.h @@ -65,6 +65,9 @@ gboolean mm_port_qmi_close_finish (MMPortQmi *self, GAsyncResult *res, GError **error); +void mm_port_qmi_set_net_driver (MMPortQmi *self, + const gchar *net_driver); + typedef enum { MM_PORT_QMI_FLAG_DEFAULT = 0, MM_PORT_QMI_FLAG_WDS_IPV4 = 100, |