xref: /openbmc/linux/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h (revision ead5d1f4d877e92c051e1a1ade623d0d30e71619)
1fbb35286SLarry Finger /* SPDX-License-Identifier: GPL-2.0 */
2fbb35286SLarry Finger /* Copyright(c) 2009-2013  Realtek Corporation.*/
3f1d2b4d3SLarry Finger 
4f1d2b4d3SLarry Finger #ifndef __RTL92CE_TRX_H__
5f1d2b4d3SLarry Finger #define __RTL92CE_TRX_H__
6f1d2b4d3SLarry Finger 
7f1d2b4d3SLarry Finger #define TX_DESC_SIZE					64
8f1d2b4d3SLarry Finger #define TX_DESC_AGGR_SUBFRAME_SIZE		32
9f1d2b4d3SLarry Finger 
10f1d2b4d3SLarry Finger #define RX_DESC_SIZE					32
11f1d2b4d3SLarry Finger #define RX_DRV_INFO_SIZE_UNIT			8
12f1d2b4d3SLarry Finger 
13f1d2b4d3SLarry Finger #define	TX_DESC_NEXT_DESC_OFFSET		40
14f1d2b4d3SLarry Finger #define USB_HWDESC_HEADER_LEN			32
15f1d2b4d3SLarry Finger #define CRCLENGTH						4
16f1d2b4d3SLarry Finger 
set_tx_desc_pkt_size(__le32 * __pdesc,u32 __val)17e53e30baSLarry Finger static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val)
1836eda756SLarry Finger {
19e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, GENMASK(15, 0));
2036eda756SLarry Finger }
21f1d2b4d3SLarry Finger 
set_tx_desc_offset(__le32 * __pdesc,u32 __val)22e53e30baSLarry Finger static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val)
2336eda756SLarry Finger {
24e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, GENMASK(23, 16));
2536eda756SLarry Finger }
26f1d2b4d3SLarry Finger 
set_tx_desc_bmc(__le32 * __pdesc,u32 __val)27e53e30baSLarry Finger static inline void set_tx_desc_bmc(__le32 *__pdesc, u32 __val)
2836eda756SLarry Finger {
29e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(24));
3036eda756SLarry Finger }
31f1d2b4d3SLarry Finger 
set_tx_desc_htc(__le32 * __pdesc,u32 __val)32e53e30baSLarry Finger static inline void set_tx_desc_htc(__le32 *__pdesc, u32 __val)
3336eda756SLarry Finger {
34e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(25));
3536eda756SLarry Finger }
36f1d2b4d3SLarry Finger 
set_tx_desc_last_seg(__le32 * __pdesc,u32 __val)37e53e30baSLarry Finger static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val)
3836eda756SLarry Finger {
39e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(26));
4036eda756SLarry Finger }
41f1d2b4d3SLarry Finger 
set_tx_desc_first_seg(__le32 * __pdesc,u32 __val)42e53e30baSLarry Finger static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val)
4336eda756SLarry Finger {
44e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(27));
4536eda756SLarry Finger }
46f1d2b4d3SLarry Finger 
set_tx_desc_linip(__le32 * __pdesc,u32 __val)47e53e30baSLarry Finger static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val)
4836eda756SLarry Finger {
49e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(28));
5036eda756SLarry Finger }
51f1d2b4d3SLarry Finger 
set_tx_desc_own(__le32 * __pdesc,u32 __val)52e53e30baSLarry Finger static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val)
5336eda756SLarry Finger {
54e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(31));
5536eda756SLarry Finger }
56f1d2b4d3SLarry Finger 
get_tx_desc_own(__le32 * __pdesc)57e53e30baSLarry Finger static inline int get_tx_desc_own(__le32 *__pdesc)
5836eda756SLarry Finger {
59e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(31));
6036eda756SLarry Finger }
61f1d2b4d3SLarry Finger 
set_tx_desc_macid(__le32 * __pdesc,u32 __val)62e53e30baSLarry Finger static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val)
6336eda756SLarry Finger {
64e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(5, 0));
6536eda756SLarry Finger }
66f1d2b4d3SLarry Finger 
set_tx_desc_queue_sel(__le32 * __pdesc,u32 __val)67e53e30baSLarry Finger static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val)
6836eda756SLarry Finger {
69e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(12, 8));
7036eda756SLarry Finger }
71f1d2b4d3SLarry Finger 
set_tx_desc_rate_id(__le32 * __pdesc,u32 __val)72e53e30baSLarry Finger static inline void set_tx_desc_rate_id(__le32 *__pdesc, u32 __val)
7336eda756SLarry Finger {
74e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(19, 16));
7536eda756SLarry Finger }
76f1d2b4d3SLarry Finger 
set_tx_desc_nav_use_hdr(__le32 * __pdesc,u32 __val)77e53e30baSLarry Finger static inline void set_tx_desc_nav_use_hdr(__le32 *__pdesc, u32 __val)
7836eda756SLarry Finger {
79e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, BIT(20));
8036eda756SLarry Finger }
81f1d2b4d3SLarry Finger 
set_tx_desc_sec_type(__le32 * __pdesc,u32 __val)82e53e30baSLarry Finger static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val)
8336eda756SLarry Finger {
84e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(23, 22));
8536eda756SLarry Finger }
86f1d2b4d3SLarry Finger 
set_tx_desc_pkt_offset(__le32 * __pdesc,u32 __val)87e53e30baSLarry Finger static inline void set_tx_desc_pkt_offset(__le32 *__pdesc, u32 __val)
8836eda756SLarry Finger {
89e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(30, 26));
9036eda756SLarry Finger }
91f1d2b4d3SLarry Finger 
set_tx_desc_agg_enable(__le32 * __pdesc,u32 __val)92e53e30baSLarry Finger static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val)
9336eda756SLarry Finger {
94e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, BIT(12));
9536eda756SLarry Finger }
96f1d2b4d3SLarry Finger 
set_tx_desc_rdg_enable(__le32 * __pdesc,u32 __val)97e53e30baSLarry Finger static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val)
9836eda756SLarry Finger {
99e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, BIT(13));
10036eda756SLarry Finger }
101f1d2b4d3SLarry Finger 
set_tx_desc_more_frag(__le32 * __pdesc,u32 __val)102e53e30baSLarry Finger static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val)
10336eda756SLarry Finger {
104e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, BIT(17));
10536eda756SLarry Finger }
106f1d2b4d3SLarry Finger 
set_tx_desc_ampdu_density(__le32 * __pdesc,u32 __val)107e53e30baSLarry Finger static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val)
10836eda756SLarry Finger {
109e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, GENMASK(22, 20));
11036eda756SLarry Finger }
111f1d2b4d3SLarry Finger 
set_tx_desc_antsel_a(__le32 * __pdesc,u32 __val)112e53e30baSLarry Finger static inline void set_tx_desc_antsel_a(__le32 *__pdesc, u32 __val)
11336eda756SLarry Finger {
114e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, BIT(24));
11536eda756SLarry Finger }
11636eda756SLarry Finger 
set_tx_desc_antsel_b(__le32 * __pdesc,u32 __val)117e53e30baSLarry Finger static inline void set_tx_desc_antsel_b(__le32 *__pdesc, u32 __val)
11836eda756SLarry Finger {
119e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, BIT(25));
12036eda756SLarry Finger }
12136eda756SLarry Finger 
set_tx_desc_seq(__le32 * __pdesc,u32 __val)122e53e30baSLarry Finger static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val)
12336eda756SLarry Finger {
124e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, GENMASK(27, 16));
12536eda756SLarry Finger }
12636eda756SLarry Finger 
set_tx_desc_hwseq_en(__le32 * __pdesc,u32 __val)127e53e30baSLarry Finger static inline void set_tx_desc_hwseq_en(__le32 *__pdesc, u32 __val)
12836eda756SLarry Finger {
129e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, BIT(31));
13036eda756SLarry Finger }
13136eda756SLarry Finger 
set_tx_desc_rts_rate(__le32 * __pdesc,u32 __val)132e53e30baSLarry Finger static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val)
13336eda756SLarry Finger {
134e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, GENMASK(4, 0));
13536eda756SLarry Finger }
13636eda756SLarry Finger 
set_tx_desc_qos(__le32 * __pdesc,u32 __val)137e53e30baSLarry Finger static inline void set_tx_desc_qos(__le32 *__pdesc, u32 __val)
13836eda756SLarry Finger {
139e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, BIT(6));
14036eda756SLarry Finger }
14136eda756SLarry Finger 
set_tx_desc_use_rate(__le32 * __pdesc,u32 __val)142e53e30baSLarry Finger static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val)
14336eda756SLarry Finger {
144e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, BIT(8));
14536eda756SLarry Finger }
14636eda756SLarry Finger 
set_tx_desc_disable_fb(__le32 * __pdesc,u32 __val)147e53e30baSLarry Finger static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val)
14836eda756SLarry Finger {
149e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, BIT(10));
15036eda756SLarry Finger }
15136eda756SLarry Finger 
set_tx_desc_cts2self(__le32 * __pdesc,u32 __val)152e53e30baSLarry Finger static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val)
15336eda756SLarry Finger {
154e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, BIT(11));
15536eda756SLarry Finger }
15636eda756SLarry Finger 
set_tx_desc_rts_enable(__le32 * __pdesc,u32 __val)157e53e30baSLarry Finger static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val)
15836eda756SLarry Finger {
159e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, BIT(12));
16036eda756SLarry Finger }
16136eda756SLarry Finger 
set_tx_desc_hw_rts_enable(__le32 * __pdesc,u32 __val)162e53e30baSLarry Finger static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val)
16336eda756SLarry Finger {
164e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, BIT(13));
16536eda756SLarry Finger }
16636eda756SLarry Finger 
set_tx_desc_tx_sub_carrier(__le32 * __pdesc,u32 __val)167e53e30baSLarry Finger static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val)
16836eda756SLarry Finger {
169e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, GENMASK(21, 20));
17036eda756SLarry Finger }
17136eda756SLarry Finger 
set_tx_desc_tx_stbc(__le32 * __pdesc,u32 __val)172e53e30baSLarry Finger static inline void set_tx_desc_tx_stbc(__le32 *__pdesc, u32 __val)
17336eda756SLarry Finger {
174e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, GENMASK(23, 22));
17536eda756SLarry Finger }
17636eda756SLarry Finger 
set_tx_desc_data_bw(__le32 * __pdesc,u32 __val)177e53e30baSLarry Finger static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val)
17836eda756SLarry Finger {
179e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, BIT(25));
18036eda756SLarry Finger }
18136eda756SLarry Finger 
set_tx_desc_rts_short(__le32 * __pdesc,u32 __val)182e53e30baSLarry Finger static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val)
18336eda756SLarry Finger {
184e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, BIT(26));
18536eda756SLarry Finger }
18636eda756SLarry Finger 
set_tx_desc_rts_bw(__le32 * __pdesc,u32 __val)187e53e30baSLarry Finger static inline void set_tx_desc_rts_bw(__le32 *__pdesc, u32 __val)
18836eda756SLarry Finger {
189e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, BIT(27));
19036eda756SLarry Finger }
19136eda756SLarry Finger 
set_tx_desc_rts_sc(__le32 * __pdesc,u32 __val)192e53e30baSLarry Finger static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val)
19336eda756SLarry Finger {
194e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, GENMASK(29, 28));
19536eda756SLarry Finger }
19636eda756SLarry Finger 
set_tx_desc_rts_stbc(__le32 * __pdesc,u32 __val)197e53e30baSLarry Finger static inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val)
19836eda756SLarry Finger {
199e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, GENMASK(31, 30));
20036eda756SLarry Finger }
20136eda756SLarry Finger 
set_tx_desc_tx_rate(__le32 * __pdesc,u32 __val)202e53e30baSLarry Finger static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
20336eda756SLarry Finger {
204e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, GENMASK(5, 0));
20536eda756SLarry Finger }
20636eda756SLarry Finger 
set_tx_desc_data_shortgi(__le32 * __pdesc,u32 __val)207e53e30baSLarry Finger static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val)
20836eda756SLarry Finger {
209e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, BIT(6));
21036eda756SLarry Finger }
21136eda756SLarry Finger 
set_tx_desc_data_rate_fb_limit(__le32 * __pdesc,u32 __val)212e53e30baSLarry Finger static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val)
21336eda756SLarry Finger {
214e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, GENMASK(12, 8));
21536eda756SLarry Finger }
21636eda756SLarry Finger 
set_tx_desc_rts_rate_fb_limit(__le32 * __pdesc,u32 __val)217e53e30baSLarry Finger static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val)
21836eda756SLarry Finger {
219e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, GENMASK(16, 13));
22036eda756SLarry Finger }
22136eda756SLarry Finger 
set_tx_desc_max_agg_num(__le32 * __pdesc,u32 __val)222e53e30baSLarry Finger static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val)
22336eda756SLarry Finger {
224e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 6, __val, GENMASK(15, 11));
22536eda756SLarry Finger }
22636eda756SLarry Finger 
set_tx_desc_antsel_c(__le32 * __pdesc,u32 __val)227e53e30baSLarry Finger static inline void set_tx_desc_antsel_c(__le32 *__pdesc, u32 __val)
22836eda756SLarry Finger {
229e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 7, __val, BIT(29));
23036eda756SLarry Finger }
23136eda756SLarry Finger 
set_tx_desc_tx_buffer_size(__le32 * __pdesc,u32 __val)232e53e30baSLarry Finger static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val)
23336eda756SLarry Finger {
234e53e30baSLarry Finger 	le32p_replace_bits(__pdesc + 7, __val, GENMASK(15, 0));
23536eda756SLarry Finger }
23636eda756SLarry Finger 
get_tx_desc_tx_buffer_size(__le32 * __pdesc)237e53e30baSLarry Finger static inline int get_tx_desc_tx_buffer_size(__le32 *__pdesc)
23836eda756SLarry Finger {
239e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 7), GENMASK(15, 0));
24036eda756SLarry Finger }
24136eda756SLarry Finger 
set_tx_desc_tx_buffer_address(__le32 * __pdesc,u32 __val)242e53e30baSLarry Finger static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val)
24336eda756SLarry Finger {
244e53e30baSLarry Finger 	*(__pdesc + 8) = cpu_to_le32(__val);
24536eda756SLarry Finger }
24636eda756SLarry Finger 
get_tx_desc_tx_buffer_address(__le32 * __pdesc)24738fcdcbdSLarry Finger static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc)
24836eda756SLarry Finger {
249e53e30baSLarry Finger 	return le32_to_cpu(*(__pdesc + 8));
25036eda756SLarry Finger }
25136eda756SLarry Finger 
set_tx_desc_next_desc_address(__le32 * __pdesc,u32 __val)252e53e30baSLarry Finger static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val)
25336eda756SLarry Finger {
254e53e30baSLarry Finger 	*(__pdesc + 10) = cpu_to_le32(__val);
25536eda756SLarry Finger }
25636eda756SLarry Finger 
get_rx_desc_pkt_len(__le32 * __pdesc)257e53e30baSLarry Finger static inline int get_rx_desc_pkt_len(__le32 *__pdesc)
25836eda756SLarry Finger {
259e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), GENMASK(13, 0));
26036eda756SLarry Finger }
26136eda756SLarry Finger 
get_rx_desc_crc32(__le32 * __pdesc)262e53e30baSLarry Finger static inline int get_rx_desc_crc32(__le32 *__pdesc)
26336eda756SLarry Finger {
264e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(14));
26536eda756SLarry Finger }
26636eda756SLarry Finger 
get_rx_desc_icv(__le32 * __pdesc)267e53e30baSLarry Finger static inline int get_rx_desc_icv(__le32 *__pdesc)
26836eda756SLarry Finger {
269e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(15));
27036eda756SLarry Finger }
27136eda756SLarry Finger 
get_rx_desc_drv_info_size(__le32 * __pdesc)272e53e30baSLarry Finger static inline int get_rx_desc_drv_info_size(__le32 *__pdesc)
27336eda756SLarry Finger {
274e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), GENMASK(19, 16));
27536eda756SLarry Finger }
27636eda756SLarry Finger 
get_rx_desc_security(__le32 * __pdesc)277e53e30baSLarry Finger static inline int get_rx_desc_security(__le32 *__pdesc)
27836eda756SLarry Finger {
279e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), GENMASK(22, 20));
28036eda756SLarry Finger }
28136eda756SLarry Finger 
get_rx_desc_qos(__le32 * __pdesc)282e53e30baSLarry Finger static inline int get_rx_desc_qos(__le32 *__pdesc)
28336eda756SLarry Finger {
284e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(23));
28536eda756SLarry Finger }
28636eda756SLarry Finger 
get_rx_desc_shift(__le32 * __pdesc)287e53e30baSLarry Finger static inline int get_rx_desc_shift(__le32 *__pdesc)
28836eda756SLarry Finger {
289e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), GENMASK(25, 24));
29036eda756SLarry Finger }
29136eda756SLarry Finger 
get_rx_desc_physt(__le32 * __pdesc)292e53e30baSLarry Finger static inline int get_rx_desc_physt(__le32 *__pdesc)
29336eda756SLarry Finger {
294e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(26));
29536eda756SLarry Finger }
29636eda756SLarry Finger 
get_rx_desc_swdec(__le32 * __pdesc)297e53e30baSLarry Finger static inline int get_rx_desc_swdec(__le32 *__pdesc)
29836eda756SLarry Finger {
299e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(27));
30036eda756SLarry Finger }
30136eda756SLarry Finger 
get_rx_desc_ls(__le32 * __pdesc)302e53e30baSLarry Finger static inline int get_rx_desc_ls(__le32 *__pdesc)
30336eda756SLarry Finger {
304e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(28));
30536eda756SLarry Finger }
30636eda756SLarry Finger 
get_rx_desc_fs(__le32 * __pdesc)307e53e30baSLarry Finger static inline int get_rx_desc_fs(__le32 *__pdesc)
30836eda756SLarry Finger {
309e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(29));
31036eda756SLarry Finger }
31136eda756SLarry Finger 
get_rx_desc_eor(__le32 * __pdesc)312e53e30baSLarry Finger static inline int get_rx_desc_eor(__le32 *__pdesc)
31336eda756SLarry Finger {
314e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(30));
31536eda756SLarry Finger }
31636eda756SLarry Finger 
get_rx_desc_own(__le32 * __pdesc)317e53e30baSLarry Finger static inline int get_rx_desc_own(__le32 *__pdesc)
31836eda756SLarry Finger {
319e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(31));
32036eda756SLarry Finger }
32136eda756SLarry Finger 
set_rx_desc_pkt_len(__le32 * __pdesc,u32 __val)322e53e30baSLarry Finger static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val)
32336eda756SLarry Finger {
324e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, GENMASK(13, 0));
32536eda756SLarry Finger }
32636eda756SLarry Finger 
set_rx_desc_eor(__le32 * __pdesc,u32 __val)327e53e30baSLarry Finger static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val)
32836eda756SLarry Finger {
329e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(30));
33036eda756SLarry Finger }
33136eda756SLarry Finger 
set_rx_desc_own(__le32 * __pdesc,u32 __val)332e53e30baSLarry Finger static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val)
33336eda756SLarry Finger {
334e53e30baSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(31));
33536eda756SLarry Finger }
33636eda756SLarry Finger 
get_rx_desc_macid(__le32 * __pdesc)337e53e30baSLarry Finger static inline int get_rx_desc_macid(__le32 *__pdesc)
33836eda756SLarry Finger {
339e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), GENMASK(5, 0));
34036eda756SLarry Finger }
34136eda756SLarry Finger 
get_rx_desc_paggr(__le32 * __pdesc)342e53e30baSLarry Finger static inline int get_rx_desc_paggr(__le32 *__pdesc)
34336eda756SLarry Finger {
344e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(14));
34536eda756SLarry Finger }
34636eda756SLarry Finger 
get_rx_desc_faggr(__le32 * __pdesc)347e53e30baSLarry Finger static inline int get_rx_desc_faggr(__le32 *__pdesc)
34836eda756SLarry Finger {
349e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(15));
35036eda756SLarry Finger }
35136eda756SLarry Finger 
get_rx_desc_a1_fit(__le32 * __pdesc)352e53e30baSLarry Finger static inline int get_rx_desc_a1_fit(__le32 *__pdesc)
35336eda756SLarry Finger {
354e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), GENMASK(19, 16));
35536eda756SLarry Finger }
35636eda756SLarry Finger 
get_rx_desc_a2_fit(__le32 * __pdesc)357e53e30baSLarry Finger static inline int get_rx_desc_a2_fit(__le32 *__pdesc)
35836eda756SLarry Finger {
359e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), GENMASK(23, 20));
36036eda756SLarry Finger }
36136eda756SLarry Finger 
get_rx_desc_pam(__le32 * __pdesc)362e53e30baSLarry Finger static inline int get_rx_desc_pam(__le32 *__pdesc)
36336eda756SLarry Finger {
364e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(24));
36536eda756SLarry Finger }
36636eda756SLarry Finger 
get_rx_desc_pwr(__le32 * __pdesc)367e53e30baSLarry Finger static inline int get_rx_desc_pwr(__le32 *__pdesc)
36836eda756SLarry Finger {
369e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(25));
37036eda756SLarry Finger }
37136eda756SLarry Finger 
get_rx_desc_md(__le32 * __pdesc)372e53e30baSLarry Finger static inline int get_rx_desc_md(__le32 *__pdesc)
37336eda756SLarry Finger {
374e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(26));
37536eda756SLarry Finger }
37636eda756SLarry Finger 
get_rx_desc_mf(__le32 * __pdesc)377e53e30baSLarry Finger static inline int get_rx_desc_mf(__le32 *__pdesc)
37836eda756SLarry Finger {
379e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(27));
38036eda756SLarry Finger }
38136eda756SLarry Finger 
get_rx_desc_type(__le32 * __pdesc)382e53e30baSLarry Finger static inline int get_rx_desc_type(__le32 *__pdesc)
38336eda756SLarry Finger {
384e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), GENMASK(29, 28));
38536eda756SLarry Finger }
38636eda756SLarry Finger 
get_rx_desc_mc(__le32 * __pdesc)387e53e30baSLarry Finger static inline int get_rx_desc_mc(__le32 *__pdesc)
38836eda756SLarry Finger {
389e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(30));
39036eda756SLarry Finger }
39136eda756SLarry Finger 
get_rx_desc_bc(__le32 * __pdesc)392e53e30baSLarry Finger static inline int get_rx_desc_bc(__le32 *__pdesc)
39336eda756SLarry Finger {
394e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(31));
39536eda756SLarry Finger }
39636eda756SLarry Finger 
get_rx_desc_seq(__le32 * __pdesc)397e53e30baSLarry Finger static inline int get_rx_desc_seq(__le32 *__pdesc)
39836eda756SLarry Finger {
399e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 2), GENMASK(11, 0));
40036eda756SLarry Finger }
40136eda756SLarry Finger 
get_rx_desc_frag(__le32 * __pdesc)402e53e30baSLarry Finger static inline int get_rx_desc_frag(__le32 *__pdesc)
40336eda756SLarry Finger {
404e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 2), GENMASK(15, 12));
40536eda756SLarry Finger }
40636eda756SLarry Finger 
get_rx_desc_rxmcs(__le32 * __pdesc)407e53e30baSLarry Finger static inline int get_rx_desc_rxmcs(__le32 *__pdesc)
40836eda756SLarry Finger {
409e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0));
41036eda756SLarry Finger }
41136eda756SLarry Finger 
get_rx_desc_rxht(__le32 * __pdesc)412e53e30baSLarry Finger static inline int get_rx_desc_rxht(__le32 *__pdesc)
41336eda756SLarry Finger {
414e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(6));
41536eda756SLarry Finger }
41636eda756SLarry Finger 
get_rx_status_desc_rx_gf(__le32 * __pdesc)417e53e30baSLarry Finger static inline int get_rx_status_desc_rx_gf(__le32 *__pdesc)
41836eda756SLarry Finger {
419e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(7));
42036eda756SLarry Finger }
42136eda756SLarry Finger 
get_rx_desc_splcp(__le32 * __pdesc)422e53e30baSLarry Finger static inline int get_rx_desc_splcp(__le32 *__pdesc)
42336eda756SLarry Finger {
424e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(8));
42536eda756SLarry Finger }
42636eda756SLarry Finger 
get_rx_desc_bw(__le32 * __pdesc)427e53e30baSLarry Finger static inline int get_rx_desc_bw(__le32 *__pdesc)
42836eda756SLarry Finger {
429e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(9));
43036eda756SLarry Finger }
43136eda756SLarry Finger 
get_rx_desc_htc(__le32 * __pdesc)432e53e30baSLarry Finger static inline int get_rx_desc_htc(__le32 *__pdesc)
43336eda756SLarry Finger {
434e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(10));
43536eda756SLarry Finger }
43636eda756SLarry Finger 
get_rx_status_desc_eosp(__le32 * __pdesc)437e53e30baSLarry Finger static inline int get_rx_status_desc_eosp(__le32 *__pdesc)
43836eda756SLarry Finger {
439e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(11));
44036eda756SLarry Finger }
44136eda756SLarry Finger 
get_rx_status_desc_bssid_fit(__le32 * __pdesc)442e53e30baSLarry Finger static inline int get_rx_status_desc_bssid_fit(__le32 *__pdesc)
44336eda756SLarry Finger {
444e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), GENMASK(13, 12));
44536eda756SLarry Finger }
44636eda756SLarry Finger 
get_rx_status_desc_rpt_sel(__le32 * __pdesc)447e53e30baSLarry Finger static inline int get_rx_status_desc_rpt_sel(__le32 *__pdesc)
44836eda756SLarry Finger {
449e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), GENMASK(15, 14));
45036eda756SLarry Finger }
45136eda756SLarry Finger 
get_rx_status_desc_pattern_match(__le32 * __pdesc)452e53e30baSLarry Finger static inline int get_rx_status_desc_pattern_match(__le32 *__pdesc)
45336eda756SLarry Finger {
454e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(29));
45536eda756SLarry Finger }
45636eda756SLarry Finger 
get_rx_status_desc_unicast_match(__le32 * __pdesc)457e53e30baSLarry Finger static inline int get_rx_status_desc_unicast_match(__le32 *__pdesc)
45836eda756SLarry Finger {
459e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(30));
46036eda756SLarry Finger }
46136eda756SLarry Finger 
get_rx_status_desc_magic_match(__le32 * __pdesc)462e53e30baSLarry Finger static inline int get_rx_status_desc_magic_match(__le32 *__pdesc)
46336eda756SLarry Finger {
464e53e30baSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(31));
46536eda756SLarry Finger }
46636eda756SLarry Finger 
get_rx_desc_iv1(__le32 * __pdesc)46738fcdcbdSLarry Finger static inline u32 get_rx_desc_iv1(__le32 *__pdesc)
46836eda756SLarry Finger {
469e53e30baSLarry Finger 	return le32_to_cpu(*(__pdesc + 4));
47036eda756SLarry Finger }
47136eda756SLarry Finger 
get_rx_desc_tsfl(__le32 * __pdesc)47238fcdcbdSLarry Finger static inline u32 get_rx_desc_tsfl(__le32 *__pdesc)
47336eda756SLarry Finger {
474e53e30baSLarry Finger 	return le32_to_cpu(*(__pdesc + 5));
47536eda756SLarry Finger }
47636eda756SLarry Finger 
get_rx_desc_buff_addr(__le32 * __pdesc)47738fcdcbdSLarry Finger static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc)
47836eda756SLarry Finger {
479e53e30baSLarry Finger 	return le32_to_cpu(*(__pdesc + 6));
48036eda756SLarry Finger }
48136eda756SLarry Finger 
get_rx_desc_buff_addr64(__le32 * __pdesc)48238fcdcbdSLarry Finger static inline u32 get_rx_desc_buff_addr64(__le32 *__pdesc)
48336eda756SLarry Finger {
484e53e30baSLarry Finger 	return le32_to_cpu(*(__pdesc + 7));
48536eda756SLarry Finger }
48636eda756SLarry Finger 
set_rx_desc_buff_addr(__le32 * __pdesc,u32 __val)487e53e30baSLarry Finger static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val)
48836eda756SLarry Finger {
489e53e30baSLarry Finger 	*(__pdesc + 6) = cpu_to_le32(__val);
49036eda756SLarry Finger }
49136eda756SLarry Finger 
set_rx_desc_buff_addr64(__le32 * __pdesc,u32 __val)492e53e30baSLarry Finger static inline void set_rx_desc_buff_addr64(__le32 *__pdesc, u32 __val)
49336eda756SLarry Finger {
494e53e30baSLarry Finger 	*(__pdesc + 7) = cpu_to_le32(__val);
49536eda756SLarry Finger }
496f1d2b4d3SLarry Finger 
497f1d2b4d3SLarry Finger /* TX report 2 format in Rx desc*/
498f1d2b4d3SLarry Finger 
get_rx_rpt2_desc_pkt_len(__le32 * __status)499e53e30baSLarry Finger static inline int get_rx_rpt2_desc_pkt_len(__le32 *__status)
50036eda756SLarry Finger {
501e53e30baSLarry Finger 	return le32_get_bits(*(__status), GENMASK(8, 0));
50236eda756SLarry Finger }
503f1d2b4d3SLarry Finger 
get_rx_rpt2_desc_macid_valid_1(__le32 * __status)50438fcdcbdSLarry Finger static inline u32 get_rx_rpt2_desc_macid_valid_1(__le32 *__status)
50536eda756SLarry Finger {
506e53e30baSLarry Finger 	return le32_to_cpu(*(__status + 4));
50736eda756SLarry Finger }
50836eda756SLarry Finger 
get_rx_rpt2_desc_macid_valid_2(__le32 * __status)50938fcdcbdSLarry Finger static inline u32 get_rx_rpt2_desc_macid_valid_2(__le32 *__status)
51036eda756SLarry Finger {
511e53e30baSLarry Finger 	return le32_to_cpu(*(__status + 5));
51236eda756SLarry Finger }
51336eda756SLarry Finger 
set_earlymode_pktnum(__le32 * __paddr,u32 __value)514e53e30baSLarry Finger static inline void set_earlymode_pktnum(__le32 *__paddr, u32 __value)
51536eda756SLarry Finger {
516e53e30baSLarry Finger 	le32p_replace_bits(__paddr, __value, GENMASK(3, 0));
51736eda756SLarry Finger }
51836eda756SLarry Finger 
set_earlymode_len0(__le32 * __paddr,u32 __value)519e53e30baSLarry Finger static inline void set_earlymode_len0(__le32 *__paddr, u32 __value)
52036eda756SLarry Finger {
521e53e30baSLarry Finger 	le32p_replace_bits(__paddr, __value, GENMASK(15, 4));
52236eda756SLarry Finger }
52336eda756SLarry Finger 
set_earlymode_len1(__le32 * __paddr,u32 __value)524e53e30baSLarry Finger static inline void set_earlymode_len1(__le32 *__paddr, u32 __value)
52536eda756SLarry Finger {
526e53e30baSLarry Finger 	le32p_replace_bits(__paddr, __value, GENMASK(27, 16));
52736eda756SLarry Finger }
52836eda756SLarry Finger 
set_earlymode_len2_1(__le32 * __paddr,u32 __value)529e53e30baSLarry Finger static inline void set_earlymode_len2_1(__le32 *__paddr, u32 __value)
53036eda756SLarry Finger {
531e53e30baSLarry Finger 	le32p_replace_bits(__paddr, __value, GENMASK(31, 28));
53236eda756SLarry Finger }
53336eda756SLarry Finger 
set_earlymode_len2_2(__le32 * __paddr,u32 __value)534e53e30baSLarry Finger static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value)
53536eda756SLarry Finger {
536e53e30baSLarry Finger 	le32p_replace_bits(__paddr + 1, __value, GENMASK(7, 0));
53736eda756SLarry Finger }
53836eda756SLarry Finger 
set_earlymode_len3(__le32 * __paddr,u32 __value)539e53e30baSLarry Finger static inline void set_earlymode_len3(__le32 *__paddr, u32 __value)
54036eda756SLarry Finger {
541e53e30baSLarry Finger 	le32p_replace_bits(__paddr + 1, __value, GENMASK(19, 8));
54236eda756SLarry Finger }
54336eda756SLarry Finger 
set_earlymode_len4(__le32 * __paddr,u32 __value)544e53e30baSLarry Finger static inline void set_earlymode_len4(__le32 *__paddr, u32 __value)
54536eda756SLarry Finger {
546e53e30baSLarry Finger 	le32p_replace_bits(__paddr + 1, __value, GENMASK(31, 20));
54736eda756SLarry Finger }
548f1d2b4d3SLarry Finger 
clear_pci_tx_desc_content(__le32 * __pdesc,int _size)549e53e30baSLarry Finger static inline void clear_pci_tx_desc_content(__le32 *__pdesc, int _size)
550e53e30baSLarry Finger {
551e53e30baSLarry Finger 	if (_size > TX_DESC_NEXT_DESC_OFFSET)
552e53e30baSLarry Finger 		memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET);
553e53e30baSLarry Finger 	else
554e53e30baSLarry Finger 		memset(__pdesc, 0, _size);
555e53e30baSLarry Finger }
556f1d2b4d3SLarry Finger 
557f1d2b4d3SLarry Finger #define RTL8188_RX_HAL_IS_CCK_RATE(rxmcs)\
558f1d2b4d3SLarry Finger 	(rxmcs == DESC92C_RATE1M ||\
559f1d2b4d3SLarry Finger 	 rxmcs == DESC92C_RATE2M ||\
560f1d2b4d3SLarry Finger 	 rxmcs == DESC92C_RATE5_5M ||\
561f1d2b4d3SLarry Finger 	 rxmcs == DESC92C_RATE11M)
562f1d2b4d3SLarry Finger 
563f1d2b4d3SLarry Finger struct phy_status_rpt {
564*c80b18cbSLarry Finger 	u8	padding[2];
565f1d2b4d3SLarry Finger 	u8	ch_corr[2];
566f1d2b4d3SLarry Finger 	u8	cck_sig_qual_ofdm_pwdb_all;
567f1d2b4d3SLarry Finger 	u8	cck_agc_rpt_ofdm_cfosho_a;
568f1d2b4d3SLarry Finger 	u8	cck_rpt_b_ofdm_cfosho_b;
569f1d2b4d3SLarry Finger 	u8	rsvd_1;/* ch_corr_msb; */
570f1d2b4d3SLarry Finger 	u8	noise_power_db_msb;
571f1d2b4d3SLarry Finger 	u8	path_cfotail[2];
572f1d2b4d3SLarry Finger 	u8	pcts_mask[2];
573f1d2b4d3SLarry Finger 	u8	stream_rxevm[2];
574f1d2b4d3SLarry Finger 	u8	path_rxsnr[2];
575f1d2b4d3SLarry Finger 	u8	noise_power_db_lsb;
576f1d2b4d3SLarry Finger 	u8	rsvd_2[3];
577f1d2b4d3SLarry Finger 	u8	stream_csi[2];
578f1d2b4d3SLarry Finger 	u8	stream_target_csi[2];
579f1d2b4d3SLarry Finger 	u8	sig_evm;
580f1d2b4d3SLarry Finger 	u8	rsvd_3;
581d1d1a96bSLarry Finger #if defined(__LITTLE_ENDIAN)
582f1d2b4d3SLarry Finger 	u8	antsel_rx_keep_2:1;	/*ex_intf_flg:1;*/
583f1d2b4d3SLarry Finger 	u8	sgi_en:1;
584f1d2b4d3SLarry Finger 	u8	rxsc:2;
585f1d2b4d3SLarry Finger 	u8	idle_long:1;
586f1d2b4d3SLarry Finger 	u8	r_ant_train_en:1;
587f1d2b4d3SLarry Finger 	u8	ant_sel_b:1;
588f1d2b4d3SLarry Finger 	u8	ant_sel:1;
589d1d1a96bSLarry Finger #else	/* __BIG_ENDIAN	*/
590f1d2b4d3SLarry Finger 	u8	ant_sel:1;
591f1d2b4d3SLarry Finger 	u8	ant_sel_b:1;
592f1d2b4d3SLarry Finger 	u8	r_ant_train_en:1;
593f1d2b4d3SLarry Finger 	u8	idle_long:1;
594f1d2b4d3SLarry Finger 	u8	rxsc:2;
595f1d2b4d3SLarry Finger 	u8	sgi_en:1;
596f1d2b4d3SLarry Finger 	u8	antsel_rx_keep_2:1;	/*ex_intf_flg:1;*/
597f1d2b4d3SLarry Finger #endif
598f1d2b4d3SLarry Finger } __packed;
599f1d2b4d3SLarry Finger 
600f1d2b4d3SLarry Finger struct rx_fwinfo_88e {
601f1d2b4d3SLarry Finger 	u8 gain_trsw[4];
602f1d2b4d3SLarry Finger 	u8 pwdb_all;
603f1d2b4d3SLarry Finger 	u8 cfosho[4];
604f1d2b4d3SLarry Finger 	u8 cfotail[4];
60508aba42fSArnd Bergmann 	s8 rxevm[2];
60608aba42fSArnd Bergmann 	s8 rxsnr[4];
607f1d2b4d3SLarry Finger 	u8 pdsnr[2];
608f1d2b4d3SLarry Finger 	u8 csi_current[2];
609f1d2b4d3SLarry Finger 	u8 csi_target[2];
610f1d2b4d3SLarry Finger 	u8 sigevm;
611f1d2b4d3SLarry Finger 	u8 max_ex_pwr;
612f1d2b4d3SLarry Finger 	u8 ex_intf_flag:1;
613f1d2b4d3SLarry Finger 	u8 sgi_en:1;
614f1d2b4d3SLarry Finger 	u8 rxsc:2;
615f1d2b4d3SLarry Finger 	u8 reserve:4;
616f1d2b4d3SLarry Finger } __packed;
617f1d2b4d3SLarry Finger 
618f1d2b4d3SLarry Finger struct tx_desc_88e {
619f1d2b4d3SLarry Finger 	u32 pktsize:16;
620f1d2b4d3SLarry Finger 	u32 offset:8;
621f1d2b4d3SLarry Finger 	u32 bmc:1;
622f1d2b4d3SLarry Finger 	u32 htc:1;
623f1d2b4d3SLarry Finger 	u32 lastseg:1;
624f1d2b4d3SLarry Finger 	u32 firstseg:1;
625f1d2b4d3SLarry Finger 	u32 linip:1;
626f1d2b4d3SLarry Finger 	u32 noacm:1;
627f1d2b4d3SLarry Finger 	u32 gf:1;
628f1d2b4d3SLarry Finger 	u32 own:1;
629f1d2b4d3SLarry Finger 
630f1d2b4d3SLarry Finger 	u32 macid:6;
631f1d2b4d3SLarry Finger 	u32 rsvd0:2;
632f1d2b4d3SLarry Finger 	u32 queuesel:5;
633f1d2b4d3SLarry Finger 	u32 rd_nav_ext:1;
634f1d2b4d3SLarry Finger 	u32 lsig_txop_en:1;
635f1d2b4d3SLarry Finger 	u32 pifs:1;
636f1d2b4d3SLarry Finger 	u32 rateid:4;
637f1d2b4d3SLarry Finger 	u32 nav_usehdr:1;
638f1d2b4d3SLarry Finger 	u32 en_descid:1;
639f1d2b4d3SLarry Finger 	u32 sectype:2;
640f1d2b4d3SLarry Finger 	u32 pktoffset:8;
641f1d2b4d3SLarry Finger 
642f1d2b4d3SLarry Finger 	u32 rts_rc:6;
643f1d2b4d3SLarry Finger 	u32 data_rc:6;
644f1d2b4d3SLarry Finger 	u32 agg_en:1;
645f1d2b4d3SLarry Finger 	u32 rdg_en:1;
646f1d2b4d3SLarry Finger 	u32 bar_retryht:2;
647f1d2b4d3SLarry Finger 	u32 agg_break:1;
648f1d2b4d3SLarry Finger 	u32 morefrag:1;
649f1d2b4d3SLarry Finger 	u32 raw:1;
650f1d2b4d3SLarry Finger 	u32 ccx:1;
651f1d2b4d3SLarry Finger 	u32 ampdudensity:3;
652f1d2b4d3SLarry Finger 	u32 bt_int:1;
653f1d2b4d3SLarry Finger 	u32 ant_sela:1;
654f1d2b4d3SLarry Finger 	u32 ant_selb:1;
655f1d2b4d3SLarry Finger 	u32 txant_cck:2;
656f1d2b4d3SLarry Finger 	u32 txant_l:2;
657f1d2b4d3SLarry Finger 	u32 txant_ht:2;
658f1d2b4d3SLarry Finger 
659f1d2b4d3SLarry Finger 	u32 nextheadpage:8;
660f1d2b4d3SLarry Finger 	u32 tailpage:8;
661f1d2b4d3SLarry Finger 	u32 seq:12;
662f1d2b4d3SLarry Finger 	u32 cpu_handle:1;
663f1d2b4d3SLarry Finger 	u32 tag1:1;
664f1d2b4d3SLarry Finger 	u32 trigger_int:1;
665f1d2b4d3SLarry Finger 	u32 hwseq_en:1;
666f1d2b4d3SLarry Finger 
667f1d2b4d3SLarry Finger 	u32 rtsrate:5;
668f1d2b4d3SLarry Finger 	u32 apdcfe:1;
669f1d2b4d3SLarry Finger 	u32 qos:1;
670f1d2b4d3SLarry Finger 	u32 hwseq_ssn:1;
671f1d2b4d3SLarry Finger 	u32 userrate:1;
672f1d2b4d3SLarry Finger 	u32 dis_rtsfb:1;
673f1d2b4d3SLarry Finger 	u32 dis_datafb:1;
674f1d2b4d3SLarry Finger 	u32 cts2self:1;
675f1d2b4d3SLarry Finger 	u32 rts_en:1;
676f1d2b4d3SLarry Finger 	u32 hwrts_en:1;
677f1d2b4d3SLarry Finger 	u32 portid:1;
678f1d2b4d3SLarry Finger 	u32 pwr_status:3;
679f1d2b4d3SLarry Finger 	u32 waitdcts:1;
680f1d2b4d3SLarry Finger 	u32 cts2ap_en:1;
681f1d2b4d3SLarry Finger 	u32 txsc:2;
682f1d2b4d3SLarry Finger 	u32 stbc:2;
683f1d2b4d3SLarry Finger 	u32 txshort:1;
684f1d2b4d3SLarry Finger 	u32 txbw:1;
685f1d2b4d3SLarry Finger 	u32 rtsshort:1;
686f1d2b4d3SLarry Finger 	u32 rtsbw:1;
687f1d2b4d3SLarry Finger 	u32 rtssc:2;
688f1d2b4d3SLarry Finger 	u32 rtsstbc:2;
689f1d2b4d3SLarry Finger 
690f1d2b4d3SLarry Finger 	u32 txrate:6;
691f1d2b4d3SLarry Finger 	u32 shortgi:1;
692f1d2b4d3SLarry Finger 	u32 ccxt:1;
693f1d2b4d3SLarry Finger 	u32 txrate_fb_lmt:5;
694f1d2b4d3SLarry Finger 	u32 rtsrate_fb_lmt:4;
695f1d2b4d3SLarry Finger 	u32 retrylmt_en:1;
696f1d2b4d3SLarry Finger 	u32 txretrylmt:6;
697f1d2b4d3SLarry Finger 	u32 usb_txaggnum:8;
698f1d2b4d3SLarry Finger 
699f1d2b4d3SLarry Finger 	u32 txagca:5;
700f1d2b4d3SLarry Finger 	u32 txagcb:5;
701f1d2b4d3SLarry Finger 	u32 usemaxlen:1;
702f1d2b4d3SLarry Finger 	u32 maxaggnum:5;
703f1d2b4d3SLarry Finger 	u32 mcsg1maxlen:4;
704f1d2b4d3SLarry Finger 	u32 mcsg2maxlen:4;
705f1d2b4d3SLarry Finger 	u32 mcsg3maxlen:4;
706f1d2b4d3SLarry Finger 	u32 mcs7sgimaxlen:4;
707f1d2b4d3SLarry Finger 
708f1d2b4d3SLarry Finger 	u32 txbuffersize:16;
709f1d2b4d3SLarry Finger 	u32 sw_offset30:8;
710f1d2b4d3SLarry Finger 	u32 sw_offset31:4;
711f1d2b4d3SLarry Finger 	u32 rsvd1:1;
712f1d2b4d3SLarry Finger 	u32 antsel_c:1;
713f1d2b4d3SLarry Finger 	u32 null_0:1;
714f1d2b4d3SLarry Finger 	u32 null_1:1;
715f1d2b4d3SLarry Finger 
716f1d2b4d3SLarry Finger 	u32 txbuffaddr;
717f1d2b4d3SLarry Finger 	u32 txbufferaddr64;
718f1d2b4d3SLarry Finger 	u32 nextdescaddress;
719f1d2b4d3SLarry Finger 	u32 nextdescaddress64;
720f1d2b4d3SLarry Finger 
721f1d2b4d3SLarry Finger 	u32 reserve_pass_pcie_mm_limit[4];
722f1d2b4d3SLarry Finger } __packed;
723f1d2b4d3SLarry Finger 
724f1d2b4d3SLarry Finger struct rx_desc_88e {
725f1d2b4d3SLarry Finger 	u32 length:14;
726f1d2b4d3SLarry Finger 	u32 crc32:1;
727f1d2b4d3SLarry Finger 	u32 icverror:1;
728f1d2b4d3SLarry Finger 	u32 drv_infosize:4;
729f1d2b4d3SLarry Finger 	u32 security:3;
730f1d2b4d3SLarry Finger 	u32 qos:1;
731f1d2b4d3SLarry Finger 	u32 shift:2;
732f1d2b4d3SLarry Finger 	u32 phystatus:1;
733f1d2b4d3SLarry Finger 	u32 swdec:1;
734f1d2b4d3SLarry Finger 	u32 lastseg:1;
735f1d2b4d3SLarry Finger 	u32 firstseg:1;
736f1d2b4d3SLarry Finger 	u32 eor:1;
737f1d2b4d3SLarry Finger 	u32 own:1;
738f1d2b4d3SLarry Finger 
739f1d2b4d3SLarry Finger 	u32 macid:6;
740f1d2b4d3SLarry Finger 	u32 tid:4;
741f1d2b4d3SLarry Finger 	u32 hwrsvd:5;
742f1d2b4d3SLarry Finger 	u32 paggr:1;
743f1d2b4d3SLarry Finger 	u32 faggr:1;
744f1d2b4d3SLarry Finger 	u32 a1_fit:4;
745f1d2b4d3SLarry Finger 	u32 a2_fit:4;
746f1d2b4d3SLarry Finger 	u32 pam:1;
747f1d2b4d3SLarry Finger 	u32 pwr:1;
748f1d2b4d3SLarry Finger 	u32 moredata:1;
749f1d2b4d3SLarry Finger 	u32 morefrag:1;
750f1d2b4d3SLarry Finger 	u32 type:2;
751f1d2b4d3SLarry Finger 	u32 mc:1;
752f1d2b4d3SLarry Finger 	u32 bc:1;
753f1d2b4d3SLarry Finger 
754f1d2b4d3SLarry Finger 	u32 seq:12;
755f1d2b4d3SLarry Finger 	u32 frag:4;
756f1d2b4d3SLarry Finger 	u32 nextpktlen:14;
757f1d2b4d3SLarry Finger 	u32 nextind:1;
758f1d2b4d3SLarry Finger 	u32 rsvd:1;
759f1d2b4d3SLarry Finger 
760f1d2b4d3SLarry Finger 	u32 rxmcs:6;
761f1d2b4d3SLarry Finger 	u32 rxht:1;
762f1d2b4d3SLarry Finger 	u32 amsdu:1;
763f1d2b4d3SLarry Finger 	u32 splcp:1;
764f1d2b4d3SLarry Finger 	u32 bandwidth:1;
765f1d2b4d3SLarry Finger 	u32 htc:1;
766f1d2b4d3SLarry Finger 	u32 tcpchk_rpt:1;
767f1d2b4d3SLarry Finger 	u32 ipcchk_rpt:1;
768f1d2b4d3SLarry Finger 	u32 tcpchk_valid:1;
769f1d2b4d3SLarry Finger 	u32 hwpcerr:1;
770f1d2b4d3SLarry Finger 	u32 hwpcind:1;
771f1d2b4d3SLarry Finger 	u32 iv0:16;
772f1d2b4d3SLarry Finger 
773f1d2b4d3SLarry Finger 	u32 iv1;
774f1d2b4d3SLarry Finger 
775f1d2b4d3SLarry Finger 	u32 tsfl;
776f1d2b4d3SLarry Finger 
777f1d2b4d3SLarry Finger 	u32 bufferaddress;
778f1d2b4d3SLarry Finger 	u32 bufferaddress64;
779f1d2b4d3SLarry Finger 
780f1d2b4d3SLarry Finger } __packed;
781f1d2b4d3SLarry Finger 
782f1d2b4d3SLarry Finger void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
783f1d2b4d3SLarry Finger 			  struct ieee80211_hdr *hdr, u8 *pdesc_tx,
784f1d2b4d3SLarry Finger 			  u8 *txbd, struct ieee80211_tx_info *info,
785f1d2b4d3SLarry Finger 			  struct ieee80211_sta *sta,
786f1d2b4d3SLarry Finger 			  struct sk_buff *skb,
787f1d2b4d3SLarry Finger 			  u8 hw_queue, struct rtl_tcb_desc *ptcb_desc);
788f1d2b4d3SLarry Finger bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
789f1d2b4d3SLarry Finger 			   struct rtl_stats *status,
790f1d2b4d3SLarry Finger 			   struct ieee80211_rx_status *rx_status,
791f1d2b4d3SLarry Finger 			   u8 *pdesc, struct sk_buff *skb);
792f1d2b4d3SLarry Finger void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
793f1d2b4d3SLarry Finger 		      bool istx, u8 desc_name, u8 *val);
7940c07bd74SPing-Ke Shih u64 rtl88ee_get_desc(struct ieee80211_hw *hw,
7950c07bd74SPing-Ke Shih 		     u8 *pdesc, bool istx, u8 desc_name);
796f1d2b4d3SLarry Finger bool rtl88ee_is_tx_desc_closed(struct ieee80211_hw *hw,
797f1d2b4d3SLarry Finger 			       u8 hw_queue, u16 index);
798f1d2b4d3SLarry Finger void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
799f1d2b4d3SLarry Finger void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
800f1d2b4d3SLarry Finger 			     bool firstseg, bool lastseg,
801f1d2b4d3SLarry Finger 			     struct sk_buff *skb);
802f1d2b4d3SLarry Finger #endif
803