Commit Graph

7345 Commits

Author SHA1 Message Date
Loic Poulain
fefbf4d302 plugins: generic: Add 'wwan' subsystem support
wwan is a new subsystem for WWAN devices, allowing to expose the
WWAN device and its ports in a generic way.

The sysfs hierarchy for such device is

/sys/class/wwanX
/sys/class/wwanX/wwanXpYP

Where X is the WWAN device index, Y the port index and P the
control protocol name (QMI, MBIM...). A control port is also
exposed as character device in /dev.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2021-04-21 12:53:16 +02:00
Loic Poulain
441902470a broadband-modem-mbim: Add MHI MBIM port peek support
For MHI data port (mhi-net), simply return the primary MBIM port.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2021-04-21 12:53:16 +02:00
Loic Poulain
6895ca836b broadband-modem-qmi: Add MHI QMI port peek support
For MHI data port (mhi-net), simply return the primary QMI port.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2021-04-21 12:53:16 +02:00
Loic Poulain
6db2e8f04d base: Add support for wwan subsystem
Add support for the Linux wwan subsystem that started to expose
control channel as character devices (e.g. /dev/wwan0p1MBIM...).

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2021-04-21 12:53:16 +02:00
Loic Poulain
b1db6527cf filter: Add wwan port devices
Allow WWAN control ports.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2021-04-21 12:53:16 +02:00
Loic Poulain
aaf8c17e35 udev: add wwan port devices as valid candidates
The new Linux WWAN subsystem exposes the various WWAN control ports
as character devices. WWAN port device naming follows the following
convention: wwanXpYP, where X is the wwan device index, Y the port
index and P the port type/protocol.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2021-04-21 12:53:16 +02:00
Aleksander Morgado
4ae623c37b build: disable gtkdocize in autoreconf
We have a custom modified gtk-doc.make file in our sources, which
disables the gtkdoc-rebase on local install step, so we don't want
autoreconf to copy a different one when we're bootstrapping.
2021-04-21 11:35:08 +02:00
Clayton Craft
43c39d5226 sms-part-3gpp: add flag for indicating PDU is transfer-route message
When the message is a transfer-route MT, there is no SMSC address to
parse out. This flag allows indicating when the PDU is one such message.
2021-04-20 15:16:50 -07:00
Clayton Craft
205e9edf3e broadband-modem-qmi: Handle transfer-route MT messages
This handles transfer-route MT messages, automatically ACKing any that
need to be ACKed.

Based on work by Angus Ainslie and Elias Rudberg
2021-04-20 14:19:08 -07:00
Dylan Van Assche
1beea40270 quectel: set QGPSXTRA to enable assistance support
Quectel modems require to enable XTRA GNSS assistance first with QGPSXTRA=1, before it can be used.
2021-04-20 15:29:29 +00:00
Vincent Palatin
f7ec13deb8 sim-mbim: increase the timeout for the MBIM_CID_HOME_PROVIDER query
Increase the timeout from 10 seconds to 30 seconds when reading the
operator information through the MBIM_CID_HOME_PROVIDER query.
We have observed cases where it took more than 12 seconds on a Fibocom
L850-GL modem with specific China Unicom SIMs.

This timeout was actually the cause of a corruption of the operator name
(e.g. returning '@' rather than the real operator name) on the Intel
XMM7360 based L850-GL. The following scenario was happening:
- the base-sim code sends a first MBIM 'home-provider' query to read the
  operator identifier.
- this query times-out after 10 seconds.
- the base-sim immediately sends another MBIM 'home-provider' query to
  read the operator name.
- the modem returns a corrupted operator identifier.
Intel helped for the debugging and indicates that when the first query
happens, the modem starts reading the SIM files (EF SPN/PNN), apparently
it's taking a long time, when it's receives the second query while the
first one is not entirely processed, this triggers a bug (in the modem
firmware) and returns a corrupted name.
2021-04-19 08:22:28 +02:00
Aleksander Morgado
a74c1c9bd8 data,icon: resize to fit the contents 2021-04-14 13:03:12 +02:00
Aleksander Morgado
00e8196213 port-qmi: minor alignment fixes 2021-04-14 11:27:27 +02:00
Aleksander Morgado
125d2a0901 port-qmi: add support for QMAPv4 with checksum offload enabled 2021-04-14 11:27:27 +02:00
Aleksander Morgado
483f8f0559 port-qmi: new helper macro to check for supported QMAP values 2021-04-14 11:27:27 +02:00
Andrew Lassalle
c2114e50d5 plugin: probe QRTR ports for QMI support 2021-04-14 11:27:27 +02:00
Andrew Lassalle
f82f50fb13 base-modem: create modem for QRTR subsystem
Add support for QRTR devices so modems can be created based on ports
using the QRTR subsystem.
2021-04-14 11:27:27 +02:00
Andrew Lassalle
5f1bac5cf8 port-probe: create port-qmi using a QRTR node
For QRTR devices, create the qmi ports using the QRTR node.
2021-04-14 11:27:27 +02:00
Aleksander Morgado
aeed8c9e5b qcom-soc-plugin: add support for QRTR+IPA based setups 2021-04-14 11:27:27 +02:00
Andrew Lassalle
ec375bd959 port-qmi: add support for QRTR
Extend mm-port-qmi to accept a QRTR node to work with modems using the
QRTR protocol.
2021-04-14 11:27:27 +02:00
Aleksander Morgado
312f753046 port-qmi: initialize endpoint info for all backends
Connect the signal to initialize endpoint info in the generic object
initialization, also applicable for QRTR ports.
2021-04-14 11:27:27 +02:00
Aleksander Morgado
c35bf66678 port-qmi: net ports using IPA driver expect rmnet based multiplexing
When using the IPA driver we cannot blindly use the master network
interface, we must always use RMNET based multiplexing.
2021-04-14 11:27:27 +02:00
Aleksander Morgado
bf519fcc1b port-qmi: avoid using QmiDeviceExpectedDataFormat in the port setup
The QmiDeviceExpectedDataFormat is specific to modules exposed by the
qmi_wwan driver, it has nothing to do with other drivers we may find
in the system like bam-dmux or ipa, which don't allow changing the
expected data format.

The port setup logic is now updated to use a new flags bitmask that
specifies which kernel data modes are supported or currently
available.
2021-04-14 11:27:27 +02:00
Aleksander Morgado
768d76e0aa context: allow disabling QRTR on runtime even if support is built 2021-04-14 11:27:27 +02:00
Aleksander Morgado
591d904f5c kernel-device,qrtr: common physdev UID for all QRTR nodes
Add a common physdev UID to all ports in the Qualcomm SoC, so that they
are all bound together to the same modem object.

This change assumes that no external plugged device ever exports a
QRTR node in the QRTR bus (e.g. that no PCI or USB device would ever
do that). This assumption is likely wrong, but given that we're
currently limiting the QRTR support to the Qualcomm SoC plugin, the
assumption is valid for us for now.
2021-04-14 11:27:27 +02:00
Andrew Lassalle
2b126725bf qrtr-bus-watcher: add a class to watch for QRTR nodes
Add a watcher to listen for QRTR add/remove signals.
2021-04-14 11:27:27 +02:00
Andrew Lassalle
daf27a9933 kernel-device,qrtr: add MMKernelDeviceQrtr skeleton
Add the skeleton of MMKernelDeviceQrtr and allow building it by the
introduction of with-qrtr.
2021-04-14 11:27:27 +02:00
Andrew Lassalle
5a9460b355 log: enable QRTR logging
Add the 'Qrtr' domain so logging from libqrtr is enabled.
2021-04-14 11:27:27 +02:00
Andrew Lassalle
e24346128d filter: add filter for QRTR devices
Add support for devices using the subsystem "qrtr".
2021-04-14 11:27:27 +02:00
Aleksander Morgado
d2ffb47ec8 ci: add build tests with QRTR support 2021-04-14 11:27:27 +02:00
Aleksander Morgado
866c1d4ab6 build: look for libqrtr-glib with pkg-config
The WITH_QRTR symbol in config.h will let us know both if libqrtr-glib
is found and if libqmi-glib is compiled with QRTR support (as per the
exposed "qmi_qrtr_supported" variable in pkg-config).
2021-04-14 10:35:06 +02:00
Aleksander Morgado
da24b7d450 iface-modem: minor refactor in the unload required logic
No change in the logic, just in how it's setup. E.g. we will load the
max number of retries just once when the logic starts, instead of
checking it on every iteration.

Also some other minor coding style changes included, e.g. adding the
timeout between retries as a defined symbol.
2021-04-14 10:07:28 +02:00
Pavan Holla
19edbd0b53 iface-modem: Increase unlock_required retries
If a SIM is known to exist, for e.g. if it was created during load_sim_slots,
persist a few more times before giving up on the SIM to be ready. There
are modems on which the SIM takes more than 15s to be ready, luckily,
they happen to be QMI modems where the SIM's iccid in load_sim_slots
lets us know that there is a sim.
2021-04-14 07:49:59 +00:00
Aleksander Morgado
5a735317f7 cli: avoid attempting to setup timeout on NULL proxy
mm_manager_get_proxy() may actually return NULL if creating the
internal GDBusProxy for the Manager interface fails.
2021-04-12 23:39:35 +02:00
Aleksander Morgado
3d5a994ca8 kerneldevice: fix segfault when processing event for non-existing port
ModemManager[6954]: <warn>  [1618260091.319919] [br0] invalid sysfs path read for net/br0
    **
    ERROR:kerneldevice/mm-kernel-device-generic.c:235:ptr_array_add_sysfs_attribute_link_basename: assertion failed: (array && sysfs_path && attribute)
    Bail out! ERROR:kerneldevice/mm-kernel-device-generic.c:235:ptr_array_add_sysfs_attribute_link_basename: assertion failed: (array && sysfs_path && attribute)

    Thread 1 "ModemManager" received signal SIGABRT, Aborted.
    (gdb) bt
    #0  0x00007ffff7438ef5 in raise () at /usr/lib/libc.so.6
    #1  0x00007ffff7422862 in abort () at /usr/lib/libc.so.6
    #2  0x00007ffff76c2084 in  () at /usr/lib/libglib-2.0.so.0
    #3  0x00007ffff771d85d in g_assertion_message_expr () at /usr/lib/libglib-2.0.so.0
    #4  0x00005555556a5337 in ptr_array_add_sysfs_attribute_link_basename (array=0x5555557de520, sysfs_path=0x0, attribute=0x555555703bd8 "driver", out_value=0x0)
        at kerneldevice/mm-kernel-device-generic.c:235
    #5  0x00005555556a542b in preload_contents_other (self=0x5555557a6c60) at kerneldevice/mm-kernel-device-generic.c:255
    #6  0x00005555556a6485 in preload_contents (self=0x5555557a6c60) at kerneldevice/mm-kernel-device-generic.c:517
    #7  0x00005555556a7fb6 in check_preload (self=0x5555557a6c60) at kerneldevice/mm-kernel-device-generic.c:980
    #8  0x00005555556a855f in initable_init (initable=0x5555557a6c60, cancellable=0x0, error=0x7fffffffe5c8) at kerneldevice/mm-kernel-device-generic.c:1127
    #9  0x00007ffff78a2f41 in g_initable_new_valist () at /usr/lib/libgio-2.0.so.0
    #10 0x00007ffff78a2ffa in g_initable_new () at /usr/lib/libgio-2.0.so.0
    #11 0x00005555556a8205 in mm_kernel_device_generic_new_with_rules (props=0x5555557a5fa0, rules=0x7fffec001e30, error=0x7fffffffe5c8) at kerneldevice/mm-kernel-device-generic.c:1042
    #12 0x00005555556a827d in mm_kernel_device_generic_new (props=0x5555557a5fa0, error=0x7fffffffe5c8) at kerneldevice/mm-kernel-device-generic.c:1063
    #13 0x00005555555aba9c in handle_kernel_event (self=0x555555793220, properties=0x5555557a5fa0, error=0x7fffffffe5c8) at mm-base-manager.c:414
2021-04-12 23:39:35 +02:00
Pavan Holla
b978a7045f shared-qmi: Remove iteration over slots at startup
MM used to iterate over each SIM slot to load IMSI, operator name etc.
However, switching slots at start up caused a few issues in the real
world.
a) Sierra Wireless' AUTO-SIM feature, the hidden SIM slot switching
is actually triggering a full modem reset (because the firmware
detects a new SIM for a different operator, and automatically resets
itself to load the firmware+carrier config associated to that other
operator).
b) The IMSI on slot 2 is reported to be the same as slot 1.
This is solved by adding a 1000ms delay before reading IMSI
on slot 2, after GET_CARD_STATUS indicates the sim is ready. The
delay means a 2s startup penalty when both slots are loaded.
c) 2/5 developers have encountered a fw bug where the modem
incorrectly reports that the SIM on slot 1 has vanished
after the sequence of slot switches. This makes the modem
unusable.
d) If the eSIM daemon changes slots and opens a channel to the eUICC,
MM will detect a hotswap, and break the channel during reprobe.
e) SIMs from a certain large operator in the US take over 20s to be
ready. Thus, switching to such a SIM for just loading IMSI may not be
worth it.

This change does not affect detection of sims in all slots. We still
expose the iccid and presence of all sims. However, properties like
IMSI and operator_name will not be exposed for the inactive slot.
2021-04-12 21:03:57 +00:00
Aleksander Morgado
b766ded3ca iface-modem-time: fix invalid read when loading network timezone fails
==226546== Invalid read of size 4
  ==226546==    at 0x5068CB7: g_error_matches (in /usr/lib/libglib-2.0.so.0.6600.7)
  ==226546==    by 0x1BAC86: load_network_timezone_ready (mm-iface-modem-time.c:218)
  ==226546==    by 0x4EA827E: g_simple_async_result_complete (in /usr/lib/libgio-2.0.so.0.6600.7)
  ==226546==    by 0x17AE2C: at_command_ready (mm-base-modem-at.c:538)
  ==226546==    by 0x4EA827E: g_simple_async_result_complete (in /usr/lib/libgio-2.0.so.0.6600.7)
  ==226546==    by 0x24B475: serial_command_ready (mm-port-serial-at.c:378)
  ==226546==    by 0x4EA827E: g_simple_async_result_complete (in /usr/lib/libgio-2.0.so.0.6600.7)
  ==226546==    by 0x244F94: command_context_complete_and_free (mm-port-serial.c:141)
  ==226546==    by 0x246861: port_serial_got_response (mm-port-serial.c:755)
  ==226546==    by 0x246923: port_serial_timed_out (mm-port-serial.c:785)
  ==226546==    by 0x50863C3: ??? (in /usr/lib/libglib-2.0.so.0.6600.7)
  ==226546==    by 0x5085B83: g_main_context_dispatch (in /usr/lib/libglib-2.0.so.0.6600.7)
2021-04-09 00:55:56 +02:00
Aleksander Morgado
3d665d2209 libmm-glib,bearer-properties: fix usage of CMP_FLAGS_NO_RM_PROTOCOL 2021-04-09 00:53:12 +02:00
Aleksander Morgado
83a00a9457 modem-helpers: new helper to lookup range from CGDCONT=? response 2021-04-08 10:04:42 +00:00
Aleksander Morgado
7e0404c6c2 modem-helpers-qmi: match QMI_WDS_AUTHENTICATION_NONE with MM_BEARER_ALLOWED_AUTH_NONE
There is no point in returning UNKNOWN when the WDS auth value is NONE.
2021-04-08 10:04:42 +00:00
Aleksander Morgado
e9ee6dfdb8 broadband-modem-qmi: remove unused variables 2021-04-08 10:04:42 +00:00
Benjamin Tissoires
01f2109ae0 CI: make use of ci-templates
full list of benefits at:
https://freedesktop.pages.freedesktop.org/ci-templates/templates.html#why-use-the-ci-templates

But the main ones are:
- reproducible (just download the container and run the `script` part
  to be in the same environment the CI was running)
- no more before script that pulls hundreds of MB and spend useless time.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2021-04-08 11:39:48 +02:00
Zrshuo Zhang
179e12befc fibocom: add port type hints for the NL668-AM 2021-04-07 12:18:58 +02:00
Aleksander Morgado
1db0f0b66f iface-modem-simple: add multiplex info in connection details logging 2021-04-02 15:05:02 +02:00
Aleksander Morgado
c3fdaca4c8 iface-modem-simple: minor renames in logging of connection details 2021-04-02 15:05:02 +02:00
Aleksander Morgado
e6a04c0703 iface-modem-3gpp-ussd: use common method to abort invocation if not enabled 2021-04-02 15:05:02 +02:00
Aleksander Morgado
7dfe6198e1 iface-modem: publish helper to abort invocation if state not reached
So that we can use it in other interfaces to abort invocations e.g. if
the modem is not yet enabled.
2021-04-02 15:05:02 +02:00
Aleksander Morgado
cc59492caf base-bearer: add autoptr setup for MMBearerConnectResult 2021-04-02 15:05:02 +02:00
Aleksander Morgado
851a708442 modem-helpers: ip family normalization doesn't need log_object 2021-04-01 11:24:42 +02:00
Aleksander Morgado
2c27a7aadc base-bearer: remove default IP family property
There is no point in providing a configurable default IP family in the
bearer object, because we can always assume IPv4 as being the only
default expected.

Simplify the logic and also provide a new method to get the normalize
the IP family, using IPv4 as default always.
2021-03-31 23:46:31 +02:00