diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2020-10-22 12:32:06 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-11-09 18:41:57 +0100 |
commit | 85d549ef0066f1a47d15c40e4857033bea82e4c2 (patch) | |
tree | c8f83cd557f6670cd0bdea8d9bf37e73a37b62a0 /src | |
parent | 6defec2faed9e796584dd9b519ab777f9019d31b (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.c | 32 | ||||
-rw-r--r-- | src/mm-broadband-modem-mbim.h | 4 |
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); |