qcacmn: FW Link switch request event handler and cnf resp

Once the FW sends the link switch request to host handle
the request from scheduler thread and send confirmation
back on completion of link switch process with status of
link switch (success/failure).

Add new serialization command type for link switch.

Introduce flags to get the current state of link switch
request, set the state to idle when no link switch in
progress or once the current link switch is completed.
Access to state is protected with MLO dev context lock.
Implement various helper API to:
    a) Transition link switch to next state.
    b) Get current state of link switch.
    c) To check whether any link switch is in progress.
    c) To check whether link switch is happening
       on assoc VDEV or not.

Introduce a new VDEV flag to suggest the VDEV is in
link switch process and also implement helper APIs to
set/get/clear this VDEV flag.
   a) The flag is set at start of link switch, once
      the FW request params are validated and before
      proceeding for link switch disconnect on VDEV.
   b) Clear the flag once the Link switch confirmation
      is sent to FW.

Validate the link switch request params:
     a) IEEE link ID's received.
     b) Check if new connection is part of MLO connection.
     c) Check if VDEV is MLO STA VDEV or not.
     d) Is VDEV in connected state or not, that means
        VDEV is not in transitioning state due to disconnect.
     e) Check if any link switch in progress on this MLD
     f) Current link ID of VDEV equals the FW params.

If validation is successful, serialize the link switch
command and in the serialization activation start the
actual link switch process.

Change-Id: Ie582650541054c8cf39aaa8316e86a7a40256a15
CRs-Fixed: 3556422
此提交包含在:
Vinod Kumar Pirla
2023-07-06 03:33:50 -07:00
提交者 Rahul Choudhary
父節點 10448e6108
當前提交 af6cf93a07
共有 13 個檔案被更改,包括 970 行新增16 行删除

查看文件

@@ -1224,6 +1224,8 @@ struct wmi_host_link_state_params {
* @nstr_bitmap_size: Indicates size of NSTR bitmap,
* as per the 802.11be specification
* @mlo_bridge_peer: indicate if it is bridge peer
* @link_switch_in_progress: Flag to indicate FW MLO peer assoc params are sent
* for the peer due to link switch
* @unused: spare bits
* @mld_mac: MLD mac address
* @logical_link_index: Unique index for links of the mlo. Starts with Zero
@@ -1257,7 +1259,8 @@ struct peer_assoc_mlo_params {
nstr_bitmap_present:1,
nstr_bitmap_size:1,
mlo_bridge_peer:1,
unused:20;
link_switch_in_progress:1,
unused:19;
uint8_t mld_mac[QDF_MAC_ADDR_SIZE];
uint32_t logical_link_index;
uint32_t ml_peer_id;
@@ -5282,6 +5285,9 @@ typedef enum {
wmi_mlo_link_set_active_resp_eventid,
wmi_mlo_link_removal_eventid,
wmi_mlo_link_disable_request_eventid,
#ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
wmi_mlo_link_switch_request_eventid,
#endif
#endif
wmi_pdev_fips_extend_event_id,
wmi_roam_frame_event_id,