2022-08-09 18:49:40 +08:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
|
|
|
* Copyright(c) 2020-2022 Realtek Corporation
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __RTW89_CHAN_H__
|
|
|
|
#define __RTW89_CHAN_H__
|
|
|
|
|
|
|
|
#include "core.h"
|
|
|
|
|
2023-08-16 16:21:33 +08:00
|
|
|
/* The dwell time in TU before doing rtw89_chanctx_work(). */
|
|
|
|
#define RTW89_CHANCTX_TIME_MCC_PREPARE 100
|
2023-09-08 11:11:41 +08:00
|
|
|
#define RTW89_CHANCTX_TIME_MCC 100
|
2023-08-16 16:21:33 +08:00
|
|
|
|
2023-08-31 13:31:28 +08:00
|
|
|
/* various MCC setting time in TU */
|
|
|
|
#define RTW89_MCC_LONG_TRIGGER_TIME 300
|
|
|
|
#define RTW89_MCC_SHORT_TRIGGER_TIME 100
|
2023-08-31 13:31:29 +08:00
|
|
|
#define RTW89_MCC_EARLY_TX_BCN_TIME 10
|
|
|
|
#define RTW89_MCC_EARLY_RX_BCN_TIME 5
|
|
|
|
#define RTW89_MCC_MIN_RX_BCN_TIME 10
|
|
|
|
#define RTW89_MCC_DFLT_BCN_OFST_TIME 40
|
2025-07-10 12:24:12 +08:00
|
|
|
#define RTW89_MCC_SWITCH_CH_TIME 3
|
2023-08-31 13:31:28 +08:00
|
|
|
|
wifi: rtw89: mcc: adjust beacon filter when MCC and detect connection
MCC needs to wait at most 300ms to start. Additionally, if
scanning happens before MCC starts, it will miss some beacons,
which might cause beacon loss. Therefore, we reset beacon
filter when MCC start to let hardware reset beacon loss counter.
Additionally, GO is forbid to enter courtesy mode might cause
STA beacon loss. Therefore, disable beacon filter when GO+STA.
However, In WiFi 7 chip, even when GC+STA enable courtesy mode, the
beacon might loss because switching to courtesy timeslot will disable
TX/RX. If the TOB(time offset behind) or TOA(time offset ahead) is
too close to the edge of timeslot, the beacon might not be received.
Therefore, disable beacon filter when GC+STA in WiFi 7 chip.
Because disabling the beacon filter might prevent disconnection
when the AP power-off without sending a deauth. Therefore, driver
TX QOS nulldata periodically to detect the AP status, and the
connection is terminated if no ACK is received for 6 seconds.
Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250610130034.14692-5-pkshih@realtek.com
2025-06-10 21:00:26 +08:00
|
|
|
#define RTW89_MCC_PROBE_TIMEOUT 100
|
|
|
|
#define RTW89_MCC_PROBE_MAX_TRIES 3
|
|
|
|
|
wifi: rtw89: mcc: solve GO's TBTT change and TBTT too close to NoA issue
For some implementation acting as GO under MCC(GO+STA), the GO's TBTT
might change after STA roams to another AP. This could result the new GO
beacon TX at the STA timeslot of GC+STA, causing GC beacon loss.
Therefore, if the GC detects beacon loss, it will pause MCC and remain
on the GO side for 100 TU to detect the new TBTT beacon.
Additionally, some implementation acting as GO under MCC might TX beacon
too close to the NoA period. The GC calculates timeslot pattern the TOB
(time offset behind) or TOA(time offset ahead) less than the minimum
RX beacon time, which leads to beacon loss. Therefore, disable the
beacon filter in this case. Then, if the GO's TBTT changed, the pattern
TOB/TOA greater than the minimum RX beacon time, the beacon filter should
be retriggered during MCC update.
Moreover, if the beacon filter is disabled initially but the GO timeslot
change, causing QoS null data detection fail, also pause MCC to detect new
TBTT beacon.
Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250710042423.73617-7-pkshih@realtek.com
2025-07-10 12:24:15 +08:00
|
|
|
#define RTW89_MCC_DETECT_BCN_MAX_TRIES 2
|
|
|
|
|
2023-08-31 13:31:29 +08:00
|
|
|
#define RTW89_MCC_MIN_GO_DURATION \
|
|
|
|
(RTW89_MCC_EARLY_TX_BCN_TIME + RTW89_MCC_MIN_RX_BCN_TIME)
|
|
|
|
|
|
|
|
#define RTW89_MCC_MIN_STA_DURATION \
|
|
|
|
(RTW89_MCC_EARLY_RX_BCN_TIME + RTW89_MCC_MIN_RX_BCN_TIME)
|
|
|
|
|
2025-07-10 12:24:12 +08:00
|
|
|
#define RTW89_MCC_MIN_RX_BCN_WITH_SWITCH_CH_TIME \
|
|
|
|
(RTW89_MCC_MIN_RX_BCN_TIME + RTW89_MCC_SWITCH_CH_TIME)
|
|
|
|
|
2023-08-31 13:31:29 +08:00
|
|
|
#define RTW89_MCC_DFLT_GROUP 0
|
2023-09-08 11:11:42 +08:00
|
|
|
#define RTW89_MCC_NEXT_GROUP(cur) (((cur) + 1) % 4)
|
|
|
|
|
2025-06-10 21:00:29 +08:00
|
|
|
#define RTW89_MCC_DFLT_TX_NULL_EARLY 7
|
2023-08-31 13:31:28 +08:00
|
|
|
#define RTW89_MCC_DFLT_COURTESY_SLOT 3
|
|
|
|
|
2025-04-22 09:46:18 +08:00
|
|
|
#define RTW89_MCC_REQ_COURTESY_TIME 5
|
|
|
|
#define RTW89_MCC_REQ_COURTESY(pattern, role) \
|
|
|
|
({ \
|
|
|
|
const struct rtw89_mcc_pattern *p = pattern; \
|
|
|
|
p->tob_ ## role <= RTW89_MCC_REQ_COURTESY_TIME || \
|
|
|
|
p->toa_ ## role <= RTW89_MCC_REQ_COURTESY_TIME; \
|
|
|
|
})
|
|
|
|
|
2023-08-31 13:31:28 +08:00
|
|
|
#define NUM_OF_RTW89_MCC_ROLES 2
|
|
|
|
|
2025-06-11 11:55:14 +08:00
|
|
|
enum rtw89_mr_wtype {
|
|
|
|
RTW89_MR_WTYPE_NONE,
|
|
|
|
RTW89_MR_WTYPE_NONMLD,
|
|
|
|
RTW89_MR_WTYPE_MLD1L1R,
|
|
|
|
RTW89_MR_WTYPE_MLD2L1R,
|
|
|
|
RTW89_MR_WTYPE_MLD2L2R,
|
|
|
|
RTW89_MR_WTYPE_NONMLD_NONMLD,
|
|
|
|
RTW89_MR_WTYPE_MLD1L1R_NONMLD,
|
|
|
|
RTW89_MR_WTYPE_MLD2L1R_NONMLD,
|
|
|
|
RTW89_MR_WTYPE_MLD2L2R_NONMLD,
|
|
|
|
RTW89_MR_WTYPE_UNKNOWN,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum rtw89_mr_wmode {
|
|
|
|
RTW89_MR_WMODE_NONE,
|
|
|
|
RTW89_MR_WMODE_1CLIENT,
|
|
|
|
RTW89_MR_WMODE_1AP,
|
|
|
|
RTW89_MR_WMODE_1AP_1CLIENT,
|
|
|
|
RTW89_MR_WMODE_2CLIENTS,
|
|
|
|
RTW89_MR_WMODE_2APS,
|
|
|
|
RTW89_MR_WMODE_UNKNOWN,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum rtw89_mr_ctxtype {
|
|
|
|
RTW89_MR_CTX_NONE,
|
|
|
|
RTW89_MR_CTX1_2GHZ,
|
|
|
|
RTW89_MR_CTX1_5GHZ,
|
|
|
|
RTW89_MR_CTX1_6GHZ,
|
|
|
|
RTW89_MR_CTX2_2GHZ,
|
|
|
|
RTW89_MR_CTX2_5GHZ,
|
|
|
|
RTW89_MR_CTX2_6GHZ,
|
|
|
|
RTW89_MR_CTX2_2GHZ_5GHZ,
|
|
|
|
RTW89_MR_CTX2_2GHZ_6GHZ,
|
|
|
|
RTW89_MR_CTX2_5GHZ_6GHZ,
|
|
|
|
RTW89_MR_CTX_UNKNOWN,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct rtw89_mr_chanctx_info {
|
|
|
|
enum rtw89_mr_wtype wtype;
|
|
|
|
enum rtw89_mr_wmode wmode;
|
|
|
|
enum rtw89_mr_ctxtype ctxtype;
|
|
|
|
};
|
|
|
|
|
2023-09-21 08:35:57 +08:00
|
|
|
enum rtw89_chanctx_pause_reasons {
|
|
|
|
RTW89_CHANCTX_PAUSE_REASON_HW_SCAN,
|
|
|
|
RTW89_CHANCTX_PAUSE_REASON_ROC,
|
wifi: rtw89: mcc: solve GO's TBTT change and TBTT too close to NoA issue
For some implementation acting as GO under MCC(GO+STA), the GO's TBTT
might change after STA roams to another AP. This could result the new GO
beacon TX at the STA timeslot of GC+STA, causing GC beacon loss.
Therefore, if the GC detects beacon loss, it will pause MCC and remain
on the GO side for 100 TU to detect the new TBTT beacon.
Additionally, some implementation acting as GO under MCC might TX beacon
too close to the NoA period. The GC calculates timeslot pattern the TOB
(time offset behind) or TOA(time offset ahead) less than the minimum
RX beacon time, which leads to beacon loss. Therefore, disable the
beacon filter in this case. Then, if the GO's TBTT changed, the pattern
TOB/TOA greater than the minimum RX beacon time, the beacon filter should
be retriggered during MCC update.
Moreover, if the beacon filter is disabled initially but the GO timeslot
change, causing QoS null data detection fail, also pause MCC to detect new
TBTT beacon.
Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250710042423.73617-7-pkshih@realtek.com
2025-07-10 12:24:15 +08:00
|
|
|
RTW89_CHANCTX_PAUSE_REASON_GC_BCN_LOSS,
|
2023-09-21 08:35:57 +08:00
|
|
|
};
|
|
|
|
|
2025-05-11 11:52:12 +08:00
|
|
|
struct rtw89_chanctx_pause_parm {
|
|
|
|
const struct rtw89_vif_link *trigger;
|
|
|
|
enum rtw89_chanctx_pause_reasons rsn;
|
|
|
|
};
|
|
|
|
|
2024-12-31 08:48:08 +08:00
|
|
|
struct rtw89_chanctx_cb_parm {
|
|
|
|
int (*cb)(struct rtw89_dev *rtwdev, void *data);
|
|
|
|
void *data;
|
|
|
|
const char *caller;
|
|
|
|
};
|
|
|
|
|
2024-02-06 11:06:22 +08:00
|
|
|
struct rtw89_entity_weight {
|
wifi: rtw89: chan: re-config default chandef only when none is registered
Previously, default chandef is configured if no chanctx is active, i.e. no
chanctx is assigned to some vif. For normal cases, it's fine. However, for
impending CSA support, need to consider that one chanctx may be added, or
called registered, ahead without being assigned immediately. Then, it will
keep inactive, and might be covered by the default one when re-calculating
chanctxs happens in certain sequences. So now, don't re-config the default
chandef unless no chanctx is registered.
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250605114207.12381-3-pkshih@realtek.com
2025-06-05 19:42:04 +08:00
|
|
|
unsigned int registered_chanctxs;
|
2024-02-06 11:06:22 +08:00
|
|
|
unsigned int active_chanctxs;
|
|
|
|
unsigned int active_roles;
|
|
|
|
};
|
|
|
|
|
2024-09-25 10:01:19 +08:00
|
|
|
static inline bool rtw89_get_entity_state(struct rtw89_dev *rtwdev,
|
|
|
|
enum rtw89_phy_idx phy_idx)
|
2022-08-09 18:49:40 +08:00
|
|
|
{
|
|
|
|
struct rtw89_hal *hal = &rtwdev->hal;
|
|
|
|
|
2024-09-25 10:01:19 +08:00
|
|
|
return READ_ONCE(hal->entity_active[phy_idx]);
|
2022-08-09 18:49:40 +08:00
|
|
|
}
|
|
|
|
|
2024-09-25 10:01:19 +08:00
|
|
|
static inline void rtw89_set_entity_state(struct rtw89_dev *rtwdev,
|
|
|
|
enum rtw89_phy_idx phy_idx,
|
|
|
|
bool active)
|
2022-08-09 18:49:40 +08:00
|
|
|
{
|
|
|
|
struct rtw89_hal *hal = &rtwdev->hal;
|
|
|
|
|
2024-09-25 10:01:19 +08:00
|
|
|
WRITE_ONCE(hal->entity_active[phy_idx], active);
|
2022-08-09 18:49:40 +08:00
|
|
|
}
|
|
|
|
|
2022-08-09 18:49:49 +08:00
|
|
|
static inline
|
|
|
|
enum rtw89_entity_mode rtw89_get_entity_mode(struct rtw89_dev *rtwdev)
|
|
|
|
{
|
|
|
|
struct rtw89_hal *hal = &rtwdev->hal;
|
|
|
|
|
|
|
|
return READ_ONCE(hal->entity_mode);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void rtw89_set_entity_mode(struct rtw89_dev *rtwdev,
|
|
|
|
enum rtw89_entity_mode mode)
|
|
|
|
{
|
|
|
|
struct rtw89_hal *hal = &rtwdev->hal;
|
|
|
|
|
|
|
|
WRITE_ONCE(hal->entity_mode, mode);
|
|
|
|
}
|
|
|
|
|
2022-08-09 18:49:43 +08:00
|
|
|
void rtw89_chan_create(struct rtw89_chan *chan, u8 center_chan, u8 primary_chan,
|
|
|
|
enum rtw89_band band, enum rtw89_bandwidth bandwidth);
|
2022-08-09 18:49:42 +08:00
|
|
|
bool rtw89_assign_entity_chan(struct rtw89_dev *rtwdev,
|
2024-07-27 16:06:46 +08:00
|
|
|
enum rtw89_chanctx_idx idx,
|
2022-08-09 18:49:42 +08:00
|
|
|
const struct rtw89_chan *new);
|
2024-07-02 20:44:52 +08:00
|
|
|
int rtw89_iterate_entity_chan(struct rtw89_dev *rtwdev,
|
|
|
|
int (*iterator)(const struct rtw89_chan *chan,
|
|
|
|
void *data),
|
|
|
|
void *data);
|
wifi: rtw89: concentrate chandef setting to stack callback
Originally, we didn't support mac80211 chanctx, so it's expected that
ieee80211_hw::conf::chandef would be filled by mac80211. And then, we
could just query it whenever we need the current chandef.
However, we are planing to support mac80211 chanctx. After that, the
above assumption would be broken. So, we adjust a bit ahead to reduce
future works about mac80211 chanctx.
After this, we don't query ieee80211_hw::conf::chandef directly, and
we add a map, entity_map, to HAL to indicate which chandef came from
stack. And it will later be used to recalcate entity mode.
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220809104952.61355-9-pkshih@realtek.com
2022-08-09 18:49:47 +08:00
|
|
|
void rtw89_config_entity_chandef(struct rtw89_dev *rtwdev,
|
2024-07-27 16:06:46 +08:00
|
|
|
enum rtw89_chanctx_idx idx,
|
wifi: rtw89: concentrate chandef setting to stack callback
Originally, we didn't support mac80211 chanctx, so it's expected that
ieee80211_hw::conf::chandef would be filled by mac80211. And then, we
could just query it whenever we need the current chandef.
However, we are planing to support mac80211 chanctx. After that, the
above assumption would be broken. So, we adjust a bit ahead to reduce
future works about mac80211 chanctx.
After this, we don't query ieee80211_hw::conf::chandef directly, and
we add a map, entity_map, to HAL to indicate which chandef came from
stack. And it will later be used to recalcate entity mode.
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220809104952.61355-9-pkshih@realtek.com
2022-08-09 18:49:47 +08:00
|
|
|
const struct cfg80211_chan_def *chandef);
|
2023-04-11 20:48:30 +08:00
|
|
|
void rtw89_config_roc_chandef(struct rtw89_dev *rtwdev,
|
2025-04-28 19:24:55 +08:00
|
|
|
struct rtw89_vif_link *rtwvif_link,
|
2023-04-11 20:48:30 +08:00
|
|
|
const struct cfg80211_chan_def *chandef);
|
wifi: rtw89: initialize entity and configure default chandef
While idle, we need a default chandef to set channel for things,
such as scan. Before support of mac80211 chanctx, mac80211 would
configure a default one on ieee80211_hw::conf::chandef. And we
just queried it whenever we did set channel. However, after support
of mac80211 chanctx, the flow won't work like before.
Besides, we don't now query chandef from ieee80211_hw::conf::chandef
either. So, similar to mac80211 without using chanctx, we configure
the default chandef with ieee80211_channel of index 0 in 2GHz.
Although we have not added the support of mac80211 chanctx here,
this configuration should be compatible before that. So, we commit
this ahead.
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220809104952.61355-10-pkshih@realtek.com
2022-08-09 18:49:48 +08:00
|
|
|
void rtw89_entity_init(struct rtw89_dev *rtwdev);
|
2022-08-09 18:49:49 +08:00
|
|
|
enum rtw89_entity_mode rtw89_entity_recalc(struct rtw89_dev *rtwdev);
|
2025-01-22 14:03:02 +08:00
|
|
|
void rtw89_chanctx_work(struct wiphy *wiphy, struct wiphy_work *work);
|
2023-08-16 16:21:33 +08:00
|
|
|
void rtw89_queue_chanctx_work(struct rtw89_dev *rtwdev);
|
2023-09-08 11:11:41 +08:00
|
|
|
void rtw89_queue_chanctx_change(struct rtw89_dev *rtwdev,
|
|
|
|
enum rtw89_chanctx_changes change);
|
2025-06-11 11:55:14 +08:00
|
|
|
void rtw89_query_mr_chanctx_info(struct rtw89_dev *rtwdev, u8 inst_idx,
|
|
|
|
struct rtw89_mr_chanctx_info *info);
|
2023-09-08 11:11:42 +08:00
|
|
|
void rtw89_chanctx_track(struct rtw89_dev *rtwdev);
|
2023-09-21 08:35:57 +08:00
|
|
|
void rtw89_chanctx_pause(struct rtw89_dev *rtwdev,
|
2025-05-11 11:52:12 +08:00
|
|
|
const struct rtw89_chanctx_pause_parm *parm);
|
2024-12-31 08:48:08 +08:00
|
|
|
void rtw89_chanctx_proceed(struct rtw89_dev *rtwdev,
|
|
|
|
const struct rtw89_chanctx_cb_parm *cb_parm);
|
2024-10-22 16:31:05 +08:00
|
|
|
|
|
|
|
const struct rtw89_chan *__rtw89_mgnt_chan_get(struct rtw89_dev *rtwdev,
|
|
|
|
const char *caller_message,
|
|
|
|
u8 link_index);
|
|
|
|
|
|
|
|
#define rtw89_mgnt_chan_get(rtwdev, link_index) \
|
|
|
|
__rtw89_mgnt_chan_get(rtwdev, __func__, link_index)
|
|
|
|
|
2025-07-10 12:24:10 +08:00
|
|
|
struct rtw89_mcc_links_info {
|
|
|
|
struct rtw89_vif_link *links[NUM_OF_RTW89_MCC_ROLES];
|
|
|
|
};
|
|
|
|
|
|
|
|
void rtw89_mcc_get_links(struct rtw89_dev *rtwdev, struct rtw89_mcc_links_info *info);
|
2025-06-10 21:00:27 +08:00
|
|
|
void rtw89_mcc_prepare_done_work(struct wiphy *wiphy, struct wiphy_work *work);
|
wifi: rtw89: mcc: solve GO's TBTT change and TBTT too close to NoA issue
For some implementation acting as GO under MCC(GO+STA), the GO's TBTT
might change after STA roams to another AP. This could result the new GO
beacon TX at the STA timeslot of GC+STA, causing GC beacon loss.
Therefore, if the GC detects beacon loss, it will pause MCC and remain
on the GO side for 100 TU to detect the new TBTT beacon.
Additionally, some implementation acting as GO under MCC might TX beacon
too close to the NoA period. The GC calculates timeslot pattern the TOB
(time offset behind) or TOA(time offset ahead) less than the minimum
RX beacon time, which leads to beacon loss. Therefore, disable the
beacon filter in this case. Then, if the GO's TBTT changed, the pattern
TOB/TOA greater than the minimum RX beacon time, the beacon filter should
be retriggered during MCC update.
Moreover, if the beacon filter is disabled initially but the GO timeslot
change, causing QoS null data detection fail, also pause MCC to detect new
TBTT beacon.
Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250710042423.73617-7-pkshih@realtek.com
2025-07-10 12:24:15 +08:00
|
|
|
void rtw89_mcc_gc_detect_beacon_work(struct wiphy *wiphy, struct wiphy_work *work);
|
|
|
|
bool rtw89_mcc_detect_go_bcn(struct rtw89_dev *rtwdev,
|
|
|
|
struct rtw89_vif_link *rtwvif_link);
|
2025-06-10 21:00:27 +08:00
|
|
|
|
2022-08-09 18:49:50 +08:00
|
|
|
int rtw89_chanctx_ops_add(struct rtw89_dev *rtwdev,
|
|
|
|
struct ieee80211_chanctx_conf *ctx);
|
|
|
|
void rtw89_chanctx_ops_remove(struct rtw89_dev *rtwdev,
|
|
|
|
struct ieee80211_chanctx_conf *ctx);
|
|
|
|
void rtw89_chanctx_ops_change(struct rtw89_dev *rtwdev,
|
|
|
|
struct ieee80211_chanctx_conf *ctx,
|
|
|
|
u32 changed);
|
|
|
|
int rtw89_chanctx_ops_assign_vif(struct rtw89_dev *rtwdev,
|
2024-09-16 13:31:52 +08:00
|
|
|
struct rtw89_vif_link *rtwvif_link,
|
2022-08-09 18:49:50 +08:00
|
|
|
struct ieee80211_chanctx_conf *ctx);
|
|
|
|
void rtw89_chanctx_ops_unassign_vif(struct rtw89_dev *rtwdev,
|
2024-09-16 13:31:52 +08:00
|
|
|
struct rtw89_vif_link *rtwvif_link,
|
2022-08-09 18:49:50 +08:00
|
|
|
struct ieee80211_chanctx_conf *ctx);
|
2025-06-05 19:42:05 +08:00
|
|
|
int rtw89_chanctx_ops_reassign_vif(struct rtw89_dev *rtwdev,
|
|
|
|
struct rtw89_vif_link *rtwvif_link,
|
|
|
|
struct ieee80211_chanctx_conf *old_ctx,
|
|
|
|
struct ieee80211_chanctx_conf *new_ctx,
|
|
|
|
bool replace);
|
2022-08-09 18:49:42 +08:00
|
|
|
|
2022-08-09 18:49:40 +08:00
|
|
|
#endif
|