aboutsummaryrefslogtreecommitdiff
path: root/src/mm-device.h
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2024-03-06 13:47:55 +0000
committerAleksander Morgado <aleksandermj@chromium.org>2024-03-12 10:15:59 +0000
commitbd255849dcdbcaa3280033b0974a6a5e0473566e (patch)
tree128d517534eb046d521d471233ffd3c4b390d285 /src/mm-device.h
parent07f1f5864204dfdf455067def863fcd20c8c6a26 (diff)
base-manager: reprobe device on late port additions
There is no guarantee from the kernel that the ports of a given device will all be notified via uevents on a timely manner. We assume it, but we cannot be completely sure. There are two main scenarios that we have been seen when the ports of a device are not notified close enough to each other: * A modem object is created, but not with the desired control protocol. E.g. a QMI or MBIM modem would end up controlled via AT commands if the cdc-wdm port was added too late. * A modem object is not created at all, and the device object was removed completely. E.g. when the net port addition in a QMI or MBIM modem happens too late. In order to avoid those cases, we will now fully reprobe all the ports of the device from scratch whenever a new valid port addition happens after the initial probing of the device has already been completed. If a modem object is available at that time, we will remove it right away.
Diffstat (limited to 'src/mm-device.h')
-rw-r--r--src/mm-device.h20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/mm-device.h b/src/mm-device.h
index f80d6adb..eb376974 100644
--- a/src/mm-device.h
+++ b/src/mm-device.h
@@ -10,7 +10,7 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
*
- * Copyright (C) 2012 Google, Inc.
+ * Copyright (C) 2012-2024 Google, Inc.
*/
#ifndef MM_DEVICE_H
@@ -42,7 +42,6 @@ typedef struct _MMDevicePrivate MMDevicePrivate;
#define MM_DEVICE_INHIBITED "inhibited"
#define MM_DEVICE_OBJECT_MANAGER "object-manager"
-#define MM_DEVICE_PORT_GRABBED "port-grabbed"
#define MM_DEVICE_PORT_RELEASED "port-released"
struct _MMDevice {
@@ -54,8 +53,6 @@ struct _MMDeviceClass {
GObjectClass parent;
/* signals */
- void (* port_grabbed) (MMDevice *self,
- MMKernelDevice *port);
void (* port_released) (MMDevice *self,
MMKernelDevice *port);
};
@@ -69,7 +66,7 @@ MMDevice *mm_device_new (const gchar *uid,
gboolean virtual,
GDBusObjectManagerServer *object_manager);
-void mm_device_grab_port (MMDevice *self,
+gboolean mm_device_grab_port (MMDevice *self,
MMKernelDevice *kernel_port);
gboolean mm_device_owns_port (MMDevice *self,
MMKernelDevice *kernel_port);
@@ -96,7 +93,6 @@ gboolean mm_device_inhibit_finish (MMDevice *self,
gboolean mm_device_uninhibit (MMDevice *self,
GError **error);
-
const gchar *mm_device_get_uid (MMDevice *self);
const gchar *mm_device_get_physdev (MMDevice *self);
const gchar **mm_device_get_drivers (MMDevice *self);
@@ -109,14 +105,16 @@ GObject *mm_device_peek_plugin (MMDevice *self);
GObject *mm_device_get_plugin (MMDevice *self);
MMBaseModem *mm_device_peek_modem (MMDevice *self);
MMBaseModem *mm_device_get_modem (MMDevice *self);
-GObject *mm_device_peek_port_probe (MMDevice *self,
- MMKernelDevice *kernel_port);
-GObject *mm_device_get_port_probe (MMDevice *self,
- MMKernelDevice *kernel_port);
-GList *mm_device_peek_port_probe_list (MMDevice *self);
gboolean mm_device_get_hotplugged (MMDevice *self);
gboolean mm_device_get_inhibited (MMDevice *self);
+GObject *mm_device_peek_port_probe (MMDevice *self,
+ MMKernelDevice *kernel_port);
+GObject *mm_device_get_port_probe (MMDevice *self,
+ MMKernelDevice *kernel_port);
+GList *mm_device_peek_port_probe_list (MMDevice *self);
+void mm_device_reset_port_probe_list (MMDevice *self);
+
/* For testing purposes */
void mm_device_virtual_grab_ports (MMDevice *self,
const gchar **ports);