|
@@ -35,6 +35,58 @@ void cm_state_roaming_exit(void *ctx)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
|
|
+static
|
|
|
+bool cm_handle_fw_roaming_event(struct cnx_mgr *cm_ctx, uint16_t event,
|
|
|
+ uint16_t data_len, void *data)
|
|
|
+{
|
|
|
+ bool event_handled = true;
|
|
|
+ QDF_STATUS status;
|
|
|
+
|
|
|
+ switch (event) {
|
|
|
+ case WLAN_CM_SM_EV_ROAM_INVOKE:
|
|
|
+ status = cm_add_fw_roam_cmd_to_list_n_ser(cm_ctx, data);
|
|
|
+ if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
+ event_handled = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ cm_sm_transition_to(cm_ctx, WLAN_CM_SS_ROAM_STARTED);
|
|
|
+ cm_sm_deliver_event_sync(cm_ctx,
|
|
|
+ WLAN_CM_SM_EV_ROAM_INVOKE,
|
|
|
+ data_len, data);
|
|
|
+ break;
|
|
|
+ case WLAN_CM_SM_EV_ROAM_START:
|
|
|
+ status = cm_add_fw_roam_cmd_to_list_n_ser(cm_ctx, data);
|
|
|
+ if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
+ event_handled = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ cm_sm_transition_to(cm_ctx, WLAN_CM_SS_ROAM_STARTED);
|
|
|
+ cm_sm_deliver_event_sync(cm_ctx,
|
|
|
+ WLAN_CM_SM_EV_ROAM_START,
|
|
|
+ 0, NULL);
|
|
|
+ break;
|
|
|
+ case WLAN_CM_SM_EV_ROAM_ABORT:
|
|
|
+ cm_sm_transition_to(cm_ctx, WLAN_CM_S_CONNECTED);
|
|
|
+ cm_sm_deliver_event_sync(cm_ctx, event,
|
|
|
+ data_len, data);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ event_handled = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return event_handled;
|
|
|
+}
|
|
|
+#else
|
|
|
+static inline
|
|
|
+bool cm_handle_fw_roaming_event(struct cnx_mgr *cm_ctx, uint16_t event,
|
|
|
+ uint16_t data_len, void *data)
|
|
|
+{
|
|
|
+ return false;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
bool cm_state_roaming_event(void *ctx, uint16_t event,
|
|
|
uint16_t data_len, void *data)
|
|
|
{
|
|
@@ -61,19 +113,9 @@ bool cm_state_roaming_event(void *ctx, uint16_t event,
|
|
|
data_len, data);
|
|
|
}
|
|
|
break;
|
|
|
- case WLAN_CM_SM_EV_ROAM_INVOKE:
|
|
|
- cm_add_roam_req_to_list(cm_ctx, data);
|
|
|
- cm_sm_transition_to(cm_ctx, WLAN_CM_SS_ROAM_STARTED);
|
|
|
- cm_sm_deliver_event_sync(cm_ctx,
|
|
|
- WLAN_CM_SM_EV_ROAM_INVOKE,
|
|
|
- data_len, data);
|
|
|
- break;
|
|
|
- case WLAN_CM_SM_EV_ROAM_START:
|
|
|
- cm_add_roam_req_to_list(cm_ctx, data);
|
|
|
- /* cm_fw_roam_start(cm_ctx); define in LFR3/FW roam file */
|
|
|
- break;
|
|
|
default:
|
|
|
- event_handled = false;
|
|
|
+ event_handled = cm_handle_fw_roaming_event(cm_ctx, event,
|
|
|
+ data_len, data);
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -260,12 +302,16 @@ bool cm_subst_roam_start_event(void *ctx, uint16_t event,
|
|
|
cm_handle_connect_disconnect_in_roam(cm_ctx, event,
|
|
|
data_len, data);
|
|
|
break;
|
|
|
+ case WLAN_CM_SM_EV_ROAM_START:
|
|
|
+ cm_fw_roam_start(ctx);
|
|
|
+ break;
|
|
|
case WLAN_CM_SM_EV_ROAM_INVOKE:
|
|
|
cm_send_roam_invoke_req(cm_ctx, data);
|
|
|
break;
|
|
|
+ case WLAN_CM_SM_EV_ROAM_ABORT:
|
|
|
case WLAN_CM_SM_EV_ROAM_INVOKE_FAIL:
|
|
|
cm_sm_transition_to(cm_ctx, WLAN_CM_S_CONNECTED);
|
|
|
- cm_sm_deliver_event_sync(cm_ctx, WLAN_CM_SM_EV_ROAM_INVOKE_FAIL,
|
|
|
+ cm_sm_deliver_event_sync(cm_ctx, event,
|
|
|
data_len, data);
|
|
|
break;
|
|
|
default:
|