xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852be/phl/phl_test_def.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2019 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 _TEST_MODULE_DEF_H_
16*4882a593Smuzhiyun #define _TEST_MODULE_DEF_H_
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifdef CONFIG_PHL_TEST_SUITE
19*4882a593Smuzhiyun #define TEST_NAME_LEN		32
20*4882a593Smuzhiyun #define TEST_RPT_RSN_LEN	32
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #define TEST_LVL_LOW_TO		1000
23*4882a593Smuzhiyun #define TEST_LVL_NORMAL_TO	50
24*4882a593Smuzhiyun #define TEST_LVL_HIGH_TO	20
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun /*add cusstomized BP types in the following enum,
27*4882a593Smuzhiyun and hanle them in corresponding bp handler*/
28*4882a593Smuzhiyun enum TEST_BP_INFO_TYPE{
29*4882a593Smuzhiyun 	BP_INFO_TYPE_NONE = 0,
30*4882a593Smuzhiyun 	BP_INFO_TYPE_WAIT_BEACON_JOIN = 0x1,
31*4882a593Smuzhiyun 	BP_INFO_TYPE_SEND_AUTH_ODD = 0x2,
32*4882a593Smuzhiyun 	BP_INFO_TYPE_SEND_ASOC_REQ = 0x3,
33*4882a593Smuzhiyun 	BP_INFO_TYPE_SEND_DISASSOC = 0x4,
34*4882a593Smuzhiyun 	BP_INFO_TYPE_FILL_DISASSOC_RSN = 0x5,
35*4882a593Smuzhiyun 	BP_INFO_TYPE_SEND_PROBE_REQ = 0x6,
36*4882a593Smuzhiyun 	BP_INFO_TYPE_MP_CMD_EVENT = 0x7,
37*4882a593Smuzhiyun 	BP_INFO_TYPE_RX_TEST_WPRPT = 0x8,
38*4882a593Smuzhiyun 	BP_INFO_TYPE_RX_TEST_PATTERN = 0x9,
39*4882a593Smuzhiyun 	BP_INFO_TYPE_MP_RX_PHYSTS = 0xA,
40*4882a593Smuzhiyun 	BP_INFO_TYPE_TX_4_WAY = 0xB,
41*4882a593Smuzhiyun 	BP_INFO_TYPE_RX_4_WAY = 0xC,
42*4882a593Smuzhiyun 	BP_INFO_TYPE_MAX
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun enum TEST_RUN_LVL{
46*4882a593Smuzhiyun 	TEST_LVL_NONE = 0,
47*4882a593Smuzhiyun 	TEST_LVL_LOW,
48*4882a593Smuzhiyun 	TEST_LVL_NORMAL,
49*4882a593Smuzhiyun 	TEST_LVL_HIGH,
50*4882a593Smuzhiyun 	TEST_LVL_MAX
51*4882a593Smuzhiyun };
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun enum TEST_BP_RETURN_TYPE{
54*4882a593Smuzhiyun 	BP_RET_SKIP_SECTION = 0,
55*4882a593Smuzhiyun 	BP_RET_RUN_ORIGIN_SEC,
56*4882a593Smuzhiyun 	BP_RET_LEAVE_FUNC,
57*4882a593Smuzhiyun 	BP_RET_MAX
58*4882a593Smuzhiyun };
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun enum TEST_SUB_MODULE {
61*4882a593Smuzhiyun 	TEST_SUB_MODULE_MP = 0,
62*4882a593Smuzhiyun 	TEST_SUB_MODULE_FPGA = 1,
63*4882a593Smuzhiyun 	TEST_SUB_MODULE_VERIFY = 2,
64*4882a593Smuzhiyun 	TEST_SUB_MODULE_TOOL = 3,
65*4882a593Smuzhiyun 	TEST_SUB_MODULE_TRX = 4,
66*4882a593Smuzhiyun 	TEST_SUB_MODULE_UNKNOWN,
67*4882a593Smuzhiyun };
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun enum TEST_MODULE_MODE_TYPE {
70*4882a593Smuzhiyun 	UNIT_TEST_MODE = 0,
71*4882a593Smuzhiyun 	INTGR_TEST_MODE = 1,
72*4882a593Smuzhiyun 	FUNC_TEST_MODE = 2
73*4882a593Smuzhiyun };
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun struct test_bp_info{
76*4882a593Smuzhiyun 	enum TEST_BP_INFO_TYPE type;
77*4882a593Smuzhiyun 	u32 len;
78*4882a593Smuzhiyun 	void* ptr;
79*4882a593Smuzhiyun };
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun /**
82*4882a593Smuzhiyun  * test_obj_ctrl_interface - basic test control methods for generic management.
83*4882a593Smuzhiyun  * @start_test: test entry, initiate & run a test
84*4882a593Smuzhiyun  * @is_test_end: return true when test ends.
85*4882a593Smuzhiyun  *		 NOTE: Do not use evt/lock inside this method for sync.
86*4882a593Smuzhiyun  * @is_test_pass: return true when test passed.
87*4882a593Smuzhiyun  * @get_fail_rsn: if test fails, construct a reasonable string as fail description,
88*4882a593Smuzhiyun  *		  not just a status code.
89*4882a593Smuzhiyun  * @bp_handler: handle break point which is currently being hit,
90*4882a593Smuzhiyun  *		use rtw_phl_test_setup_bp to add new break point in source code
91*4882a593Smuzhiyun  *		and add customized BP type in TEST_BP_INFO_TYPE for recognition.
92*4882a593Smuzhiyun  */
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun struct test_obj_ctrl_interface{
95*4882a593Smuzhiyun 	u8 (*start_test)(void *priv);
96*4882a593Smuzhiyun 	u8 (*is_test_end)(void *priv);
97*4882a593Smuzhiyun 	u8 (*is_test_pass)(void *priv);
98*4882a593Smuzhiyun 	u8 (*get_fail_rsn)(void *priv,char* rsn, u32 max_len);
99*4882a593Smuzhiyun 	u8 (*bp_handler)(void *priv, struct test_bp_info* bp_info);
100*4882a593Smuzhiyun };
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun struct test_object {
103*4882a593Smuzhiyun 	_os_list list;
104*4882a593Smuzhiyun 	void* priv;
105*4882a593Smuzhiyun 	enum TEST_RUN_LVL run_lvl;
106*4882a593Smuzhiyun 	char name[TEST_NAME_LEN];
107*4882a593Smuzhiyun 	struct test_obj_ctrl_interface ctrl;
108*4882a593Smuzhiyun 	s32 total_time_ms; // optional, set 0 to use default see TEST_LVL_LOW_TO
109*4882a593Smuzhiyun };
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun struct test_rpt {
112*4882a593Smuzhiyun 	char name[TEST_NAME_LEN];
113*4882a593Smuzhiyun 	u8 status;
114*4882a593Smuzhiyun 	char rsn[TEST_RPT_RSN_LEN];
115*4882a593Smuzhiyun 	u32 total_time; // in ms
116*4882a593Smuzhiyun };
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun void rtw_phl_test_submodule_init(struct rtw_phl_com_t* phl_com, void *buf);
119*4882a593Smuzhiyun void rtw_phl_test_submodule_deinit(struct rtw_phl_com_t* phl_com, void *buf);
120*4882a593Smuzhiyun void rtw_phl_test_submodule_cmd_process(struct rtw_phl_com_t* phl_com, void *buf, u32 buf_len);
121*4882a593Smuzhiyun void rtw_phl_test_submodule_get_rpt(struct rtw_phl_com_t* phl_com, void *buf, u32 buf_len);
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun u8 rtw_phl_test_add_new_test_obj(struct rtw_phl_com_t* phl_com,
124*4882a593Smuzhiyun                                  char *name,
125*4882a593Smuzhiyun                                  void* priv,
126*4882a593Smuzhiyun                                  enum TEST_RUN_LVL lvl,
127*4882a593Smuzhiyun                                  struct test_obj_ctrl_interface* ctrl_intf,
128*4882a593Smuzhiyun                                  s32 total_time_ms,
129*4882a593Smuzhiyun                                  u8 objid,
130*4882a593Smuzhiyun                                  u8 test_mode);
131*4882a593Smuzhiyun u8 rtw_phl_test_setup_bp(struct rtw_phl_com_t* phl_com,
132*4882a593Smuzhiyun                          struct test_bp_info* bp_info,
133*4882a593Smuzhiyun                          u8 submdid);
134*4882a593Smuzhiyun u8 rtw_phl_test_is_test_complete(struct rtw_phl_com_t* phl_com);
135*4882a593Smuzhiyun u8 rtw_phl_test_get_rpt(struct rtw_phl_com_t* phl_com, u8* buf, u32 len);
136*4882a593Smuzhiyun u8 rtw_phl_test_set_max_run_time(struct rtw_phl_com_t* phl_com, enum TEST_RUN_LVL lvl, u32 timeout_ms);
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun enum rtw_phl_status rtw_phl_reset(void *phl);
139*4882a593Smuzhiyun #else
140*4882a593Smuzhiyun #define rtw_phl_test_submodule_init(phl_com, buf)
141*4882a593Smuzhiyun #define rtw_phl_test_submodule_deinit(phl_com, buf)
142*4882a593Smuzhiyun #define rtw_phl_test_submodule_cmd_process(phl_com, buf, buf_len)
143*4882a593Smuzhiyun #define rtw_phl_test_submodule_get_rpt(phl_com, buf, buf_len)
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun #define rtw_phl_test_add_new_test_obj(phl_com, name, priv, lvl, ctrl_intf, total_time_ms, objid, test_mode) true
146*4882a593Smuzhiyun #define rtw_phl_test_setup_bp(phl_com, bp_info, submdid) true
147*4882a593Smuzhiyun #define rtw_phl_test_is_test_complete(phl_com) true
148*4882a593Smuzhiyun #define rtw_phl_test_get_rpt(phl_com, buf, len) true
149*4882a593Smuzhiyun #define rtw_phl_test_set_max_run_time(phl_com, lvl, timeout_ms) true
150*4882a593Smuzhiyun #endif /*CONFIG_PHL_TEST_SUITE*/
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun #endif	/* _TEST_MODULE_DEF_H_ */
153