diff --git a/umac/cmn_services/serialization/inc/wlan_serialization_api.h b/umac/cmn_services/serialization/inc/wlan_serialization_api.h index 263240b5036c..1e13518b3b1a 100644 --- a/umac/cmn_services/serialization/inc/wlan_serialization_api.h +++ b/umac/cmn_services/serialization/inc/wlan_serialization_api.h @@ -500,6 +500,16 @@ void *wlan_serialization_get_active_cmd(struct wlan_objmgr_psoc *psoc, /* Preprocessor Definitions and Constants */ +enum ser_queue_reason { + SER_REQUEST, + SER_REMOVE, + SER_CANCEL, + SER_TIMEOUT, + SER_ACTIVATION_FAILED, + SER_PENDING_TO_ACTIVE, + SER_QUEUE_ACTION_MAX, +}; + /* * struct wlan_serialization_queued_cmd_info member queue_type specifies the * below values to cancel the commands in these queues. Setting both the @@ -712,9 +722,10 @@ struct wlan_serialization_command { uint32_t cmd_id; wlan_serialization_cmd_callback cmd_cb; enum wlan_umac_comp_id source; - bool is_high_priority; - bool is_blocking; - bool queue_disable; + uint8_t is_high_priority:1, + is_blocking:1, + queue_disable:1, + activation_reason:3; uint16_t cmd_timeout_duration; union { struct wlan_objmgr_vdev *vdev; diff --git a/umac/cmn_services/serialization/src/wlan_serialization_internal.c b/umac/cmn_services/serialization/src/wlan_serialization_internal.c index 34d066e20de7..24264df1ebaa 100644 --- a/umac/cmn_services/serialization/src/wlan_serialization_internal.c +++ b/umac/cmn_services/serialization/src/wlan_serialization_internal.c @@ -276,7 +276,7 @@ wlan_serialization_enqueue_cmd(struct wlan_serialization_command *cmd, if (WLAN_SER_CMD_ACTIVE == status) wlan_serialization_activate_cmd(cmd_list, - ser_pdev_obj); + ser_pdev_obj, ser_reason); error: ser_exit(); @@ -286,7 +286,8 @@ error: QDF_STATUS wlan_serialization_activate_cmd( struct wlan_serialization_command_list *cmd_list, - struct wlan_ser_pdev_obj *ser_pdev_obj) + struct wlan_ser_pdev_obj *ser_pdev_obj, + enum ser_queue_reason ser_reason) { QDF_STATUS status = QDF_STATUS_E_FAILURE; struct wlan_objmgr_psoc *psoc = NULL; @@ -319,6 +320,8 @@ QDF_STATUS wlan_serialization_activate_cmd( cmd_list->cmd.cmd_id, "WLAN_SER_CB_ACTIVATE_CMD"); + cmd_list->cmd.activation_reason = ser_reason; + status = cmd_list->cmd.cmd_cb(&cmd_list->cmd, WLAN_SER_CB_ACTIVATE_CMD); diff --git a/umac/cmn_services/serialization/src/wlan_serialization_internal_i.h b/umac/cmn_services/serialization/src/wlan_serialization_internal_i.h index 06b7b015e187..912c3665a52c 100644 --- a/umac/cmn_services/serialization/src/wlan_serialization_internal_i.h +++ b/umac/cmn_services/serialization/src/wlan_serialization_internal_i.h @@ -83,7 +83,8 @@ wlan_serialization_enqueue_cmd(struct wlan_serialization_command *cmd, QDF_STATUS wlan_serialization_activate_cmd( struct wlan_serialization_command_list *cmd_list, - struct wlan_ser_pdev_obj *ser_pdev_obj); + struct wlan_ser_pdev_obj *ser_pdev_obj, + enum ser_queue_reason ser_reason); /** * wlan_serialization_move_pending_to_active() - Move a cmd from pending diff --git a/umac/cmn_services/serialization/src/wlan_serialization_non_scan.c b/umac/cmn_services/serialization/src/wlan_serialization_non_scan.c index 95ef1ddc9564..372a9f10af16 100644 --- a/umac/cmn_services/serialization/src/wlan_serialization_non_scan.c +++ b/umac/cmn_services/serialization/src/wlan_serialization_non_scan.c @@ -364,7 +364,8 @@ wlan_ser_move_non_scan_pending_to_active( wlan_serialization_release_lock(&pdev_queue->pdev_queue_lock); - wlan_serialization_activate_cmd(active_cmd_list, ser_pdev_obj); + wlan_serialization_activate_cmd(active_cmd_list, ser_pdev_obj, + SER_PENDING_TO_ACTIVE); wlan_serialization_acquire_lock(&pdev_queue->pdev_queue_lock); diff --git a/umac/cmn_services/serialization/src/wlan_serialization_scan.c b/umac/cmn_services/serialization/src/wlan_serialization_scan.c index d2917e844498..36ac17c2f431 100644 --- a/umac/cmn_services/serialization/src/wlan_serialization_scan.c +++ b/umac/cmn_services/serialization/src/wlan_serialization_scan.c @@ -443,7 +443,8 @@ enum wlan_serialization_status wlan_ser_move_scan_pending_to_active( wlan_serialization_release_lock(&pdev_queue->pdev_queue_lock); - wlan_serialization_activate_cmd(active_cmd_list, ser_pdev_obj); + wlan_serialization_activate_cmd(active_cmd_list, ser_pdev_obj, + SER_PENDING_TO_ACTIVE); error: ser_exit(); return status; diff --git a/umac/cmn_services/serialization/src/wlan_serialization_utils_i.h b/umac/cmn_services/serialization/src/wlan_serialization_utils_i.h index af6dd61f1e43..a31cd85a702e 100644 --- a/umac/cmn_services/serialization/src/wlan_serialization_utils_i.h +++ b/umac/cmn_services/serialization/src/wlan_serialization_utils_i.h @@ -629,16 +629,6 @@ QDF_STATUS wlan_serialization_peek_next( #include "wlan_serialization_debug_i.h" #endif -enum ser_queue_reason { - SER_REQUEST, - SER_REMOVE, - SER_CANCEL, - SER_TIMEOUT, - SER_ACTIVATION_FAILED, - SER_PENDING_TO_ACTIVE, - SER_QUEUE_ACTION_MAX, -}; - /* * Below bit positions are used to identify if a * serialization command is in use or marked for