aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2020-10-22 12:32:06 +0200
committerAleksander Morgado <aleksander@aleksander.es>2020-11-09 18:41:57 +0100
commit85d549ef0066f1a47d15c40e4857033bea82e4c2 (patch)
treec8f83cd557f6670cd0bdea8d9bf37e73a37b62a0 /src
parent6defec2faed9e796584dd9b519ab777f9019d31b (diff)
broadband-modem-mbim: allow subclassing the match of control vs net ports
By default we provide the implementation for the cdc_mbim driver, where both control and net ports share the same USB interface.
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem-mbim.c32
-rw-r--r--src/mm-broadband-modem-mbim.h4
2 files changed, 32 insertions, 4 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 2e40880d..91a1605e 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -254,19 +254,31 @@ mm_broadband_modem_mbim_get_port_mbim_for_data (MMBroadbandModemMbim *self,
NULL);
}
-MMPortMbim *
-mm_broadband_modem_mbim_peek_port_mbim_for_data (MMBroadbandModemMbim *self,
- MMPort *data,
- GError **error)
+static MMPortMbim *
+peek_port_mbim_for_data (MMBroadbandModemMbim *self,
+ MMPort *data,
+ GError **error)
{
GList *cdc_wdm_mbim_ports;
GList *l;
const gchar *net_port_parent_path;
MMPortMbim *found = NULL;
+ const gchar *net_port_driver;
g_assert (MM_IS_BROADBAND_MODEM_MBIM (self));
g_assert (mm_port_get_subsys (data) == MM_PORT_SUBSYS_NET);
+ net_port_driver = mm_kernel_device_get_driver (mm_port_peek_kernel_device (data));
+ if (g_strcmp0 (net_port_driver, "cdc_mbim") != 0) {
+ g_set_error (error,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Unsupported MBIM kernel driver for 'net/%s': %s",
+ mm_port_get_device (data),
+ net_port_driver);
+ return NULL;
+ }
+
net_port_parent_path = mm_kernel_device_get_interface_sysfs_path (mm_port_peek_kernel_device (data));
if (!net_port_parent_path) {
g_set_error (error,
@@ -304,6 +316,16 @@ mm_broadband_modem_mbim_peek_port_mbim_for_data (MMBroadbandModemMbim *self,
return found;
}
+MMPortMbim *
+mm_broadband_modem_mbim_peek_port_mbim_for_data (MMBroadbandModemMbim *self,
+ MMPort *data,
+ GError **error)
+{
+ g_assert (MM_BROADBAND_MODEM_MBIM_GET_CLASS (self)->peek_port_mbim_for_data);
+
+ return MM_BROADBAND_MODEM_MBIM_GET_CLASS (self)->peek_port_mbim_for_data (self, data, error);
+}
+
/*****************************************************************************/
/* Current capabilities (Modem interface) */
@@ -5811,6 +5833,8 @@ mm_broadband_modem_mbim_class_init (MMBroadbandModemMbimClass *klass)
g_type_class_add_private (object_class, sizeof (MMBroadbandModemMbimPrivate));
+ klass->peek_port_mbim_for_data = peek_port_mbim_for_data;
+
object_class->dispose = dispose;
object_class->finalize = finalize;
diff --git a/src/mm-broadband-modem-mbim.h b/src/mm-broadband-modem-mbim.h
index 457c86c7..2d241fed 100644
--- a/src/mm-broadband-modem-mbim.h
+++ b/src/mm-broadband-modem-mbim.h
@@ -36,6 +36,10 @@ struct _MMBroadbandModemMbim {
struct _MMBroadbandModemMbimClass{
MMBroadbandModemClass parent;
+
+ MMPortMbim * (* peek_port_mbim_for_data) (MMBroadbandModemMbim *self,
+ MMPort *data,
+ GError **error);
};
GType mm_broadband_modem_mbim_get_type (void);