xref: /openbmc/linux/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h (revision 976e3645923bdd2fe7893aae33fd7a21098bfb28)
103f3dd37SLarry Finger /* SPDX-License-Identifier: GPL-2.0 */
203f3dd37SLarry Finger /* Copyright(c) 2009-2010  Realtek Corporation.*/
3f1d2b4d3SLarry Finger 
4f1d2b4d3SLarry Finger #ifndef __RTL8821AE_TRX_H__
5f1d2b4d3SLarry Finger #define __RTL8821AE_TRX_H__
6f1d2b4d3SLarry Finger 
7f1d2b4d3SLarry Finger #define TX_DESC_SIZE					40
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			40
15f1d2b4d3SLarry Finger #define CRCLENGTH						4
16f1d2b4d3SLarry Finger 
set_tx_desc_pkt_size(__le32 * __pdesc,u32 __val)17f7fbb03fSLarry Finger static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val)
18bd421dabSLarry Finger {
19f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, GENMASK(15, 0));
20bd421dabSLarry Finger }
21f1d2b4d3SLarry Finger 
set_tx_desc_offset(__le32 * __pdesc,u32 __val)22f7fbb03fSLarry Finger static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val)
23bd421dabSLarry Finger {
24f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, GENMASK(23, 16));
25bd421dabSLarry Finger }
26f1d2b4d3SLarry Finger 
set_tx_desc_bmc(__le32 * __pdesc,u32 __val)27f7fbb03fSLarry Finger static inline void set_tx_desc_bmc(__le32 *__pdesc, u32 __val)
28bd421dabSLarry Finger {
29f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(24));
30bd421dabSLarry Finger }
31f1d2b4d3SLarry Finger 
set_tx_desc_htc(__le32 * __pdesc,u32 __val)32f7fbb03fSLarry Finger static inline void set_tx_desc_htc(__le32 *__pdesc, u32 __val)
33bd421dabSLarry Finger {
34f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(25));
35bd421dabSLarry Finger }
36f1d2b4d3SLarry Finger 
set_tx_desc_last_seg(__le32 * __pdesc,u32 __val)37f7fbb03fSLarry Finger static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val)
38bd421dabSLarry Finger {
39f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(26));
40bd421dabSLarry Finger }
41f1d2b4d3SLarry Finger 
set_tx_desc_first_seg(__le32 * __pdesc,u32 __val)42f7fbb03fSLarry Finger static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val)
43bd421dabSLarry Finger {
44f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(27));
45bd421dabSLarry Finger }
46f1d2b4d3SLarry Finger 
set_tx_desc_linip(__le32 * __pdesc,u32 __val)47f7fbb03fSLarry Finger static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val)
48bd421dabSLarry Finger {
49f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(28));
50bd421dabSLarry Finger }
51f1d2b4d3SLarry Finger 
set_tx_desc_own(__le32 * __pdesc,u32 __val)52f7fbb03fSLarry Finger static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val)
53bd421dabSLarry Finger {
54f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(31));
55bd421dabSLarry Finger }
56f1d2b4d3SLarry Finger 
get_tx_desc_own(__le32 * __pdesc)57f7fbb03fSLarry Finger static inline int get_tx_desc_own(__le32 *__pdesc)
58bd421dabSLarry Finger {
59f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(31));
60bd421dabSLarry Finger }
61f1d2b4d3SLarry Finger 
set_tx_desc_macid(__le32 * __pdesc,u32 __val)62f7fbb03fSLarry Finger static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val)
63bd421dabSLarry Finger {
64f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(6, 0));
65bd421dabSLarry Finger }
66f1d2b4d3SLarry Finger 
set_tx_desc_queue_sel(__le32 * __pdesc,u32 __val)67f7fbb03fSLarry Finger static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val)
68bd421dabSLarry Finger {
69f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(12, 8));
70bd421dabSLarry Finger }
71f1d2b4d3SLarry Finger 
set_tx_desc_rate_id(__le32 * __pdesc,u32 __val)72f7fbb03fSLarry Finger static inline void set_tx_desc_rate_id(__le32 *__pdesc, u32 __val)
73bd421dabSLarry Finger {
74f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(20, 16));
75bd421dabSLarry Finger }
76f1d2b4d3SLarry Finger 
set_tx_desc_sec_type(__le32 * __pdesc,u32 __val)77f7fbb03fSLarry Finger static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val)
78bd421dabSLarry Finger {
79f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(23, 22));
80bd421dabSLarry Finger }
81f1d2b4d3SLarry Finger 
set_tx_desc_pkt_offset(__le32 * __pdesc,u32 __val)82f7fbb03fSLarry Finger static inline void set_tx_desc_pkt_offset(__le32 *__pdesc, u32 __val)
83bd421dabSLarry Finger {
84f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 1, __val, GENMASK(28, 24));
85bd421dabSLarry Finger }
86f1d2b4d3SLarry Finger 
set_tx_desc_agg_enable(__le32 * __pdesc,u32 __val)87f7fbb03fSLarry Finger static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val)
88bd421dabSLarry Finger {
89f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, BIT(12));
90bd421dabSLarry Finger }
91f1d2b4d3SLarry Finger 
set_tx_desc_rdg_enable(__le32 * __pdesc,u32 __val)92f7fbb03fSLarry Finger static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val)
93bd421dabSLarry Finger {
94f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, BIT(13));
95bd421dabSLarry Finger }
96f1d2b4d3SLarry Finger 
set_tx_desc_more_frag(__le32 * __pdesc,u32 __val)97f7fbb03fSLarry Finger static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val)
98bd421dabSLarry Finger {
99f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, BIT(17));
100bd421dabSLarry Finger }
101f1d2b4d3SLarry Finger 
set_tx_desc_ampdu_density(__le32 * __pdesc,u32 __val)102f7fbb03fSLarry Finger static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val)
103bd421dabSLarry Finger {
104f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 2, __val, GENMASK(22, 20));
105bd421dabSLarry Finger }
106f1d2b4d3SLarry Finger 
set_tx_desc_hwseq_sel(__le32 * __pdesc,u32 __val)107f7fbb03fSLarry Finger static inline void set_tx_desc_hwseq_sel(__le32 *__pdesc, u32 __val)
108bd421dabSLarry Finger {
109f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, GENMASK(7, 6));
110bd421dabSLarry Finger }
111f1d2b4d3SLarry Finger 
set_tx_desc_use_rate(__le32 * __pdesc,u32 __val)112f7fbb03fSLarry Finger static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val)
113bd421dabSLarry Finger {
114f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, BIT(8));
115bd421dabSLarry Finger }
116f1d2b4d3SLarry Finger 
set_tx_desc_disable_fb(__le32 * __pdesc,u32 __val)117f7fbb03fSLarry Finger static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val)
118bd421dabSLarry Finger {
119f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, BIT(10));
120bd421dabSLarry Finger }
121f1d2b4d3SLarry Finger 
set_tx_desc_cts2self(__le32 * __pdesc,u32 __val)122f7fbb03fSLarry Finger static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val)
123bd421dabSLarry Finger {
124f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, BIT(11));
125bd421dabSLarry Finger }
126f1d2b4d3SLarry Finger 
set_tx_desc_rts_enable(__le32 * __pdesc,u32 __val)127f7fbb03fSLarry Finger static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val)
128bd421dabSLarry Finger {
129f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, BIT(12));
130bd421dabSLarry Finger }
131bd421dabSLarry Finger 
set_tx_desc_hw_rts_enable(__le32 * __pdesc,u32 __val)132f7fbb03fSLarry Finger static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val)
133bd421dabSLarry Finger {
134f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, BIT(13));
135bd421dabSLarry Finger }
136bd421dabSLarry Finger 
set_tx_desc_nav_use_hdr(__le32 * __pdesc,u32 __val)137f7fbb03fSLarry Finger static inline void set_tx_desc_nav_use_hdr(__le32 *__pdesc, u32 __val)
138bd421dabSLarry Finger {
139f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, BIT(15));
140bd421dabSLarry Finger }
141bd421dabSLarry Finger 
set_tx_desc_max_agg_num(__le32 * __pdesc,u32 __val)142f7fbb03fSLarry Finger static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val)
143bd421dabSLarry Finger {
144f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 3, __val, GENMASK(21, 17));
145bd421dabSLarry Finger }
146bd421dabSLarry Finger 
set_tx_desc_tx_ant(__le32 * __pdesc,u32 __val)147f7fbb03fSLarry Finger static inline void set_tx_desc_tx_ant(__le32 *__pdesc, u32 __val)
148bd421dabSLarry Finger {
149f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, GENMASK(27, 24));
150bd421dabSLarry Finger }
151bd421dabSLarry Finger 
set_tx_desc_tx_rate(__le32 * __pdesc,u32 __val)152f7fbb03fSLarry Finger static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
153bd421dabSLarry Finger {
154f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, GENMASK(6, 0));
155bd421dabSLarry Finger }
156bd421dabSLarry Finger 
set_tx_desc_data_rate_fb_limit(__le32 * __pdesc,u32 __val)157f7fbb03fSLarry Finger static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val)
158bd421dabSLarry Finger {
159f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, GENMASK(12, 8));
160bd421dabSLarry Finger }
161bd421dabSLarry Finger 
set_tx_desc_rts_rate_fb_limit(__le32 * __pdesc,u32 __val)162f7fbb03fSLarry Finger static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val)
163bd421dabSLarry Finger {
164f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, GENMASK(16, 13));
165bd421dabSLarry Finger }
166bd421dabSLarry Finger 
set_tx_desc_rts_rate(__le32 * __pdesc,u32 __val)167f7fbb03fSLarry Finger static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val)
168bd421dabSLarry Finger {
169f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 4, __val, GENMASK(28, 24));
170bd421dabSLarry Finger }
171bd421dabSLarry Finger 
set_tx_desc_tx_sub_carrier(__le32 * __pdesc,u32 __val)172f7fbb03fSLarry Finger static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val)
173bd421dabSLarry Finger {
174f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, GENMASK(3, 0));
175bd421dabSLarry Finger }
176bd421dabSLarry Finger 
set_tx_desc_data_shortgi(__le32 * __pdesc,u32 __val)177f7fbb03fSLarry Finger static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val)
178bd421dabSLarry Finger {
179f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, BIT(4));
180bd421dabSLarry Finger }
181bd421dabSLarry Finger 
set_tx_desc_data_bw(__le32 * __pdesc,u32 __val)182f7fbb03fSLarry Finger static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val)
183bd421dabSLarry Finger {
184f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, GENMASK(6, 5));
185bd421dabSLarry Finger }
186bd421dabSLarry Finger 
set_tx_desc_rts_short(__le32 * __pdesc,u32 __val)187f7fbb03fSLarry Finger static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val)
188bd421dabSLarry Finger {
189f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, BIT(12));
190bd421dabSLarry Finger }
191bd421dabSLarry Finger 
set_tx_desc_rts_sc(__le32 * __pdesc,u32 __val)192f7fbb03fSLarry Finger static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val)
193bd421dabSLarry Finger {
194f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 5, __val, GENMASK(16, 13));
195bd421dabSLarry Finger }
196bd421dabSLarry Finger 
set_tx_desc_tx_buffer_size(__le32 * __pdesc,u32 __val)197f7fbb03fSLarry Finger static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val)
198bd421dabSLarry Finger {
199f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 7, __val, GENMASK(15, 0));
200bd421dabSLarry Finger }
201bd421dabSLarry Finger 
set_tx_desc_hwseq_en(__le32 * __pdesc,u32 __val)202f7fbb03fSLarry Finger static inline void set_tx_desc_hwseq_en(__le32 *__pdesc, u32 __val)
203bd421dabSLarry Finger {
204f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 8, __val, BIT(15));
205bd421dabSLarry Finger }
206bd421dabSLarry Finger 
set_tx_desc_seq(__le32 * __pdesc,u32 __val)207f7fbb03fSLarry Finger static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val)
208bd421dabSLarry Finger {
209f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc + 9, __val, GENMASK(23, 12));
210bd421dabSLarry Finger }
211bd421dabSLarry Finger 
set_tx_desc_tx_buffer_address(__le32 * __pdesc,u32 __val)212f7fbb03fSLarry Finger static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val)
213bd421dabSLarry Finger {
214f7fbb03fSLarry Finger 	*(__pdesc + 10) = cpu_to_le32(__val);
215bd421dabSLarry Finger }
216bd421dabSLarry Finger 
get_tx_desc_tx_buffer_address(__le32 * __pdesc)217*3bf404b4SLarry Finger static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc)
218bd421dabSLarry Finger {
219f7fbb03fSLarry Finger 	return le32_to_cpu(*(__pdesc + 10));
220bd421dabSLarry Finger }
221bd421dabSLarry Finger 
set_tx_desc_next_desc_address(__le32 * __pdesc,u32 __val)222f7fbb03fSLarry Finger static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val)
223bd421dabSLarry Finger {
224f7fbb03fSLarry Finger 	*(__pdesc + 12) = cpu_to_le32(__val);
225bd421dabSLarry Finger }
226bd421dabSLarry Finger 
get_rx_desc_pkt_len(__le32 * __pdesc)227f7fbb03fSLarry Finger static inline int get_rx_desc_pkt_len(__le32 *__pdesc)
228bd421dabSLarry Finger {
229f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc), GENMASK(13, 0));
230bd421dabSLarry Finger }
231bd421dabSLarry Finger 
get_rx_desc_crc32(__le32 * __pdesc)232f7fbb03fSLarry Finger static inline int get_rx_desc_crc32(__le32 *__pdesc)
233bd421dabSLarry Finger {
234f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(14));
235bd421dabSLarry Finger }
236bd421dabSLarry Finger 
get_rx_desc_icv(__le32 * __pdesc)237f7fbb03fSLarry Finger static inline int get_rx_desc_icv(__le32 *__pdesc)
238bd421dabSLarry Finger {
239f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(15));
240bd421dabSLarry Finger }
241bd421dabSLarry Finger 
get_rx_desc_drv_info_size(__le32 * __pdesc)242f7fbb03fSLarry Finger static inline int get_rx_desc_drv_info_size(__le32 *__pdesc)
243bd421dabSLarry Finger {
244f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc), GENMASK(19, 16));
245bd421dabSLarry Finger }
246bd421dabSLarry Finger 
get_rx_desc_shift(__le32 * __pdesc)247f7fbb03fSLarry Finger static inline int get_rx_desc_shift(__le32 *__pdesc)
248bd421dabSLarry Finger {
249f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc), GENMASK(25, 24));
250bd421dabSLarry Finger }
251bd421dabSLarry Finger 
get_rx_desc_physt(__le32 * __pdesc)252f7fbb03fSLarry Finger static inline int get_rx_desc_physt(__le32 *__pdesc)
253bd421dabSLarry Finger {
254f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(26));
255bd421dabSLarry Finger }
256bd421dabSLarry Finger 
get_rx_desc_swdec(__le32 * __pdesc)257f7fbb03fSLarry Finger static inline int get_rx_desc_swdec(__le32 *__pdesc)
258bd421dabSLarry Finger {
259f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(27));
260bd421dabSLarry Finger }
261bd421dabSLarry Finger 
get_rx_desc_own(__le32 * __pdesc)262f7fbb03fSLarry Finger static inline int get_rx_desc_own(__le32 *__pdesc)
263bd421dabSLarry Finger {
264f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc), BIT(31));
265bd421dabSLarry Finger }
266bd421dabSLarry Finger 
set_rx_desc_pkt_len(__le32 * __pdesc,u32 __val)267f7fbb03fSLarry Finger static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val)
268bd421dabSLarry Finger {
269f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, GENMASK(13, 0));
270bd421dabSLarry Finger }
271bd421dabSLarry Finger 
set_rx_desc_eor(__le32 * __pdesc,u32 __val)272f7fbb03fSLarry Finger static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val)
273bd421dabSLarry Finger {
274f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(30));
275bd421dabSLarry Finger }
276bd421dabSLarry Finger 
set_rx_desc_own(__le32 * __pdesc,u32 __val)277f7fbb03fSLarry Finger static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val)
278bd421dabSLarry Finger {
279f7fbb03fSLarry Finger 	le32p_replace_bits(__pdesc, __val, BIT(31));
280bd421dabSLarry Finger }
281bd421dabSLarry Finger 
get_rx_desc_macid(__le32 * __pdesc)282f7fbb03fSLarry Finger static inline int get_rx_desc_macid(__le32 *__pdesc)
283bd421dabSLarry Finger {
284f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc + 1), GENMASK(6, 0));
285bd421dabSLarry Finger }
286bd421dabSLarry Finger 
get_rx_desc_paggr(__le32 * __pdesc)287f7fbb03fSLarry Finger static inline int get_rx_desc_paggr(__le32 *__pdesc)
288bd421dabSLarry Finger {
289f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(15));
290bd421dabSLarry Finger }
291bd421dabSLarry Finger 
get_rx_status_desc_rpt_sel(__le32 * __pdesc)292f7fbb03fSLarry Finger static inline int get_rx_status_desc_rpt_sel(__le32 *__pdesc)
293bd421dabSLarry Finger {
294f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc + 1), BIT(28));
295bd421dabSLarry Finger }
296bd421dabSLarry Finger 
get_rx_desc_rxmcs(__le32 * __pdesc)297f7fbb03fSLarry Finger static inline int get_rx_desc_rxmcs(__le32 *__pdesc)
298bd421dabSLarry Finger {
299f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc + 3), GENMASK(6, 0));
300bd421dabSLarry Finger }
301bd421dabSLarry Finger 
get_rx_status_desc_pattern_match(__le32 * __pdesc)302f7fbb03fSLarry Finger static inline int get_rx_status_desc_pattern_match(__le32 *__pdesc)
303bd421dabSLarry Finger {
304f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(29));
305bd421dabSLarry Finger }
306bd421dabSLarry Finger 
get_rx_status_desc_unicast_match(__le32 * __pdesc)307f7fbb03fSLarry Finger static inline int get_rx_status_desc_unicast_match(__le32 *__pdesc)
308bd421dabSLarry Finger {
309f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(30));
310bd421dabSLarry Finger }
311bd421dabSLarry Finger 
get_rx_status_desc_magic_match(__le32 * __pdesc)312f7fbb03fSLarry Finger static inline int get_rx_status_desc_magic_match(__le32 *__pdesc)
313bd421dabSLarry Finger {
314f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc + 3), BIT(31));
315bd421dabSLarry Finger }
316bd421dabSLarry Finger 
get_rx_desc_splcp(__le32 * __pdesc)317f7fbb03fSLarry Finger static inline int get_rx_desc_splcp(__le32 *__pdesc)
318bd421dabSLarry Finger {
319f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc + 4), BIT(0));
320bd421dabSLarry Finger }
321bd421dabSLarry Finger 
get_rx_desc_bw(__le32 * __pdesc)322f7fbb03fSLarry Finger static inline int get_rx_desc_bw(__le32 *__pdesc)
323bd421dabSLarry Finger {
324f7fbb03fSLarry Finger 	return le32_get_bits(*(__pdesc + 4), GENMASK(5, 4));
325bd421dabSLarry Finger }
326bd421dabSLarry Finger 
get_rx_desc_tsfl(__le32 * __pdesc)327*3bf404b4SLarry Finger static inline u32 get_rx_desc_tsfl(__le32 *__pdesc)
328bd421dabSLarry Finger {
329f7fbb03fSLarry Finger 	return le32_to_cpu(*(__pdesc + 5));
330bd421dabSLarry Finger }
331bd421dabSLarry Finger 
get_rx_desc_buff_addr(__le32 * __pdesc)332*3bf404b4SLarry Finger static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc)
333bd421dabSLarry Finger {
334f7fbb03fSLarry Finger 	return le32_to_cpu(*(__pdesc + 6));
335bd421dabSLarry Finger }
336bd421dabSLarry Finger 
set_rx_desc_buff_addr(__le32 * __pdesc,u32 __val)337f7fbb03fSLarry Finger static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val)
338bd421dabSLarry Finger {
339f7fbb03fSLarry Finger 	*(__pdesc + 6) = cpu_to_le32(__val);
340bd421dabSLarry Finger }
341f1d2b4d3SLarry Finger 
342f1d2b4d3SLarry Finger /* TX report 2 format in Rx desc*/
343f1d2b4d3SLarry Finger 
get_rx_rpt2_desc_macid_valid_1(__le32 * __status)344*3bf404b4SLarry Finger static inline u32 get_rx_rpt2_desc_macid_valid_1(__le32 *__status)
345bd421dabSLarry Finger {
346f7fbb03fSLarry Finger 	return le32_to_cpu(*(__status + 4));
347bd421dabSLarry Finger }
348f1d2b4d3SLarry Finger 
get_rx_rpt2_desc_macid_valid_2(__le32 * __status)349*3bf404b4SLarry Finger static inline u32 get_rx_rpt2_desc_macid_valid_2(__le32 *__status)
350bd421dabSLarry Finger {
351f7fbb03fSLarry Finger 	return le32_to_cpu(*(__status + 5));
352bd421dabSLarry Finger }
353bd421dabSLarry Finger 
set_earlymode_pktnum(__le32 * __paddr,u32 __value)354f7fbb03fSLarry Finger static inline void set_earlymode_pktnum(__le32 *__paddr, u32 __value)
355bd421dabSLarry Finger {
356f7fbb03fSLarry Finger 	le32p_replace_bits(__paddr, __value, GENMASK(3, 0));
357bd421dabSLarry Finger }
358bd421dabSLarry Finger 
set_earlymode_len0(__le32 * __paddr,u32 __value)359f7fbb03fSLarry Finger static inline void set_earlymode_len0(__le32 *__paddr, u32 __value)
360bd421dabSLarry Finger {
361f7fbb03fSLarry Finger 	le32p_replace_bits(__paddr, __value, GENMASK(15, 4));
362bd421dabSLarry Finger }
363bd421dabSLarry Finger 
set_earlymode_len1(__le32 * __paddr,u32 __value)364f7fbb03fSLarry Finger static inline void set_earlymode_len1(__le32 *__paddr, u32 __value)
365bd421dabSLarry Finger {
366f7fbb03fSLarry Finger 	le32p_replace_bits(__paddr, __value, GENMASK(27, 16));
367bd421dabSLarry Finger }
368bd421dabSLarry Finger 
set_earlymode_len2_1(__le32 * __paddr,u32 __value)369f7fbb03fSLarry Finger static inline void set_earlymode_len2_1(__le32 *__paddr, u32 __value)
370bd421dabSLarry Finger {
371f7fbb03fSLarry Finger 	le32p_replace_bits(__paddr, __value, GENMASK(31, 28));
372bd421dabSLarry Finger }
373bd421dabSLarry Finger 
set_earlymode_len2_2(__le32 * __paddr,u32 __value)374f7fbb03fSLarry Finger static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value)
375bd421dabSLarry Finger {
376f7fbb03fSLarry Finger 	le32p_replace_bits(__paddr, __value, GENMASK(7, 0));
377bd421dabSLarry Finger }
378bd421dabSLarry Finger 
set_earlymode_len3(__le32 * __paddr,u32 __value)379f7fbb03fSLarry Finger static inline void set_earlymode_len3(__le32 *__paddr, u32 __value)
380bd421dabSLarry Finger {
381f7fbb03fSLarry Finger 	le32p_replace_bits((__paddr + 1), __value, GENMASK(19, 8));
382bd421dabSLarry Finger }
383bd421dabSLarry Finger 
set_earlymode_len4(__le32 * __paddr,u32 __value)384f7fbb03fSLarry Finger static inline void set_earlymode_len4(__le32 *__paddr, u32 __value)
385bd421dabSLarry Finger {
386f7fbb03fSLarry Finger 	le32p_replace_bits((__paddr + 1), __value, GENMASK(31, 20));
387bd421dabSLarry Finger }
388f1d2b4d3SLarry Finger 
clear_pci_tx_desc_content(__le32 * __pdesc,int _size)389f7fbb03fSLarry Finger static inline void clear_pci_tx_desc_content(__le32 *__pdesc, int _size)
390f7fbb03fSLarry Finger {
391f7fbb03fSLarry Finger 	if (_size > TX_DESC_NEXT_DESC_OFFSET)
392f7fbb03fSLarry Finger 		memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET);
393f7fbb03fSLarry Finger 	else
394f7fbb03fSLarry Finger 		memset(__pdesc, 0, _size);
395f7fbb03fSLarry Finger }
396f1d2b4d3SLarry Finger 
397f1d2b4d3SLarry Finger #define RTL8821AE_RX_HAL_IS_CCK_RATE(rxmcs)\
398f1d2b4d3SLarry Finger 	(rxmcs == DESC_RATE1M ||\
399f1d2b4d3SLarry Finger 	 rxmcs == DESC_RATE2M ||\
400f1d2b4d3SLarry Finger 	 rxmcs == DESC_RATE5_5M ||\
401f1d2b4d3SLarry Finger 	 rxmcs == DESC_RATE11M)
402f1d2b4d3SLarry Finger 
403f1d2b4d3SLarry Finger struct phy_rx_agc_info_t {
404f1d2b4d3SLarry Finger 	#ifdef __LITTLE_ENDIAN
405f1d2b4d3SLarry Finger 		u8	gain:7, trsw:1;
406f1d2b4d3SLarry Finger 	#else
407f1d2b4d3SLarry Finger 		u8	trsw:1, gain:7;
408f1d2b4d3SLarry Finger 	#endif
409f1d2b4d3SLarry Finger };
410f1d2b4d3SLarry Finger 
411f1d2b4d3SLarry Finger struct phy_status_rpt {
412f1d2b4d3SLarry Finger 	/* DWORD 0 */
413f1d2b4d3SLarry Finger 	u8 gain_trsw[2];
414f1d2b4d3SLarry Finger #ifdef __LITTLE_ENDIAN
415f1d2b4d3SLarry Finger 	u16 chl_num:10;
416f1d2b4d3SLarry Finger 	u16 sub_chnl:4;
417f1d2b4d3SLarry Finger 	u16 r_rfmod:2;
418f1d2b4d3SLarry Finger #else	/* _BIG_ENDIAN_ */
419f1d2b4d3SLarry Finger 	u16 r_rfmod:2;
420f1d2b4d3SLarry Finger 	u16 sub_chnl:4;
421f1d2b4d3SLarry Finger 	u16 chl_num:10;
422f1d2b4d3SLarry Finger #endif
423f1d2b4d3SLarry Finger 	/* DWORD 1 */
424f1d2b4d3SLarry Finger 	u8 pwdb_all;
425f1d2b4d3SLarry Finger 	u8 cfosho[4];	/* DW 1 byte 1 DW 2 byte 0 */
426f1d2b4d3SLarry Finger 
427f1d2b4d3SLarry Finger 	/* DWORD 2 */
42808aba42fSArnd Bergmann 	s8 cfotail[4];	/* DW 2 byte 1 DW 3 byte 0 */
429f1d2b4d3SLarry Finger 
430f1d2b4d3SLarry Finger 	/* DWORD 3 */
43108aba42fSArnd Bergmann 	s8 rxevm[2];	/* DW 3 byte 1 DW 3 byte 2 */
43208aba42fSArnd Bergmann 	s8 rxsnr[2];	/* DW 3 byte 3 DW 4 byte 0 */
433f1d2b4d3SLarry Finger 
434f1d2b4d3SLarry Finger 	/* DWORD 4 */
435f1d2b4d3SLarry Finger 	u8 pcts_msk_rpt[2];
436f1d2b4d3SLarry Finger 	u8 pdsnr[2];	/* DW 4 byte 3 DW 5 Byte 0 */
437f1d2b4d3SLarry Finger 
438f1d2b4d3SLarry Finger 	/* DWORD 5 */
439f1d2b4d3SLarry Finger 	u8 csi_current[2];
440f1d2b4d3SLarry Finger 	u8 rx_gain_c;
441f1d2b4d3SLarry Finger 
442f1d2b4d3SLarry Finger 	/* DWORD 6 */
443f1d2b4d3SLarry Finger 	u8 rx_gain_d;
444f1d2b4d3SLarry Finger 	u8 sigevm;
445f1d2b4d3SLarry Finger 	u8 resvd_0;
446f1d2b4d3SLarry Finger 	u8 antidx_anta:3;
447f1d2b4d3SLarry Finger 	u8 antidx_antb:3;
448f1d2b4d3SLarry Finger 	u8 resvd_1:2;
449f1d2b4d3SLarry Finger } __packed;
450f1d2b4d3SLarry Finger 
451f1d2b4d3SLarry Finger struct rx_fwinfo_8821ae {
452f1d2b4d3SLarry Finger 	u8 gain_trsw[4];
453f1d2b4d3SLarry Finger 	u8 pwdb_all;
454f1d2b4d3SLarry Finger 	u8 cfosho[4];
455f1d2b4d3SLarry Finger 	u8 cfotail[4];
45608aba42fSArnd Bergmann 	s8 rxevm[2];
45708aba42fSArnd Bergmann 	s8 rxsnr[4];
458f1d2b4d3SLarry Finger 	u8 pdsnr[2];
459f1d2b4d3SLarry Finger 	u8 csi_current[2];
460f1d2b4d3SLarry Finger 	u8 csi_target[2];
461f1d2b4d3SLarry Finger 	u8 sigevm;
462f1d2b4d3SLarry Finger 	u8 max_ex_pwr;
463f1d2b4d3SLarry Finger 	u8 ex_intf_flag:1;
464f1d2b4d3SLarry Finger 	u8 sgi_en:1;
465f1d2b4d3SLarry Finger 	u8 rxsc:2;
466f1d2b4d3SLarry Finger 	u8 reserve:4;
467f1d2b4d3SLarry Finger } __packed;
468f1d2b4d3SLarry Finger 
469f1d2b4d3SLarry Finger struct tx_desc_8821ae {
470f1d2b4d3SLarry Finger 	u32 pktsize:16;
471f1d2b4d3SLarry Finger 	u32 offset:8;
472f1d2b4d3SLarry Finger 	u32 bmc:1;
473f1d2b4d3SLarry Finger 	u32 htc:1;
474f1d2b4d3SLarry Finger 	u32 lastseg:1;
475f1d2b4d3SLarry Finger 	u32 firstseg:1;
476f1d2b4d3SLarry Finger 	u32 linip:1;
477f1d2b4d3SLarry Finger 	u32 noacm:1;
478f1d2b4d3SLarry Finger 	u32 gf:1;
479f1d2b4d3SLarry Finger 	u32 own:1;
480f1d2b4d3SLarry Finger 
481f1d2b4d3SLarry Finger 	u32 macid:6;
482f1d2b4d3SLarry Finger 	u32 rsvd0:2;
483f1d2b4d3SLarry Finger 	u32 queuesel:5;
484f1d2b4d3SLarry Finger 	u32 rd_nav_ext:1;
485f1d2b4d3SLarry Finger 	u32 lsig_txop_en:1;
486f1d2b4d3SLarry Finger 	u32 pifs:1;
487f1d2b4d3SLarry Finger 	u32 rateid:4;
488f1d2b4d3SLarry Finger 	u32 nav_usehdr:1;
489f1d2b4d3SLarry Finger 	u32 en_descid:1;
490f1d2b4d3SLarry Finger 	u32 sectype:2;
491f1d2b4d3SLarry Finger 	u32 pktoffset:8;
492f1d2b4d3SLarry Finger 
493f1d2b4d3SLarry Finger 	u32 rts_rc:6;
494f1d2b4d3SLarry Finger 	u32 data_rc:6;
495f1d2b4d3SLarry Finger 	u32 agg_en:1;
496f1d2b4d3SLarry Finger 	u32 rdg_en:1;
497f1d2b4d3SLarry Finger 	u32 bar_retryht:2;
498f1d2b4d3SLarry Finger 	u32 agg_break:1;
499f1d2b4d3SLarry Finger 	u32 morefrag:1;
500f1d2b4d3SLarry Finger 	u32 raw:1;
501f1d2b4d3SLarry Finger 	u32 ccx:1;
502f1d2b4d3SLarry Finger 	u32 ampdudensity:3;
503f1d2b4d3SLarry Finger 	u32 bt_int:1;
504f1d2b4d3SLarry Finger 	u32 ant_sela:1;
505f1d2b4d3SLarry Finger 	u32 ant_selb:1;
506f1d2b4d3SLarry Finger 	u32 txant_cck:2;
507f1d2b4d3SLarry Finger 	u32 txant_l:2;
508f1d2b4d3SLarry Finger 	u32 txant_ht:2;
509f1d2b4d3SLarry Finger 
510f1d2b4d3SLarry Finger 	u32 nextheadpage:8;
511f1d2b4d3SLarry Finger 	u32 tailpage:8;
512f1d2b4d3SLarry Finger 	u32 seq:12;
513f1d2b4d3SLarry Finger 	u32 cpu_handle:1;
514f1d2b4d3SLarry Finger 	u32 tag1:1;
515f1d2b4d3SLarry Finger 	u32 trigger_int:1;
516f1d2b4d3SLarry Finger 	u32 hwseq_en:1;
517f1d2b4d3SLarry Finger 
518f1d2b4d3SLarry Finger 	u32 rtsrate:5;
519f1d2b4d3SLarry Finger 	u32 apdcfe:1;
520f1d2b4d3SLarry Finger 	u32 qos:1;
521f1d2b4d3SLarry Finger 	u32 hwseq_ssn:1;
522f1d2b4d3SLarry Finger 	u32 userrate:1;
523f1d2b4d3SLarry Finger 	u32 dis_rtsfb:1;
524f1d2b4d3SLarry Finger 	u32 dis_datafb:1;
525f1d2b4d3SLarry Finger 	u32 cts2self:1;
526f1d2b4d3SLarry Finger 	u32 rts_en:1;
527f1d2b4d3SLarry Finger 	u32 hwrts_en:1;
528f1d2b4d3SLarry Finger 	u32 portid:1;
529f1d2b4d3SLarry Finger 	u32 pwr_status:3;
530f1d2b4d3SLarry Finger 	u32 waitdcts:1;
531f1d2b4d3SLarry Finger 	u32 cts2ap_en:1;
532f1d2b4d3SLarry Finger 	u32 txsc:2;
533f1d2b4d3SLarry Finger 	u32 stbc:2;
534f1d2b4d3SLarry Finger 	u32 txshort:1;
535f1d2b4d3SLarry Finger 	u32 txbw:1;
536f1d2b4d3SLarry Finger 	u32 rtsshort:1;
537f1d2b4d3SLarry Finger 	u32 rtsbw:1;
538f1d2b4d3SLarry Finger 	u32 rtssc:2;
539f1d2b4d3SLarry Finger 	u32 rtsstbc:2;
540f1d2b4d3SLarry Finger 
541f1d2b4d3SLarry Finger 	u32 txrate:6;
542f1d2b4d3SLarry Finger 	u32 shortgi:1;
543f1d2b4d3SLarry Finger 	u32 ccxt:1;
544f1d2b4d3SLarry Finger 	u32 txrate_fb_lmt:5;
545f1d2b4d3SLarry Finger 	u32 rtsrate_fb_lmt:4;
546f1d2b4d3SLarry Finger 	u32 retrylmt_en:1;
547f1d2b4d3SLarry Finger 	u32 txretrylmt:6;
548f1d2b4d3SLarry Finger 	u32 usb_txaggnum:8;
549f1d2b4d3SLarry Finger 
550f1d2b4d3SLarry Finger 	u32 txagca:5;
551f1d2b4d3SLarry Finger 	u32 txagcb:5;
552f1d2b4d3SLarry Finger 	u32 usemaxlen:1;
553f1d2b4d3SLarry Finger 	u32 maxaggnum:5;
554f1d2b4d3SLarry Finger 	u32 mcsg1maxlen:4;
555f1d2b4d3SLarry Finger 	u32 mcsg2maxlen:4;
556f1d2b4d3SLarry Finger 	u32 mcsg3maxlen:4;
557f1d2b4d3SLarry Finger 	u32 mcs7sgimaxlen:4;
558f1d2b4d3SLarry Finger 
559f1d2b4d3SLarry Finger 	u32 txbuffersize:16;
560f1d2b4d3SLarry Finger 	u32 sw_offset30:8;
561f1d2b4d3SLarry Finger 	u32 sw_offset31:4;
562f1d2b4d3SLarry Finger 	u32 rsvd1:1;
563f1d2b4d3SLarry Finger 	u32 antsel_c:1;
564f1d2b4d3SLarry Finger 	u32 null_0:1;
565f1d2b4d3SLarry Finger 	u32 null_1:1;
566f1d2b4d3SLarry Finger 
567f1d2b4d3SLarry Finger 	u32 txbuffaddr;
568f1d2b4d3SLarry Finger 	u32 txbufferaddr64;
569f1d2b4d3SLarry Finger 	u32 nextdescaddress;
570f1d2b4d3SLarry Finger 	u32 nextdescaddress64;
571f1d2b4d3SLarry Finger 
572f1d2b4d3SLarry Finger 	u32 reserve_pass_pcie_mm_limit[4];
573f1d2b4d3SLarry Finger } __packed;
574f1d2b4d3SLarry Finger 
575f1d2b4d3SLarry Finger struct rx_desc_8821ae {
576f1d2b4d3SLarry Finger 	u32 length:14;
577f1d2b4d3SLarry Finger 	u32 crc32:1;
578f1d2b4d3SLarry Finger 	u32 icverror:1;
579f1d2b4d3SLarry Finger 	u32 drv_infosize:4;
580f1d2b4d3SLarry Finger 	u32 security:3;
581f1d2b4d3SLarry Finger 	u32 qos:1;
582f1d2b4d3SLarry Finger 	u32 shift:2;
583f1d2b4d3SLarry Finger 	u32 phystatus:1;
584f1d2b4d3SLarry Finger 	u32 swdec:1;
585f1d2b4d3SLarry Finger 	u32 lastseg:1;
586f1d2b4d3SLarry Finger 	u32 firstseg:1;
587f1d2b4d3SLarry Finger 	u32 eor:1;
588f1d2b4d3SLarry Finger 	u32 own:1;
589f1d2b4d3SLarry Finger 
590f1d2b4d3SLarry Finger 	u32 macid:6;
591f1d2b4d3SLarry Finger 	u32 tid:4;
592f1d2b4d3SLarry Finger 	u32 hwrsvd:5;
593f1d2b4d3SLarry Finger 	u32 paggr:1;
594f1d2b4d3SLarry Finger 	u32 faggr:1;
595f1d2b4d3SLarry Finger 	u32 a1_fit:4;
596f1d2b4d3SLarry Finger 	u32 a2_fit:4;
597f1d2b4d3SLarry Finger 	u32 pam:1;
598f1d2b4d3SLarry Finger 	u32 pwr:1;
599f1d2b4d3SLarry Finger 	u32 moredata:1;
600f1d2b4d3SLarry Finger 	u32 morefrag:1;
601f1d2b4d3SLarry Finger 	u32 type:2;
602f1d2b4d3SLarry Finger 	u32 mc:1;
603f1d2b4d3SLarry Finger 	u32 bc:1;
604f1d2b4d3SLarry Finger 
605f1d2b4d3SLarry Finger 	u32 seq:12;
606f1d2b4d3SLarry Finger 	u32 frag:4;
607f1d2b4d3SLarry Finger 	u32 nextpktlen:14;
608f1d2b4d3SLarry Finger 	u32 nextind:1;
609f1d2b4d3SLarry Finger 	u32 rsvd:1;
610f1d2b4d3SLarry Finger 
611f1d2b4d3SLarry Finger 	u32 rxmcs:6;
612f1d2b4d3SLarry Finger 	u32 rxht:1;
613f1d2b4d3SLarry Finger 	u32 amsdu:1;
614f1d2b4d3SLarry Finger 	u32 splcp:1;
615f1d2b4d3SLarry Finger 	u32 bandwidth:1;
616f1d2b4d3SLarry Finger 	u32 htc:1;
617f1d2b4d3SLarry Finger 	u32 tcpchk_rpt:1;
618f1d2b4d3SLarry Finger 	u32 ipcchk_rpt:1;
619f1d2b4d3SLarry Finger 	u32 tcpchk_valid:1;
620f1d2b4d3SLarry Finger 	u32 hwpcerr:1;
621f1d2b4d3SLarry Finger 	u32 hwpcind:1;
622f1d2b4d3SLarry Finger 	u32 iv0:16;
623f1d2b4d3SLarry Finger 
624f1d2b4d3SLarry Finger 	u32 iv1;
625f1d2b4d3SLarry Finger 
626f1d2b4d3SLarry Finger 	u32 tsfl;
627f1d2b4d3SLarry Finger 
628f1d2b4d3SLarry Finger 	u32 bufferaddress;
629f1d2b4d3SLarry Finger 	u32 bufferaddress64;
630f1d2b4d3SLarry Finger 
631f1d2b4d3SLarry Finger } __packed;
632f1d2b4d3SLarry Finger 
633f1d2b4d3SLarry Finger void rtl8821ae_tx_fill_desc(struct ieee80211_hw *hw,
634f1d2b4d3SLarry Finger 			    struct ieee80211_hdr *hdr, u8 *pdesc_tx, u8 *txbd,
635f1d2b4d3SLarry Finger 			    struct ieee80211_tx_info *info,
636f1d2b4d3SLarry Finger 			    struct ieee80211_sta *sta,
637f1d2b4d3SLarry Finger 			    struct sk_buff *skb,
638f1d2b4d3SLarry Finger 			    u8 hw_queue, struct rtl_tcb_desc *ptcb_desc);
639f1d2b4d3SLarry Finger bool rtl8821ae_rx_query_desc(struct ieee80211_hw *hw,
640f1d2b4d3SLarry Finger 			     struct rtl_stats *status,
641f1d2b4d3SLarry Finger 			     struct ieee80211_rx_status *rx_status,
642f1d2b4d3SLarry Finger 			     u8 *pdesc, struct sk_buff *skb);
643f1d2b4d3SLarry Finger void rtl8821ae_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
644f1d2b4d3SLarry Finger 			bool istx, u8 desc_name, u8 *val);
6450c07bd74SPing-Ke Shih u64 rtl8821ae_get_desc(struct ieee80211_hw *hw,
6460c07bd74SPing-Ke Shih 		       u8 *pdesc, bool istx, u8 desc_name);
647f1d2b4d3SLarry Finger bool rtl8821ae_is_tx_desc_closed(struct ieee80211_hw *hw,
648f1d2b4d3SLarry Finger 				 u8 hw_queue, u16 index);
649f1d2b4d3SLarry Finger void rtl8821ae_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
650f1d2b4d3SLarry Finger void rtl8821ae_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
651f1d2b4d3SLarry Finger 			       bool firstseg, bool lastseg,
652f1d2b4d3SLarry Finger 			       struct sk_buff *skb);
653f1d2b4d3SLarry Finger #endif
654