xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852be/phl/phl_cmd_job.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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  * Author: vincent_fann@realtek.com
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  *****************************************************************************/
17*4882a593Smuzhiyun #ifndef __PHL_CMD_JOB_H__
18*4882a593Smuzhiyun #define __PHL_CMD_JOB_H__
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define RTW_PHL_JOB_NAME_LEN 32
21*4882a593Smuzhiyun #ifndef MIN
22*4882a593Smuzhiyun #define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
23*4882a593Smuzhiyun #endif
24*4882a593Smuzhiyun struct fsm_msg;
25*4882a593Smuzhiyun struct _cmd_obj;
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /* command job */
28*4882a593Smuzhiyun enum JOB_ID {
29*4882a593Smuzhiyun 	JOB_RUN_FUNC,
30*4882a593Smuzhiyun 	JOB_ADD_STA_ENTRY,
31*4882a593Smuzhiyun 	JOB_ADD_MACID,
32*4882a593Smuzhiyun 	JOB_MAX,
33*4882a593Smuzhiyun };
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun struct job_hdl_ent {
36*4882a593Smuzhiyun 	u16 job_id;
37*4882a593Smuzhiyun 	char name[RTW_PHL_JOB_NAME_LEN];
38*4882a593Smuzhiyun 	int (*job_func)(struct _cmd_obj *pcmd, void *param);
39*4882a593Smuzhiyun };
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun enum JOB_RESULT {
42*4882a593Smuzhiyun 	JOB_SUCCESS,
43*4882a593Smuzhiyun 	/* caller thread will be schedule out until job is completed */
44*4882a593Smuzhiyun 	JOB_TIMEOUT,
45*4882a593Smuzhiyun 	JOB_FAILURE
46*4882a593Smuzhiyun };
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun struct wait_completion {
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun 	u8 sync;
51*4882a593Smuzhiyun 	u32 submit_time;
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun 	/* <0: not synchronous,
54*4882a593Smuzhiyun 	 *  0: wait forever,
55*4882a593Smuzhiyun 	 * >0: max waitting time (ms)
56*4882a593Smuzhiyun 	 */
57*4882a593Smuzhiyun 	int max_wait_time;
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun 	_os_event done;
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun 	/* JOB_WAIT_COMPLETION use */
62*4882a593Smuzhiyun 	int rtn; /* handle return value */
63*4882a593Smuzhiyun 	enum JOB_RESULT result; /* operation result */
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun struct phl_cmd_job {
67*4882a593Smuzhiyun 	_os_list list;
68*4882a593Smuzhiyun 	u16 id;
69*4882a593Smuzhiyun 	struct wait_completion wait;
70*4882a593Smuzhiyun 	u8 pwr_level;
71*4882a593Smuzhiyun 	union {
72*4882a593Smuzhiyun 		struct { /* JOB_RUN_FUNC */
73*4882a593Smuzhiyun 			int (*func)(void *priv, void *param); /* TODO remove */
74*4882a593Smuzhiyun 			int (*fptr)(void *priv, void *param, bool discard);
75*4882a593Smuzhiyun 			void *priv;
76*4882a593Smuzhiyun 			void *parm;
77*4882a593Smuzhiyun 			int parm_sz;
78*4882a593Smuzhiyun 			char name[RTW_PHL_JOB_NAME_LEN];
79*4882a593Smuzhiyun 		} cmd;
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun 		struct { /* JOB_ADD_STA_ENTRY */
82*4882a593Smuzhiyun 			struct rtw_phl_stainfo_t *sta;
83*4882a593Smuzhiyun 		} sta;
84*4882a593Smuzhiyun 	} u;
85*4882a593Smuzhiyun };
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun enum PWR_LEVEL {
88*4882a593Smuzhiyun 	PWR_DONT_CARE, /* able to run in any kind of power mode */
89*4882a593Smuzhiyun 	PWR_NO_IO, /* without register read write */
90*4882a593Smuzhiyun 	PWR_BASIC_IO /* leave 32K and PG */
91*4882a593Smuzhiyun };
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun enum JOB_SYNC {
94*4882a593Smuzhiyun 	JOB_ASYNC,
95*4882a593Smuzhiyun 	/* caller thread will be schedule out until job is completed */
96*4882a593Smuzhiyun 	JOB_WAIT_COMPLETION
97*4882a593Smuzhiyun };
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun char *job_name(struct _cmd_obj *pcmd, u8 id);
100*4882a593Smuzhiyun void cmd_set_job_tbl(struct _cmd_obj *pcmd);
101*4882a593Smuzhiyun void cmd_discard_msg_job(struct _cmd_obj *pcmd, struct fsm_msg *msg);
102*4882a593Smuzhiyun int phl_cmd_do_job(struct _cmd_obj *pcmd, void *param);
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun /* command thread jobs */
105*4882a593Smuzhiyun /* TODO remove below when no reference */
106*4882a593Smuzhiyun enum rtw_phl_status rtw_phl_job_add_fptr(void *phl, void *func,
107*4882a593Smuzhiyun 	void *priv, void *parm, char *name, enum PWR_LEVEL pwr);
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun enum rtw_phl_status rtw_phl_job_fill_fptr(void *phl, struct phl_cmd_job *job,
110*4882a593Smuzhiyun 	void *func, void *priv, void *parm, char *name, enum PWR_LEVEL pwr);
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun enum rtw_phl_status phl_cmd_enqueue_and_wait_job(struct _cmd_obj *pcmd,
113*4882a593Smuzhiyun 	struct fsm_msg *msg);
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun enum rtw_phl_status phl_cmd_complete_job(void *phl, struct phl_cmd_job *job);
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun enum rtw_phl_status rtw_phl_job_reg_wdog(void *phl,
118*4882a593Smuzhiyun 	int (*func)(void *priv, void *param, bool discard),
119*4882a593Smuzhiyun 	void *priv, void *parm, int parm_sz, char *name, enum PWR_LEVEL pwr);
120*4882a593Smuzhiyun enum rtw_phl_status rtw_phl_cmd_pause_wdog(void *phl, char *reason);
121*4882a593Smuzhiyun enum rtw_phl_status rtw_phl_cmd_resume_wdog(void *phl, char *reason);
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun enum rtw_phl_status rtw_hal_add_sta_entry_job(void *phl,
124*4882a593Smuzhiyun 	struct rtw_phl_stainfo_t *sta, enum JOB_SYNC sync);
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun #endif /* __PHL_CMD_JOB_H__ */
127