Merge "ath10k: Wait for peer delete response to synchronize with fw"
This commit is contained in:
commit
ae365a78ad
5 changed files with 27 additions and 0 deletions
|
@ -2375,6 +2375,7 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
|
||||||
init_completion(&ar->vdev_setup_done);
|
init_completion(&ar->vdev_setup_done);
|
||||||
init_completion(&ar->thermal.wmi_sync);
|
init_completion(&ar->thermal.wmi_sync);
|
||||||
init_completion(&ar->bss_survey_done);
|
init_completion(&ar->bss_survey_done);
|
||||||
|
init_completion(&ar->peer_delete_done);
|
||||||
|
|
||||||
INIT_DELAYED_WORK(&ar->scan.timeout, ath10k_scan_timeout_work);
|
INIT_DELAYED_WORK(&ar->scan.timeout, ath10k_scan_timeout_work);
|
||||||
|
|
||||||
|
|
|
@ -957,6 +957,7 @@ struct ath10k {
|
||||||
|
|
||||||
struct fw_flag *fw_flags;
|
struct fw_flag *fw_flags;
|
||||||
/* set for bmi chip sets */
|
/* set for bmi chip sets */
|
||||||
|
struct completion peer_delete_done;
|
||||||
bool is_bmi;
|
bool is_bmi;
|
||||||
enum ieee80211_sta_state sta_state;
|
enum ieee80211_sta_state sta_state;
|
||||||
/* must be last */
|
/* must be last */
|
||||||
|
|
|
@ -782,6 +782,7 @@ static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
|
||||||
static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
|
static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
unsigned long time_left;
|
||||||
|
|
||||||
lockdep_assert_held(&ar->conf_mutex);
|
lockdep_assert_held(&ar->conf_mutex);
|
||||||
|
|
||||||
|
@ -793,6 +794,16 @@ static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
if (QCA_REV_WCN3990(ar)) {
|
||||||
|
time_left = wait_for_completion_timeout(&ar->peer_delete_done,
|
||||||
|
5 * HZ);
|
||||||
|
|
||||||
|
if (time_left == 0) {
|
||||||
|
ath10k_warn(ar, "Timeout in receiving peer delete response\n");
|
||||||
|
return -ETIMEDOUT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ar->num_peers--;
|
ar->num_peers--;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -412,6 +412,15 @@ static int ath10k_wmi_tlv_event_tx_pause(struct ath10k *ar,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ath10k_wmi_tlv_event_peer_delete_resp(struct ath10k *ar,
|
||||||
|
struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_TLV_PEER_DELETE_RESP_EVENTID\n");
|
||||||
|
complete(&ar->peer_delete_done);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/***********/
|
/***********/
|
||||||
/* TLV ops */
|
/* TLV ops */
|
||||||
/***********/
|
/***********/
|
||||||
|
@ -552,6 +561,9 @@ static void ath10k_wmi_tlv_op_rx(struct ath10k *ar, struct sk_buff *skb)
|
||||||
case WMI_TLV_TX_PAUSE_EVENTID:
|
case WMI_TLV_TX_PAUSE_EVENTID:
|
||||||
ath10k_wmi_tlv_event_tx_pause(ar, skb);
|
ath10k_wmi_tlv_event_tx_pause(ar, skb);
|
||||||
break;
|
break;
|
||||||
|
case WMI_TLV_PEER_DELETE_RESP_EVENTID:
|
||||||
|
ath10k_wmi_tlv_event_peer_delete_resp(ar, skb);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI, "Unknown eventid: %d\n", id);
|
ath10k_dbg(ar, ATH10K_DBG_WMI, "Unknown eventid: %d\n", id);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -313,6 +313,8 @@ enum wmi_tlv_event_id {
|
||||||
WMI_TLV_PEER_TX_FAIL_CNT_THR_EVENTID,
|
WMI_TLV_PEER_TX_FAIL_CNT_THR_EVENTID,
|
||||||
WMI_TLV_PEER_ESTIMATED_LINKSPEED_EVENTID,
|
WMI_TLV_PEER_ESTIMATED_LINKSPEED_EVENTID,
|
||||||
WMI_TLV_PEER_STATE_EVENTID,
|
WMI_TLV_PEER_STATE_EVENTID,
|
||||||
|
WMI_TLV_PEER_ASSOC_CONF_EVENTID,
|
||||||
|
WMI_TLV_PEER_DELETE_RESP_EVENTID,
|
||||||
WMI_TLV_MGMT_RX_EVENTID = WMI_TLV_EV(WMI_TLV_GRP_MGMT),
|
WMI_TLV_MGMT_RX_EVENTID = WMI_TLV_EV(WMI_TLV_GRP_MGMT),
|
||||||
WMI_TLV_HOST_SWBA_EVENTID,
|
WMI_TLV_HOST_SWBA_EVENTID,
|
||||||
WMI_TLV_TBTTOFFSET_UPDATE_EVENTID,
|
WMI_TLV_TBTTOFFSET_UPDATE_EVENTID,
|
||||||
|
|
Loading…
Add table
Reference in a new issue