aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-bearer-qmi.c28
-rw-r--r--src/mm-broadband-modem-qmi.c26
-rw-r--r--src/mm-broadband-modem-qmi.h8
-rw-r--r--src/mm-port-qmi.c8
-rw-r--r--src/mm-port-qmi.h8
5 files changed, 47 insertions, 31 deletions
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
index 79433def..a71d6593 100644
--- a/src/mm-bearer-qmi.c
+++ b/src/mm-bearer-qmi.c
@@ -492,8 +492,9 @@ typedef struct {
ConnectStep step;
MMPort *data;
MMPortQmi *qmi;
- QmiSioPort sio_port;
- gboolean sio_port_failed;
+
+ MMQmiDataEndpoint endpoint;
+ gboolean sio_port_failed;
gint profile_id;
MMBearerIpMethod ip_method;
@@ -1820,12 +1821,12 @@ connect_context_step (GTask *task)
case CONNECT_STEP_BIND_DATA_PORT_IPV4:
/* If SIO port given, bind client to it */
- if (!ctx->sio_port_failed && ctx->sio_port != QMI_SIO_PORT_NONE) {
+ if (!ctx->sio_port_failed && ctx->endpoint.sio_port != QMI_SIO_PORT_NONE) {
g_autoptr(QmiMessageWdsBindDataPortInput) input = NULL;
- mm_obj_dbg (self, "binding to data port: %s", qmi_sio_port_get_string (ctx->sio_port));
+ mm_obj_dbg (self, "binding to data port: %s", qmi_sio_port_get_string (ctx->endpoint.sio_port));
input = qmi_message_wds_bind_data_port_input_new ();
- qmi_message_wds_bind_data_port_input_set_data_port (input, ctx->sio_port, NULL);
+ qmi_message_wds_bind_data_port_input_set_data_port (input, ctx->endpoint.sio_port, NULL);
qmi_client_wds_bind_data_port (ctx->client_ipv4,
input,
10,
@@ -1843,8 +1844,8 @@ connect_context_step (GTask *task)
input = qmi_message_wds_bind_mux_data_port_input_new ();
qmi_message_wds_bind_mux_data_port_input_set_endpoint_info (
input,
- mm_port_qmi_get_endpoint_type (ctx->qmi),
- mm_port_qmi_get_endpoint_interface_number (ctx->qmi),
+ ctx->endpoint.type,
+ ctx->endpoint.interface_number,
NULL);
qmi_message_wds_bind_mux_data_port_input_set_mux_id (input, ctx->mux_id, NULL);
@@ -1956,12 +1957,12 @@ connect_context_step (GTask *task)
case CONNECT_STEP_BIND_DATA_PORT_IPV6:
/* If SIO port given, bind client to it */
- if (!ctx->sio_port_failed && ctx->sio_port != QMI_SIO_PORT_NONE) {
+ if (!ctx->sio_port_failed && ctx->endpoint.sio_port != QMI_SIO_PORT_NONE) {
g_autoptr(QmiMessageWdsBindDataPortInput) input = NULL;
- mm_obj_dbg (self, "binding to data port: %s", qmi_sio_port_get_string (ctx->sio_port));
+ mm_obj_dbg (self, "binding to data port: %s", qmi_sio_port_get_string (ctx->endpoint.sio_port));
input = qmi_message_wds_bind_data_port_input_new ();
- qmi_message_wds_bind_data_port_input_set_data_port (input, ctx->sio_port, NULL);
+ qmi_message_wds_bind_data_port_input_set_data_port (input, ctx->endpoint.sio_port, NULL);
qmi_client_wds_bind_data_port (ctx->client_ipv6,
input,
10,
@@ -1979,8 +1980,8 @@ connect_context_step (GTask *task)
input = qmi_message_wds_bind_mux_data_port_input_new ();
qmi_message_wds_bind_mux_data_port_input_set_endpoint_info (
input,
- mm_port_qmi_get_endpoint_type (ctx->qmi),
- mm_port_qmi_get_endpoint_interface_number (ctx->qmi),
+ ctx->endpoint.type,
+ ctx->endpoint.interface_number,
NULL);
qmi_message_wds_bind_mux_data_port_input_set_mux_id (input, ctx->mux_id, NULL);
@@ -2257,7 +2258,6 @@ _connect (MMBaseBearer *_self,
ctx->self = g_object_ref (self);
ctx->modem = g_object_ref (modem);
ctx->mux_id = QMI_DEVICE_MUX_ID_UNBOUND;
- ctx->sio_port = QMI_SIO_PORT_NONE;
ctx->step = CONNECT_STEP_FIRST;
ctx->ip_method = MM_BEARER_IP_METHOD_UNKNOWN;
g_task_set_task_data (task, ctx, (GDestroyNotify)connect_context_free);
@@ -2272,7 +2272,7 @@ _connect (MMBaseBearer *_self,
}
/* Each data port has a single QMI port associated */
- ctx->qmi = mm_broadband_modem_qmi_get_port_qmi_for_data (MM_BROADBAND_MODEM_QMI (modem), ctx->data, &ctx->sio_port, &error);
+ ctx->qmi = mm_broadband_modem_qmi_get_port_qmi_for_data (MM_BROADBAND_MODEM_QMI (modem), ctx->data, &ctx->endpoint, &error);
if (!ctx->qmi) {
g_task_return_error (task, error);
g_object_unref (task);
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 9619acb6..89edd3bc 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -248,14 +248,14 @@ mm_broadband_modem_qmi_peek_port_qmi (MMBroadbandModemQmi *self)
MMPortQmi *
mm_broadband_modem_qmi_get_port_qmi_for_data (MMBroadbandModemQmi *self,
MMPort *data,
- QmiSioPort *out_sio_port,
+ MMQmiDataEndpoint *out_endpoint,
GError **error)
{
MMPortQmi *qmi_port;
g_assert (MM_IS_BROADBAND_MODEM_QMI (self));
- qmi_port = mm_broadband_modem_qmi_peek_port_qmi_for_data (self, data, out_sio_port, error);
+ qmi_port = mm_broadband_modem_qmi_peek_port_qmi_for_data (self, data, out_endpoint, error);
return (qmi_port ?
MM_PORT_QMI (g_object_ref (qmi_port)) :
NULL);
@@ -264,7 +264,7 @@ mm_broadband_modem_qmi_get_port_qmi_for_data (MMBroadbandModemQmi *self,
static MMPortQmi *
peek_port_qmi_for_data_mhi (MMBroadbandModemQmi *self,
MMPort *data,
- QmiSioPort *out_sio_port,
+ MMQmiDataEndpoint *out_endpoint,
GError **error)
{
MMPortQmi *found = NULL;
@@ -277,8 +277,8 @@ peek_port_qmi_for_data_mhi (MMBroadbandModemQmi *self,
MM_CORE_ERROR_NOT_FOUND,
"Couldn't find associated QMI port for 'net/%s'",
mm_port_get_device (data));
- else if (out_sio_port)
- *out_sio_port = QMI_SIO_PORT_NONE;
+ else if (out_endpoint)
+ mm_port_qmi_get_endpoint_info (found, out_endpoint);
return found;
}
@@ -286,7 +286,7 @@ peek_port_qmi_for_data_mhi (MMBroadbandModemQmi *self,
static MMPortQmi *
peek_port_qmi_for_data_usb (MMBroadbandModemQmi *self,
MMPort *data,
- QmiSioPort *out_sio_port,
+ MMQmiDataEndpoint *out_endpoint,
GError **error)
{
GList *cdc_wdm_qmi_ports;
@@ -325,8 +325,8 @@ peek_port_qmi_for_data_usb (MMBroadbandModemQmi *self,
MM_CORE_ERROR_NOT_FOUND,
"Couldn't find associated QMI port for 'net/%s'",
mm_port_get_device (data));
- else if (out_sio_port)
- *out_sio_port = QMI_SIO_PORT_NONE;
+ else if (out_endpoint)
+ mm_port_qmi_get_endpoint_info (found, out_endpoint);
return found;
}
@@ -335,7 +335,7 @@ peek_port_qmi_for_data_usb (MMBroadbandModemQmi *self,
static MMPortQmi *
peek_port_qmi_for_data (MMBroadbandModemQmi *self,
MMPort *data,
- QmiSioPort *out_sio_port,
+ MMQmiDataEndpoint *out_endpoint,
GError **error)
{
const gchar *net_port_driver;
@@ -346,10 +346,10 @@ peek_port_qmi_for_data (MMBroadbandModemQmi *self,
net_port_driver = mm_kernel_device_get_driver (mm_port_peek_kernel_device (data));
if (!g_strcmp0 (net_port_driver, "qmi_wwan"))
- return peek_port_qmi_for_data_usb (self, data, out_sio_port, error);
+ return peek_port_qmi_for_data_usb (self, data, out_endpoint, error);
if (!g_strcmp0 (net_port_driver, "mhi_net"))
- return peek_port_qmi_for_data_mhi (self, data, out_sio_port, error);
+ return peek_port_qmi_for_data_mhi (self, data, out_endpoint, error);
g_set_error (error,
MM_CORE_ERROR,
@@ -363,12 +363,12 @@ peek_port_qmi_for_data (MMBroadbandModemQmi *self,
MMPortQmi *
mm_broadband_modem_qmi_peek_port_qmi_for_data (MMBroadbandModemQmi *self,
MMPort *data,
- QmiSioPort *out_sio_port,
+ MMQmiDataEndpoint *out_endpoint,
GError **error)
{
g_assert (MM_BROADBAND_MODEM_QMI_GET_CLASS (self)->peek_port_qmi_for_data);
- return MM_BROADBAND_MODEM_QMI_GET_CLASS (self)->peek_port_qmi_for_data (self, data, out_sio_port, error);
+ return MM_BROADBAND_MODEM_QMI_GET_CLASS (self)->peek_port_qmi_for_data (self, data, out_endpoint, error);
}
/*****************************************************************************/
diff --git a/src/mm-broadband-modem-qmi.h b/src/mm-broadband-modem-qmi.h
index 9b712109..e324d793 100644
--- a/src/mm-broadband-modem-qmi.h
+++ b/src/mm-broadband-modem-qmi.h
@@ -34,12 +34,12 @@ struct _MMBroadbandModemQmi {
MMBroadbandModemQmiPrivate *priv;
};
-struct _MMBroadbandModemQmiClass{
+struct _MMBroadbandModemQmiClass {
MMBroadbandModemClass parent;
MMPortQmi * (* peek_port_qmi_for_data) (MMBroadbandModemQmi *self,
MMPort *data,
- QmiSioPort *out_sio_port,
+ MMQmiDataEndpoint *out_endpoint,
GError **error);
};
@@ -55,12 +55,12 @@ MMBroadbandModemQmi *mm_broadband_modem_qmi_new (const gchar *device,
MMPortQmi *mm_broadband_modem_qmi_peek_port_qmi (MMBroadbandModemQmi *self);
MMPortQmi *mm_broadband_modem_qmi_peek_port_qmi_for_data (MMBroadbandModemQmi *self,
MMPort *data,
- QmiSioPort *out_sio_port,
+ MMQmiDataEndpoint *out_endpoint,
GError **error);
MMPortQmi *mm_broadband_modem_qmi_get_port_qmi (MMBroadbandModemQmi *self);
MMPortQmi *mm_broadband_modem_qmi_get_port_qmi_for_data (MMBroadbandModemQmi *self,
MMPort *data,
- QmiSioPort *out_sio_port,
+ MMQmiDataEndpoint *out_endpoint,
GError **error);
#endif /* MM_BROADBAND_MODEM_QMI_H */
diff --git a/src/mm-port-qmi.c b/src/mm-port-qmi.c
index 267c8991..b4001c9a 100644
--- a/src/mm-port-qmi.c
+++ b/src/mm-port-qmi.c
@@ -185,6 +185,14 @@ mm_port_qmi_get_endpoint_interface_number (MMPortQmi *self)
return self->priv->endpoint_interface_number;
}
+void
+mm_port_qmi_get_endpoint_info (MMPortQmi *self, MMQmiDataEndpoint *out_endpoint)
+{
+ out_endpoint->type = self->priv->endpoint_type;
+ out_endpoint->interface_number = self->priv->endpoint_interface_number;
+ out_endpoint->sio_port = QMI_SIO_PORT_NONE;
+}
+
/*****************************************************************************/
static void
diff --git a/src/mm-port-qmi.h b/src/mm-port-qmi.h
index 2e1afc8c..c177925c 100644
--- a/src/mm-port-qmi.h
+++ b/src/mm-port-qmi.h
@@ -128,8 +128,16 @@ QmiClient *mm_port_qmi_get_client (MMPortQmi *self,
QmiDevice *mm_port_qmi_peek_device (MMPortQmi *self);
+typedef struct {
+ QmiDataEndpointType type;
+ guint interface_number;
+ QmiSioPort sio_port;
+} MMQmiDataEndpoint;
+
QmiDataEndpointType mm_port_qmi_get_endpoint_type (MMPortQmi *self);
guint mm_port_qmi_get_endpoint_interface_number (MMPortQmi *self);
+void mm_port_qmi_get_endpoint_info (MMPortQmi *self,
+ MMQmiDataEndpoint *out_endpoint);
MMPortQmiKernelDataMode mm_port_qmi_get_kernel_data_modes (MMPortQmi *self);
QmiWdaLinkLayerProtocol mm_port_qmi_get_link_layer_protocol (MMPortQmi *self);