staging: wilc1000: handle mgmt frames for both interfaces during concurrent mode
During concurrent mode(AP/STA + P2P), pass the mgmt frames received from firmware to appropriate interface. Iterate the complete interface list to pass frames on the interface which has registered to receive mgmt frame. Added extra time for 'remain_on_ch' timer to ensure that timeout for uncanceled remain_on_channel is not triggered & 'p2p_listen_state' is not cleared before passing the mgmt frames to p2p interface. Signed-off-by: Ajay Singh <ajay.kathat@microchip.com> Link: https://lore.kernel.org/r/20191018124511.22751-1-ajay.kathat@microchip.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d59dc92f1b
commit
3a4cffe67f
|
@ -817,16 +817,13 @@ void wilc_wfi_mgmt_rx(struct wilc *wilc, u8 *buff, u32 size)
|
|||
list_for_each_entry_rcu(vif, &wilc->vif_list, list) {
|
||||
u16 type = le16_to_cpup((__le16 *)buff);
|
||||
|
||||
if ((type == vif->frame_reg[0].type && vif->frame_reg[0].reg) ||
|
||||
(type == vif->frame_reg[1].type && vif->frame_reg[1].reg)) {
|
||||
if (vif->priv.p2p_listen_state &&
|
||||
((type == vif->frame_reg[0].type && vif->frame_reg[0].reg) ||
|
||||
(type == vif->frame_reg[1].type && vif->frame_reg[1].reg)))
|
||||
wilc_wfi_p2p_rx(vif, buff, size);
|
||||
break;
|
||||
}
|
||||
|
||||
if (vif->monitor_flag) {
|
||||
if (vif->monitor_flag)
|
||||
wilc_wfi_monitor_rx(wilc->monitor_dev, buff, size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
srcu_read_unlock(&wilc->srcu, srcu_idx);
|
||||
}
|
||||
|
|
|
@ -1138,7 +1138,7 @@ static int remain_on_channel(struct wiphy *wiphy,
|
|||
|
||||
cfg80211_ready_on_channel(wdev, *cookie, chan, duration, GFP_KERNEL);
|
||||
mod_timer(&vif->hif_drv->remain_on_ch_timer,
|
||||
jiffies + msecs_to_jiffies(duration));
|
||||
jiffies + msecs_to_jiffies(duration + 1000));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue