qcacld-3.0: Add logic to support tdls on MLO

Since for MLD device, it can only choice one link for tdls,
add logic like this:
1\ As initiator, it needs to send discovery request on each
link, before send the frame, it needs to force active the link;
2\ As responder, it sends the discovery response the link id,
before send the frame, it needs to force active the link;
3\ For other tdls management and tdls operation, it needs to
find out which link(vdev) is used as tdls link first.

Change-Id: I64e27219eb6c6b3fef62e541423aa8e5d84b1560
CRs-Fixed: 3439568
此提交包含在:
Paul Zhang
2023-04-03 13:58:22 +08:00
提交者 Madan Koyyalamudi
父節點 7d518a4ab9
當前提交 0752365a21
共有 9 個檔案被更改,包括 429 行新增55 行删除

查看文件

@@ -1176,20 +1176,24 @@ struct tdls_get_all_peers {
* @vdev: vdev object
* @chk_frame: This struct used to validate mgmt frame
* @session_id: session id
* @link_id: link id
* @vdev_id: vdev id
* @cmd_buf: cmd buffer
* @len: length of the frame
* @use_default_ac: access category
* @link_active: whether link active command send successfully
* @tdls_mgmt: tdls management
*/
struct tdls_action_frame_request {
struct wlan_objmgr_vdev *vdev;
struct tdls_validate_action_req chk_frame;
uint8_t session_id;
uint8_t link_id;
uint8_t vdev_id;
const uint8_t *cmd_buf;
uint8_t len;
bool use_default_ac;
bool link_active;
/* Variable length, do not add anything after this */
struct tdls_send_mgmt tdls_mgmt;
};

查看文件

@@ -181,6 +181,35 @@ void ucfg_tdls_update_fw_mlo_capability(struct wlan_objmgr_psoc *psoc,
}
#endif
/**
* ucfg_tdls_link_vdev_is_matching() - check whether vdev is matching link vdev
* @vdev: vdev object
*
* Return: bool
*/
bool ucfg_tdls_link_vdev_is_matching(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_tdls_get_tdls_link_vdev() - get tdls link vdev
* @vdev: vdev object
* @dbg_id: debug id
*
* Return: vdev pointer
*/
struct wlan_objmgr_vdev *
ucfg_tdls_get_tdls_link_vdev(struct wlan_objmgr_vdev *vdev,
wlan_objmgr_ref_dbgid dbg_id);
/**
* ucfg_tdls_put_tdls_link_vdev() - put tdls link vdev
* @vdev: vdev odject
* @dbg_id: debug id
*
* Return: void
*/
void ucfg_tdls_put_tdls_link_vdev(struct wlan_objmgr_vdev *vdev,
wlan_objmgr_ref_dbgid dbg_id);
/**
* ucfg_tdls_psoc_enable() - TDLS module enable API
* @psoc: psoc object
@@ -429,6 +458,25 @@ struct wlan_objmgr_vdev *ucfg_get_tdls_vdev(struct wlan_objmgr_psoc *psoc,
wlan_objmgr_ref_dbgid dbg_id);
#else
static inline
bool ucfg_tdls_link_vdev_is_matching(struct wlan_objmgr_vdev *vdev)
{
return false;
}
static inline
struct wlan_objmgr_vdev *
ucfg_tdls_get_tdls_link_vdev(struct wlan_objmgr_vdev *vdev,
wlan_objmgr_ref_dbgid dbg_id)
{
return NULL;
}
static inline
void ucfg_tdls_put_tdls_link_vdev(struct wlan_objmgr_vdev *vdev,
wlan_objmgr_ref_dbgid dbg_id)
{
}
static inline
QDF_STATUS ucfg_tdls_init(void)