|
@@ -148,215 +148,6 @@ static const __le64 iwl_ci_mask[][3] = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
-struct corunning_block_luts {
|
|
|
- u8 range;
|
|
|
- __le32 lut20[BT_COEX_CORUN_LUT_SIZE];
|
|
|
-};
|
|
|
-
|
|
|
-/*
|
|
|
- * Ranges for the antenna coupling calibration / co-running block LUT:
|
|
|
- * LUT0: [ 0, 12[
|
|
|
- * LUT1: [12, 20[
|
|
|
- * LUT2: [20, 21[
|
|
|
- * LUT3: [21, 23[
|
|
|
- * LUT4: [23, 27[
|
|
|
- * LUT5: [27, 30[
|
|
|
- * LUT6: [30, 32[
|
|
|
- * LUT7: [32, 33[
|
|
|
- * LUT8: [33, - [
|
|
|
- */
|
|
|
-static const struct corunning_block_luts antenna_coupling_ranges[] = {
|
|
|
- {
|
|
|
- .range = 0,
|
|
|
- .lut20 = {
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- .range = 12,
|
|
|
- .lut20 = {
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- .range = 20,
|
|
|
- .lut20 = {
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- .range = 21,
|
|
|
- .lut20 = {
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- .range = 23,
|
|
|
- .lut20 = {
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- .range = 27,
|
|
|
- .lut20 = {
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- .range = 30,
|
|
|
- .lut20 = {
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- .range = 32,
|
|
|
- .lut20 = {
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- .range = 33,
|
|
|
- .lut20 = {
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
- },
|
|
|
- },
|
|
|
-};
|
|
|
-
|
|
|
static enum iwl_bt_coex_lut_type
|
|
|
iwl_get_coex_type(struct iwl_mvm *mvm, const struct ieee80211_vif *vif)
|
|
|
{
|
|
@@ -437,9 +228,6 @@ int iwl_mvm_send_bt_init_conf(struct iwl_mvm *mvm)
|
|
|
bt_cmd.enabled_modules |=
|
|
|
cpu_to_le32(BT_COEX_SYNC2SCO_ENABLED);
|
|
|
|
|
|
- if (iwl_mvm_bt_is_plcr_supported(mvm))
|
|
|
- bt_cmd.enabled_modules |= cpu_to_le32(BT_COEX_CORUN_ENABLED);
|
|
|
-
|
|
|
if (iwl_mvm_is_mplut_supported(mvm))
|
|
|
bt_cmd.enabled_modules |= cpu_to_le32(BT_COEX_MPLUT_ENABLED);
|
|
|
|
|
@@ -908,59 +696,3 @@ void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm)
|
|
|
{
|
|
|
iwl_mvm_bt_coex_notif_handle(mvm);
|
|
|
}
|
|
|
-
|
|
|
-void iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm,
|
|
|
- struct iwl_rx_cmd_buffer *rxb)
|
|
|
-{
|
|
|
- struct iwl_rx_packet *pkt = rxb_addr(rxb);
|
|
|
- struct iwl_mvm_antenna_coupling_notif *notif = (void *)pkt->data;
|
|
|
- u32 ant_isolation = le32_to_cpu(notif->isolation);
|
|
|
- struct iwl_bt_coex_corun_lut_update_cmd cmd = {};
|
|
|
- u8 __maybe_unused lower_bound, upper_bound;
|
|
|
- u8 lut;
|
|
|
-
|
|
|
- if (!iwl_mvm_bt_is_plcr_supported(mvm))
|
|
|
- return;
|
|
|
-
|
|
|
- lockdep_assert_held(&mvm->mutex);
|
|
|
-
|
|
|
- /* Ignore updates if we are in force mode */
|
|
|
- if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS))
|
|
|
- return;
|
|
|
-
|
|
|
- if (ant_isolation == mvm->last_ant_isol)
|
|
|
- return;
|
|
|
-
|
|
|
- for (lut = 0; lut < ARRAY_SIZE(antenna_coupling_ranges) - 1; lut++)
|
|
|
- if (ant_isolation < antenna_coupling_ranges[lut + 1].range)
|
|
|
- break;
|
|
|
-
|
|
|
- lower_bound = antenna_coupling_ranges[lut].range;
|
|
|
-
|
|
|
- if (lut < ARRAY_SIZE(antenna_coupling_ranges) - 1)
|
|
|
- upper_bound = antenna_coupling_ranges[lut + 1].range;
|
|
|
- else
|
|
|
- upper_bound = antenna_coupling_ranges[lut].range;
|
|
|
-
|
|
|
- IWL_DEBUG_COEX(mvm, "Antenna isolation=%d in range [%d,%d[, lut=%d\n",
|
|
|
- ant_isolation, lower_bound, upper_bound, lut);
|
|
|
-
|
|
|
- mvm->last_ant_isol = ant_isolation;
|
|
|
-
|
|
|
- if (mvm->last_corun_lut == lut)
|
|
|
- return;
|
|
|
-
|
|
|
- mvm->last_corun_lut = lut;
|
|
|
-
|
|
|
- /* For the moment, use the same LUT for 20GHz and 40GHz */
|
|
|
- memcpy(&cmd.corun_lut20, antenna_coupling_ranges[lut].lut20,
|
|
|
- sizeof(cmd.corun_lut20));
|
|
|
-
|
|
|
- memcpy(&cmd.corun_lut40, antenna_coupling_ranges[lut].lut20,
|
|
|
- sizeof(cmd.corun_lut40));
|
|
|
-
|
|
|
- if (iwl_mvm_send_cmd_pdu(mvm, BT_COEX_UPDATE_CORUN_LUT, 0,
|
|
|
- sizeof(cmd), &cmd))
|
|
|
- IWL_ERR(mvm,
|
|
|
- "failed to send BT_COEX_UPDATE_CORUN_LUT command\n");
|
|
|
-}
|