Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • marin/ModemManager
  • mobile-broadband/ModemManager
  • lkundrak/ModemManager
  • t-8ch/ModemManager
  • rah/ModemManager
  • benchan/ModemManager
  • claudep/ModemManager
  • ebassi/ModemManager
  • dcbw/ModemManager
  • alfonsosanchezbeato/ModemManager
  • xingnifeng/ModemManager
  • paulbartell/ModemManager
  • MiloCasagrande/ModemManager
  • afett/ModemManager
  • svenschwermer/ModemManager
  • cancanxinxin/ModemManager
  • mjablonsky/ModemManager
  • vicamo/ModemManager
  • kraj/ModemManager
  • lisablanco777/ModemManager
  • Laymer/ModemManager
  • mahatma/ModemManager
  • ejcaruso/ModemManager
  • scootergrisen/ModemManager
  • fran.dieguez/ModemManager
  • bgalvani/ModemManager
  • dnlplm/ModemManager
  • c.lobrano/ModemManager
  • lingzangwuhen/ModemManager
  • aleksm/ModemManager
  • alexanderyashin/ModemManager
  • welaq/ModemManager
  • wi24rd/ModemManager
  • sadiq/ModemManager
  • Linaro/ModemManager
  • HED-mstarr/ModemManager
  • kdrobinski/ModemManager
  • emintufan/ModemManager
  • yurchor/ModemManager
  • rafaelff/ModemManager
  • remuswu1019/ModemManager
  • Fanice.luo/ModemManager
  • roman.stratiienko/ModemManager
  • mno294163/ModemManager
  • mozzwald/ModemManager
  • andika/ModemManager
  • fiziyr/ModemManager
  • teijo.kinnunen/ModemManager
  • dakhouya/ModemManager
  • gci/ModemManager
  • alexcani109/ModemManager
  • ArenM/ModemManager
  • bpeterlytx/ModemManager
  • Hagstrom/ModemManager
  • aplazas/ModemManager
  • justinsg/ModemManager
  • carlyin/ModemManager
  • dle0/ModemManager
  • jessy.diamondman/ModemManager
  • steven831926/ModemManager
  • nytowl/ModemManager
  • prescott66/ModemManager
  • ajonsson/ModemManager
  • mkm/ModemManager
  • pholla/ModemManager
  • wicadmin/ModemManager
  • deng.yi/ModemManager
  • madhavadas/ModemManager
  • fmartinsons/ModemManager
  • Nananas/ModemManager
  • loicpoulain/ModemManager
  • rafal.mszal/ModemManager
  • dylanvanassche/ModemManager
  • myrkr/ModemManager
  • mobilekiller742/ModemManager
  • maorui/ModemManager
  • timo.jyrinki/ModemManager
  • luksen/ModemManager
  • stoehraj/ModemManager
  • vpalatin/ModemManager
  • yaron/ModemManager
  • yegorslists/ModemManager
  • NorwayFun/ModemManager
  • takc923/ModemManager
  • zrshuo.zhang/ModemManager
  • zhuzhaoyu_fibocom/ModemManager
  • bentiss/ModemManager
  • Som_SP/ModemManager
  • KingSun/ModemManager
  • eliasr/ModemManager
  • craftyguy/ModemManager
  • 3378897661/ModemManager
  • ShivakuS/ModemManager
  • bmork/ModemManager
  • ivan.mikhanchuk/ModemManager
  • SimonGuan/ModemManager
  • ziyou/ModemManager
  • juliandehm/ModemManager
  • Jarrah/ModemManager
  • a-wai/ModemManager
  • ZhangMingjie/ModemManager
  • felipeborges/ModemManager
  • dirksu/ModemManager
  • conklinjames175/ModemManager
  • agupta/ModemManager
  • Jarvis-Jiang-G/ModemManager
  • qyliss/ModemManager
  • UnitacSW/ModemManager
  • joelselvaraj/ModemManager
  • mips171/ModemManager
  • LeSpocky/ModemManager
  • Benoit_Monin/ModemManager
  • inigomartinez/ModemManager
  • humb3rtoguti3rr3z/ModemManager
  • tpikonen/ModemManager
  • awaittrot/ModemManager
  • prakash_p/ModemManager
  • florencewchan/ModemManager
  • shawnguo/ModemManager
  • seabass/ModemManager
  • laeyraud/ModemManager
  • maciejsszmigiero/ModemManager
  • dansebcar/ModemManager
  • Shiva/ModemManager
  • stranche/ModemManager
  • anugrah/ModemManager
  • matthewvia/ModemManager
  • umohr/ModemManager
  • matlinuxer2/ModemManager
  • feckert/ModemManager
  • jakko/ModemManager
  • elguap0x0/ModemManager
  • Project0/ModemManager
  • Pac-Man/ModemManager
  • raphj/ModemManager
  • DadiBit/modem-manager
  • pholla1/ModemManager
  • jinjian.song/ModemManager
  • nathangoulding/ModemManager
  • sc0w/ModemManager
  • guisil/ModemManager
  • arbruijn/ModemManager
  • alor/ModemManager
  • andrewlassalle/ModemManager
  • sdeziel/ModemManager
  • troth/ModemManager
  • Stephan/ModemManager
  • nfollens/ModemManager
  • kzapalowicz/ModemManager
  • alad/ModemManager
  • quic_akasagga/ModemManager
  • rmao/ModemManager
  • chrta/ModemManager
  • nicholas123/ModemManager
  • aa13q/ModemManager
  • chandupokuru/ModemManager
  • dskorykh/ModemManager
  • skv/ModemManager
  • shawn.xiao/ModemManager
  • pineapplefurly/ModemManager
  • tsabsch/ModemManager
  • hthiery/ModemManager
  • devrtz/ModemManager
  • haata/ModemManager
  • okaestne/ModemManager
  • nmarupaka/ModemManager
  • simdeveloper/ModemManager
  • ShaneParslow/ModemManager
  • dukexinaw/ModemManager
  • james.fu/ModemManager
  • dchard/ModemManager
  • lvoegl/ModemManager
  • zaripov-kamil/ModemManager
  • kbuksha/ModemManager
  • dos/ModemManager
  • airsoup/ModemManager
  • mafolk/ModemManager
  • tomwimmenhove/ModemManager
  • Lauszus/ModemManager
  • ujjwalpande/ModemManager
  • jordimas/ModemManager
  • diekleinekuh/ModemManager
  • agx/ModemManager
  • PeterK/ModemManager
  • QuectelDuke/ModemManager
  • Lupuliang/ModemManager
  • sinaro/ModemManager
  • Jerry.Meng/ModemManager
  • dahopem/ModemManager
  • robimarko/ModemManager
  • ausil/ModemManager
  • Ming-Pei/ModemManager
  • mkrle/ModemManager
  • PaulosV/ModemManager
  • fabio.porcedda/ModemManager
  • kop316/ModemManager
  • rgenoud/ModemManager
  • janro/ModemManager
  • RICCIARDI-Adrien/ModemManager
  • Garfield/ModemManager
  • nt8r/ModemManager
  • floris.sm/ModemManager
  • quic_krelangi/ModemManager
  • bolan/ModemManager
  • svalery/ModemManager
  • kevlhop/ModemManager
  • evetsso/ModemManager
  • i-tek/ModemManager
  • vanillan/ModemManager
  • jean/ModemManager
  • tuxor1337/ModemManager
  • lupuliang5/ModemManager
  • fuzzy7k/ModemManager
  • piotrdrag/ModemManager
  • asusmith/ModemManager
  • Mank.Wang/ModemManager
  • mank/ModemManager
  • sleirsgoevy/ModemManager
  • quic_asusmith/ModemManager
  • cs99/ModemManager
  • barracuda156/ModemManager
  • anaghg/ModemManager
  • stigma/ModemManager
  • biemster/ModemManager
  • zolfa/ModemManager
  • Mank-Netprisma/ModemManager
  • andrew-sayers/ModemManager
  • jmkim/ModemManager
  • maldiran/ModemManager
229 results
Show changes
Commits on Source (2)
  • Aleksander Morgado's avatar
  • Aleksander Morgado's avatar
    shared-qmi: implement support for the 'extended' LTE band list · c7d5902c
    Aleksander Morgado authored
    This will allow us to configure via mmcli devices that support LTE
    bands that would not fit in the standard TLVs (e.g. band 66 below)
    or bands which aren't really reported in the standard TLVs (e.g. bands
    46 and 48 below).
    
      $ sudo qmicli -d /dev/cdc-wdm0 -p --dms-get-band-capabilities
      [/dev/cdc-wdm0] Device band capabilities retrieved:
          Bands: 'wcdma-2100, wcdma-pcs-1900, wcdma-1700-us, wcdma-850-us, wcdma-800, wcdma-900, wcdma-1700-japan, wcdma-850-japan'
          LTE bands: '1, 2, 3, 4, 5, 7, 8, 12, 13, 14, 17, 18, 19, 20, 25, 38, 39, 40, 41, 42, 43'
          LTE bands (extended): '1, 2, 3, 4, 5, 7, 8, 12, 13, 14, 17, 18, 19, 20, 25, 26, 28, 29, 30, 32, 38, 39, 40, 41, 42, 43, 46, 48, 66'
    c7d5902c
......@@ -3387,6 +3387,9 @@ atds_location_query_ready (MbimDevice *device,
g_task_return_boolean (task, TRUE);
}
g_object_unref (task);
if (response)
mbim_message_unref (response);
}
static void
......@@ -3775,8 +3778,7 @@ atds_signal_query_ready (MbimDevice *device,
!mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error) ||
!mbim_message_atds_signal_response_parse (response, &rssi, &error_rate, &rscp, &ecno, &rsrq, &rsrp, &snr, &error)) {
g_task_return_error (task, error);
g_object_unref (task);
return;
goto out;
}
result = g_slice_new0 (SignalLoadValuesResult);
......@@ -3825,14 +3827,17 @@ atds_signal_query_ready (MbimDevice *device,
}
if (!result->gsm && !result->umts && !result->lte) {
signal_load_values_result_free (result);
g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
"No signal details given");
g_object_unref (task);
signal_load_values_result_free (result);
return;
goto out;
}
g_task_return_pointer (task, result, (GDestroyNotify) signal_load_values_result_free);
out:
if (response)
mbim_message_unref (response);
g_object_unref (task);
}
......
......@@ -302,15 +302,51 @@ dms_add_qmi_lte_bands (GArray *mm_bands,
}
}
static void
dms_add_extended_qmi_lte_bands (GArray *mm_bands,
GArray *extended_qmi_bands)
{
guint i;
g_assert (mm_bands != NULL);
if (!extended_qmi_bands)
return;
for (i = 0; i < extended_qmi_bands->len; i++) {
guint16 val;
val = g_array_index (extended_qmi_bands, guint16, i);
/* MM_MODEM_BAND_EUTRAN_1 = 31,
* ...
* MM_MODEM_BAND_EUTRAN_71 = 101
*/
if (val < 1 || val > 71)
mm_dbg ("Unexpected LTE band supported by module: EUTRAN %u", val);
else {
MMModemBand band;
band = (MMModemBand)(val + MM_MODEM_BAND_EUTRAN_1 - 1);
g_array_append_val (mm_bands, band);
}
}
}
GArray *
mm_modem_bands_from_qmi_band_capabilities (QmiDmsBandCapability qmi_bands,
QmiDmsLteBandCapability qmi_lte_bands)
QmiDmsLteBandCapability qmi_lte_bands,
GArray *extended_qmi_lte_bands)
{
GArray *mm_bands;
mm_bands = g_array_new (FALSE, FALSE, sizeof (MMModemBand));
dms_add_qmi_bands (mm_bands, qmi_bands);
dms_add_qmi_lte_bands (mm_bands, qmi_lte_bands);
if (extended_qmi_lte_bands)
dms_add_extended_qmi_lte_bands (mm_bands, extended_qmi_lte_bands);
else
dms_add_qmi_lte_bands (mm_bands, qmi_lte_bands);
return mm_bands;
}
......@@ -463,15 +499,57 @@ nas_add_qmi_lte_bands (GArray *mm_bands,
}
}
static void
nas_add_extended_qmi_lte_bands (GArray *mm_bands,
const guint64 *extended_qmi_lte_bands,
guint extended_qmi_lte_bands_size)
{
guint i;
g_assert (mm_bands != NULL);
for (i = 0; i < extended_qmi_lte_bands_size; i++) {
guint j;
for (j = 0; j < 64; j++) {
guint val;
if (!(extended_qmi_lte_bands[i] & (((guint64) 1) << j)))
continue;
val = 1 + j + (i * 64);
/* MM_MODEM_BAND_EUTRAN_1 = 31,
* ...
* MM_MODEM_BAND_EUTRAN_71 = 101
*/
if (val < 1 || val > 71)
mm_dbg ("Unexpected LTE band supported by module: EUTRAN %u", val);
else {
MMModemBand band;
band = (val + MM_MODEM_BAND_EUTRAN_1 - 1);
g_array_append_val (mm_bands, band);
}
}
}
}
GArray *
mm_modem_bands_from_qmi_band_preference (QmiNasBandPreference qmi_bands,
QmiNasLteBandPreference qmi_lte_bands)
QmiNasLteBandPreference qmi_lte_bands,
const guint64 *extended_qmi_lte_bands,
guint extended_qmi_lte_bands_size)
{
GArray *mm_bands;
mm_bands = g_array_new (FALSE, FALSE, sizeof (MMModemBand));
nas_add_qmi_bands (mm_bands, qmi_bands);
nas_add_qmi_lte_bands (mm_bands, qmi_lte_bands);
if (extended_qmi_lte_bands && extended_qmi_lte_bands_size)
nas_add_extended_qmi_lte_bands (mm_bands, extended_qmi_lte_bands, extended_qmi_lte_bands_size);
else
nas_add_qmi_lte_bands (mm_bands, qmi_lte_bands);
return mm_bands;
}
......@@ -479,32 +557,51 @@ mm_modem_bands_from_qmi_band_preference (QmiNasBandPreference qmi_bands,
void
mm_modem_bands_to_qmi_band_preference (GArray *mm_bands,
QmiNasBandPreference *qmi_bands,
QmiNasLteBandPreference *qmi_lte_bands)
QmiNasLteBandPreference *qmi_lte_bands,
guint64 *extended_qmi_lte_bands,
guint extended_qmi_lte_bands_size)
{
guint i;
*qmi_bands = 0;
*qmi_lte_bands = 0;
memset (extended_qmi_lte_bands, 0, extended_qmi_lte_bands_size * sizeof (guint64));
for (i = 0; i < mm_bands->len; i++) {
MMModemBand band;
band = g_array_index (mm_bands, MMModemBand, i);
if (band >= MM_MODEM_BAND_EUTRAN_1 && band <= MM_MODEM_BAND_EUTRAN_44) {
/* Add LTE band preference */
guint j;
for (j = 0; j < G_N_ELEMENTS (nas_lte_bands_map); j++) {
if (nas_lte_bands_map[j].mm_band == band) {
*qmi_lte_bands |= nas_lte_bands_map[j].qmi_band;
break;
if (band >= MM_MODEM_BAND_EUTRAN_1 && band <= MM_MODEM_BAND_EUTRAN_71) {
if (extended_qmi_lte_bands && extended_qmi_lte_bands_size) {
/* Add extended LTE band preference */
guint val;
guint j;
guint k;
/* it's really (band - MM_MODEM_BAND_EUTRAN_1 +1 -1), because
* we want EUTRAN1 in index 0 */
val = band - MM_MODEM_BAND_EUTRAN_1;
j = val / 64;
g_assert (j < extended_qmi_lte_bands_size);
k = val % 64;
extended_qmi_lte_bands[j] |= ((guint64)1 << k);
} else {
/* Add LTE band preference */
guint j;
for (j = 0; j < G_N_ELEMENTS (nas_lte_bands_map); j++) {
if (nas_lte_bands_map[j].mm_band == band) {
*qmi_lte_bands |= nas_lte_bands_map[j].qmi_band;
break;
}
}
}
if (j == G_N_ELEMENTS (nas_lte_bands_map))
mm_dbg ("Cannot add the following LTE band: '%s'",
mm_modem_band_get_string (band));
if (j == G_N_ELEMENTS (nas_lte_bands_map))
mm_dbg ("Cannot add the following LTE band: '%s'",
mm_modem_band_get_string (band));
}
} else {
/* Add non-LTE band preference */
guint j;
......
......@@ -35,7 +35,8 @@ gboolean mm_pin_enabled_from_qmi_uim_pin_status (QmiDmsUimPinStatus status);
QmiDmsUimFacility mm_3gpp_facility_to_qmi_uim_facility (MMModem3gppFacility mm);
GArray *mm_modem_bands_from_qmi_band_capabilities (QmiDmsBandCapability qmi_bands,
QmiDmsLteBandCapability qmi_lte_bands);
QmiDmsLteBandCapability qmi_lte_bands,
GArray *extended_qmi_lte_bands);
/*****************************************************************************/
/* QMI/NAS to MM translations */
......@@ -77,10 +78,14 @@ QmiNasGsmWcdmaAcquisitionOrderPreference mm_modem_mode_to_qmi_gsm_wcdma_acquisit
GArray *mm_modem_bands_from_qmi_rf_band_information_array (GArray *info_array);
GArray *mm_modem_bands_from_qmi_band_preference (QmiNasBandPreference qmi_bands,
QmiNasLteBandPreference qmi_lte_bands);
QmiNasLteBandPreference qmi_lte_bands,
const guint64 *extended_qmi_lte_bands,
guint extended_qmi_lte_bands_size);
void mm_modem_bands_to_qmi_band_preference (GArray *mm_bands,
QmiNasBandPreference *qmi_bands,
QmiNasLteBandPreference *qmi_lte_bands);
QmiNasLteBandPreference *qmi_lte_bands,
guint64 *extended_qmi_lte_bands,
guint extended_qmi_lte_bands_size);
MMModem3gppRegistrationState mm_modem_3gpp_registration_state_from_qmi_registration_state (QmiNasAttachState attach_state,
QmiNasRegistrationState registration_state,
......
......@@ -53,6 +53,7 @@ typedef struct {
GArray *supported_radio_interfaces;
Feature feature_nas_technology_preference;
Feature feature_nas_system_selection_preference;
Feature feature_extended_lte_band_preference;
gboolean disable_4g_only_mode;
GArray *supported_bands;
......@@ -1485,6 +1486,7 @@ dms_get_band_capabilities_ready (QmiClientDms *client,
GArray *mm_bands = NULL;
QmiDmsBandCapability qmi_bands = 0;
QmiDmsLteBandCapability qmi_lte_bands = 0;
GArray *extended_qmi_lte_bands = NULL;
self = g_task_get_source_object (task);
priv = get_private (self);
......@@ -1503,8 +1505,12 @@ dms_get_band_capabilities_ready (QmiClientDms *client,
output,
&qmi_lte_bands,
NULL);
qmi_message_dms_get_band_capabilities_output_get_extended_lte_band_capability (
output,
&extended_qmi_lte_bands,
NULL);
mm_bands = mm_modem_bands_from_qmi_band_capabilities (qmi_bands, qmi_lte_bands);
mm_bands = mm_modem_bands_from_qmi_band_capabilities (qmi_bands, qmi_lte_bands, extended_qmi_lte_bands);
if (mm_bands->len == 0) {
g_clear_pointer (&mm_bands, g_array_unref);
error = g_error_new (MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
......@@ -1568,11 +1574,18 @@ load_bands_get_system_selection_preference_ready (QmiClientNas *client,
GAsyncResult *res,
GTask *task)
{
MMSharedQmi *self;
Private *priv;
QmiMessageNasGetSystemSelectionPreferenceOutput *output = NULL;
GError *error = NULL;
GArray *mm_bands = NULL;
QmiNasBandPreference band_preference_mask = 0;
QmiNasLteBandPreference lte_band_preference_mask = 0;
guint64 extended_lte_band_preference[4] = { 0 };
guint extended_lte_band_preference_size = 0;
self = g_task_get_source_object (task);
priv = get_private (self);
output = qmi_client_nas_get_system_selection_preference_finish (client, res, &error);
if (!output || !qmi_message_nas_get_system_selection_preference_output_get_result (output, &error)) {
......@@ -1590,7 +1603,22 @@ load_bands_get_system_selection_preference_ready (QmiClientNas *client,
&lte_band_preference_mask,
NULL);
mm_bands = mm_modem_bands_from_qmi_band_preference (band_preference_mask, lte_band_preference_mask);
if (qmi_message_nas_get_system_selection_preference_output_get_extended_lte_band_preference (
output,
&extended_lte_band_preference[0],
&extended_lte_band_preference[1],
&extended_lte_band_preference[2],
&extended_lte_band_preference[3],
NULL))
extended_lte_band_preference_size = G_N_ELEMENTS (extended_lte_band_preference);
if (G_UNLIKELY (priv->feature_extended_lte_band_preference == FEATURE_UNKNOWN))
priv->feature_extended_lte_band_preference = extended_lte_band_preference_size ? FEATURE_SUPPORTED : FEATURE_UNSUPPORTED;
mm_bands = mm_modem_bands_from_qmi_band_preference (band_preference_mask,
lte_band_preference_mask,
extended_lte_band_preference_size ? extended_lte_band_preference : NULL,
extended_lte_band_preference_size);
if (mm_bands->len == 0) {
g_clear_pointer (&mm_bands, g_array_unref);
......@@ -1680,6 +1708,7 @@ mm_shared_qmi_set_current_bands (MMIfaceModem *self,
QmiClient *client = NULL;
QmiNasBandPreference qmi_bands = 0;
QmiNasLteBandPreference qmi_lte_bands = 0;
guint64 extended_qmi_lte_bands[4] = { 0 };
if (!mm_shared_qmi_ensure_client (MM_SHARED_QMI (self),
QMI_SERVICE_NAS, &client,
......@@ -1697,14 +1726,29 @@ mm_shared_qmi_set_current_bands (MMIfaceModem *self,
g_object_unref (task);
return;
}
mm_modem_bands_to_qmi_band_preference (priv->supported_bands, &qmi_bands, &qmi_lte_bands);
} else
mm_modem_bands_to_qmi_band_preference (bands_array, &qmi_bands, &qmi_lte_bands);
bands_array = priv->supported_bands;
}
mm_modem_bands_to_qmi_band_preference (bands_array,
&qmi_bands,
&qmi_lte_bands,
priv->feature_extended_lte_band_preference == FEATURE_SUPPORTED ? extended_qmi_lte_bands : NULL,
G_N_ELEMENTS (extended_qmi_lte_bands));
input = qmi_message_nas_set_system_selection_preference_input_new ();
qmi_message_nas_set_system_selection_preference_input_set_band_preference (input, qmi_bands, NULL);
if (mm_iface_modem_is_3gpp_lte (self))
qmi_message_nas_set_system_selection_preference_input_set_lte_band_preference (input, qmi_lte_bands, NULL);
if (mm_iface_modem_is_3gpp_lte (self)) {
if (priv->feature_extended_lte_band_preference == FEATURE_SUPPORTED)
qmi_message_nas_set_system_selection_preference_input_set_extended_lte_band_preference (
input,
extended_qmi_lte_bands[0],
extended_qmi_lte_bands[1],
extended_qmi_lte_bands[2],
extended_qmi_lte_bands[3],
NULL);
else
qmi_message_nas_set_system_selection_preference_input_set_lte_band_preference (input, qmi_lte_bands, NULL);
}
qmi_message_nas_set_system_selection_preference_input_set_change_duration (input, QMI_NAS_CHANGE_DURATION_PERMANENT, NULL);
qmi_client_nas_set_system_selection_preference (
......