xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852be/phl/test/trx_test.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 _TRX_TEST_H_
16*4882a593Smuzhiyun #define _TRX_TEST_H_
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifdef CONFIG_PHL_TEST_SUITE
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define MAX_TEST_TXREQ_NUM  256
21*4882a593Smuzhiyun #define MAX_TEST_PAYLOAD_NUM  MAX_TEST_TXREQ_NUM
22*4882a593Smuzhiyun #define MAX_TEST_RXREQ_NUM  256
23*4882a593Smuzhiyun #define MAX_TEST_PAYLOAD_SIZE  2308
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun enum test_mode {
27*4882a593Smuzhiyun 	TEST_MODE_PHL_TX_RING_TEST = 1,
28*4882a593Smuzhiyun 	TEST_MODE_PHL_RX_RING_TEST = 2,
29*4882a593Smuzhiyun 	TEST_MODE_PHL_RING_LOOPBACK = 3,
30*4882a593Smuzhiyun 	TEST_MODE_PHL_PCIE_LOOPBACK = 4,
31*4882a593Smuzhiyun 	TEST_MODE_HAL_TX_TEST = 5,
32*4882a593Smuzhiyun 	TEST_MODE_HAL_RX_TEST = 6,
33*4882a593Smuzhiyun 	TEST_MODE_HAL_WP_REPORT_PARSE = 7,
34*4882a593Smuzhiyun 	TEST_MODE_HAL_RXDESC_PARSE = 8,
35*4882a593Smuzhiyun 	TEST_MODE_HAL_RXBD_PARSE = 9
36*4882a593Smuzhiyun };
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun enum pkt_type {
39*4882a593Smuzhiyun 	TEST_PKT_TYPE_UNI = 1,
40*4882a593Smuzhiyun 	TEST_PKT_TYPE_MC = 2,
41*4882a593Smuzhiyun 	TEST_PKT_TYPE_BC = 3,
42*4882a593Smuzhiyun 	TEST_PKT_TYPE_MAX = 0xFF,
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun struct rtw_tx_cap {
46*4882a593Smuzhiyun 	u16 macid;
47*4882a593Smuzhiyun 	u8 tid;
48*4882a593Smuzhiyun 	u8 wmm; /* for halmac add role */
49*4882a593Smuzhiyun 	u8 dma_ch;
50*4882a593Smuzhiyun 	u8 band;
51*4882a593Smuzhiyun 	u8 force_txcap;
52*4882a593Smuzhiyun 	u16 rate;
53*4882a593Smuzhiyun 	u8 bw;
54*4882a593Smuzhiyun 	u8 gi_ltf;
55*4882a593Smuzhiyun 	u8 stbc;
56*4882a593Smuzhiyun 	u8 ldpc;
57*4882a593Smuzhiyun 	u8 bk;
58*4882a593Smuzhiyun 	u8 type;
59*4882a593Smuzhiyun };
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun struct rtw_pool {
62*4882a593Smuzhiyun 	u8 *buf;
63*4882a593Smuzhiyun 	u32 buf_len;
64*4882a593Smuzhiyun 	_os_list idle_list;
65*4882a593Smuzhiyun 	_os_list busy_list;
66*4882a593Smuzhiyun 	_os_lock idle_lock;
67*4882a593Smuzhiyun 	_os_lock busy_lock;
68*4882a593Smuzhiyun 	u32 total_cnt;
69*4882a593Smuzhiyun 	u32 idle_cnt;
70*4882a593Smuzhiyun 	u32 busy_cnt;
71*4882a593Smuzhiyun };
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun struct rtw_test_rx {
74*4882a593Smuzhiyun 	_os_list list;
75*4882a593Smuzhiyun 	u32 test_id;
76*4882a593Smuzhiyun 	struct rtw_recv_pkt rx;
77*4882a593Smuzhiyun 	u8 *tpkt; 		/* for loopback mode */
78*4882a593Smuzhiyun };
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun struct rtw_payload {
81*4882a593Smuzhiyun 	_os_list list;
82*4882a593Smuzhiyun 	u32 test_id;
83*4882a593Smuzhiyun 	struct rtw_pkt_buf_list pkt;
84*4882a593Smuzhiyun 	void *os_rsvd[1];
85*4882a593Smuzhiyun };
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun struct rtw_trx_test_param {
88*4882a593Smuzhiyun 	u8 is_trx_test_end;
89*4882a593Smuzhiyun 	u8 mode;
90*4882a593Smuzhiyun 	/* parameter for trx resource*/
91*4882a593Smuzhiyun 	u32 tx_req_num;
92*4882a593Smuzhiyun 	u32 rx_req_num;
93*4882a593Smuzhiyun 	u32 tx_payload_num;
94*4882a593Smuzhiyun 	u32 tx_payload_size;
95*4882a593Smuzhiyun 	enum pkt_type pkt_type;
96*4882a593Smuzhiyun 	u8 ap_mode;
97*4882a593Smuzhiyun 	u8 trx_mode;
98*4882a593Smuzhiyun 	u8 qta_mode;
99*4882a593Smuzhiyun 	u8 qos;
100*4882a593Smuzhiyun 	u8 cur_addr[6]; 	/* mac address of this device */
101*4882a593Smuzhiyun 	u8 sta_addr[6];		/* mac address of associating device */
102*4882a593Smuzhiyun 	u8 bssid[6];
103*4882a593Smuzhiyun 	/* parameter for tx capability */
104*4882a593Smuzhiyun 	struct rtw_t_meta_data tx_cap;
105*4882a593Smuzhiyun 	/* parameter for hw configure */
106*4882a593Smuzhiyun 	/* misc */
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun };
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun struct phl_trx_test {
111*4882a593Smuzhiyun 	_os_list rx_q;
112*4882a593Smuzhiyun 	_os_lock rx_q_lock;
113*4882a593Smuzhiyun 	struct rtw_pool tx_req_pool;
114*4882a593Smuzhiyun 	struct rtw_pool rx_req_pool;
115*4882a593Smuzhiyun 	struct rtw_pool tx_pkt_pool;
116*4882a593Smuzhiyun 	struct test_obj_ctrl_interface trx_test_obj;
117*4882a593Smuzhiyun 	struct rtw_trx_test_param test_param;
118*4882a593Smuzhiyun 	struct rtw_phl_handler test_rxq_handler;
119*4882a593Smuzhiyun };
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun #define WHDR_OFST_FRAME_CONTROL 0
122*4882a593Smuzhiyun #define WHDR_OFST_DURATION 2
123*4882a593Smuzhiyun #define WHDR_OFST_ADDRESS1 4
124*4882a593Smuzhiyun #define WHDR_OFST_ADDRESS2 10
125*4882a593Smuzhiyun #define WHDR_OFST_ADDRESS3 16
126*4882a593Smuzhiyun #define WHDR_OFST_SEQUENCE 22
127*4882a593Smuzhiyun #define WHDR_OFST_ADDRESS4 24
128*4882a593Smuzhiyun #define WHDR_QOS_LENGTH 2
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun #define SET_WHDR_PROTOCOL_VERSION(_hdr, _val) \
131*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 0, 2, _val)
132*4882a593Smuzhiyun #define SET_WHDR_TYPE(_hdr, _val) \
133*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 2, 2, _val)
134*4882a593Smuzhiyun #define SET_WHDR_SUBTYPE(_hdr, _val) \
135*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 4, 4, _val)
136*4882a593Smuzhiyun #define SET_WHDR_TO_DS(_hdr, _val) \
137*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 8, 1, _val)
138*4882a593Smuzhiyun #define SET_WHDR_FROM_DS(_hdr, _val) \
139*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 9, 1, _val)
140*4882a593Smuzhiyun #define SET_WHDR_MORE_FRAG(_hdr, _val) \
141*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 10, 1, _val)
142*4882a593Smuzhiyun #define SET_WHDR_RETRY(_hdr, _val) \
143*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 11, 1, _val)
144*4882a593Smuzhiyun #define SET_WHDR_PWR_MGNT(_hdr, _val) \
145*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 12, 1, _val)
146*4882a593Smuzhiyun #define SET_WHDR_MORE_DATA(_hdr, _val) \
147*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 13, 1, _val)
148*4882a593Smuzhiyun #define SET_WHDR_WEP(_hdr, _val) \
149*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 14, 1, _val)
150*4882a593Smuzhiyun #define SET_WHDR_ORDER(_hdr, _val) \
151*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 15, 1, _val)
152*4882a593Smuzhiyun #define SET_WHDR_QOS_EN(_hdr, _val) \
153*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE(_hdr, 7, 1, _val)
154*4882a593Smuzhiyun #define SET_WHDR_DURATION(_hdr, _val) \
155*4882a593Smuzhiyun 	WriteLE2Byte(_hdr + WHDR_OFST_DURATION, _val)
156*4882a593Smuzhiyun #define SET_WHDR_ADDRESS1(_drv, _hdr, _val) \
157*4882a593Smuzhiyun 	_os_mem_cpy(_drv, _hdr + WHDR_OFST_ADDRESS1, _val, 6)
158*4882a593Smuzhiyun #define SET_WHDR_ADDRESS2(_drv, _hdr, _val) \
159*4882a593Smuzhiyun 	_os_mem_cpy(_drv, _hdr + WHDR_OFST_ADDRESS2, _val, 6)
160*4882a593Smuzhiyun #define SET_WHDR_ADDRESS3(_drv, _hdr, _val) \
161*4882a593Smuzhiyun 	_os_mem_cpy(_drv, _hdr + WHDR_OFST_ADDRESS3, _val, 6)
162*4882a593Smuzhiyun #define SET_WHDR_FRAGMENT_SEQUENCE(_hdr, _val) \
163*4882a593Smuzhiyun 	WriteLE2Byte(_hdr + WHDR_OFST_SEQUENCE, _val)
164*4882a593Smuzhiyun #define SET_WHDR_ADDRESS4(_drv, _hdr, _val) \
165*4882a593Smuzhiyun 	_os_mem_cpy(_drv, _hdr + WHDR_OFST_ADDRESS4, _val, 6)
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun #define SET_WHDR_QOS_CTRL_STA_DATA_TID(_qos, _value) \
169*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE((u8 *)_qos, 0, 4, (u8)(_value))
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun #define SET_WHDR_QOS_CTRL_STA_DATA_EOSP(_qos, _value) \
172*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE((u8 *)_qos, 4, 1, (u8)(_value))
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun #define SET_WHDR_QOS_CTRL_STA_DATA_ACK_POLICY(_qos, _value) \
175*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE((u8 *)_qos, 5, 2, (u8)(_value))
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun #define SET_WHDR_QOS_CTRL_STA_DATA_AMSDU(_qos, _value) \
178*4882a593Smuzhiyun 	SET_BITS_TO_LE_2BYTE((u8 *)_qos, 7, 1, (u8)(_value))
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun #define SET_WHDR_QOS_CTRL_STA_DATA_TXOP(_qos, _value) \
181*4882a593Smuzhiyun 	SET_BITS_TO_LE_1BYTE((u8 *)_qos + 1, 0, 8, (u8)(_value))
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun enum rtw_phl_status phl_trx_test_init(void *phl);
185*4882a593Smuzhiyun void phl_trx_test_deinit(void *phl);
186*4882a593Smuzhiyun void rtw_phl_trx_default_param(void *phl,
187*4882a593Smuzhiyun 					struct rtw_trx_test_param *test_param);
188*4882a593Smuzhiyun enum rtw_phl_status rtw_phl_trx_testsuite(void *phl,
189*4882a593Smuzhiyun 					struct rtw_trx_test_param *test_param);
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun #else /*!CONFIG_PHL_TEST_SUITE*/
192*4882a593Smuzhiyun #define phl_trx_test_init(phl)
193*4882a593Smuzhiyun #define phl_trx_test_deinit(phl)
194*4882a593Smuzhiyun #define rtw_phl_trx_default_param(phl, test_param)
195*4882a593Smuzhiyun #define rtw_phl_trx_testsuite(phl, test_param) RTW_PHL_STATUS_SUCCESS
196*4882a593Smuzhiyun #endif
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun #endif /*_TRX_TEST_H_*/
199