msm_vidc_state.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef _MSM_VIDC_STATE_H_
  7. #define _MSM_VIDC_STATE_H_
  8. #include "msm_vidc_internal.h"
  9. struct msm_vidc_core;
  10. enum msm_vidc_state;
  11. enum msm_vidc_sub_state;
  12. #define FOREACH_CORE_STATE(CORE_STATE) { \
  13. CORE_STATE(CORE_DEINIT) \
  14. CORE_STATE(CORE_INIT_WAIT) \
  15. CORE_STATE(CORE_INIT) \
  16. CORE_STATE(CORE_ERROR) \
  17. }
  18. #define FOREACH_EVENT(EVENT) { \
  19. EVENT(S_FMT) \
  20. EVENT(REQBUFS) \
  21. EVENT(S_CTRL) \
  22. EVENT(STREAMON) \
  23. EVENT(STREAMOFF) \
  24. EVENT(CMD_START) \
  25. EVENT(CMD_STOP) \
  26. EVENT(BUF_QUEUE) \
  27. }
  28. enum msm_vidc_core_state FOREACH_CORE_STATE(GENERATE_MSM_VIDC_ENUM);
  29. enum msm_vidc_core_sub_state {
  30. CORE_SUBSTATE_NONE = 0x0,
  31. CORE_SUBSTATE_POWER_ENABLE = BIT(0),
  32. CORE_SUBSTATE_GDSC_HANDOFF = BIT(1),
  33. CORE_SUBSTATE_PM_SUSPEND = BIT(2),
  34. CORE_SUBSTATE_FW_PWR_CTRL = BIT(3),
  35. CORE_SUBSTATE_PAGE_FAULT = BIT(4),
  36. CORE_SUBSTATE_CPU_WATCHDOG = BIT(5),
  37. CORE_SUBSTATE_VIDEO_UNRESPONSIVE = BIT(6),
  38. CORE_SUBSTATE_MAX = BIT(7),
  39. };
  40. enum msm_vidc_core_event_type {
  41. CORE_EVENT_NONE = BIT(0),
  42. CORE_EVENT_UPDATE_SUB_STATE = BIT(1),
  43. };
  44. enum msm_vidc_event FOREACH_EVENT(GENERATE_MSM_VIDC_ENUM);
  45. /* core statemachine functions */
  46. enum msm_vidc_allow msm_vidc_allow_core_state_change(
  47. struct msm_vidc_core *core, enum msm_vidc_core_state req_state);
  48. int msm_vidc_update_core_state(struct msm_vidc_core *core,
  49. enum msm_vidc_core_state request_state, const char *func);
  50. bool core_in_valid_state(struct msm_vidc_core *core);
  51. bool is_core_state(struct msm_vidc_core *core, enum msm_vidc_core_state state);
  52. bool is_core_sub_state(struct msm_vidc_core *core,
  53. enum msm_vidc_core_sub_state sub_state);
  54. const char *core_state_name(enum msm_vidc_core_state state);
  55. const char *core_sub_state_name(enum msm_vidc_core_sub_state sub_state);
  56. /* inst statemachine functions */
  57. int msm_vidc_update_state(struct msm_vidc_inst *inst,
  58. enum msm_vidc_state request_state, const char *func);
  59. enum msm_vidc_allow msm_vidc_allow_state_change(
  60. struct msm_vidc_inst *inst,
  61. enum msm_vidc_state req_state);
  62. #endif // _MSM_VIDC_STATE_H_