video: driver: restructure video state machine

Re-structure video driver statemachine to use
event handler. Added event handler support for
event states.

Added change to handle event depending on the
underlying state implementation.

Change-Id: Ib55c12c6cadc4d780797a5aee75d5ea61e95c94f
Signed-off-by: Govindaraj Rajagopal <quic_grajagop@quicinc.com>
This commit is contained in:
Govindaraj Rajagopal
2022-11-25 21:28:41 +05:30
parent 68df0645ec
commit 7c365bdb94
19 changed files with 1174 additions and 458 deletions

View File

@@ -10,6 +10,8 @@
#include "msm_vidc_internal.h"
struct msm_vidc_core;
enum msm_vidc_state;
enum msm_vidc_sub_state;
#define FOREACH_CORE_STATE(CORE_STATE) { \
CORE_STATE(CORE_DEINIT) \
@@ -18,6 +20,17 @@ struct msm_vidc_core;
CORE_STATE(CORE_ERROR) \
}
#define FOREACH_EVENT(EVENT) { \
EVENT(S_FMT) \
EVENT(REQBUFS) \
EVENT(S_CTRL) \
EVENT(STREAMON) \
EVENT(STREAMOFF) \
EVENT(CMD_START) \
EVENT(CMD_STOP) \
EVENT(BUF_QUEUE) \
}
enum msm_vidc_core_state FOREACH_CORE_STATE(GENERATE_MSM_VIDC_ENUM);
enum msm_vidc_core_sub_state {
@@ -37,13 +50,9 @@ enum msm_vidc_core_event_type {
CORE_EVENT_UPDATE_SUB_STATE = BIT(1),
};
struct msm_vidc_core_state_handle {
enum msm_vidc_core_state state;
int (*handle)(struct msm_vidc_core *core,
enum msm_vidc_core_event_type type,
struct msm_vidc_event_data *data);
};
enum msm_vidc_event FOREACH_EVENT(GENERATE_MSM_VIDC_ENUM);
/* core statemachine functions */
enum msm_vidc_allow msm_vidc_allow_core_state_change(
struct msm_vidc_core *core, enum msm_vidc_core_state req_state);
int msm_vidc_update_core_state(struct msm_vidc_core *core,
@@ -55,4 +64,11 @@ bool is_core_sub_state(struct msm_vidc_core *core,
const char *core_state_name(enum msm_vidc_core_state state);
const char *core_sub_state_name(enum msm_vidc_core_sub_state sub_state);
/* inst statemachine functions */
int msm_vidc_update_state(struct msm_vidc_inst *inst,
enum msm_vidc_state request_state, const char *func);
enum msm_vidc_allow msm_vidc_allow_state_change(
struct msm_vidc_inst *inst,
enum msm_vidc_state req_state);
#endif // _MSM_VIDC_STATE_H_