qcacld-3.0: Handle TDLS concurrency during CSA

If CSA on SAP/P2P GO causes MCC with the current STA TDLS vdev,
then teardown the TDLS connections, disable off channel and send
disable TDLS to firmware.
If CSA causes MCC -> DBS or MCC -> SCC then allow TDLS and update
the peer off channel list to firmware
Disable TDLS off-channel before SAP/P2P GO vdev restart.
Once CSA is complete, TDLS off-channel will be re-enabled based
on the concurrency.

Add interface manager changes to notify STA channel switch.

Change-Id: I36b359a7e1cf570cfb2b2f0e6abedf148a8fd174
CRs-Fixed: 3445112
This commit is contained in:
Pragaspathi Thilagaraj
2023-03-22 19:36:10 +05:30
committed by Madan Koyyalamudi
parent 2a0bd88990
commit 282f018e47
16 changed files with 420 additions and 58 deletions

View File

@@ -63,12 +63,14 @@ void wlan_tdls_get_features_info(struct wlan_objmgr_psoc *psoc,
QDF_STATUS wlan_tdls_teardown_links(struct wlan_objmgr_psoc *psoc);
/**
* wlan_tdls_teardown_links_sync() - teardown all the TDLS links
* wlan_tdls_check_and_teardown_links_sync() - teardown all the TDLS links
* @psoc: psoc object
* @vdev: Vdev object pointer
*
* Return: None
*/
void wlan_tdls_teardown_links_sync(struct wlan_objmgr_psoc *psoc);
void wlan_tdls_check_and_teardown_links_sync(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev);
/**
* wlan_tdls_notify_sta_disconnect() - notify sta disconnect
@@ -127,10 +129,62 @@ void wlan_tdls_update_rx_pkt_cnt(struct wlan_objmgr_vdev *vdev,
/**
* wlan_tdls_notify_start_bss() - Notify TDLS module on start bss
* @psoc: Pointer to PSOC object
* @vdev: Vdev object pointer
*
* Return: None
*/
void wlan_tdls_notify_start_bss(struct wlan_objmgr_psoc *psoc);
void wlan_tdls_notify_start_bss(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev);
#ifdef WLAN_FEATURE_TDLS_CONCURRENCIES
/**
* wlan_tdls_notify_channel_switch_complete() - Notify TDLS module about the
* channel switch completion
* @psoc: Pointer to PSOC object
* @vdev_id: vdev id
*
* Return: None
*/
void wlan_tdls_notify_channel_switch_complete(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* wlan_tdls_notify_channel_switch_start() - Process channel switch start
* for SAP/P2P GO vdev. For STA vdev, TDLS teardown happens, so explicit
* disable off channel is not required.
* @psoc: Pointer to PSOC object
* @vdev: Pointer to current vdev on which CSA is triggered
*
* Return: None
*/
void wlan_tdls_notify_channel_switch_start(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev);
/**
* wlan_tdls_handle_p2p_client_connect() - Handle P2P Client connect start
* @psoc: Pointer to PSOC object
* @vdev: Pointer to P2P client vdev
*
* Return: None
*/
void wlan_tdls_handle_p2p_client_connect(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev);
#else
static inline
void wlan_tdls_notify_channel_switch_complete(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{}
static inline
void wlan_tdls_notify_channel_switch_start(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev)
{}
static inline
void wlan_tdls_handle_p2p_client_connect(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev)
{}
#endif /* WLAN_FEATURE_TDLS_CONCURRENCIES */
#else
#ifdef FEATURE_SET
@@ -152,7 +206,9 @@ static inline QDF_STATUS wlan_tdls_teardown_links(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_SUCCESS;
}
static inline void wlan_tdls_teardown_links_sync(struct wlan_objmgr_psoc *psoc)
static inline void
wlan_tdls_check_and_teardown_links_sync(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev)
{}
static inline
@@ -181,7 +237,23 @@ void wlan_tdls_update_rx_pkt_cnt(struct wlan_objmgr_vdev *vdev,
}
static inline
void wlan_tdls_notify_start_bss(struct wlan_objmgr_psoc *psoc)
void wlan_tdls_notify_start_bss(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev)
{}
static inline
void wlan_tdls_notify_channel_switch_complete(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{}
static inline
void wlan_tdls_notify_channel_switch_start(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev)
{}
static inline
void wlan_tdls_handle_p2p_client_connect(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev)
{}
#endif
#endif