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