1fbb35286SLarry Finger /* SPDX-License-Identifier: GPL-2.0 */
2fbb35286SLarry Finger /* Copyright(c) 2009-2013 Realtek Corporation.*/
3f0eb856eSLarry Finger
4f0eb856eSLarry Finger #ifndef __RTL92CE_TRX_H__
5f0eb856eSLarry Finger #define __RTL92CE_TRX_H__
6f0eb856eSLarry Finger
7f0eb856eSLarry Finger #define TX_DESC_SIZE 64
8f0eb856eSLarry Finger #define TX_DESC_AGGR_SUBFRAME_SIZE 32
9f0eb856eSLarry Finger
10f0eb856eSLarry Finger #define RX_DESC_SIZE 32
11f0eb856eSLarry Finger #define RX_DRV_INFO_SIZE_UNIT 8
12f0eb856eSLarry Finger
13f0eb856eSLarry Finger #define TX_DESC_NEXT_DESC_OFFSET 40
14f0eb856eSLarry Finger #define USB_HWDESC_HEADER_LEN 32
15f0eb856eSLarry Finger #define CRCLENGTH 4
16f0eb856eSLarry 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 }
21f0eb856eSLarry 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 }
26f0eb856eSLarry 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 }
31f0eb856eSLarry 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 }
36f0eb856eSLarry 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 }
41f0eb856eSLarry 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 }
46f0eb856eSLarry 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 }
51f0eb856eSLarry 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 }
56f0eb856eSLarry 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 }
61f0eb856eSLarry 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 }
66f0eb856eSLarry 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 }
71f0eb856eSLarry 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 }
76f0eb856eSLarry 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 }
81f0eb856eSLarry 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 }
86f0eb856eSLarry 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 }
91f0eb856eSLarry 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 }
96f0eb856eSLarry 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 }
101f0eb856eSLarry 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 }
106f0eb856eSLarry 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 }
111f0eb856eSLarry 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 }
496f0eb856eSLarry Finger
497f0eb856eSLarry Finger /* TX report 2 format in Rx desc*/
498f0eb856eSLarry 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 }
503f0eb856eSLarry 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 }
548f0eb856eSLarry 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 }
556f0eb856eSLarry Finger
557f0eb856eSLarry Finger #define RTL8188_RX_HAL_IS_CCK_RATE(rxmcs)\
558f0eb856eSLarry Finger (rxmcs == DESC92C_RATE1M ||\
559f0eb856eSLarry Finger rxmcs == DESC92C_RATE2M ||\
560f0eb856eSLarry Finger rxmcs == DESC92C_RATE5_5M ||\
561f0eb856eSLarry Finger rxmcs == DESC92C_RATE11M)
562f0eb856eSLarry Finger
563f0eb856eSLarry Finger struct phy_status_rpt {
564*c80b18cbSLarry Finger u8 padding[2];
565f0eb856eSLarry Finger u8 ch_corr[2];
566f0eb856eSLarry Finger u8 cck_sig_qual_ofdm_pwdb_all;
567f0eb856eSLarry Finger u8 cck_agc_rpt_ofdm_cfosho_a;
568f0eb856eSLarry Finger u8 cck_rpt_b_ofdm_cfosho_b;
569c151aed6SLarry Finger u8 rsvd_1;/* ch_corr_msb; */
570f0eb856eSLarry Finger u8 noise_power_db_msb;
571f0eb856eSLarry Finger u8 path_cfotail[2];
572f0eb856eSLarry Finger u8 pcts_mask[2];
573f0eb856eSLarry Finger u8 stream_rxevm[2];
574f0eb856eSLarry Finger u8 path_rxsnr[2];
575f0eb856eSLarry Finger u8 noise_power_db_lsb;
576f0eb856eSLarry Finger u8 rsvd_2[3];
577f0eb856eSLarry Finger u8 stream_csi[2];
578f0eb856eSLarry Finger u8 stream_target_csi[2];
579f0eb856eSLarry Finger u8 sig_evm;
580f0eb856eSLarry Finger u8 rsvd_3;
581d1d1a96bSLarry Finger #if defined(__LITTLE_ENDIAN)
582f0eb856eSLarry Finger u8 antsel_rx_keep_2:1; /*ex_intf_flg:1;*/
583f0eb856eSLarry Finger u8 sgi_en:1;
584f0eb856eSLarry Finger u8 rxsc:2;
585f0eb856eSLarry Finger u8 idle_long:1;
586f0eb856eSLarry Finger u8 r_ant_train_en:1;
587f0eb856eSLarry Finger u8 ant_sel_b:1;
588f0eb856eSLarry Finger u8 ant_sel:1;
589d1d1a96bSLarry Finger #else /* __BIG_ENDIAN */
590f0eb856eSLarry Finger u8 ant_sel:1;
591f0eb856eSLarry Finger u8 ant_sel_b:1;
592f0eb856eSLarry Finger u8 r_ant_train_en:1;
593f0eb856eSLarry Finger u8 idle_long:1;
594f0eb856eSLarry Finger u8 rxsc:2;
595f0eb856eSLarry Finger u8 sgi_en:1;
596f0eb856eSLarry Finger u8 antsel_rx_keep_2:1; /*ex_intf_flg:1;*/
597f0eb856eSLarry Finger #endif
598f0eb856eSLarry Finger } __packed;
599f0eb856eSLarry Finger
600f0eb856eSLarry Finger struct rx_fwinfo_88e {
601f0eb856eSLarry Finger u8 gain_trsw[4];
602f0eb856eSLarry Finger u8 pwdb_all;
603f0eb856eSLarry Finger u8 cfosho[4];
604f0eb856eSLarry Finger u8 cfotail[4];
60508aba42fSArnd Bergmann s8 rxevm[2];
60608aba42fSArnd Bergmann s8 rxsnr[4];
607f0eb856eSLarry Finger u8 pdsnr[2];
608f0eb856eSLarry Finger u8 csi_current[2];
609f0eb856eSLarry Finger u8 csi_target[2];
610f0eb856eSLarry Finger u8 sigevm;
611f0eb856eSLarry Finger u8 max_ex_pwr;
612f0eb856eSLarry Finger u8 ex_intf_flag:1;
613f0eb856eSLarry Finger u8 sgi_en:1;
614f0eb856eSLarry Finger u8 rxsc:2;
615f0eb856eSLarry Finger u8 reserve:4;
616f0eb856eSLarry Finger } __packed;
617f0eb856eSLarry Finger
618f0eb856eSLarry Finger struct tx_desc_88e {
619f0eb856eSLarry Finger u32 pktsize:16;
620f0eb856eSLarry Finger u32 offset:8;
621f0eb856eSLarry Finger u32 bmc:1;
622f0eb856eSLarry Finger u32 htc:1;
623f0eb856eSLarry Finger u32 lastseg:1;
624f0eb856eSLarry Finger u32 firstseg:1;
625f0eb856eSLarry Finger u32 linip:1;
626f0eb856eSLarry Finger u32 noacm:1;
627f0eb856eSLarry Finger u32 gf:1;
628f0eb856eSLarry Finger u32 own:1;
629f0eb856eSLarry Finger
630f0eb856eSLarry Finger u32 macid:6;
631f0eb856eSLarry Finger u32 rsvd0:2;
632f0eb856eSLarry Finger u32 queuesel:5;
633f0eb856eSLarry Finger u32 rd_nav_ext:1;
634f0eb856eSLarry Finger u32 lsig_txop_en:1;
635f0eb856eSLarry Finger u32 pifs:1;
636f0eb856eSLarry Finger u32 rateid:4;
637f0eb856eSLarry Finger u32 nav_usehdr:1;
638f0eb856eSLarry Finger u32 en_descid:1;
639f0eb856eSLarry Finger u32 sectype:2;
640f0eb856eSLarry Finger u32 pktoffset:8;
641f0eb856eSLarry Finger
642f0eb856eSLarry Finger u32 rts_rc:6;
643f0eb856eSLarry Finger u32 data_rc:6;
644f0eb856eSLarry Finger u32 agg_en:1;
645f0eb856eSLarry Finger u32 rdg_en:1;
646f0eb856eSLarry Finger u32 bar_retryht:2;
647f0eb856eSLarry Finger u32 agg_break:1;
648f0eb856eSLarry Finger u32 morefrag:1;
649f0eb856eSLarry Finger u32 raw:1;
650f0eb856eSLarry Finger u32 ccx:1;
651f0eb856eSLarry Finger u32 ampdudensity:3;
652f0eb856eSLarry Finger u32 bt_int:1;
653f0eb856eSLarry Finger u32 ant_sela:1;
654f0eb856eSLarry Finger u32 ant_selb:1;
655f0eb856eSLarry Finger u32 txant_cck:2;
656f0eb856eSLarry Finger u32 txant_l:2;
657f0eb856eSLarry Finger u32 txant_ht:2;
658f0eb856eSLarry Finger
659f0eb856eSLarry Finger u32 nextheadpage:8;
660f0eb856eSLarry Finger u32 tailpage:8;
661f0eb856eSLarry Finger u32 seq:12;
662f0eb856eSLarry Finger u32 cpu_handle:1;
663f0eb856eSLarry Finger u32 tag1:1;
664f0eb856eSLarry Finger u32 trigger_int:1;
665f0eb856eSLarry Finger u32 hwseq_en:1;
666f0eb856eSLarry Finger
667f0eb856eSLarry Finger u32 rtsrate:5;
668f0eb856eSLarry Finger u32 apdcfe:1;
669f0eb856eSLarry Finger u32 qos:1;
670f0eb856eSLarry Finger u32 hwseq_ssn:1;
671f0eb856eSLarry Finger u32 userrate:1;
672f0eb856eSLarry Finger u32 dis_rtsfb:1;
673f0eb856eSLarry Finger u32 dis_datafb:1;
674f0eb856eSLarry Finger u32 cts2self:1;
675f0eb856eSLarry Finger u32 rts_en:1;
676f0eb856eSLarry Finger u32 hwrts_en:1;
677f0eb856eSLarry Finger u32 portid:1;
678f0eb856eSLarry Finger u32 pwr_status:3;
679f0eb856eSLarry Finger u32 waitdcts:1;
680f0eb856eSLarry Finger u32 cts2ap_en:1;
681f0eb856eSLarry Finger u32 txsc:2;
682f0eb856eSLarry Finger u32 stbc:2;
683f0eb856eSLarry Finger u32 txshort:1;
684f0eb856eSLarry Finger u32 txbw:1;
685f0eb856eSLarry Finger u32 rtsshort:1;
686f0eb856eSLarry Finger u32 rtsbw:1;
687f0eb856eSLarry Finger u32 rtssc:2;
688f0eb856eSLarry Finger u32 rtsstbc:2;
689f0eb856eSLarry Finger
690f0eb856eSLarry Finger u32 txrate:6;
691f0eb856eSLarry Finger u32 shortgi:1;
692f0eb856eSLarry Finger u32 ccxt:1;
693f0eb856eSLarry Finger u32 txrate_fb_lmt:5;
694f0eb856eSLarry Finger u32 rtsrate_fb_lmt:4;
695f0eb856eSLarry Finger u32 retrylmt_en:1;
696f0eb856eSLarry Finger u32 txretrylmt:6;
697f0eb856eSLarry Finger u32 usb_txaggnum:8;
698f0eb856eSLarry Finger
699f0eb856eSLarry Finger u32 txagca:5;
700f0eb856eSLarry Finger u32 txagcb:5;
701f0eb856eSLarry Finger u32 usemaxlen:1;
702f0eb856eSLarry Finger u32 maxaggnum:5;
703f0eb856eSLarry Finger u32 mcsg1maxlen:4;
704f0eb856eSLarry Finger u32 mcsg2maxlen:4;
705f0eb856eSLarry Finger u32 mcsg3maxlen:4;
706f0eb856eSLarry Finger u32 mcs7sgimaxlen:4;
707f0eb856eSLarry Finger
708f0eb856eSLarry Finger u32 txbuffersize:16;
709f0eb856eSLarry Finger u32 sw_offset30:8;
710f0eb856eSLarry Finger u32 sw_offset31:4;
711f0eb856eSLarry Finger u32 rsvd1:1;
712f0eb856eSLarry Finger u32 antsel_c:1;
713f0eb856eSLarry Finger u32 null_0:1;
714f0eb856eSLarry Finger u32 null_1:1;
715f0eb856eSLarry Finger
716f0eb856eSLarry Finger u32 txbuffaddr;
717f0eb856eSLarry Finger u32 txbufferaddr64;
718f0eb856eSLarry Finger u32 nextdescaddress;
719f0eb856eSLarry Finger u32 nextdescaddress64;
720f0eb856eSLarry Finger
721f0eb856eSLarry Finger u32 reserve_pass_pcie_mm_limit[4];
722f0eb856eSLarry Finger } __packed;
723f0eb856eSLarry Finger
724f0eb856eSLarry Finger struct rx_desc_88e {
725f0eb856eSLarry Finger u32 length:14;
726f0eb856eSLarry Finger u32 crc32:1;
727f0eb856eSLarry Finger u32 icverror:1;
728f0eb856eSLarry Finger u32 drv_infosize:4;
729f0eb856eSLarry Finger u32 security:3;
730f0eb856eSLarry Finger u32 qos:1;
731f0eb856eSLarry Finger u32 shift:2;
732f0eb856eSLarry Finger u32 phystatus:1;
733f0eb856eSLarry Finger u32 swdec:1;
734f0eb856eSLarry Finger u32 lastseg:1;
735f0eb856eSLarry Finger u32 firstseg:1;
736f0eb856eSLarry Finger u32 eor:1;
737f0eb856eSLarry Finger u32 own:1;
738f0eb856eSLarry Finger
739f0eb856eSLarry Finger u32 macid:6;
740f0eb856eSLarry Finger u32 tid:4;
741f0eb856eSLarry Finger u32 hwrsvd:5;
742f0eb856eSLarry Finger u32 paggr:1;
743f0eb856eSLarry Finger u32 faggr:1;
744f0eb856eSLarry Finger u32 a1_fit:4;
745f0eb856eSLarry Finger u32 a2_fit:4;
746f0eb856eSLarry Finger u32 pam:1;
747f0eb856eSLarry Finger u32 pwr:1;
748f0eb856eSLarry Finger u32 moredata:1;
749f0eb856eSLarry Finger u32 morefrag:1;
750f0eb856eSLarry Finger u32 type:2;
751f0eb856eSLarry Finger u32 mc:1;
752f0eb856eSLarry Finger u32 bc:1;
753f0eb856eSLarry Finger
754f0eb856eSLarry Finger u32 seq:12;
755f0eb856eSLarry Finger u32 frag:4;
756f0eb856eSLarry Finger u32 nextpktlen:14;
757f0eb856eSLarry Finger u32 nextind:1;
758f0eb856eSLarry Finger u32 rsvd:1;
759f0eb856eSLarry Finger
760f0eb856eSLarry Finger u32 rxmcs:6;
761f0eb856eSLarry Finger u32 rxht:1;
762f0eb856eSLarry Finger u32 amsdu:1;
763f0eb856eSLarry Finger u32 splcp:1;
764f0eb856eSLarry Finger u32 bandwidth:1;
765f0eb856eSLarry Finger u32 htc:1;
766f0eb856eSLarry Finger u32 tcpchk_rpt:1;
767f0eb856eSLarry Finger u32 ipcchk_rpt:1;
768f0eb856eSLarry Finger u32 tcpchk_valid:1;
769f0eb856eSLarry Finger u32 hwpcerr:1;
770f0eb856eSLarry Finger u32 hwpcind:1;
771f0eb856eSLarry Finger u32 iv0:16;
772f0eb856eSLarry Finger
773f0eb856eSLarry Finger u32 iv1;
774f0eb856eSLarry Finger
775f0eb856eSLarry Finger u32 tsfl;
776f0eb856eSLarry Finger
777f0eb856eSLarry Finger u32 bufferaddress;
778f0eb856eSLarry Finger u32 bufferaddress64;
779f0eb856eSLarry Finger
780f0eb856eSLarry Finger } __packed;
781f0eb856eSLarry Finger
782f0eb856eSLarry Finger void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
783f0eb856eSLarry Finger struct ieee80211_hdr *hdr, u8 *pdesc_tx,
784c151aed6SLarry Finger u8 *txbd, struct ieee80211_tx_info *info,
785c151aed6SLarry Finger struct ieee80211_sta *sta,
786c151aed6SLarry Finger struct sk_buff *skb,
787f0eb856eSLarry Finger u8 hw_queue, struct rtl_tcb_desc *ptcb_desc);
788f0eb856eSLarry Finger bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw,
789f0eb856eSLarry Finger struct rtl_stats *status,
790f0eb856eSLarry Finger struct ieee80211_rx_status *rx_status,
791f0eb856eSLarry Finger u8 *pdesc, struct sk_buff *skb);
792c151aed6SLarry Finger void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
793c151aed6SLarry 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);
796c151aed6SLarry Finger bool rtl88ee_is_tx_desc_closed(struct ieee80211_hw *hw,
797c151aed6SLarry Finger u8 hw_queue, u16 index);
798f0eb856eSLarry Finger void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
799f0eb856eSLarry Finger void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
800c151aed6SLarry Finger struct sk_buff *skb);
801f0eb856eSLarry Finger #endif
802