xref: /linux/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.h (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
1db5ae2e1SBitterblue Smith /* SPDX-License-Identifier: GPL-2.0 */
2db5ae2e1SBitterblue Smith /* Copyright(c) 2009-2012  Realtek Corporation.*/
3db5ae2e1SBitterblue Smith 
4db5ae2e1SBitterblue Smith #ifndef __RTL92D_TRX_COMMON_H__
5db5ae2e1SBitterblue Smith #define __RTL92D_TRX_COMMON_H__
6db5ae2e1SBitterblue Smith 
7db5ae2e1SBitterblue Smith #define RX_DRV_INFO_SIZE_UNIT			8
8db5ae2e1SBitterblue Smith 
9db5ae2e1SBitterblue Smith enum rtl92d_rx_desc_enc {
10db5ae2e1SBitterblue Smith 	RX_DESC_ENC_NONE	= 0,
11db5ae2e1SBitterblue Smith 	RX_DESC_ENC_WEP40	= 1,
12db5ae2e1SBitterblue Smith 	RX_DESC_ENC_TKIP_WO_MIC	= 2,
13db5ae2e1SBitterblue Smith 	RX_DESC_ENC_TKIP_MIC	= 3,
14db5ae2e1SBitterblue Smith 	RX_DESC_ENC_AES		= 4,
15db5ae2e1SBitterblue Smith 	RX_DESC_ENC_WEP104	= 5,
16db5ae2e1SBitterblue Smith };
17db5ae2e1SBitterblue Smith 
18db5ae2e1SBitterblue Smith /* macros to read/write various fields in RX or TX descriptors */
19db5ae2e1SBitterblue Smith 
set_tx_desc_pkt_size(__le32 * __pdesc,u32 __val)20db5ae2e1SBitterblue Smith static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val)
21db5ae2e1SBitterblue Smith {
22db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, GENMASK(15, 0));
23db5ae2e1SBitterblue Smith }
24db5ae2e1SBitterblue Smith 
set_tx_desc_offset(__le32 * __pdesc,u32 __val)25db5ae2e1SBitterblue Smith static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val)
26db5ae2e1SBitterblue Smith {
27db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, GENMASK(23, 16));
28db5ae2e1SBitterblue Smith }
29db5ae2e1SBitterblue Smith 
set_tx_desc_htc(__le32 * __pdesc,u32 __val)30db5ae2e1SBitterblue Smith static inline void set_tx_desc_htc(__le32 *__pdesc, u32 __val)
31db5ae2e1SBitterblue Smith {
32db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, BIT(25));
33db5ae2e1SBitterblue Smith }
34db5ae2e1SBitterblue Smith 
set_tx_desc_last_seg(__le32 * __pdesc,u32 __val)35db5ae2e1SBitterblue Smith static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val)
36db5ae2e1SBitterblue Smith {
37db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, BIT(26));
38db5ae2e1SBitterblue Smith }
39db5ae2e1SBitterblue Smith 
set_tx_desc_first_seg(__le32 * __pdesc,u32 __val)40db5ae2e1SBitterblue Smith static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val)
41db5ae2e1SBitterblue Smith {
42db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, BIT(27));
43db5ae2e1SBitterblue Smith }
44db5ae2e1SBitterblue Smith 
set_tx_desc_linip(__le32 * __pdesc,u32 __val)45db5ae2e1SBitterblue Smith static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val)
46db5ae2e1SBitterblue Smith {
47db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, BIT(28));
48db5ae2e1SBitterblue Smith }
49db5ae2e1SBitterblue Smith 
set_tx_desc_own(__le32 * __pdesc,u32 __val)50db5ae2e1SBitterblue Smith static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val)
51db5ae2e1SBitterblue Smith {
52db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, BIT(31));
53db5ae2e1SBitterblue Smith }
54db5ae2e1SBitterblue Smith 
get_tx_desc_own(__le32 * __pdesc)55db5ae2e1SBitterblue Smith static inline u32 get_tx_desc_own(__le32 *__pdesc)
56db5ae2e1SBitterblue Smith {
57db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, BIT(31));
58db5ae2e1SBitterblue Smith }
59db5ae2e1SBitterblue Smith 
set_tx_desc_macid(__le32 * __pdesc,u32 __val)60db5ae2e1SBitterblue Smith static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val)
61db5ae2e1SBitterblue Smith {
62db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 1), __val, GENMASK(4, 0));
63db5ae2e1SBitterblue Smith }
64db5ae2e1SBitterblue Smith 
set_tx_desc_agg_enable(__le32 * __pdesc,u32 __val)65db5ae2e1SBitterblue Smith static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val)
66db5ae2e1SBitterblue Smith {
67db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 1), __val, BIT(5));
68db5ae2e1SBitterblue Smith }
69db5ae2e1SBitterblue Smith 
set_tx_desc_rdg_enable(__le32 * __pdesc,u32 __val)70db5ae2e1SBitterblue Smith static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val)
71db5ae2e1SBitterblue Smith {
72db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 1), __val, BIT(7));
73db5ae2e1SBitterblue Smith }
74db5ae2e1SBitterblue Smith 
set_tx_desc_queue_sel(__le32 * __pdesc,u32 __val)75db5ae2e1SBitterblue Smith static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val)
76db5ae2e1SBitterblue Smith {
77db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 1), __val, GENMASK(12, 8));
78db5ae2e1SBitterblue Smith }
79db5ae2e1SBitterblue Smith 
set_tx_desc_rate_id(__le32 * __pdesc,u32 __val)80db5ae2e1SBitterblue Smith static inline void set_tx_desc_rate_id(__le32 *__pdesc, u32 __val)
81db5ae2e1SBitterblue Smith {
82db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 1), __val, GENMASK(19, 16));
83db5ae2e1SBitterblue Smith }
84db5ae2e1SBitterblue Smith 
set_tx_desc_sec_type(__le32 * __pdesc,u32 __val)85db5ae2e1SBitterblue Smith static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val)
86db5ae2e1SBitterblue Smith {
87db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 1), __val, GENMASK(23, 22));
88db5ae2e1SBitterblue Smith }
89db5ae2e1SBitterblue Smith 
set_tx_desc_pkt_offset(__le32 * __pdesc,u32 __val)90db5ae2e1SBitterblue Smith static inline void set_tx_desc_pkt_offset(__le32 *__pdesc, u32 __val)
91db5ae2e1SBitterblue Smith {
92db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 1), __val, GENMASK(30, 26));
93db5ae2e1SBitterblue Smith }
94db5ae2e1SBitterblue Smith 
set_tx_desc_more_frag(__le32 * __pdesc,u32 __val)95db5ae2e1SBitterblue Smith static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val)
96db5ae2e1SBitterblue Smith {
97db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 2), __val, BIT(17));
98db5ae2e1SBitterblue Smith }
99db5ae2e1SBitterblue Smith 
set_tx_desc_ampdu_density(__le32 * __pdesc,u32 __val)100db5ae2e1SBitterblue Smith static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val)
101db5ae2e1SBitterblue Smith {
102db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 2), __val, GENMASK(22, 20));
103db5ae2e1SBitterblue Smith }
104db5ae2e1SBitterblue Smith 
set_tx_desc_seq(__le32 * __pdesc,u32 __val)105db5ae2e1SBitterblue Smith static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val)
106db5ae2e1SBitterblue Smith {
107db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 3), __val, GENMASK(27, 16));
108db5ae2e1SBitterblue Smith }
109db5ae2e1SBitterblue Smith 
set_tx_desc_pkt_id(__le32 * __pdesc,u32 __val)110db5ae2e1SBitterblue Smith static inline void set_tx_desc_pkt_id(__le32 *__pdesc, u32 __val)
111db5ae2e1SBitterblue Smith {
112db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 3), __val, GENMASK(31, 28));
113db5ae2e1SBitterblue Smith }
114db5ae2e1SBitterblue Smith 
set_tx_desc_rts_rate(__le32 * __pdesc,u32 __val)115db5ae2e1SBitterblue Smith static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val)
116db5ae2e1SBitterblue Smith {
117db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, GENMASK(4, 0));
118db5ae2e1SBitterblue Smith }
119db5ae2e1SBitterblue Smith 
set_tx_desc_qos(__le32 * __pdesc,u32 __val)120db5ae2e1SBitterblue Smith static inline void set_tx_desc_qos(__le32 *__pdesc, u32 __val)
121db5ae2e1SBitterblue Smith {
122db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(6));
123db5ae2e1SBitterblue Smith }
124db5ae2e1SBitterblue Smith 
set_tx_desc_hwseq_en(__le32 * __pdesc,u32 __val)125db5ae2e1SBitterblue Smith static inline void set_tx_desc_hwseq_en(__le32 *__pdesc, u32 __val)
126db5ae2e1SBitterblue Smith {
127db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(7));
128db5ae2e1SBitterblue Smith }
129db5ae2e1SBitterblue Smith 
set_tx_desc_use_rate(__le32 * __pdesc,u32 __val)130db5ae2e1SBitterblue Smith static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val)
131db5ae2e1SBitterblue Smith {
132db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(8));
133db5ae2e1SBitterblue Smith }
134db5ae2e1SBitterblue Smith 
set_tx_desc_disable_fb(__le32 * __pdesc,u32 __val)135db5ae2e1SBitterblue Smith static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val)
136db5ae2e1SBitterblue Smith {
137db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(10));
138db5ae2e1SBitterblue Smith }
139db5ae2e1SBitterblue Smith 
set_tx_desc_cts2self(__le32 * __pdesc,u32 __val)140db5ae2e1SBitterblue Smith static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val)
141db5ae2e1SBitterblue Smith {
142db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(11));
143db5ae2e1SBitterblue Smith }
144db5ae2e1SBitterblue Smith 
set_tx_desc_rts_enable(__le32 * __pdesc,u32 __val)145db5ae2e1SBitterblue Smith static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val)
146db5ae2e1SBitterblue Smith {
147db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(12));
148db5ae2e1SBitterblue Smith }
149db5ae2e1SBitterblue Smith 
set_tx_desc_hw_rts_enable(__le32 * __pdesc,u32 __val)150db5ae2e1SBitterblue Smith static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val)
151db5ae2e1SBitterblue Smith {
152db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(13));
153db5ae2e1SBitterblue Smith }
154db5ae2e1SBitterblue Smith 
set_tx_desc_tx_sub_carrier(__le32 * __pdesc,u32 __val)155db5ae2e1SBitterblue Smith static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val)
156db5ae2e1SBitterblue Smith {
157db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, GENMASK(21, 20));
158db5ae2e1SBitterblue Smith }
159db5ae2e1SBitterblue Smith 
set_tx_desc_data_bw(__le32 * __pdesc,u32 __val)160db5ae2e1SBitterblue Smith static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val)
161db5ae2e1SBitterblue Smith {
162db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(25));
163db5ae2e1SBitterblue Smith }
164db5ae2e1SBitterblue Smith 
set_tx_desc_rts_short(__le32 * __pdesc,u32 __val)165db5ae2e1SBitterblue Smith static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val)
166db5ae2e1SBitterblue Smith {
167db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(26));
168db5ae2e1SBitterblue Smith }
169db5ae2e1SBitterblue Smith 
set_tx_desc_rts_bw(__le32 * __pdesc,u32 __val)170db5ae2e1SBitterblue Smith static inline void set_tx_desc_rts_bw(__le32 *__pdesc, u32 __val)
171db5ae2e1SBitterblue Smith {
172db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, BIT(27));
173db5ae2e1SBitterblue Smith }
174db5ae2e1SBitterblue Smith 
set_tx_desc_rts_sc(__le32 * __pdesc,u32 __val)175db5ae2e1SBitterblue Smith static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val)
176db5ae2e1SBitterblue Smith {
177db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, GENMASK(29, 28));
178db5ae2e1SBitterblue Smith }
179db5ae2e1SBitterblue Smith 
set_tx_desc_rts_stbc(__le32 * __pdesc,u32 __val)180db5ae2e1SBitterblue Smith static inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val)
181db5ae2e1SBitterblue Smith {
182db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 4), __val, GENMASK(31, 30));
183db5ae2e1SBitterblue Smith }
184db5ae2e1SBitterblue Smith 
set_tx_desc_tx_rate(__le32 * __pdesc,u32 __val)185db5ae2e1SBitterblue Smith static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
186db5ae2e1SBitterblue Smith {
187db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 5), __val, GENMASK(5, 0));
188db5ae2e1SBitterblue Smith }
189db5ae2e1SBitterblue Smith 
set_tx_desc_data_shortgi(__le32 * __pdesc,u32 __val)190db5ae2e1SBitterblue Smith static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val)
191db5ae2e1SBitterblue Smith {
192db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 5), __val, BIT(6));
193db5ae2e1SBitterblue Smith }
194db5ae2e1SBitterblue Smith 
set_tx_desc_data_rate_fb_limit(__le32 * __pdesc,u32 __val)195db5ae2e1SBitterblue Smith static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val)
196db5ae2e1SBitterblue Smith {
197db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 5), __val, GENMASK(12, 8));
198db5ae2e1SBitterblue Smith }
199db5ae2e1SBitterblue Smith 
set_tx_desc_rts_rate_fb_limit(__le32 * __pdesc,u32 __val)200db5ae2e1SBitterblue Smith static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val)
201db5ae2e1SBitterblue Smith {
202db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 5), __val, GENMASK(16, 13));
203db5ae2e1SBitterblue Smith }
204db5ae2e1SBitterblue Smith 
set_tx_desc_max_agg_num(__le32 * __pdesc,u32 __val)205db5ae2e1SBitterblue Smith static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val)
206db5ae2e1SBitterblue Smith {
207db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 6), __val, GENMASK(15, 11));
208db5ae2e1SBitterblue Smith }
209db5ae2e1SBitterblue Smith 
set_tx_desc_tx_buffer_size(__le32 * __pdesc,u32 __val)210db5ae2e1SBitterblue Smith static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val)
211db5ae2e1SBitterblue Smith {
212db5ae2e1SBitterblue Smith 	le32p_replace_bits((__pdesc + 7), __val, GENMASK(15, 0));
213db5ae2e1SBitterblue Smith }
214db5ae2e1SBitterblue Smith 
set_tx_desc_tx_buffer_address(__le32 * __pdesc,u32 __val)215db5ae2e1SBitterblue Smith static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val)
216db5ae2e1SBitterblue Smith {
217db5ae2e1SBitterblue Smith 	*(__pdesc + 8) = cpu_to_le32(__val);
218db5ae2e1SBitterblue Smith }
219db5ae2e1SBitterblue Smith 
get_tx_desc_tx_buffer_address(__le32 * __pdesc)220db5ae2e1SBitterblue Smith static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc)
221db5ae2e1SBitterblue Smith {
222db5ae2e1SBitterblue Smith 	return le32_to_cpu(*(__pdesc + 8));
223db5ae2e1SBitterblue Smith }
224db5ae2e1SBitterblue Smith 
set_tx_desc_next_desc_address(__le32 * __pdesc,u32 __val)225db5ae2e1SBitterblue Smith static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val)
226db5ae2e1SBitterblue Smith {
227db5ae2e1SBitterblue Smith 	*(__pdesc + 10) = cpu_to_le32(__val);
228db5ae2e1SBitterblue Smith }
229db5ae2e1SBitterblue Smith 
get_rx_desc_pkt_len(__le32 * __pdesc)230db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_pkt_len(__le32 *__pdesc)
231db5ae2e1SBitterblue Smith {
232db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, GENMASK(13, 0));
233db5ae2e1SBitterblue Smith }
234db5ae2e1SBitterblue Smith 
get_rx_desc_crc32(__le32 * __pdesc)235db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_crc32(__le32 *__pdesc)
236db5ae2e1SBitterblue Smith {
237db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, BIT(14));
238db5ae2e1SBitterblue Smith }
239db5ae2e1SBitterblue Smith 
get_rx_desc_icv(__le32 * __pdesc)240db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_icv(__le32 *__pdesc)
241db5ae2e1SBitterblue Smith {
242db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, BIT(15));
243db5ae2e1SBitterblue Smith }
244db5ae2e1SBitterblue Smith 
get_rx_desc_drv_info_size(__le32 * __pdesc)245db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_drv_info_size(__le32 *__pdesc)
246db5ae2e1SBitterblue Smith {
247db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, GENMASK(19, 16));
248db5ae2e1SBitterblue Smith }
249db5ae2e1SBitterblue Smith 
get_rx_desc_enc_type(__le32 * __pdesc)250db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_enc_type(__le32 *__pdesc)
251db5ae2e1SBitterblue Smith {
252db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, GENMASK(22, 20));
253db5ae2e1SBitterblue Smith }
254db5ae2e1SBitterblue Smith 
get_rx_desc_shift(__le32 * __pdesc)255db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_shift(__le32 *__pdesc)
256db5ae2e1SBitterblue Smith {
257db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, GENMASK(25, 24));
258db5ae2e1SBitterblue Smith }
259db5ae2e1SBitterblue Smith 
get_rx_desc_physt(__le32 * __pdesc)260db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_physt(__le32 *__pdesc)
261db5ae2e1SBitterblue Smith {
262db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, BIT(26));
263db5ae2e1SBitterblue Smith }
264db5ae2e1SBitterblue Smith 
get_rx_desc_swdec(__le32 * __pdesc)265db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_swdec(__le32 *__pdesc)
266db5ae2e1SBitterblue Smith {
267db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, BIT(27));
268db5ae2e1SBitterblue Smith }
269db5ae2e1SBitterblue Smith 
get_rx_desc_own(__le32 * __pdesc)270db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_own(__le32 *__pdesc)
271db5ae2e1SBitterblue Smith {
272db5ae2e1SBitterblue Smith 	return le32_get_bits(*__pdesc, BIT(31));
273db5ae2e1SBitterblue Smith }
274db5ae2e1SBitterblue Smith 
set_rx_desc_pkt_len(__le32 * __pdesc,u32 __val)275db5ae2e1SBitterblue Smith static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val)
276db5ae2e1SBitterblue Smith {
277db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, GENMASK(13, 0));
278db5ae2e1SBitterblue Smith }
279db5ae2e1SBitterblue Smith 
set_rx_desc_eor(__le32 * __pdesc,u32 __val)280db5ae2e1SBitterblue Smith static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val)
281db5ae2e1SBitterblue Smith {
282db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, BIT(30));
283db5ae2e1SBitterblue Smith }
284db5ae2e1SBitterblue Smith 
set_rx_desc_own(__le32 * __pdesc,u32 __val)285db5ae2e1SBitterblue Smith static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val)
286db5ae2e1SBitterblue Smith {
287db5ae2e1SBitterblue Smith 	le32p_replace_bits(__pdesc, __val, BIT(31));
288db5ae2e1SBitterblue Smith }
289db5ae2e1SBitterblue Smith 
get_rx_desc_paggr(__le32 * __pdesc)290db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_paggr(__le32 *__pdesc)
291db5ae2e1SBitterblue Smith {
292db5ae2e1SBitterblue Smith 	return le32_get_bits(*(__pdesc + 1), BIT(14));
293db5ae2e1SBitterblue Smith }
294db5ae2e1SBitterblue Smith 
get_rx_desc_faggr(__le32 * __pdesc)295db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_faggr(__le32 *__pdesc)
296db5ae2e1SBitterblue Smith {
297db5ae2e1SBitterblue Smith 	return le32_get_bits(*(__pdesc + 1), BIT(15));
298db5ae2e1SBitterblue Smith }
299db5ae2e1SBitterblue Smith 
get_rx_desc_rxmcs(__le32 * __pdesc)300db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_rxmcs(__le32 *__pdesc)
301db5ae2e1SBitterblue Smith {
302db5ae2e1SBitterblue Smith 	return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0));
303db5ae2e1SBitterblue Smith }
304db5ae2e1SBitterblue Smith 
get_rx_desc_rxht(__le32 * __pdesc)305db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_rxht(__le32 *__pdesc)
306db5ae2e1SBitterblue Smith {
307db5ae2e1SBitterblue Smith 	return le32_get_bits(*(__pdesc + 3), BIT(6));
308db5ae2e1SBitterblue Smith }
309db5ae2e1SBitterblue Smith 
get_rx_desc_splcp(__le32 * __pdesc)310db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_splcp(__le32 *__pdesc)
311db5ae2e1SBitterblue Smith {
312db5ae2e1SBitterblue Smith 	return le32_get_bits(*(__pdesc + 3), BIT(8));
313db5ae2e1SBitterblue Smith }
314db5ae2e1SBitterblue Smith 
get_rx_desc_bw(__le32 * __pdesc)315db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_bw(__le32 *__pdesc)
316db5ae2e1SBitterblue Smith {
317db5ae2e1SBitterblue Smith 	return le32_get_bits(*(__pdesc + 3), BIT(9));
318db5ae2e1SBitterblue Smith }
319db5ae2e1SBitterblue Smith 
get_rx_desc_tsfl(__le32 * __pdesc)320db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_tsfl(__le32 *__pdesc)
321db5ae2e1SBitterblue Smith {
322db5ae2e1SBitterblue Smith 	return le32_to_cpu(*(__pdesc + 5));
323db5ae2e1SBitterblue Smith }
324db5ae2e1SBitterblue Smith 
get_rx_desc_buff_addr(__le32 * __pdesc)325db5ae2e1SBitterblue Smith static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc)
326db5ae2e1SBitterblue Smith {
327db5ae2e1SBitterblue Smith 	return le32_to_cpu(*(__pdesc + 6));
328db5ae2e1SBitterblue Smith }
329db5ae2e1SBitterblue Smith 
set_rx_desc_buff_addr(__le32 * __pdesc,u32 __val)330db5ae2e1SBitterblue Smith static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val)
331db5ae2e1SBitterblue Smith {
332db5ae2e1SBitterblue Smith 	*(__pdesc + 6) = cpu_to_le32(__val);
333db5ae2e1SBitterblue Smith }
334db5ae2e1SBitterblue Smith 
335db5ae2e1SBitterblue Smith /* For 92D early mode */
set_earlymode_pktnum(__le32 * __paddr,u32 __value)336db5ae2e1SBitterblue Smith static inline void set_earlymode_pktnum(__le32 *__paddr, u32 __value)
337db5ae2e1SBitterblue Smith {
338db5ae2e1SBitterblue Smith 	le32p_replace_bits(__paddr, __value, GENMASK(2, 0));
339db5ae2e1SBitterblue Smith }
340db5ae2e1SBitterblue Smith 
set_earlymode_len0(__le32 * __paddr,u32 __value)341db5ae2e1SBitterblue Smith static inline void set_earlymode_len0(__le32 *__paddr, u32 __value)
342db5ae2e1SBitterblue Smith {
343db5ae2e1SBitterblue Smith 	le32p_replace_bits(__paddr, __value, GENMASK(15, 4));
344db5ae2e1SBitterblue Smith }
345db5ae2e1SBitterblue Smith 
set_earlymode_len1(__le32 * __paddr,u32 __value)346db5ae2e1SBitterblue Smith static inline void set_earlymode_len1(__le32 *__paddr, u32 __value)
347db5ae2e1SBitterblue Smith {
348db5ae2e1SBitterblue Smith 	le32p_replace_bits(__paddr, __value, GENMASK(27, 16));
349db5ae2e1SBitterblue Smith }
350db5ae2e1SBitterblue Smith 
set_earlymode_len2_1(__le32 * __paddr,u32 __value)351db5ae2e1SBitterblue Smith static inline void set_earlymode_len2_1(__le32 *__paddr, u32 __value)
352db5ae2e1SBitterblue Smith {
353db5ae2e1SBitterblue Smith 	le32p_replace_bits(__paddr, __value, GENMASK(31, 28));
354db5ae2e1SBitterblue Smith }
355db5ae2e1SBitterblue Smith 
set_earlymode_len2_2(__le32 * __paddr,u32 __value)356db5ae2e1SBitterblue Smith static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value)
357db5ae2e1SBitterblue Smith {
358db5ae2e1SBitterblue Smith 	le32p_replace_bits((__paddr + 1), __value, GENMASK(7, 0));
359db5ae2e1SBitterblue Smith }
360db5ae2e1SBitterblue Smith 
set_earlymode_len3(__le32 * __paddr,u32 __value)361db5ae2e1SBitterblue Smith static inline void set_earlymode_len3(__le32 *__paddr, u32 __value)
362db5ae2e1SBitterblue Smith {
363db5ae2e1SBitterblue Smith 	le32p_replace_bits((__paddr + 1), __value, GENMASK(19, 8));
364db5ae2e1SBitterblue Smith }
365db5ae2e1SBitterblue Smith 
set_earlymode_len4(__le32 * __paddr,u32 __value)366db5ae2e1SBitterblue Smith static inline void set_earlymode_len4(__le32 *__paddr, u32 __value)
367db5ae2e1SBitterblue Smith {
368db5ae2e1SBitterblue Smith 	le32p_replace_bits((__paddr + 1), __value, GENMASK(31, 20));
369db5ae2e1SBitterblue Smith }
370db5ae2e1SBitterblue Smith 
371db5ae2e1SBitterblue Smith struct rx_fwinfo_92d {
372db5ae2e1SBitterblue Smith 	u8 gain_trsw[4];
373db5ae2e1SBitterblue Smith 	u8 pwdb_all;
374db5ae2e1SBitterblue Smith 	u8 cfosho[4];
375db5ae2e1SBitterblue Smith 	u8 cfotail[4];
376db5ae2e1SBitterblue Smith 	s8 rxevm[2];
377db5ae2e1SBitterblue Smith 	s8 rxsnr[4];
378db5ae2e1SBitterblue Smith 	u8 pdsnr[2];
379db5ae2e1SBitterblue Smith 	u8 csi_current[2];
380db5ae2e1SBitterblue Smith 	u8 csi_target[2];
381db5ae2e1SBitterblue Smith 	u8 sigevm;
382db5ae2e1SBitterblue Smith 	u8 max_ex_pwr;
383db5ae2e1SBitterblue Smith #ifdef __LITTLE_ENDIAN
384db5ae2e1SBitterblue Smith 	u8 ex_intf_flag:1;
385db5ae2e1SBitterblue Smith 	u8 sgi_en:1;
386db5ae2e1SBitterblue Smith 	u8 rxsc:2;
387db5ae2e1SBitterblue Smith 	u8 reserve:4;
388db5ae2e1SBitterblue Smith #else
389db5ae2e1SBitterblue Smith 	u8 reserve:4;
390db5ae2e1SBitterblue Smith 	u8 rxsc:2;
391db5ae2e1SBitterblue Smith 	u8 sgi_en:1;
392db5ae2e1SBitterblue Smith 	u8 ex_intf_flag:1;
393db5ae2e1SBitterblue Smith #endif
394db5ae2e1SBitterblue Smith } __packed;
395db5ae2e1SBitterblue Smith 
396*b21faf0eSBitterblue Smith bool rtl92d_rx_query_desc(struct ieee80211_hw *hw,
397db5ae2e1SBitterblue Smith 			  struct rtl_stats *stats,
398db5ae2e1SBitterblue Smith 			  struct ieee80211_rx_status *rx_status,
399db5ae2e1SBitterblue Smith 			  u8 *pdesc, struct sk_buff *skb);
400*b21faf0eSBitterblue Smith void rtl92d_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
401db5ae2e1SBitterblue Smith 		     u8 desc_name, u8 *val);
402*b21faf0eSBitterblue Smith u64 rtl92d_get_desc(struct ieee80211_hw *hw,
403db5ae2e1SBitterblue Smith 		    u8 *p_desc, bool istx, u8 desc_name);
404db5ae2e1SBitterblue Smith 
405db5ae2e1SBitterblue Smith #endif
406