1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2019 - 2020 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun #ifndef __PHL_SOUND_FSM_H__ 16*4882a593Smuzhiyun #define __PHL_SOUND_FSM_H__ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun struct phl_sound_obj; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun enum RTW_PHL_SND_NOTIFY_EVENT { 21*4882a593Smuzhiyun RTW_PHL_SND_START, 22*4882a593Smuzhiyun RTW_PHL_SND_ABORT, 23*4882a593Smuzhiyun RTW_PHL_SND_C2H_SND_DOWN /* C2H Sounding Down */ 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun enum SND_EV_ID { 27*4882a593Smuzhiyun SND_FUNC_EV_INIT, 28*4882a593Smuzhiyun SND_FUNC_EV_DEINIT, 29*4882a593Smuzhiyun SND_FUNC_EV_SND_START, 30*4882a593Smuzhiyun SND_FUNC_EV_NOTIFY_PENDING_REQ, 31*4882a593Smuzhiyun SND_FUNC_EV_CHK_SND_STS, 32*4882a593Smuzhiyun SND_FUNC_EV_PROC_GRP, 33*4882a593Smuzhiyun SND_FUNC_EV_START_SND_PROC, 34*4882a593Smuzhiyun SND_FUNC_EV_END_SND, 35*4882a593Smuzhiyun SND_PROC_EV_IDLE_GET_SND_GRP, 36*4882a593Smuzhiyun SND_PROC_EV_IDLE_FREE_PRE_RES, 37*4882a593Smuzhiyun SND_PROC_EV_BUSY_GET_BF_RES, 38*4882a593Smuzhiyun SND_PROC_EV_BUSY_PRE_CFG, 39*4882a593Smuzhiyun SND_PROC_EV_BUSY_TRIG_SND, 40*4882a593Smuzhiyun SND_PROC_EV_BUSY_REL_SND_CTRL, 41*4882a593Smuzhiyun SND_PROC_EV_BUSY_POLLING_STS, 42*4882a593Smuzhiyun SND_PROC_EV_BUSY_SND_DOWN, 43*4882a593Smuzhiyun SND_PROC_EV_DOWN_POST_CFG, 44*4882a593Smuzhiyun SND_PROC_EV_DOWN_SND_END, 45*4882a593Smuzhiyun SND_PROC_EV_DOWN_NEXT_SND, 46*4882a593Smuzhiyun SND_EV_TERMINATE, 47*4882a593Smuzhiyun SND_EV_DONOTHING, 48*4882a593Smuzhiyun SND_EV_MAX 49*4882a593Smuzhiyun }; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun enum SND_STATE_ST { 52*4882a593Smuzhiyun /* Initializae and de-initialize*/ 53*4882a593Smuzhiyun SND_ST_FUNC_INIT, 54*4882a593Smuzhiyun SND_ST_FUNC_DEINIT, 55*4882a593Smuzhiyun /* FUNC MAIN STATE */ 56*4882a593Smuzhiyun SND_ST_FUNC_READY, 57*4882a593Smuzhiyun SND_ST_FUNC_LEAVE, 58*4882a593Smuzhiyun /* SND PROC - periodic */ 59*4882a593Smuzhiyun SND_ST_PROC_IDLE, 60*4882a593Smuzhiyun SND_ST_PROC_BUSY, 61*4882a593Smuzhiyun SND_ST_PROC_DOWN, 62*4882a593Smuzhiyun SND_ST_PROC_TERMINATE 63*4882a593Smuzhiyun }; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun struct phl_snd_start_req { 66*4882a593Smuzhiyun void *wrole; 67*4882a593Smuzhiyun u8 dialog_token; 68*4882a593Smuzhiyun u8 proc_timeout_ms; 69*4882a593Smuzhiyun u8 proc_period; 70*4882a593Smuzhiyun bool bypass_sts_chk; 71*4882a593Smuzhiyun u8 test_flag; 72*4882a593Smuzhiyun }; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun struct fsm_main *phl_sound_new_fsm(struct fsm_root *root, 75*4882a593Smuzhiyun struct phl_info_t *phl_info); 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun void phl_snd_destory_fsm(struct fsm_main *fsm); 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun enum rtw_phl_status phl_snd_fsm_ev_c2h_snd_down(void *phl); 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun void phl_snd_destory_obj(struct phl_sound_obj *snd); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun enum rtw_phl_status phl_snd_fsm_ev_abort(void *phl); 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun enum rtw_phl_status 86*4882a593Smuzhiyun phl_snd_fsm_ev_start_func(void *phl, void *req); 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun enum rtw_phl_status 89*4882a593Smuzhiyun phl_snd_fsm_send_msg(void *phl, enum RTW_PHL_SND_NOTIFY_EVENT notify, 90*4882a593Smuzhiyun void *buf, u32 buf_sz); 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun u8 phl_snd_is_inprogress(void *phl); 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun #endif 95