aboutsummaryrefslogtreecommitdiff
path: root/src/mm-iface-modem.c
AgeCommit message (Collapse)Author
2016-07-26iface-modem: inverted steps in update_lock_info_context_stepCarlo Lobrano
Inverted steps UPDATE_LOCK_INFO_CONTEXT_STEP_RETRIES and UPDATE_LOCK_INFO_CONTEXT_STEP_AFTER_UNLOCK. Soon after the unlock, the SIM can be busy and loading unlock retries might fail. When implemented, let run "after unlock" logic before any other step in update lock info, when SIM is not locked this change does not have any effect since "after unlock" is not executed.
2016-07-20iface-modem: fix checking for single capabilitiesAleksander Morgado
The mm_iface_modem_is_*_only() checks were validating that all the other capabilities except for the ones being queried were unset, but the check wasn't explicitly checking that the actual capabilities being queried were set. This was making the check fail when capabilities == MM_MODEM_CAPABILITY_NONE. Reported-by: Matthew Stanger <stangerm2@gmail.com>
2015-12-03iface-modem: explicitly disconnect bearer before removing itAleksander Morgado
https://bugs.freedesktop.org/show_bug.cgi?id=90408
2015-12-02core: use G_SOURCE_REMOVE and G_SOURCE_CONTINUE in GSourceFuncsAleksander Morgado
2015-07-20iface-modem: don't check the cache when asking for required unlocksDan Williams
When passing known_lock=UNKNOWN to mm_iface_modem_update_lock_info() we actually do want to ask the modem itself for locks instead of checking the cache. For example, when an unknown error is returned after performing PIN/PUK operations, the cache value may well be NONE if that was the prior lock state, and that bypasses the modem which might now be locked. Thus the state gets messed up. Reproducer is to send 'ChangePin' with the wrong "old" PIN 3 times, then send a wrong PUK. No error was returned from mmcli and the modem's lock state was shown as 'none'.
2015-03-02iface-modem: don't artificially forbid power updates when in OFF stateAleksander Morgado
If for any reason the modem is in OFF state and still can talk to the modem, allow running the remaining transition requests to LOW or ON. This can happen for example for modems that use CFUN:0, i.e. which can still go online with CFUN=1. https://bugs.freedesktop.org/show_bug.cgi?id=89368
2014-08-11iface-mode: downgrade "access technology changed" message to debugDan Williams
We have a report of a modem that switches access technologies frequently, in this case almost every 10 seconds. While that's unusual, it's not unexpected depending on the RF environment. We shouldn't spam syslog with that info; if we need it we can get it with mmcli.
2014-07-06sim: rename 'MMSim' to 'MMBaseSim'Aleksander Morgado
Just so that we don't have same header names in src/ and /libmm-glib.
2014-07-06bearer: rename 'MMBearer' to 'MMBaseBearer'Aleksander Morgado
Just so that we don't have same header names in src/ and /libmm-glib.
2014-06-04iface-modem: make "signal quality updated" log message debug not infoDan Williams
Otherwise your logs fill up if the signal quality changes, which is pretty frequently for many devices.
2014-03-03iface-modem: allow setting power state to OFF when modem is in FAILED stateBen Chan
2014-02-28iface-modem: allow requesting the refresh of the access techAleksander Morgado
For periodic updates, we may want to request an explicit re-check at some point, instead of waiting for the next scheduled update.
2014-02-20iface-modem: allow transitioning to the OFF power stateAleksander Morgado
There are systems in which the modem power source can be controlled externally, e.g. to switch it on or off. In these cases, it is sometimes advisable to be able to tell the modem to cleanly shut off completely before the power is cut. So, allow transitioning to the OFF power state if the modem supports it, even if afterwards the modem could be completely unreachable.
2014-01-11iface-modem,sim: make SIM interface initialization cancellableBen Chan
2013-12-17iface-modem: fix crash in wait_for_final_state_context_complete_and_freeBen Chan
When wait_for_final_state_context_complete_and_free is invoked, if the callback associated with the GSimpleAsyncResult object of the WaitForFinalStateContext object updates the modem state via mm_iface_modem_update_state, state_changed is invoked, which causes wait_for_final_state_context_complete_and_free to be invoked again on the same WaitForFinalStateContext object. That leads to the following crash, which is observed sometimes when a modem is being disabled. Thread 0 *CRASHED* ( SIGSEGV @ 0x00000000 ) 0x7fcb7728f202 [libgobject-2.0.so.0.3400.3] - gobject.c:2916 g_object_unref 0x7fcb7743205c [ModemManager] - mm-broadband-modem.c:8034 disabling_context_complete_and_free 0x7fcb77434d64 [ModemManager] - mm-broadband-modem.c:8130 disabling_wait_for_final_state_ready 0x7fcb770c0b86 [libgio-2.0.so.0.3400.3] - gsimpleasyncresult.c:775 g_simple_async_result_complete 0x7fcb7740cdbc [ModemManager] - mm-iface-modem.c:101] wait_for_final_state_context_complete_and_free 0x7fcb7740ce19 [ModemManager] - mm-iface-modem.c:128] state_changed_wait_expired 0x7fcb76f78c33 [libglib-2.0.so.0.3400.3] - gmain.c:4026] g_timeout_dispatch 0x7fcb76f78087 [libglib-2.0.so.0.3400.3] - gmain.c:2715] g_main_context_dispatch 0x7fcb76f78437 [libglib-2.0.so.0.3400.3] - gmain.c:3290] g_main_context_iterate 0x7fcb76f78891 [libglib-2.0.so.0.3400.3] - gmain.c:3484] g_main_loop_run 0x7fcb773f4d55 [ModemManager] - main.c:142] main 0x7fcb7698a9c6 [libc-2.15.so] - libc-start.c:234] __libc_start_main 0x7fcb773f48b8 [ModemManager] + 0x000218b8]
2013-12-05core: fix some typos in commentsBen Chan
2013-11-21introspection,api: new 'Bearers' property in the Modem interfaceAleksander Morgado
https://bugzilla.gnome.org/show_bug.cgi?id=712276
2013-11-21altair-lte: add SIMREFRESH supportThieu Le
Register for SIMREFRESH event and reload own numbers and reregister modem with network when this happens.
2013-10-24iface-modem: remove unnecessary G_SIMPLE_ASYNC_RESULT() castBen Chan
This patch removes an unnecessary G_SIMPLE_ASYNC_RESULT() cast of the 'result' field, which is already of type GSimpleAsyncResult, of InternalLoadUnlockRequiredContext.
2013-09-19iface-modem: consolidate new unlock required check with retriesAleksander Morgado
The new internal_load_unlock_required() method will take care of running the subclassed load_unlock_required(), if available, and also retry the check up to 6 times. This method will be used both by the standard unlock required check and by the check within the current capabilities loading for multimode devices.
2013-09-18iface-modem: fix MODEM_STATE_IS_INTERMEDIATE macroBen Chan
2013-09-16iface-modem: free GError when interface initialization is cancelledBen Chan
This patch fixes an assertion failure 'ctx->fatal_error == NULL' in initialization_context_complete_and_free(), which happens if 'fatal_error' of the initialization context is set during the modem interface initialization and the initialization is later cancelled.
2013-09-02iface-modem: allow reset and factory reset operation in every stateBen Chan
2013-08-14iface-modem: add mm_iface_modem_get_model helper to query modelBen Chan
2013-06-25iface-modem: plug memleakAleksander Morgado
2013-06-24api,introspection: new 'Ports' property in the Modem interfaceAleksander Morgado
We will expose a new 'Ports' property listing all ports currently known by a given modem. Ports which are not used but are detected as being part of the modem will be listed with an 'unknown' port type. This change uses the new 'MMModemPortType' enum and the new 'MMModemPortInfo' helper struct to handle these values in libmm-glib. The already available 'MMPortType' enum hasn't been re-used for the interface because it contains values that we don't need (e.g. IGNORED). The port list is now also included in the modem information command of mmcli: $ sudo mmcli -m 0 /org/freedesktop/ModemManager1/Modem/0 (device id '97b7b99e3e2bea103880545b619fb05a3cc81b26') ------------------------- System | device: '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4' | drivers: 'qcserial, qmi_wwan' | plugin: 'Gobi' | primary port: 'cdc-wdm0' | ports: 'ttyUSB0 (qcdm), ttyUSB1 (at), cdc-wdm0 (qmi), wwp0s29u1u4 (net)' https://bugzilla.gnome.org/show_bug.cgi?id=702678
2013-06-24iface-modem: don't rely on the cached current power state valueAleksander Morgado
The real power state value of the modem may be changed by other means, e.g. rfkill. So when changing power state of the modem in MM, we better recheck which the current power status is. A better full approach would be to follow rfkill changes, but this fix should help until that is done. https://bugzilla.gnome.org/show_bug.cgi?id=702838
2013-06-05iface-modem: allow changing capabilities in every stateAleksander Morgado
Same as done with the firmware switching, we allow capabilities changing even if the modem is in FAILED state, e.g. to switch from 3GPP to 3GPP2 mode.
2013-06-05iface-modem: load current modes and bands during initializationAleksander Morgado
We now load current modes and bands before enabling the modem, and we also allow mode and bands changes while the modem is disabled.
2013-06-05api,introspection: new 'SetCurrentCapabilities' methodAleksander Morgado
For those modems which expose a valid 'SupportedCapabilities' property with more than one item in the list, we'll allow switching between them.
2013-06-05api,introspection: rename 'ModemCapabilities' to 'SupportedCapabilities'Aleksander Morgado
And also make it a list of masks, specifying which are the specific combinations supported, not just one mask with all. E.g.: ------------------------- Hardware | manufacturer: 'Sierra Wireless, Incorporated' | model: 'MC7710' | revision: 'SWI9200X_03.05.19.04ap r5475 carmd-en-10527 2012/09/17 17:57:14' | supported: 'gsm-umts | gsm-umts, lte' | current: 'gsm-umts, lte' | equipment id: '358178040668164'
2013-06-05api,introspection: merge 'AllowedModes' and 'SupportedMode' into 'CurrentModes'Aleksander Morgado
We now have a single 'CurrentModes' property which contains both values in a tuple with signature "(uu)". Also, rename 'SetAllowedModes()' to 'SetCurrentModes()', and update the list of arguments expected to have a single "(uu)" tuple.
2013-06-05api,introspection: 'SupportedModes' is now a list of possible combinationsAleksander Morgado
Instead of just a mask of MMModemMode values, we now provide a list of the allowed and preferred mode combinations supported by the modem. E.g.: $> sudo mmcli -m 0 ------------------------- Modes | supported: 'allowed: 2g; preferred: none | allowed: 3g; preferred: none | allowed: 2g, 3g; preferred: none | allowed: 2g, 3g; preferred: 2g | allowed: 2g, 3g; preferred: 3g | allowed: 4g; preferred: none | allowed: 2g, 3g, 4g; preferred: none'
2013-06-05api,instrospection: rename 'Bands' to 'CurrentBands'Aleksander Morgado
... and 'SetBands()' to 'SetCurrentBands()'. We'll keep the 'Current' keyword in those properties which also have 'Supported' values.
2013-06-05api,introspection: new 'SupportedIpFamilies' propertyAleksander Morgado
This property will let the clients know which are the IP families supported by the modem.
2013-04-25iface-modem: fix array insertion when setting bandsDan Williams
You can't g_array_insert_val() to an index that's beyond the end of the array, which was happening if the user tried to set the band list to "any": mmcli -m 0 --set-bands=any Just use g_array_append_val() instead. ==5618== Invalid read of size 2 ==5618== at 0x4A0A158: memcpy@GLIBC_2.2.5 (mc_replace_strmem.c:881) ==5618== by 0x326201D8FB: g_array_insert_vals (string3.h:57) ==5618== by 0x442EFB: mm_iface_modem_set_bands (mm-iface-modem.c:1982) ==5618== by 0x44307E: handle_set_bands_auth_ready (mm-iface-modem.c:2100) ==5618== by 0x326386DFF6: g_simple_async_result_complete (gsimpleasyncresult.c:775) ==5618== by 0x4358E3: authorize_ready (mm-base-modem.c:1300) ==5618== by 0x326386DFF6: g_simple_async_result_complete (gsimpleasyncresult.c:775) ==5618== by 0x326386E0F8: complete_in_idle_cb (gsimpleasyncresult.c:787) ==5618== by 0x3262047A54: g_main_context_dispatch (gmain.c:2715) ==5618== by 0x3262047D87: g_main_context_iterate.isra.24 (gmain.c:3290) ==5618== by 0x3262048181: g_main_loop_run (gmain.c:3484) ==5618== by 0x426235: main (main.c:142) ==5618== Address 0x10a7ea74e is not stack'd, malloc'd or (recently) free'd ==5618== ==5618== ==5618== Process terminating with default action of signal 11 (SIGSEGV) ==5618== Access not within mapped region at address 0x10A7EA74E ==5618== at 0x4A0A158: memcpy@GLIBC_2.2.5 (mc_replace_strmem.c:881) ==5618== by 0x326201D8FB: g_array_insert_vals (string3.h:57) ==5618== by 0x442EFB: mm_iface_modem_set_bands (mm-iface-modem.c:1982) ==5618== by 0x44307E: handle_set_bands_auth_ready (mm-iface-modem.c:2100) ==5618== by 0x326386DFF6: g_simple_async_result_complete (gsimpleasyncresult.c:775) ==5618== by 0x4358E3: authorize_ready (mm-base-modem.c:1300) ==5618== by 0x326386DFF6: g_simple_async_result_complete (gsimpleasyncresult.c:775) ==5618== by 0x326386E0F8: complete_in_idle_cb (gsimpleasyncresult.c:787) ==5618== by 0x3262047A54: g_main_context_dispatch (gmain.c:2715) ==5618== by 0x3262047D87: g_main_context_iterate.isra.24 (gmain.c:3290) ==5618== by 0x3262048181: g_main_loop_run (gmain.c:3484) ==5618== by 0x426235: main (main.c:142)
2013-04-18iface-modem: skip modem_after_sim_unlock() for CDMA-only devicesDan Williams
We don't support SIM/RUIM on CDMA devices (yet), so for now it makes no sense to run the after-sim-unlock step on CDMA-only devices where a SIM won't be present. Unfortunately we don't know at this point whether there is a SIM or not, so if the modem is a multi-mode device (implying it has a SIM slot) and its plugin implements the modem_after_sim_unlock() hook, the hook will still be executed and might cause an unecessary delay when a SIM is not inserted.
2013-04-18iface-modem: for multimode 3GPP+3GPP2 devices, check if SIM is availableAleksander Morgado
If SIM is not available, no 3GPP caps in current caps.
2013-04-18iface-modem: ignore SIM errors in 3GPP2-capable devicesAleksander Morgado
We already fully skipped SIM unlock check in 3GPP2-only devices; now we also ignore SIM errors if the device is a 3GPP+3GPP2 device.
2013-04-17iface-modem: let the MBIM port be the primary oneAleksander Morgado
2013-04-05iface-modem: ensure we cancel the re-initialization idle if the modem goes awayAleksander Morgado
https://bugzilla.gnome.org/show_bug.cgi?id=697290
2013-03-27iface-modem: never try to create a SIM in a CDMA-only modemAleksander Morgado
CDMA modems without LTE capabilities will usually not have a SIM, so just skip loading a SIM object if so. https://bugzilla.gnome.org/show_bug.cgi?id=696582
2013-02-26iface-modem: allow falling back to 'failed' stateAleksander Morgado
Allow mm_iface_modem_update_state() receive 'MM_MODEM_STATE_FAILED', and treat it as any other change to failed state, but with 'MM_MODEM_STATE_FAILED_REASON_UNKNOWN'.
2013-02-22api: notify in the interface about the reason why the modem is FAILEDAleksander Morgado
We currently implement 'SIM missing' and 'SIM error', which are probably the most common ones.
2013-02-20iface-modem: fix modem state consolidation upon bearer disconnectionBen Chan
Patch "iface-modem: fix invalid modem state consolidation" (commit 69aff6183a9e6532b4074c89831d6dcfa81ddcce) incorrectly consolidates the modem state upon the disconnection of a bearer. The modem state remains 'connected' after the last bearer is disconnected. This patch fixes that.
2013-02-18ports: add port initialization sequences instead of iface-modem's modem_init()Aleksander Morgado
Instead of a custom modem_init() step in the 'Modem' interface, just add a sequence of port initialization commands in each port. While enabling for the first time a non-hotplugged modem, we will issue the port initialization commands only after having run the enabling_modem_init() step (i.e. after ATZ usually).
2013-02-14broadband-modem: don't try QCDM access technology checks for non-QCDM 3GPP ↵Dan Williams
devices Result handling code mistakenly ran for these devices, when it shouldn't.
2013-01-30iface-modem: add a missing step increment in interface_initialization_stepBen Chan
2013-01-24iface-modem: rearrange initialization stepsBen Chan
This patch rearranges the initialization steps in MMIfaceModem such that the following SIM related operations happen at the end of the initialization: - INITIALIZATION_STEP_UNLOCK_REQUIRED - INITIALIZATION_STEP_SIM - INITIALIZATION_STEP_OWN_NUMBERS The rationale of this change is that the SIM interface of some modems may require some time to initialize before it responds to SIM related AT commands. By rearranging the initialization steps to execute non-SIM related AT commands first, some of the latency for the SIM initialization can be absorbed.
2013-01-24iface-modem: fix invalid modem state consolidationBen Chan
ModemManager has a bogus modem state transition from 'enabling' to 'disabled': ModemManager[26214]: <info> Modem fully enabled... ModemManager[26214]: <info> Modem /org/freedesktop/ModemManager1/Modem/2: state changed (enabling -> disabled) The root cause seems to be the following: get_current_consolidated_state() in MMIfaceModem returns MM_MODEM_STATE_DISABLED as the default fallback value. When mm_iface_modem_update_state() is invoked to transition the modem state from MM_MODEM_STATE_ENABLING to MM_MODEM_STATE_ENABLED, the following code can potentially cause the final state to be MM_MODEM_STATE_DISABLED instead. /* Enabled may really be searching or registered */ if (new_state == MM_MODEM_STATE_ENABLED) new_state = get_current_consolidated_state (self); https://code.google.com/p/chromium-os/issues/detail?id=38173