aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-04-02 02:55:16 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-07-07 14:35:49 -0400
commit430a3bbafdc78e30307e6eacb90980f29719d91c (patch)
treea6d3b0f6258cae7f403ce88f4fad703e5a475ec5
parent0ea8d0432c09f240b8dfdec0dc0e4abaf422b838 (diff)
iwlwifi: mvm: BT Coex - new API
Start the new BT Coex implementation. Don't react to notifications for now - only the initial configuration is implemented. The rest will happen in next patches. Since coex.c now uses the new the new structures in all functions, we need to adapt the code to compile, even if it doesn't run yet. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/coex.c181
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/debugfs.c22
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h193
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw-api.h5
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mvm.h4
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/ops.c3
6 files changed, 233 insertions, 175 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c
index f471de3373c9..f8c293e54b5e 100644
--- a/drivers/net/wireless/iwlwifi/mvm/coex.c
+++ b/drivers/net/wireless/iwlwifi/mvm/coex.c
@@ -70,48 +70,8 @@
70#include "mvm.h" 70#include "mvm.h"
71#include "iwl-debug.h" 71#include "iwl-debug.h"
72 72
73#define EVENT_PRIO_ANT(_evt, _prio, _shrd_ant) \
74 [(_evt)] = (((_prio) << BT_COEX_PRIO_TBL_PRIO_POS) | \
75 ((_shrd_ant) << BT_COEX_PRIO_TBL_SHRD_ANT_POS))
76
77static const u8 iwl_bt_prio_tbl[BT_COEX_PRIO_TBL_EVT_MAX] = {
78 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_INIT_CALIB1,
79 BT_COEX_PRIO_TBL_PRIO_BYPASS, 0),
80 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_INIT_CALIB2,
81 BT_COEX_PRIO_TBL_PRIO_BYPASS, 1),
82 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_PERIODIC_CALIB_LOW1,
83 BT_COEX_PRIO_TBL_PRIO_LOW, 0),
84 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_PERIODIC_CALIB_LOW2,
85 BT_COEX_PRIO_TBL_PRIO_LOW, 1),
86 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_PERIODIC_CALIB_HIGH1,
87 BT_COEX_PRIO_TBL_PRIO_HIGH, 0),
88 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_PERIODIC_CALIB_HIGH2,
89 BT_COEX_PRIO_TBL_PRIO_HIGH, 1),
90 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_DTIM,
91 BT_COEX_PRIO_TBL_DISABLED, 0),
92 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_SCAN52,
93 BT_COEX_PRIO_TBL_PRIO_COEX_OFF, 0),
94 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_SCAN24,
95 BT_COEX_PRIO_TBL_PRIO_COEX_ON, 0),
96 EVENT_PRIO_ANT(BT_COEX_PRIO_TBL_EVT_IDLE,
97 BT_COEX_PRIO_TBL_PRIO_COEX_IDLE, 0),
98 0, 0, 0, 0, 0, 0,
99};
100
101#undef EVENT_PRIO_ANT
102
103#define BT_ANTENNA_COUPLING_THRESHOLD (30) 73#define BT_ANTENNA_COUPLING_THRESHOLD (30)
104 74
105static int iwl_send_bt_prio_tbl(struct iwl_mvm *mvm)
106{
107 if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS))
108 return 0;
109
110 return iwl_mvm_send_cmd_pdu(mvm, BT_COEX_PRIO_TABLE, 0,
111 sizeof(struct iwl_bt_coex_prio_tbl_cmd),
112 &iwl_bt_prio_tbl);
113}
114
115const u32 iwl_bt_ack_kill_msk[BT_KILL_MSK_MAX] = { 75const u32 iwl_bt_ack_kill_msk[BT_KILL_MSK_MAX] = {
116 [BT_KILL_MSK_DEFAULT] = 0xffff0000, 76 [BT_KILL_MSK_DEFAULT] = 0xffff0000,
117 [BT_KILL_MSK_SCO_HID_A2DP] = 0xffffffff, 77 [BT_KILL_MSK_SCO_HID_A2DP] = 0xffffffff,
@@ -520,6 +480,7 @@ iwl_get_coex_type(struct iwl_mvm *mvm, const struct ieee80211_vif *vif)
520 struct ieee80211_chanctx_conf *chanctx_conf; 480 struct ieee80211_chanctx_conf *chanctx_conf;
521 enum iwl_bt_coex_lut_type ret; 481 enum iwl_bt_coex_lut_type ret;
522 u16 phy_ctx_id; 482 u16 phy_ctx_id;
483 u32 primary_ch_phy_id, secondary_ch_phy_id;
523 484
524 /* 485 /*
525 * Checking that we hold mvm->mutex is a good idea, but the rate 486 * Checking that we hold mvm->mutex is a good idea, but the rate
@@ -547,10 +508,13 @@ iwl_get_coex_type(struct iwl_mvm *mvm, const struct ieee80211_vif *vif)
547 } 508 }
548 509
549 phy_ctx_id = *((u16 *)chanctx_conf->drv_priv); 510 phy_ctx_id = *((u16 *)chanctx_conf->drv_priv);
511 primary_ch_phy_id = le32_to_cpu(mvm->last_bt_ci_cmd.primary_ch_phy_id);
512 secondary_ch_phy_id =
513 le32_to_cpu(mvm->last_bt_ci_cmd.secondary_ch_phy_id);
550 514
551 if (mvm->last_bt_ci_cmd.primary_ch_phy_id == phy_ctx_id) 515 if (primary_ch_phy_id == phy_ctx_id)
552 ret = le32_to_cpu(mvm->last_bt_notif.primary_ch_lut); 516 ret = le32_to_cpu(mvm->last_bt_notif.primary_ch_lut);
553 else if (mvm->last_bt_ci_cmd.secondary_ch_phy_id == phy_ctx_id) 517 else if (secondary_ch_phy_id == phy_ctx_id)
554 ret = le32_to_cpu(mvm->last_bt_notif.secondary_ch_lut); 518 ret = le32_to_cpu(mvm->last_bt_notif.secondary_ch_lut);
555 /* else - default = TX TX disallowed */ 519 /* else - default = TX TX disallowed */
556 520
@@ -561,25 +525,18 @@ iwl_get_coex_type(struct iwl_mvm *mvm, const struct ieee80211_vif *vif)
561 525
562int iwl_send_bt_init_conf(struct iwl_mvm *mvm) 526int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
563{ 527{
564 struct iwl_bt_coex_cmd_old *bt_cmd; 528 struct iwl_bt_coex_cmd *bt_cmd;
565 struct iwl_host_cmd cmd = { 529 struct iwl_host_cmd cmd = {
566 .id = BT_CONFIG, 530 .id = BT_CONFIG,
567 .len = { sizeof(*bt_cmd), }, 531 .len = { sizeof(*bt_cmd), },
568 .dataflags = { IWL_HCMD_DFL_NOCOPY, }, 532 .dataflags = { IWL_HCMD_DFL_NOCOPY, },
569 }; 533 };
570 int ret; 534 int ret;
571 u32 flags; 535 u32 mode;
572 536
573 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 537 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT))
574 return iwl_send_bt_init_conf_old(mvm); 538 return iwl_send_bt_init_conf_old(mvm);
575 539
576 /* TODO */
577 return 0;
578
579 ret = iwl_send_bt_prio_tbl(mvm);
580 if (ret)
581 return ret;
582
583 bt_cmd = kzalloc(sizeof(*bt_cmd), GFP_KERNEL); 540 bt_cmd = kzalloc(sizeof(*bt_cmd), GFP_KERNEL);
584 if (!bt_cmd) 541 if (!bt_cmd)
585 return -ENOMEM; 542 return -ENOMEM;
@@ -588,66 +545,46 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
588 lockdep_assert_held(&mvm->mutex); 545 lockdep_assert_held(&mvm->mutex);
589 546
590 if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) { 547 if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) {
548 u32 mode;
549
591 switch (mvm->bt_force_ant_mode) { 550 switch (mvm->bt_force_ant_mode) {
592 case BT_FORCE_ANT_AUTO:
593 flags = BT_COEX_AUTO_OLD;
594 break;
595 case BT_FORCE_ANT_BT: 551 case BT_FORCE_ANT_BT:
596 flags = BT_COEX_BT_OLD; 552 mode = BT_COEX_BT;
597 break; 553 break;
598 case BT_FORCE_ANT_WIFI: 554 case BT_FORCE_ANT_WIFI:
599 flags = BT_COEX_WIFI_OLD; 555 mode = BT_COEX_WIFI;
600 break; 556 break;
601 default: 557 default:
602 WARN_ON(1); 558 WARN_ON(1);
603 flags = 0; 559 mode = 0;
604 } 560 }
605 561
606 bt_cmd->flags = cpu_to_le32(flags); 562 bt_cmd->mode = cpu_to_le32(mode);
607 bt_cmd->valid_bit_msk = cpu_to_le32(BT_VALID_ENABLE);
608 goto send_cmd; 563 goto send_cmd;
609 } 564 }
610 565
611 bt_cmd->max_kill = 5; 566 bt_cmd->max_kill = cpu_to_le32(5);
612 bt_cmd->bt4_antenna_isolation_thr = BT_ANTENNA_COUPLING_THRESHOLD; 567 bt_cmd->bt4_antenna_isolation_thr =
613 bt_cmd->bt4_antenna_isolation = iwlwifi_mod_params.ant_coupling; 568 cpu_to_le32(BT_ANTENNA_COUPLING_THRESHOLD);
614 bt_cmd->bt4_tx_tx_delta_freq_thr = 15; 569 bt_cmd->bt4_tx_tx_delta_freq_thr = cpu_to_le32(15);
615 bt_cmd->bt4_tx_rx_max_freq0 = 15; 570 bt_cmd->bt4_tx_rx_max_freq0 = cpu_to_le32(15);
616 bt_cmd->override_primary_lut = BT_COEX_INVALID_LUT; 571 bt_cmd->override_primary_lut = cpu_to_le32(BT_COEX_INVALID_LUT);
617 bt_cmd->override_secondary_lut = BT_COEX_INVALID_LUT; 572 bt_cmd->override_secondary_lut = cpu_to_le32(BT_COEX_INVALID_LUT);
618 573
619 flags = iwlwifi_mod_params.bt_coex_active ? 574 mode = iwlwifi_mod_params.bt_coex_active ? BT_COEX_NW : BT_COEX_DISABLE;
620 BT_COEX_NW_OLD : BT_COEX_DISABLE_OLD; 575 bt_cmd->mode = cpu_to_le32(mode);
621 bt_cmd->flags = cpu_to_le32(flags);
622
623 bt_cmd->valid_bit_msk = cpu_to_le32(BT_VALID_ENABLE |
624 BT_VALID_BT_PRIO_BOOST |
625 BT_VALID_MAX_KILL |
626 BT_VALID_3W_TMRS |
627 BT_VALID_KILL_ACK |
628 BT_VALID_KILL_CTS |
629 BT_VALID_REDUCED_TX_POWER |
630 BT_VALID_LUT |
631 BT_VALID_WIFI_RX_SW_PRIO_BOOST |
632 BT_VALID_WIFI_TX_SW_PRIO_BOOST |
633 BT_VALID_ANT_ISOLATION |
634 BT_VALID_ANT_ISOLATION_THRS |
635 BT_VALID_TXTX_DELTA_FREQ_THRS |
636 BT_VALID_TXRX_MAX_FREQ_0 |
637 BT_VALID_SYNC_TO_SCO);
638 576
639 if (IWL_MVM_BT_COEX_SYNC2SCO) 577 if (IWL_MVM_BT_COEX_SYNC2SCO)
640 bt_cmd->flags |= cpu_to_le32(BT_COEX_SYNC2SCO); 578 bt_cmd->enabled_modules |=
579 cpu_to_le32(BT_COEX_SYNC2SCO_ENABLED);
641 580
642 if (IWL_MVM_BT_COEX_CORUNNING) { 581 if (IWL_MVM_BT_COEX_CORUNNING)
643 bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_CORUN_LUT_20 | 582 bt_cmd->enabled_modules |= cpu_to_le32(BT_COEX_CORUN_ENABLED);
644 BT_VALID_CORUN_LUT_40);
645 bt_cmd->flags |= cpu_to_le32(BT_COEX_CORUNNING);
646 }
647 583
648 if (IWL_MVM_BT_COEX_MPLUT) { 584 if (IWL_MVM_BT_COEX_MPLUT) {
649 bt_cmd->flags |= cpu_to_le32(BT_COEX_MPLUT); 585 bt_cmd->enabled_modules |= cpu_to_le32(BT_COEX_MPLUT_ENABLED);
650 bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_MULTI_PRIO_LUT); 586 bt_cmd->enabled_modules |=
587 cpu_to_le32(BT_COEX_MPLUT_BOOST_ENABLED);
651 } 588 }
652 589
653 if (mvm->cfg->bt_shared_single_ant) 590 if (mvm->cfg->bt_shared_single_ant)
@@ -657,20 +594,10 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
657 memcpy(&bt_cmd->decision_lut, iwl_combined_lookup, 594 memcpy(&bt_cmd->decision_lut, iwl_combined_lookup,
658 sizeof(iwl_combined_lookup)); 595 sizeof(iwl_combined_lookup));
659 596
660 /* Take first Co-running block LUT to get started */ 597 memcpy(&bt_cmd->mplut_prio_boost, iwl_bt_prio_boost,
661 memcpy(bt_cmd->bt4_corun_lut20, antenna_coupling_ranges[0].lut20,
662 sizeof(bt_cmd->bt4_corun_lut20));
663 memcpy(bt_cmd->bt4_corun_lut40, antenna_coupling_ranges[0].lut20,
664 sizeof(bt_cmd->bt4_corun_lut40));
665
666 memcpy(&bt_cmd->bt_prio_boost, iwl_bt_prio_boost,
667 sizeof(iwl_bt_prio_boost)); 598 sizeof(iwl_bt_prio_boost));
668 memcpy(&bt_cmd->bt4_multiprio_lut, iwl_bt_mprio_lut, 599 memcpy(&bt_cmd->multiprio_lut, iwl_bt_mprio_lut,
669 sizeof(iwl_bt_mprio_lut)); 600 sizeof(iwl_bt_mprio_lut));
670 bt_cmd->kill_ack_msk =
671 cpu_to_le32(iwl_bt_ack_kill_msk[BT_KILL_MSK_DEFAULT]);
672 bt_cmd->kill_cts_msk =
673 cpu_to_le32(iwl_bt_cts_kill_msk[BT_KILL_MSK_DEFAULT]);
674 601
675send_cmd: 602send_cmd:
676 memset(&mvm->last_bt_notif, 0, sizeof(mvm->last_bt_notif)); 603 memset(&mvm->last_bt_notif, 0, sizeof(mvm->last_bt_notif));
@@ -687,7 +614,7 @@ static int iwl_mvm_bt_udpate_ctrl_kill_msk(struct iwl_mvm *mvm,
687{ 614{
688 enum iwl_bt_kill_msk bt_kill_msk; 615 enum iwl_bt_kill_msk bt_kill_msk;
689 struct iwl_bt_coex_cmd_old *bt_cmd; 616 struct iwl_bt_coex_cmd_old *bt_cmd;
690 struct iwl_bt_coex_profile_notif_old *notif = &mvm->last_bt_notif; 617 struct iwl_bt_coex_profile_notif *notif = &mvm->last_bt_notif;
691 struct iwl_host_cmd cmd = { 618 struct iwl_host_cmd cmd = {
692 .id = BT_CONFIG, 619 .id = BT_CONFIG,
693 .data[0] = &bt_cmd, 620 .data[0] = &bt_cmd,
@@ -760,6 +687,8 @@ static int iwl_mvm_bt_coex_reduced_txp(struct iwl_mvm *mvm, u8 sta_id,
760 struct iwl_mvm_sta *mvmsta; 687 struct iwl_mvm_sta *mvmsta;
761 int ret; 688 int ret;
762 689
690 return 0;
691
763 mvmsta = iwl_mvm_sta_from_staid_protected(mvm, sta_id); 692 mvmsta = iwl_mvm_sta_from_staid_protected(mvm, sta_id);
764 if (!mvmsta) 693 if (!mvmsta)
765 return 0; 694 return 0;
@@ -793,7 +722,7 @@ static int iwl_mvm_bt_coex_reduced_txp(struct iwl_mvm *mvm, u8 sta_id,
793} 722}
794 723
795struct iwl_bt_iterator_data { 724struct iwl_bt_iterator_data {
796 struct iwl_bt_coex_profile_notif_old *notif; 725 struct iwl_bt_coex_profile_notif *notif;
797 struct iwl_mvm *mvm; 726 struct iwl_mvm *mvm;
798 u32 num_bss_ifaces; 727 u32 num_bss_ifaces;
799 bool reduced_tx_power; 728 bool reduced_tx_power;
@@ -883,9 +812,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
883 smps_mode = IEEE80211_SMPS_AUTOMATIC; 812 smps_mode = IEEE80211_SMPS_AUTOMATIC;
884 813
885 IWL_DEBUG_COEX(data->mvm, 814 IWL_DEBUG_COEX(data->mvm,
886 "mac %d: bt_status %d bt_activity_grading %d smps_req %d\n", 815 "mac %d: bt_activity_grading %d smps_req %d\n",
887 mvmvif->id, data->notif->bt_status, bt_activity_grading, 816 mvmvif->id, bt_activity_grading, smps_mode);
888 smps_mode);
889 817
890 iwl_mvm_update_smps(mvm, vif, IWL_MVM_SMPS_REQ_BT_COEX, smps_mode); 818 iwl_mvm_update_smps(mvm, vif, IWL_MVM_SMPS_REQ_BT_COEX, smps_mode);
891 819
@@ -937,7 +865,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
937 */ 865 */
938 if (iwl_get_coex_type(mvm, vif) == BT_COEX_LOOSE_LUT || 866 if (iwl_get_coex_type(mvm, vif) == BT_COEX_LOOSE_LUT ||
939 mvm->cfg->bt_shared_single_ant || !vif->bss_conf.assoc || 867 mvm->cfg->bt_shared_single_ant || !vif->bss_conf.assoc ||
940 !data->notif->bt_status) { 868 le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) == BT_OFF) {
941 data->reduced_tx_power = false; 869 data->reduced_tx_power = false;
942 iwl_mvm_bt_coex_reduced_txp(mvm, mvmvif->ap_sta_id, false); 870 iwl_mvm_bt_coex_reduced_txp(mvm, mvmvif->ap_sta_id, false);
943 iwl_mvm_bt_coex_enable_rssi_event(mvm, vif, false, 0); 871 iwl_mvm_bt_coex_enable_rssi_event(mvm, vif, false, 0);
@@ -983,7 +911,7 @@ static void iwl_mvm_bt_coex_notif_handle(struct iwl_mvm *mvm)
983 .notif = &mvm->last_bt_notif, 911 .notif = &mvm->last_bt_notif,
984 .reduced_tx_power = true, 912 .reduced_tx_power = true,
985 }; 913 };
986 struct iwl_bt_coex_ci_cmd_old cmd = {}; 914 struct iwl_bt_coex_ci_cmd cmd = {};
987 u8 ci_bw_idx; 915 u8 ci_bw_idx;
988 916
989 /* Ignore updates if we are in force mode */ 917 /* Ignore updates if we are in force mode */
@@ -1004,9 +932,7 @@ static void iwl_mvm_bt_coex_notif_handle(struct iwl_mvm *mvm)
1004 932
1005 if (chan->def.width < NL80211_CHAN_WIDTH_40) { 933 if (chan->def.width < NL80211_CHAN_WIDTH_40) {
1006 ci_bw_idx = 0; 934 ci_bw_idx = 0;
1007 cmd.co_run_bw_primary = 0;
1008 } else { 935 } else {
1009 cmd.co_run_bw_primary = 1;
1010 if (chan->def.center_freq1 > 936 if (chan->def.center_freq1 >
1011 chan->def.chan->center_freq) 937 chan->def.chan->center_freq)
1012 ci_bw_idx = 2; 938 ci_bw_idx = 2;
@@ -1016,7 +942,8 @@ static void iwl_mvm_bt_coex_notif_handle(struct iwl_mvm *mvm)
1016 942
1017 cmd.bt_primary_ci = 943 cmd.bt_primary_ci =
1018 iwl_ci_mask[chan->def.chan->hw_value][ci_bw_idx]; 944 iwl_ci_mask[chan->def.chan->hw_value][ci_bw_idx];
1019 cmd.primary_ch_phy_id = *((u16 *)data.primary->drv_priv); 945 cmd.primary_ch_phy_id =
946 cpu_to_le32(*((u16 *)data.primary->drv_priv));
1020 } 947 }
1021 948
1022 if (data.secondary) { 949 if (data.secondary) {
@@ -1028,9 +955,7 @@ static void iwl_mvm_bt_coex_notif_handle(struct iwl_mvm *mvm)
1028 955
1029 if (chan->def.width < NL80211_CHAN_WIDTH_40) { 956 if (chan->def.width < NL80211_CHAN_WIDTH_40) {
1030 ci_bw_idx = 0; 957 ci_bw_idx = 0;
1031 cmd.co_run_bw_secondary = 0;
1032 } else { 958 } else {
1033 cmd.co_run_bw_secondary = 1;
1034 if (chan->def.center_freq1 > 959 if (chan->def.center_freq1 >
1035 chan->def.chan->center_freq) 960 chan->def.chan->center_freq)
1036 ci_bw_idx = 2; 961 ci_bw_idx = 2;
@@ -1040,7 +965,8 @@ static void iwl_mvm_bt_coex_notif_handle(struct iwl_mvm *mvm)
1040 965
1041 cmd.bt_secondary_ci = 966 cmd.bt_secondary_ci =
1042 iwl_ci_mask[chan->def.chan->hw_value][ci_bw_idx]; 967 iwl_ci_mask[chan->def.chan->hw_value][ci_bw_idx];
1043 cmd.secondary_ch_phy_id = *((u16 *)data.secondary->drv_priv); 968 cmd.secondary_ch_phy_id =
969 cpu_to_le32(*((u16 *)data.secondary->drv_priv));
1044 } 970 }
1045 971
1046 rcu_read_unlock(); 972 rcu_read_unlock();
@@ -1078,9 +1004,6 @@ int iwl_mvm_rx_bt_coex_notif(struct iwl_mvm *mvm,
1078 return 0; 1004 return 0;
1079 1005
1080 IWL_DEBUG_COEX(mvm, "BT Coex Notification received\n"); 1006 IWL_DEBUG_COEX(mvm, "BT Coex Notification received\n");
1081 IWL_DEBUG_COEX(mvm, "\tBT status: %s\n",
1082 notif->bt_status ? "ON" : "OFF");
1083 IWL_DEBUG_COEX(mvm, "\tBT open conn %d\n", notif->bt_open_conn);
1084 IWL_DEBUG_COEX(mvm, "\tBT ci compliance %d\n", notif->bt_ci_compliance); 1007 IWL_DEBUG_COEX(mvm, "\tBT ci compliance %d\n", notif->bt_ci_compliance);
1085 IWL_DEBUG_COEX(mvm, "\tBT primary_ch_lut %d\n", 1008 IWL_DEBUG_COEX(mvm, "\tBT primary_ch_lut %d\n",
1086 le32_to_cpu(notif->primary_ch_lut)); 1009 le32_to_cpu(notif->primary_ch_lut));
@@ -1088,8 +1011,6 @@ int iwl_mvm_rx_bt_coex_notif(struct iwl_mvm *mvm,
1088 le32_to_cpu(notif->secondary_ch_lut)); 1011 le32_to_cpu(notif->secondary_ch_lut));
1089 IWL_DEBUG_COEX(mvm, "\tBT activity grading %d\n", 1012 IWL_DEBUG_COEX(mvm, "\tBT activity grading %d\n",
1090 le32_to_cpu(notif->bt_activity_grading)); 1013 le32_to_cpu(notif->bt_activity_grading));
1091 IWL_DEBUG_COEX(mvm, "\tBT agg traffic load %d\n",
1092 notif->bt_agg_traffic_load);
1093 1014
1094 /* remember this notification for future use: rssi fluctuations */ 1015 /* remember this notification for future use: rssi fluctuations */
1095 memcpy(&mvm->last_bt_notif, notif, sizeof(mvm->last_bt_notif)); 1016 memcpy(&mvm->last_bt_notif, notif, sizeof(mvm->last_bt_notif));
@@ -1181,7 +1102,7 @@ void iwl_mvm_bt_rssi_event(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1181 return; 1102 return;
1182 1103
1183 /* No BT - reports should be disabled */ 1104 /* No BT - reports should be disabled */
1184 if (!mvm->last_bt_notif.bt_status) 1105 if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) == BT_OFF)
1185 return; 1106 return;
1186 1107
1187 IWL_DEBUG_COEX(mvm, "RSSI for %pM is now %s\n", vif->bss_conf.bssid, 1108 IWL_DEBUG_COEX(mvm, "RSSI for %pM is now %s\n", vif->bss_conf.bssid,
@@ -1234,9 +1155,11 @@ u16 iwl_mvm_coex_agg_time_limit(struct iwl_mvm *mvm,
1234 if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) < 1155 if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
1235 BT_HIGH_TRAFFIC) 1156 BT_HIGH_TRAFFIC)
1236 return LINK_QUAL_AGG_TIME_LIMIT_DEF; 1157 return LINK_QUAL_AGG_TIME_LIMIT_DEF;
1237 1158/*
1159 TODO
1238 if (mvm->last_bt_notif.ttc_enabled) 1160 if (mvm->last_bt_notif.ttc_enabled)
1239 return LINK_QUAL_AGG_TIME_LIMIT_DEF; 1161 return LINK_QUAL_AGG_TIME_LIMIT_DEF;
1162*/
1240 1163
1241 lut_type = iwl_get_coex_type(mvm, mvmsta->vif); 1164 lut_type = iwl_get_coex_type(mvm, mvmsta->vif);
1242 1165
@@ -1256,11 +1179,11 @@ bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm,
1256 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 1179 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT))
1257 return iwl_mvm_coex_agg_time_limit_old(mvm, sta); 1180 return iwl_mvm_coex_agg_time_limit_old(mvm, sta);
1258 1181
1259 return true; 1182/*
1260 1183 TODO
1261 /* TODO */
1262 if (mvm->last_bt_notif.ttc_enabled) 1184 if (mvm->last_bt_notif.ttc_enabled)
1263 return true; 1185 return true;
1186*/
1264 1187
1265 if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) < 1188 if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
1266 BT_HIGH_TRAFFIC) 1189 BT_HIGH_TRAFFIC)
diff --git a/drivers/net/wireless/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/iwlwifi/mvm/debugfs.c
index b2c751e71581..e66c659b264a 100644
--- a/drivers/net/wireless/iwlwifi/mvm/debugfs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/debugfs.c
@@ -316,7 +316,7 @@ static ssize_t iwl_dbgfs_bt_notif_read(struct file *file, char __user *user_buf,
316 size_t count, loff_t *ppos) 316 size_t count, loff_t *ppos)
317{ 317{
318 struct iwl_mvm *mvm = file->private_data; 318 struct iwl_mvm *mvm = file->private_data;
319 struct iwl_bt_coex_profile_notif_old *notif = &mvm->last_bt_notif; 319 struct iwl_bt_coex_profile_notif *notif = &mvm->last_bt_notif;
320 char *buf; 320 char *buf;
321 int ret, pos = 0, bufsz = sizeof(char) * 1024; 321 int ret, pos = 0, bufsz = sizeof(char) * 1024;
322 322
@@ -378,14 +378,6 @@ static ssize_t iwl_dbgfs_bt_notif_read(struct file *file, char __user *user_buf,
378 BT_MBOX_PRINT(3, SSN_2, false); 378 BT_MBOX_PRINT(3, SSN_2, false);
379 BT_MBOX_PRINT(3, UPDATE_REQUEST, true); 379 BT_MBOX_PRINT(3, UPDATE_REQUEST, true);
380 380
381 pos += scnprintf(buf+pos, bufsz-pos, "bt_status = %d\n",
382 notif->bt_status);
383 pos += scnprintf(buf+pos, bufsz-pos, "bt_open_conn = %d\n",
384 notif->bt_open_conn);
385 pos += scnprintf(buf+pos, bufsz-pos, "bt_traffic_load = %d\n",
386 notif->bt_traffic_load);
387 pos += scnprintf(buf+pos, bufsz-pos, "bt_agg_traffic_load = %d\n",
388 notif->bt_agg_traffic_load);
389 pos += scnprintf(buf+pos, bufsz-pos, "bt_ci_compliance = %d\n", 381 pos += scnprintf(buf+pos, bufsz-pos, "bt_ci_compliance = %d\n",
390 notif->bt_ci_compliance); 382 notif->bt_ci_compliance);
391 pos += scnprintf(buf+pos, bufsz-pos, "primary_ch_lut = %d\n", 383 pos += scnprintf(buf+pos, bufsz-pos, "primary_ch_lut = %d\n",
@@ -411,7 +403,7 @@ static ssize_t iwl_dbgfs_bt_cmd_read(struct file *file, char __user *user_buf,
411 size_t count, loff_t *ppos) 403 size_t count, loff_t *ppos)
412{ 404{
413 struct iwl_mvm *mvm = file->private_data; 405 struct iwl_mvm *mvm = file->private_data;
414 struct iwl_bt_coex_ci_cmd_old *cmd = &mvm->last_bt_ci_cmd; 406 struct iwl_bt_coex_ci_cmd *cmd = &mvm->last_bt_ci_cmd;
415 char buf[256]; 407 char buf[256];
416 int bufsz = sizeof(buf); 408 int bufsz = sizeof(buf);
417 int pos = 0; 409 int pos = 0;
@@ -420,13 +412,11 @@ static ssize_t iwl_dbgfs_bt_cmd_read(struct file *file, char __user *user_buf,
420 412
421 pos += scnprintf(buf+pos, bufsz-pos, "Channel inhibition CMD\n"); 413 pos += scnprintf(buf+pos, bufsz-pos, "Channel inhibition CMD\n");
422 pos += scnprintf(buf+pos, bufsz-pos, 414 pos += scnprintf(buf+pos, bufsz-pos,
423 "\tPrimary Channel Bitmap 0x%016llx Fat: %d\n", 415 "\tPrimary Channel Bitmap 0x%016llx\n",
424 le64_to_cpu(cmd->bt_primary_ci), 416 le64_to_cpu(cmd->bt_primary_ci));
425 !!cmd->co_run_bw_primary);
426 pos += scnprintf(buf+pos, bufsz-pos, 417 pos += scnprintf(buf+pos, bufsz-pos,
427 "\tSecondary Channel Bitmap 0x%016llx Fat: %d\n", 418 "\tSecondary Channel Bitmap 0x%016llx\n",
428 le64_to_cpu(cmd->bt_secondary_ci), 419 le64_to_cpu(cmd->bt_secondary_ci));
429 !!cmd->co_run_bw_secondary);
430 420
431 pos += scnprintf(buf+pos, bufsz-pos, "BT Configuration CMD\n"); 421 pos += scnprintf(buf+pos, bufsz-pos, "BT Configuration CMD\n");
432 pos += scnprintf(buf+pos, bufsz-pos, "\tACK Kill Mask 0x%08x\n", 422 pos += scnprintf(buf+pos, bufsz-pos, "\tACK Kill Mask 0x%08x\n",
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h
index b3626cc69052..98becb9c90fa 100644
--- a/drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h
+++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h
@@ -208,26 +208,116 @@ struct iwl_bt_coex_cmd_old {
208 __le32 valid_bit_msk; 208 __le32 valid_bit_msk;
209} __packed; /* BT_COEX_CMD_API_S_VER_5 */ 209} __packed; /* BT_COEX_CMD_API_S_VER_5 */
210 210
211enum iwl_bt_coex_mode {
212 BT_COEX_DISABLE = 0x0,
213 BT_COEX_NW = 0x1,
214 BT_COEX_BT = 0x2,
215 BT_COEX_WIFI = 0x3,
216}; /* BT_COEX_MODES_E */
217
218enum iwl_bt_coex_enabled_modules {
219 BT_COEX_MPLUT_ENABLED = BIT(0),
220 BT_COEX_MPLUT_BOOST_ENABLED = BIT(1),
221 BT_COEX_SYNC2SCO_ENABLED = BIT(2),
222 BT_COEX_CORUN_ENABLED = BIT(3),
223}; /* BT_COEX_MODULES_ENABLE_E_VER_1 */
224
225/**
226 * struct iwl_bt_coex_cmd - bt coex configuration command
227 * @mode: enum %iwl_bt_coex_mode
228 * @enabled_modules: enum %iwl_bt_coex_enabled_modules
229 * @max_kill: max count of Tx retries due to kill from PTA
230 * @override_primary_lut: enum %iwl_bt_coex_lut_type: BT_COEX_INVALID_LUT
231 * should be set by default
232 * @override_secondary_lut: enum %iwl_bt_coex_lut_type: BT_COEX_INVALID_LUT
233 * should be set by default
234 * @bt4_antenna_isolation_thr: antenna threshold value
235 * @bt4_tx_tx_delta_freq_thr: TxTx delta frequency
236 * @bt4_tx_rx_max_freq0: TxRx max frequency
237 * @multiprio_lut: multi priority LUT configuration
238 * @mplut_prio_boost: BT priority boost registers
239 * @decision_lut: PTA decision LUT, per Prio-Ch
240 *
241 * The structure is used for the BT_COEX command.
242 */
243struct iwl_bt_coex_cmd {
244 __le32 mode;
245 __le32 enabled_modules;
246
247 __le32 max_kill;
248 __le32 override_primary_lut;
249 __le32 override_secondary_lut;
250 __le32 bt4_antenna_isolation_thr;
251
252 __le32 bt4_tx_tx_delta_freq_thr;
253 __le32 bt4_tx_rx_max_freq0;
254
255 __le32 multiprio_lut[BT_COEX_MULTI_PRIO_LUT_SIZE];
256 __le32 mplut_prio_boost[BT_COEX_BOOST_SIZE];
257
258 __le32 decision_lut[BT_COEX_MAX_LUT][BT_COEX_LUT_SIZE];
259} __packed; /* BT_COEX_CMD_API_S_VER_6 */
260
261/**
262 * struct iwl_bt_coex_corun_lut_update - bt coex update the corun lut
263 * @corun_lut20: co-running 20 MHz LUT configuration
264 * @corun_lut40: co-running 40 MHz LUT configuration
265 *
266 * The structure is used for the BT_COEX_UPDATE_CORUN_LUT command.
267 */
268struct iwl_bt_coex_corun_lut_update_cmd {
269 __le32 corun_lut20[BT_COEX_CORUN_LUT_SIZE];
270 __le32 corun_lut40[BT_COEX_CORUN_LUT_SIZE];
271} __packed; /* BT_COEX_UPDATE_CORUN_LUT_API_S_VER_1 */
272
273/**
274 * struct iwl_bt_coex_sw_boost - SW boost values
275 * @wifi_tx_prio_boost: SW boost of wifi tx priority
276 * @wifi_rx_prio_boost: SW boost of wifi rx priority
277 * @kill_ack_msk: kill ACK mask. 1 - Tx ACK, 0 - kill Tx of ACK.
278 * @kill_cts_msk: kill CTS mask. 1 - Tx CTS, 0 - kill Tx of CTS.
279 */
280struct iwl_bt_coex_sw_boost {
281 __le32 wifi_tx_prio_boost;
282 __le32 wifi_rx_prio_boost;
283 __le32 kill_ack_msk;
284 __le32 kill_cts_msk;
285};
286
287/**
288 * struct iwl_bt_coex_sw_boost_update_cmd - command to update the SW boost
289 * @boost_values: check struct %iwl_bt_coex_sw_boost - one for each channel
290 * primary / secondary / low priority
291 */
292struct iwl_bt_coex_sw_boost_update_cmd {
293 struct iwl_bt_coex_sw_boost boost_values[3];
294} __packed; /* BT_COEX_UPDATE_SW_BOOST_S_VER_1 */
295
296/**
297 * struct iwl_bt_coex_reduced_txp_update_cmd
298 * @reduced_txp: bit BT_REDUCED_TX_POWER_BIT to enable / disable, rest of the
299 * bits are the sta_id (value)
300 */
301struct iwl_bt_coex_reduced_txp_update_cmd {
302 __le32 reduced_txp;
303} __packed; /* BT_COEX_UPDATE_REDUCED_TX_POWER_API_S_VER_1 */
304
211/** 305/**
212 * struct iwl_bt_coex_ci_cmd - bt coex channel inhibition command 306 * struct iwl_bt_coex_ci_cmd - bt coex channel inhibition command
213 * @bt_primary_ci: 307 * @bt_primary_ci:
214 * @bt_secondary_ci:
215 * @co_run_bw_primary:
216 * @co_run_bw_secondary:
217 * @primary_ch_phy_id: 308 * @primary_ch_phy_id:
309 * @bt_secondary_ci:
218 * @secondary_ch_phy_id: 310 * @secondary_ch_phy_id:
219 * 311 *
220 * Used for BT_COEX_CI command 312 * Used for BT_COEX_CI command
221 */ 313 */
222struct iwl_bt_coex_ci_cmd_old { 314struct iwl_bt_coex_ci_cmd {
223 __le64 bt_primary_ci; 315 __le64 bt_primary_ci;
224 __le64 bt_secondary_ci; 316 __le32 primary_ch_phy_id;
225 317
226 u8 co_run_bw_primary; 318 __le64 bt_secondary_ci;
227 u8 co_run_bw_secondary; 319 __le32 secondary_ch_phy_id;
228 u8 primary_ch_phy_id; 320} __packed; /* BT_CI_MSG_API_S_VER_2 */
229 u8 secondary_ch_phy_id;
230} __packed; /* BT_CI_MSG_API_S_VER_1 */
231 321
232#define BT_MBOX(n_dw, _msg, _pos, _nbits) \ 322#define BT_MBOX(n_dw, _msg, _pos, _nbits) \
233 BT_MBOX##n_dw##_##_msg##_POS = (_pos), \ 323 BT_MBOX##n_dw##_##_msg##_POS = (_pos), \
@@ -296,35 +386,34 @@ enum iwl_bt_activity_grading {
296 BT_HIGH_TRAFFIC = 3, 386 BT_HIGH_TRAFFIC = 3,
297}; /* BT_COEX_BT_ACTIVITY_GRADING_API_E_VER_1 */ 387}; /* BT_COEX_BT_ACTIVITY_GRADING_API_E_VER_1 */
298 388
389enum iwl_bt_ci_compliance {
390 BT_CI_COMPLIANCE_NONE = 0,
391 BT_CI_COMPLIANCE_PRIMARY = 1,
392 BT_CI_COMPLIANCE_SECONDARY = 2,
393 BT_CI_COMPLIANCE_BOTH = 3,
394}; /* BT_COEX_CI_COMPLIENCE_E_VER_1 */
395
299/** 396/**
300 * struct iwl_bt_coex_profile_notif - notification about BT coex 397 * struct iwl_bt_coex_profile_notif - notification about BT coex
301 * @mbox_msg: message from BT to WiFi 398 * @mbox_msg: message from BT to WiFi
302 * @msg_idx: the index of the message 399 * @msg_idx: the index of the message
303 * @bt_status: 0 - off, 1 - on 400 * @bt_ci_compliance: enum %iwl_bt_ci_compliance
304 * @bt_open_conn: number of BT connections open 401 * @primary_ch_lut: LUT used for primary channel enum %iwl_bt_coex_lut_type
305 * @bt_traffic_load: load of BT traffic 402 * @secondary_ch_lut: LUT used for secondary channel enume %iwl_bt_coex_lut_type
306 * @bt_agg_traffic_load: aggregated load of BT traffic
307 * @bt_ci_compliance: 0 - no CI compliance, 1 - CI compliant
308 * @ttc_enabled: true if ttc has been enabled by the firmware
309 * @primary_ch_lut: LUT used for primary channel
310 * @secondary_ch_lut: LUT used for secondary channel
311 * @bt_activity_grading: the activity of BT enum %iwl_bt_activity_grading 403 * @bt_activity_grading: the activity of BT enum %iwl_bt_activity_grading
404 * @ttc_rrc_status: is TTC or RRC enabled - one bit per PHY
312 */ 405 */
313struct iwl_bt_coex_profile_notif_old { 406struct iwl_bt_coex_profile_notif {
314 __le32 mbox_msg[4]; 407 __le32 mbox_msg[4];
315 __le32 msg_idx; 408 __le32 msg_idx;
316 u8 bt_status; 409 __le32 bt_ci_compliance;
317 u8 bt_open_conn;
318 u8 bt_traffic_load;
319 u8 bt_agg_traffic_load;
320 u8 bt_ci_compliance;
321 u8 ttc_enabled;
322 __le16 reserved;
323 410
324 __le32 primary_ch_lut; 411 __le32 primary_ch_lut;
325 __le32 secondary_ch_lut; 412 __le32 secondary_ch_lut;
326 __le32 bt_activity_grading; 413 __le32 bt_activity_grading;
327} __packed; /* BT_COEX_PROFILE_NTFY_API_S_VER_3 */ 414 u8 ttc_rrc_status;
415 u8 reserved[3];
416} __packed; /* BT_COEX_PROFILE_NTFY_API_S_VER_4 */
328 417
329enum iwl_bt_coex_prio_table_event { 418enum iwl_bt_coex_prio_table_event {
330 BT_COEX_PRIO_TBL_EVT_INIT_CALIB1 = 0, 419 BT_COEX_PRIO_TBL_EVT_INIT_CALIB1 = 0,
@@ -363,4 +452,54 @@ struct iwl_bt_coex_prio_tbl_cmd {
363 u8 prio_tbl[BT_COEX_PRIO_TBL_EVT_MAX]; 452 u8 prio_tbl[BT_COEX_PRIO_TBL_EVT_MAX];
364} __packed; 453} __packed;
365 454
455/**
456 * struct iwl_bt_coex_ci_cmd_old - bt coex channel inhibition command
457 * @bt_primary_ci:
458 * @bt_secondary_ci:
459 * @co_run_bw_primary:
460 * @co_run_bw_secondary:
461 * @primary_ch_phy_id:
462 * @secondary_ch_phy_id:
463 *
464 * Used for BT_COEX_CI command
465 */
466struct iwl_bt_coex_ci_cmd_old {
467 __le64 bt_primary_ci;
468 __le64 bt_secondary_ci;
469
470 u8 co_run_bw_primary;
471 u8 co_run_bw_secondary;
472 u8 primary_ch_phy_id;
473 u8 secondary_ch_phy_id;
474} __packed; /* BT_CI_MSG_API_S_VER_1 */
475
476/**
477 * struct iwl_bt_coex_profile_notif_old - notification about BT coex
478 * @mbox_msg: message from BT to WiFi
479 * @msg_idx: the index of the message
480 * @bt_status: 0 - off, 1 - on
481 * @bt_open_conn: number of BT connections open
482 * @bt_traffic_load: load of BT traffic
483 * @bt_agg_traffic_load: aggregated load of BT traffic
484 * @bt_ci_compliance: 0 - no CI compliance, 1 - CI compliant
485 * @primary_ch_lut: LUT used for primary channel
486 * @secondary_ch_lut: LUT used for secondary channel
487 * @bt_activity_grading: the activity of BT enum %iwl_bt_activity_grading
488 */
489struct iwl_bt_coex_profile_notif_old {
490 __le32 mbox_msg[4];
491 __le32 msg_idx;
492 u8 bt_status;
493 u8 bt_open_conn;
494 u8 bt_traffic_load;
495 u8 bt_agg_traffic_load;
496 u8 bt_ci_compliance;
497 u8 ttc_enabled;
498 __le16 reserved;
499
500 __le32 primary_ch_lut;
501 __le32 secondary_ch_lut;
502 __le32 bt_activity_grading;
503} __packed; /* BT_COEX_PROFILE_NTFY_API_S_VER_3 */
504
366#endif /* __fw_api_bt_coex_h__ */ 505#endif /* __fw_api_bt_coex_h__ */
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api.h b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
index 309a9b9a94fe..3983a2beb246 100644
--- a/drivers/net/wireless/iwlwifi/mvm/fw-api.h
+++ b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
@@ -163,7 +163,6 @@ enum {
163 BEACON_NOTIFICATION = 0x90, 163 BEACON_NOTIFICATION = 0x90,
164 BEACON_TEMPLATE_CMD = 0x91, 164 BEACON_TEMPLATE_CMD = 0x91,
165 TX_ANT_CONFIGURATION_CMD = 0x98, 165 TX_ANT_CONFIGURATION_CMD = 0x98,
166 BT_CONFIG = 0x9b,
167 STATISTICS_NOTIFICATION = 0x9d, 166 STATISTICS_NOTIFICATION = 0x9d,
168 EOSP_NOTIFICATION = 0x9e, 167 EOSP_NOTIFICATION = 0x9e,
169 REDUCE_TX_POWER_CMD = 0x9f, 168 REDUCE_TX_POWER_CMD = 0x9f,
@@ -185,6 +184,10 @@ enum {
185 BT_COEX_PRIO_TABLE = 0xcc, 184 BT_COEX_PRIO_TABLE = 0xcc,
186 BT_COEX_PROT_ENV = 0xcd, 185 BT_COEX_PROT_ENV = 0xcd,
187 BT_PROFILE_NOTIFICATION = 0xce, 186 BT_PROFILE_NOTIFICATION = 0xce,
187 BT_CONFIG = 0x9b,
188 BT_COEX_UPDATE_SW_BOOST = 0x5a,
189 BT_COEX_UPDATE_CORUN_LUT = 0x5b,
190 BT_COEX_UPDATE_REDUCED_TXP = 0x5c,
188 BT_COEX_CI = 0x5d, 191 BT_COEX_CI = 0x5d,
189 192
190 REPLY_SF_CFG_CMD = 0xd1, 193 REPLY_SF_CFG_CMD = 0xd1,
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
index 0b52d0ae4a0d..fbe93a1df93a 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
@@ -633,8 +633,8 @@ struct iwl_mvm {
633 633
634 struct iwl_bt_coex_profile_notif_old last_bt_notif_old; 634 struct iwl_bt_coex_profile_notif_old last_bt_notif_old;
635 struct iwl_bt_coex_ci_cmd_old last_bt_ci_cmd_old; 635 struct iwl_bt_coex_ci_cmd_old last_bt_ci_cmd_old;
636 struct iwl_bt_coex_profile_notif_old last_bt_notif; 636 struct iwl_bt_coex_profile_notif last_bt_notif;
637 struct iwl_bt_coex_ci_cmd_old last_bt_ci_cmd; 637 struct iwl_bt_coex_ci_cmd last_bt_ci_cmd;
638 638
639 u32 last_ant_isol; 639 u32 last_ant_isol;
640 u8 last_corun_lut; 640 u8 last_corun_lut;
diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c
index 15c13a722a93..b843870be8b7 100644
--- a/drivers/net/wireless/iwlwifi/mvm/ops.c
+++ b/drivers/net/wireless/iwlwifi/mvm/ops.c
@@ -324,6 +324,9 @@ static const char *const iwl_mvm_cmd_strings[REPLY_MAX] = {
324 CMD(REPLY_THERMAL_MNG_BACKOFF), 324 CMD(REPLY_THERMAL_MNG_BACKOFF),
325 CMD(MAC_PM_POWER_TABLE), 325 CMD(MAC_PM_POWER_TABLE),
326 CMD(BT_COEX_CI), 326 CMD(BT_COEX_CI),
327 CMD(BT_COEX_UPDATE_SW_BOOST),
328 CMD(BT_COEX_UPDATE_CORUN_LUT),
329 CMD(BT_COEX_UPDATE_REDUCED_TXP),
327 CMD(PSM_UAPSD_AP_MISBEHAVING_NOTIFICATION), 330 CMD(PSM_UAPSD_AP_MISBEHAVING_NOTIFICATION),
328 CMD(ANTENNA_COUPLING_NOTIFICATION), 331 CMD(ANTENNA_COUPLING_NOTIFICATION),
329}; 332};