To support concurrency, we implement beacon filter, CQM and ieee80211::remain_on_channel ops. Since our firmware doesn't support to TX null packet while doing remain-on-channel, driver does this instead. To ensure null packet send out before switching channel, patch 2/5 adds a waiting mechanism. The patches 4/5 and 5/5 refine things we found during developing. v6: - patch 2/5 - use kfree_rcu to free 'wait' object, so don't need spin_lock introduced by v5. Then, no lock in TX path. - others - no change v5: - patch 2/5 - use owner with spin_lock to replace original third work to make code simpler. - others - no change v4: - patch 1/5 - define h2c/c2h struct to set/get skb->data, for example * h2c = (__le32 *)skb->data; --> h2c = (struct rtw89_h2c_bcnfltr *)skb->data; * #define H2C_CFG_BCN_FLTR_LEN 4 (remove) --> sizeof(*h2c) * h2c[0] = le32_encode_bits(connect, RTW89_H2C_BCNFLTR_W0_MON_RSSI) --> h2c->w0 = le32_encode_bits(connect, RTW89_H2C_BCNFLTR_W0_MON_RSSI) - I think this could improve a little more. If anyone have more ideas in the future, I will open mind to change them again to make them look better. - others - no change v3: - patch 1/5 - remove unnecessary type casting - use clear style of mask definition for H2C/C2H - patch 2/5 - add comment to describe why polling can help freeing - others - no change v2: - messed up, please ignore. Po-Hao Huang (5): wifi: rtw89: 8852c: add beacon filter and CQM support wifi: rtw89: add function to wait for completion of TX skbs wifi: rtw89: add ieee80211::remain_on_channel ops wifi: rtw89: add flag check for power state wifi: rtw89: fix authentication fail during scan drivers/net/wireless/realtek/rtw89/chan.c | 35 +++ drivers/net/wireless/realtek/rtw89/chan.h | 3 + drivers/net/wireless/realtek/rtw89/core.c | 261 +++++++++++++++++- drivers/net/wireless/realtek/rtw89/core.h | 71 +++++ drivers/net/wireless/realtek/rtw89/fw.c | 116 +++++++- drivers/net/wireless/realtek/rtw89/fw.h | 63 +++++ drivers/net/wireless/realtek/rtw89/mac.c | 62 +++++ drivers/net/wireless/realtek/rtw89/mac.h | 1 + drivers/net/wireless/realtek/rtw89/mac80211.c | 88 +++++- drivers/net/wireless/realtek/rtw89/pci.c | 5 + drivers/net/wireless/realtek/rtw89/pci.h | 4 +- drivers/net/wireless/realtek/rtw89/ps.c | 6 + drivers/net/wireless/realtek/rtw89/ps.h | 16 ++ 13 files changed, 716 insertions(+), 15 deletions(-) -- 2.25.1