Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
modem_3gpp_{enable,disable}_unsolicited_registration_events to use GTask
|
|
|
|
|
|
|
|
|
|
common_setup_cleanup_unsolicited_registration_events to use GTask
|
|
to use GTask
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ensure_qmi_client() uses g_simple_async_report_take_gerror_in_idle(),
which can't be mixed with GTask. To allow migrating remaining
MMBroadbandModemQmi code to use GTask in a series of smaller patches,
this patch adds a temporary assure_qmi_client() helper, which mimics
ensure_qmi_client() but uses g_task_report_new_error(). Once all the
MMBroadbandModemQmi code is migrated to use GTask, we will drop the old
ensure_qmi_client() and renames assure_qmi_client() back to
ensure_qmi_client().
|
|
We have a maximum number of timeouts that could be enabled for TTY
modems, e.g. to detect whether the modem is available in the RS232
port or has been unplugged. This was required because RS232 modems
aren't notified via udev, so there was no other way to check presence
of the modem.
But, the same kind of checks may be used in order to detect failed
broken modems. If we have a modem that gets into an unstable state
where no AT port command goes through and all get timed out, we can
definitely flag the modem as invalid and get rid of it. If we don't do
this, we would end up leaving the modem exposed and available for
users of the API, but in a non-working state.
....
<info> Modem /org/freedesktop/ModemManager1/Modem/0: state changed (registered -> connecting)
<debug> Launching 3GPP connection attempt with APN 'telefonica.es'
<debug> Looking for best CID...
<debug> (ttyACM2) device open count is 2 (open)
<debug> (ttyACM2): --> 'AT+CGDCONT?<CR>'
<debug> Unexpected +CGDCONT? error: 'Serial command timed out'
<warn> (tty/ttyACM2) at port timed out 9 consecutive times
<debug> Using empty CID 1 with PDP type 'ipv4'
<debug> (ttyACM2) device open count is 3 (open)
<debug> (ttyACM2) device open count is 2 (close)
<debug> (ttyACM2): --> 'AT+CGDCONT=1,"IP","telefonica.es"<CR>'
<warn> Couldn't initialize PDP context with our APN: 'Serial command timed out'
<debug> Couldn't connect bearer '/org/freedesktop/ModemManager1/Bearer/0': 'Serial command timed out'
<info> Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connecting -> registered)
<debug> Couldn't connect bearer: 'Serial command timed out'
<debug> (ttyACM2) device open count is 1 (close)
<error> (tty/ttyACM2) at port timed out 10 consecutive times, marking modem '/org/freedesktop/ModemManager1/Modem/0' as invalid
<debug> Removing from DBus bearer at '/org/freedesktop/ModemManager1/Bearer/0'
<debug> [device /sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.5] unexported modem from path '/org/freedesktop/ModemManager1/Modem/0'
<debug> Periodic signal checks disabled
<debug> (ttyACM2) device open count is 0 (close)
<debug> (ttyACM2) closing serial port...
<debug> (ttyACM2) serial port closed
<debug> (ttyACM2) forced to close port
<debug> Modem (u-blox) '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.5' completely disposed
|
|
|
|
|
|
|
|
When a new USB device is hotplugged, e.g. a USB<->RS232 converter that
exposes a single ttyUSB0, these udev events happen:
add /devices/pci0000:00/0000:00:14.0/usb2/2-1 (usb/usb-device)
add /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0 (usb/usb-interface)
add /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0/ttyUSB0 (usb-serial)
add /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0/ttyUSB0/tty/ttyUSB0 (tty)
bind /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0/ttyUSB0 (usb-serial)
bind /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0 (usb/usb-interface)
bind /devices/pci0000:00/0000:00:14.0/usb2/2-1 (usb/usb-device)
Our udev rules in MM only added tags in the 'add' events, and it looks
like the only ones 'persistent' after this sequence are those of the
last event happening on the specific path.
This meant that all TTY subsystem rules (e.g. ID_MM_CANDIDATE) would
be stored for later check (e.g. if ModemManager is started after these
rules have been applied), which was ok. "udevadm info -p ..." would
show these tags correctly always.
But this also meant that the 'bind' udev event happening for the USB
device didn't get any of our device-specific tags, and so we would be
missing them (e.g. ID_MM_DEVICE_MANUAL_SCAN_ONLY) if MM is started
after the last event has happened. "udevadm info -p ..." would
not show these tags.
Modify all our rules to also run at the 'bind' events.
See, for context:
https://github.com/systemd/systemd/issues/8221
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=106623
|
|
There are two ways to report new received SMS messages:
* For class 0 (flash) messages, MBIM_CID_SMS_READ are sent. The SMS
comes in the MBIM indication itself.
* For non-class 0 (standard) messages, a
MBIM_CID_SMS_MESSAGE_STORE_STATUS notifications are sent, the SMS is
stored and must be read with an additional MBIM request specifying
storage index.
The names of the functions we had implied the opposite, we were
assuming flash/alert messages were reported via
MBIM_CID_SMS_MESSAGE_STORE_STATUS, not via MBIM_CID_SMS_READ.
|
|
Do not automatically probe serial ports under the 'pci' or 'sdio'
platform drivers unless explicitly tagged with
ID_MM_PLATFORM_DRIVER_PROBE.
$ realpath /sys/class/tty/ttyS0/
/sys/devices/pci0000:00/0000:00:16.3/tty/ttyS0
$ basename $(realpath /sys/devices/pci0000:00/0000:00:16.3/subsystem)
pci
|
|
The logic implementing the network timezone loading was holding a
strong reference to the modem (inside the GTask) while waiting to
be registered.
This was triggering some possible memory leaks as the modem object
could have been left around even after the modem was disconnected.
E.g. if the modem booted without antennas plugged in, it was never
getting registered, and if we unplugged it right away in that state,
the network timezone logic would have left a modem reference around
without disposing it.
This issue, combined with e.g. other interfaces relying on disposing
its own logic with the last object reference (e.g. Signal interface
sets up its logic in a context bound to the lifetime of the object)
would mean that a lot of different logic blocks were kept running even
after the modem device was unplugged from the system.
We avoid this issue by making sure that no new additional reference is
taken by the logic in charge of updating the network timezone. We just
make the timezone update context be bound to the lifetime of the
object, as other interfaces do.
While doing this, we also remove the logic in charge of "cancelling"
the context, as it isn't needed. If the logic needs to be cancelled,
we would just remove any configured timeout, which is enough.
As part of the changes, the logic has also been improved so that the
network timezone isn't only updated the first time the modem gets
registered. If the modem gets unregistered and re-registered, we would
reload the network timezone information.
|
|
nozomi and qcaux only drive modems and thus should be included
in this filter rule. Allows nozomi/qcaux devices to work
automatically with strict filter mode.
|
|
|
|
From 3GPP TS 27.007 version 11.6.0 Release 11, sections 9.2.1,
9.2.2.1, 9.2.2.2, and 9.2.2.3.
|
|
Gemalto's PLS8 may timeout on 3 second CIND query. Debug log shows
5 seconds should suffice.
|
|
This patch extends commit c9e85b671 ("iface-modem-3gpp: ignore initial
registration check result when appropriate") to handle the situation
where a registration check update may prematurely transition the modem
to the 'enabled' state while the modem is still being enabled.
The issue is identified by Dan Williams <dcbw@redhat.com>. More details
can be found in https://bugs.freedesktop.org/show_bug.cgi?id=106468
|
|
The quick AT probe procedure is only meaningful to avoid waiting the
+READY URC delay. If there is no such delay configured, we shouldn't
run the quick AT probe (as a failure in the AT probe may also
trigger a +READY URC delay).
Just read the udev tag value early and complete the task if the delay
is not configured.
|
|
Added reading the ID_MM_UBLOX_PORT_READY_DELAY udev flag value and using
it as an init delay when a value is set.
The 20 second delay for the TOBY-L4 +READ URC has been reimplemented
using the new ID_MM_UBLOX_PORT_READY_DELAY udev value.
|