|
@@ -7,6 +7,7 @@
|
|
|
*
|
|
|
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
|
|
* Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
|
|
|
+ * Copyright(c) 2017 Intel Deutschland GmbH
|
|
|
*
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
* it under the terms of version 2 of the GNU General Public License as
|
|
@@ -250,12 +251,30 @@ int iwl_mvm_phy_ctxt_changed(struct iwl_mvm *mvm, struct iwl_mvm_phy_ctxt *ctxt,
|
|
|
struct cfg80211_chan_def *chandef,
|
|
|
u8 chains_static, u8 chains_dynamic)
|
|
|
{
|
|
|
+ enum iwl_phy_ctxt_action action = FW_CTXT_ACTION_MODIFY;
|
|
|
+
|
|
|
lockdep_assert_held(&mvm->mutex);
|
|
|
|
|
|
+ /* In CDB mode we cannot modify PHY context between bands so... */
|
|
|
+ if (iwl_mvm_has_new_tx_api(mvm) &&
|
|
|
+ ctxt->channel->band != chandef->chan->band) {
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ /* ... remove it here ...*/
|
|
|
+ ret = iwl_mvm_phy_ctxt_apply(mvm, ctxt, chandef,
|
|
|
+ chains_static, chains_dynamic,
|
|
|
+ FW_CTXT_ACTION_REMOVE, 0);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ /* ... and proceed to add it again */
|
|
|
+ action = FW_CTXT_ACTION_ADD;
|
|
|
+ }
|
|
|
+
|
|
|
ctxt->channel = chandef->chan;
|
|
|
return iwl_mvm_phy_ctxt_apply(mvm, ctxt, chandef,
|
|
|
chains_static, chains_dynamic,
|
|
|
- FW_CTXT_ACTION_MODIFY, 0);
|
|
|
+ action, 0);
|
|
|
}
|
|
|
|
|
|
void iwl_mvm_phy_ctxt_unref(struct iwl_mvm *mvm, struct iwl_mvm_phy_ctxt *ctxt)
|