aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2024-05-08 13:07:15 +0000
committerAleksander Morgado <aleksandermj@chromium.org>2024-05-29 09:05:23 +0000
commita063e2a15cb5846ca09b2ce84ccb1ba86c0ac435 (patch)
treec60eb5c87a8354592cfd15a613101e02f4a8b011 /src
parente7492270c2a71d4ccd266deecfd26c96dede10cb (diff)
fibocom: remove custom initial EPS bearer management
The implementation in the generic MMBroadbandModem object should fit well instead of the custom implementation. There is also no need to specify via udev tags which is the initial EPS bearer context id, we try to automatically guess it in runtime.
Diffstat (limited to 'src')
-rw-r--r--src/plugins/fibocom/77-mm-fibocom-port-types.rules2
-rw-r--r--src/plugins/fibocom/mm-broadband-modem-fibocom.c306
2 files changed, 4 insertions, 304 deletions
diff --git a/src/plugins/fibocom/77-mm-fibocom-port-types.rules b/src/plugins/fibocom/77-mm-fibocom-port-types.rules
index 63d37031..ab49a924 100644
--- a/src/plugins/fibocom/77-mm-fibocom-port-types.rules
+++ b/src/plugins/fibocom/77-mm-fibocom-port-types.rules
@@ -75,14 +75,12 @@ ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="0115", ENV{.MM_USBIFNUM}=="05", ENV{
ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="0106", ENV{.MM_USBIFNUM}=="00", ENV{ID_MM_PORT_IGNORE}="1"
ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="0106", ENV{.MM_USBIFNUM}=="01", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1"
ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="0106", ENV{.MM_USBIFNUM}=="02", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1"
-ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="0106", ENV{ID_MM_FIBOCOM_INITIAL_EPS_CID}="1"
# Fibocom MA510-GL (GTUSBMODE=32)
# ttyUSB1 (if #0): AT port
# ttyUSB2 (if #1): AT port
ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="010a", ENV{.MM_USBIFNUM}=="00", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1"
ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="010a", ENV{.MM_USBIFNUM}=="01", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1"
-ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="010a", ENV{ID_MM_FIBOCOM_INITIAL_EPS_CID}="1"
# Fibocom L610 (GTUSBMODE=31)
# ttyUSB0 (if #0): AT port
diff --git a/src/plugins/fibocom/mm-broadband-modem-fibocom.c b/src/plugins/fibocom/mm-broadband-modem-fibocom.c
index fdbcb197..2bc27f16 100644
--- a/src/plugins/fibocom/mm-broadband-modem-fibocom.c
+++ b/src/plugins/fibocom/mm-broadband-modem-fibocom.c
@@ -20,24 +20,16 @@
#include "mm-broadband-modem.h"
#include "mm-base-modem-at.h"
#include "mm-iface-modem.h"
-#include "mm-iface-modem-3gpp.h"
-#include "mm-iface-modem-3gpp-profile-manager.h"
#include "mm-log.h"
#include "mm-shared-fibocom.h"
-static void iface_modem_init (MMIfaceModemInterface *iface);
-static void iface_modem_3gpp_init (MMIfaceModem3gppInterface *iface);
-static void iface_modem_3gpp_profile_manager_init (MMIfaceModem3gppProfileManagerInterface *iface);
-static void iface_modem_firmware_init (MMIfaceModemFirmwareInterface *iface);
-static void shared_fibocom_init (MMSharedFibocomInterface *iface);
-
-static MMIfaceModem3gppProfileManagerInterface *iface_modem_3gpp_profile_manager_parent;
+static void iface_modem_init (MMIfaceModemInterface *iface);
+static void iface_modem_firmware_init (MMIfaceModemFirmwareInterface *iface);
+static void shared_fibocom_init (MMSharedFibocomInterface *iface);
G_DEFINE_TYPE_EXTENDED (MMBroadbandModemFibocom, mm_broadband_modem_fibocom, MM_TYPE_BROADBAND_MODEM, 0,
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init)
- G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_3GPP, iface_modem_3gpp_init)
G_IMPLEMENT_INTERFACE (MM_TYPE_SHARED_FIBOCOM, shared_fibocom_init)
- G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_3GPP_PROFILE_MANAGER, iface_modem_3gpp_profile_manager_init)
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_FIRMWARE, iface_modem_firmware_init))
typedef enum {
@@ -47,9 +39,7 @@ typedef enum {
} FeatureSupport;
struct _MMBroadbandModemFibocomPrivate {
- FeatureSupport gtrndis_support;
- FeatureSupport initial_eps_bearer_support;
- gint initial_eps_bearer_cid;
+ FeatureSupport gtrndis_support;
};
/*****************************************************************************/
@@ -228,273 +218,6 @@ modem_power_off (MMIfaceModem *self,
}
/*****************************************************************************/
-/* Load initial EPS bearer properties (as agreed with network) */
-
-static MMBearerProperties *
-modem_3gpp_load_initial_eps_bearer_finish (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- GError **error)
-{
- return MM_BEARER_PROPERTIES (g_task_propagate_pointer (G_TASK (res), error));
-}
-
-static void
-load_initial_eps_cgcontrdp_ready (MMBaseModem *self,
- GAsyncResult *res,
- GTask *task)
-{
- GError *error = NULL;
- const gchar *response;
- g_autofree gchar *apn = NULL;
- MMBearerProperties *properties;
-
- response = mm_base_modem_at_command_finish (self, res, &error);
- if (!response || !mm_3gpp_parse_cgcontrdp_response (response, NULL, NULL, &apn, NULL, NULL, NULL, NULL, NULL, &error))
- g_task_return_error (task, error);
- else {
- properties = mm_bearer_properties_new ();
- mm_bearer_properties_set_apn (properties, apn);
- g_task_return_pointer (task, properties, g_object_unref);
- }
-
- g_object_unref (task);
-}
-
-static void
-modem_3gpp_load_initial_eps_bearer (MMIfaceModem3gpp *_self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- MMBroadbandModemFibocom *self = MM_BROADBAND_MODEM_FIBOCOM (_self);
- GTask *task;
- g_autofree gchar *cmd = NULL;
-
- task = g_task_new (self, NULL, callback, user_data);
-
- if (self->priv->initial_eps_bearer_support != FEATURE_SUPPORTED) {
- g_task_return_new_error (task,
- MM_CORE_ERROR,
- MM_CORE_ERROR_UNSUPPORTED,
- "Initial EPS bearer context ID unknown");
- g_object_unref (task);
- return;
- }
-
- g_assert (self->priv->initial_eps_bearer_cid >= 0);
- cmd = g_strdup_printf ("+CGCONTRDP=%d", self->priv->initial_eps_bearer_cid);
-
- mm_base_modem_at_command (MM_BASE_MODEM (self),
- cmd,
- 3,
- FALSE,
- (GAsyncReadyCallback) load_initial_eps_cgcontrdp_ready,
- task);
-}
-
-/*****************************************************************************/
-/* Load initial EPS bearer settings (currently configured in modem) */
-
-static MMBearerProperties *
-modem_3gpp_load_initial_eps_bearer_settings_finish (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- GError **error)
-{
- return MM_BEARER_PROPERTIES (g_task_propagate_pointer (G_TASK (res), error));
-}
-
-static void
-load_initial_eps_bearer_get_profile_ready (MMIfaceModem3gppProfileManager *self,
- GAsyncResult *res,
- GTask *task)
-{
- GError *error = NULL;
- g_autoptr(MM3gppProfile) profile = NULL;
- MMBearerProperties *properties;
-
- profile = mm_iface_modem_3gpp_profile_manager_get_profile_finish (self, res, &error);
- if (!profile) {
- g_task_return_error (task, error);
- g_object_unref (task);
- return;
- }
-
- properties = mm_bearer_properties_new_from_profile (profile, &error);
- if (!properties)
- g_task_return_error (task, error);
- else
- g_task_return_pointer (task, properties, g_object_unref);
- g_object_unref (task);
-}
-
-static void
-modem_3gpp_load_initial_eps_bearer_settings (MMIfaceModem3gpp *_self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- MMBroadbandModemFibocom *self = MM_BROADBAND_MODEM_FIBOCOM (_self);
- GTask *task;
-
- task = g_task_new (self, NULL, callback, user_data);
-
- /* Initial EPS bearer CID initialization run once only */
- if (G_UNLIKELY (self->priv->initial_eps_bearer_support == FEATURE_SUPPORT_UNKNOWN)) {
- MMPortSerialAt *port;
- MMKernelDevice *device;
-
- /* There doesn't seem to be a programmatic way to find the initial EPS
- * bearer's CID, so we'll use a udev variable. */
- port = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
- if (!port) {
- g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
- "Couldn't check initial EPS cid support: primary port missing");
- g_object_unref (task);
- return;
- }
-
- device = mm_port_peek_kernel_device (MM_PORT (port));
- if (mm_kernel_device_has_global_property (device, "ID_MM_FIBOCOM_INITIAL_EPS_CID")) {
- self->priv->initial_eps_bearer_support = FEATURE_SUPPORTED;
- self->priv->initial_eps_bearer_cid = mm_kernel_device_get_global_property_as_int (
- device, "ID_MM_FIBOCOM_INITIAL_EPS_CID");
- } else
- self->priv->initial_eps_bearer_support = FEATURE_NOT_SUPPORTED;
-
- }
-
- if (self->priv->initial_eps_bearer_support != FEATURE_SUPPORTED) {
- g_task_return_new_error (task,
- MM_CORE_ERROR,
- MM_CORE_ERROR_UNSUPPORTED,
- "Initial EPS bearer context ID unknown");
- g_object_unref (task);
- return;
- }
-
- g_assert (self->priv->initial_eps_bearer_cid >= 0);
- mm_iface_modem_3gpp_profile_manager_get_profile (
- MM_IFACE_MODEM_3GPP_PROFILE_MANAGER (self),
- self->priv->initial_eps_bearer_cid,
- (GAsyncReadyCallback) load_initial_eps_bearer_get_profile_ready,
- task);
-}
-
-/*****************************************************************************/
-/* Set initial EPS bearer settings */
-
-static gboolean
-modem_3gpp_set_initial_eps_bearer_settings_finish (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- GError **error)
-{
- return g_task_propagate_boolean (G_TASK (res), error);
-}
-
-static void
-set_initial_eps_bearer_modify_profile_ready (MMIfaceModem3gppProfileManager *self,
- GAsyncResult *res,
- GTask *task)
-{
- GError *error = NULL;
- g_autoptr(MM3gppProfile) stored = NULL;
-
- stored = mm_iface_modem_3gpp_profile_manager_set_profile_finish (self, res, &error);
- if (!stored)
- g_task_return_error (task, error);
- else
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
-}
-
-static void
-modem_3gpp_set_initial_eps_bearer_settings (MMIfaceModem3gpp *_self,
- MMBearerProperties *properties,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- MMBroadbandModemFibocom *self = MM_BROADBAND_MODEM_FIBOCOM (_self);
- GTask *task;
- MMBearerIpFamily ip_family;
- MM3gppProfile *profile;
-
- task = g_task_new (self, NULL, callback, user_data);
-
- if (self->priv->initial_eps_bearer_support != FEATURE_SUPPORTED) {
- g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
- "Initial EPS bearer context ID unknown");
- g_object_unref (task);
- return;
- }
-
- profile = mm_bearer_properties_peek_3gpp_profile (properties);
- g_assert (self->priv->initial_eps_bearer_cid >= 0);
- mm_3gpp_profile_set_profile_id (profile, self->priv->initial_eps_bearer_cid);
- ip_family = mm_3gpp_profile_get_ip_type (profile);
- if (ip_family == MM_BEARER_IP_FAMILY_NONE || ip_family == MM_BEARER_IP_FAMILY_ANY)
- mm_3gpp_profile_set_ip_type (profile, MM_BEARER_IP_FAMILY_IPV4);
-
- mm_iface_modem_3gpp_profile_manager_set_profile (MM_IFACE_MODEM_3GPP_PROFILE_MANAGER (self),
- profile,
- "profile-id",
- TRUE,
- (GAsyncReadyCallback) set_initial_eps_bearer_modify_profile_ready,
- task);
-}
-
-/*****************************************************************************/
-/* Deactivate profile (3GPP profile management interface) */
-
-static gboolean
-modem_3gpp_profile_manager_deactivate_profile_finish (MMIfaceModem3gppProfileManager *self,
- GAsyncResult *res,
- GError **error)
-{
- return g_task_propagate_boolean (G_TASK (res), error);
-}
-
-static void
-profile_manager_parent_deactivate_profile_ready (MMIfaceModem3gppProfileManager *self,
- GAsyncResult *res,
- GTask *task)
-{
- GError *error = NULL;
- if (iface_modem_3gpp_profile_manager_parent->deactivate_profile_finish(self, res, &error))
- g_task_return_boolean (task, TRUE);
- else
- g_task_return_error (task, error);
- g_object_unref (task);
-}
-
-static void
-modem_3gpp_profile_manager_deactivate_profile (MMIfaceModem3gppProfileManager *_self,
- MM3gppProfile *profile,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- MMBroadbandModemFibocom *self = MM_BROADBAND_MODEM_FIBOCOM (_self);
- GTask *task;
- gint profile_id;
-
- task = g_task_new (self, NULL, callback, user_data);
- profile_id = mm_3gpp_profile_get_profile_id (profile);
-
- if (self->priv->initial_eps_bearer_support == FEATURE_SUPPORTED) {
- g_assert (self->priv->initial_eps_bearer_cid >= 0);
- if (self->priv->initial_eps_bearer_cid == profile_id) {
- mm_obj_dbg (self, "skipping profile deactivation (initial EPS bearer)");
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
- return;
- }
- }
-
- iface_modem_3gpp_profile_manager_parent->deactivate_profile (
- _self,
- profile,
- (GAsyncReadyCallback) profile_manager_parent_deactivate_profile_ready,
- task);
-}
-
-/*****************************************************************************/
MMBroadbandModemFibocom *
mm_broadband_modem_fibocom_new (const gchar *device,
@@ -524,7 +247,6 @@ mm_broadband_modem_fibocom_init (MMBroadbandModemFibocom *self)
MMBroadbandModemFibocomPrivate);
self->priv->gtrndis_support = FEATURE_SUPPORT_UNKNOWN;
- self->priv->initial_eps_bearer_support = FEATURE_SUPPORT_UNKNOWN;
}
static void
@@ -541,26 +263,6 @@ iface_modem_init (MMIfaceModemInterface *iface)
}
static void
-iface_modem_3gpp_init (MMIfaceModem3gppInterface *iface)
-{
- iface->load_initial_eps_bearer = modem_3gpp_load_initial_eps_bearer;
- iface->load_initial_eps_bearer_finish = modem_3gpp_load_initial_eps_bearer_finish;
- iface->load_initial_eps_bearer_settings = modem_3gpp_load_initial_eps_bearer_settings;
- iface->load_initial_eps_bearer_settings_finish = modem_3gpp_load_initial_eps_bearer_settings_finish;
- iface->set_initial_eps_bearer_settings = modem_3gpp_set_initial_eps_bearer_settings;
- iface->set_initial_eps_bearer_settings_finish = modem_3gpp_set_initial_eps_bearer_settings_finish;
-}
-
-static void
-iface_modem_3gpp_profile_manager_init (MMIfaceModem3gppProfileManagerInterface *iface)
-{
- iface_modem_3gpp_profile_manager_parent = g_type_interface_peek_parent (iface);
-
- iface->deactivate_profile = modem_3gpp_profile_manager_deactivate_profile;
- iface->deactivate_profile_finish = modem_3gpp_profile_manager_deactivate_profile_finish;
-}
-
-static void
iface_modem_firmware_init (MMIfaceModemFirmwareInterface *iface)
{
iface->load_update_settings = mm_shared_fibocom_firmware_load_update_settings;