xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8192se/def.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* Copyright(c) 2009-2012  Realtek Corporation.*/
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef __REALTEK_92S_DEF_H__
5*4882a593Smuzhiyun #define __REALTEK_92S_DEF_H__
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #define RX_MPDU_QUEUE				0
8*4882a593Smuzhiyun #define RX_CMD_QUEUE				1
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #define SHORT_SLOT_TIME				9
11*4882a593Smuzhiyun #define NON_SHORT_SLOT_TIME			20
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /* Queue Select Value in TxDesc */
14*4882a593Smuzhiyun #define QSLT_BK					0x2
15*4882a593Smuzhiyun #define QSLT_BE					0x0
16*4882a593Smuzhiyun #define QSLT_VI					0x5
17*4882a593Smuzhiyun #define QSLT_VO					0x6
18*4882a593Smuzhiyun #define QSLT_BEACON				0x10
19*4882a593Smuzhiyun #define QSLT_HIGH				0x11
20*4882a593Smuzhiyun #define QSLT_MGNT				0x12
21*4882a593Smuzhiyun #define QSLT_CMD				0x13
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /* Tx Desc */
24*4882a593Smuzhiyun #define TX_DESC_SIZE_RTL8192S			(16 * 4)
25*4882a593Smuzhiyun #define TX_CMDDESC_SIZE_RTL8192S		(16 * 4)
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /* macros to read/write various fields in RX or TX descriptors */
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun /* Dword 0 */
set_tx_desc_pkt_size(__le32 * __pdesc,u32 __val)30*4882a593Smuzhiyun static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val)
31*4882a593Smuzhiyun {
32*4882a593Smuzhiyun 	le32p_replace_bits(__pdesc, __val, GENMASK(15, 0));
33*4882a593Smuzhiyun }
34*4882a593Smuzhiyun 
set_tx_desc_offset(__le32 * __pdesc,u32 __val)35*4882a593Smuzhiyun static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val)
36*4882a593Smuzhiyun {
37*4882a593Smuzhiyun 	le32p_replace_bits(__pdesc, __val, GENMASK(23, 16));
38*4882a593Smuzhiyun }
39*4882a593Smuzhiyun 
set_tx_desc_last_seg(__le32 * __pdesc,u32 __val)40*4882a593Smuzhiyun static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val)
41*4882a593Smuzhiyun {
42*4882a593Smuzhiyun 	le32p_replace_bits(__pdesc, __val, BIT(26));
43*4882a593Smuzhiyun }
44*4882a593Smuzhiyun 
set_tx_desc_first_seg(__le32 * __pdesc,u32 __val)45*4882a593Smuzhiyun static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val)
46*4882a593Smuzhiyun {
47*4882a593Smuzhiyun 	le32p_replace_bits(__pdesc, __val, BIT(27));
48*4882a593Smuzhiyun }
49*4882a593Smuzhiyun 
set_tx_desc_linip(__le32 * __pdesc,u32 __val)50*4882a593Smuzhiyun static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val)
51*4882a593Smuzhiyun {
52*4882a593Smuzhiyun 	le32p_replace_bits(__pdesc, __val, BIT(28));
53*4882a593Smuzhiyun }
54*4882a593Smuzhiyun 
set_tx_desc_own(__le32 * __pdesc,u32 __val)55*4882a593Smuzhiyun static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val)
56*4882a593Smuzhiyun {
57*4882a593Smuzhiyun 	le32p_replace_bits(__pdesc, __val, BIT(31));
58*4882a593Smuzhiyun }
59*4882a593Smuzhiyun 
get_tx_desc_own(__le32 * __pdesc)60*4882a593Smuzhiyun static inline u32 get_tx_desc_own(__le32 *__pdesc)
61*4882a593Smuzhiyun {
62*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc), BIT(31));
63*4882a593Smuzhiyun }
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun /* Dword 1 */
set_tx_desc_macid(__le32 * __pdesc,u32 __val)66*4882a593Smuzhiyun static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val)
67*4882a593Smuzhiyun {
68*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 1), __val, GENMASK(4, 0));
69*4882a593Smuzhiyun }
70*4882a593Smuzhiyun 
set_tx_desc_queue_sel(__le32 * __pdesc,u32 __val)71*4882a593Smuzhiyun static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val)
72*4882a593Smuzhiyun {
73*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 1), __val, GENMASK(12, 8));
74*4882a593Smuzhiyun }
75*4882a593Smuzhiyun 
set_tx_desc_non_qos(__le32 * __pdesc,u32 __val)76*4882a593Smuzhiyun static inline void set_tx_desc_non_qos(__le32 *__pdesc, u32 __val)
77*4882a593Smuzhiyun {
78*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 1), __val, BIT(16));
79*4882a593Smuzhiyun }
80*4882a593Smuzhiyun 
set_tx_desc_sec_type(__le32 * __pdesc,u32 __val)81*4882a593Smuzhiyun static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val)
82*4882a593Smuzhiyun {
83*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 1), __val, GENMASK(23, 22));
84*4882a593Smuzhiyun }
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /* Dword 2 */
set_tx_desc_rsvd_macid(__le32 * __pdesc,u32 __val)87*4882a593Smuzhiyun static inline void	set_tx_desc_rsvd_macid(__le32 *__pdesc, u32 __val)
88*4882a593Smuzhiyun {
89*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 2), __val, GENMASK(28, 24));
90*4882a593Smuzhiyun }
91*4882a593Smuzhiyun 
set_tx_desc_agg_enable(__le32 * __pdesc,u32 __val)92*4882a593Smuzhiyun static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val)
93*4882a593Smuzhiyun {
94*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 2), __val, BIT(29));
95*4882a593Smuzhiyun }
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /* Dword 3 */
set_tx_desc_seq(__le32 * __pdesc,u32 __val)98*4882a593Smuzhiyun static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val)
99*4882a593Smuzhiyun {
100*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 3), __val, GENMASK(27, 16));
101*4882a593Smuzhiyun }
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun /* Dword 4 */
set_tx_desc_rts_rate(__le32 * __pdesc,u32 __val)104*4882a593Smuzhiyun static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val)
105*4882a593Smuzhiyun {
106*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, GENMASK(5, 0));
107*4882a593Smuzhiyun }
108*4882a593Smuzhiyun 
set_tx_desc_cts_enable(__le32 * __pdesc,u32 __val)109*4882a593Smuzhiyun static inline void set_tx_desc_cts_enable(__le32 *__pdesc, u32 __val)
110*4882a593Smuzhiyun {
111*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, BIT(11));
112*4882a593Smuzhiyun }
113*4882a593Smuzhiyun 
set_tx_desc_rts_enable(__le32 * __pdesc,u32 __val)114*4882a593Smuzhiyun static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val)
115*4882a593Smuzhiyun {
116*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, BIT(12));
117*4882a593Smuzhiyun }
118*4882a593Smuzhiyun 
set_tx_desc_ra_brsr_id(__le32 * __pdesc,u32 __val)119*4882a593Smuzhiyun static inline void set_tx_desc_ra_brsr_id(__le32 *__pdesc, u32 __val)
120*4882a593Smuzhiyun {
121*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, GENMASK(15, 13));
122*4882a593Smuzhiyun }
123*4882a593Smuzhiyun 
set_tx_desc_txht(__le32 * __pdesc,u32 __val)124*4882a593Smuzhiyun static inline void set_tx_desc_txht(__le32 *__pdesc, u32 __val)
125*4882a593Smuzhiyun {
126*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, BIT(16));
127*4882a593Smuzhiyun }
128*4882a593Smuzhiyun 
set_tx_desc_tx_short(__le32 * __pdesc,u32 __val)129*4882a593Smuzhiyun static inline void set_tx_desc_tx_short(__le32 *__pdesc, u32 __val)
130*4882a593Smuzhiyun {
131*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, BIT(17));
132*4882a593Smuzhiyun }
133*4882a593Smuzhiyun 
set_tx_desc_tx_bandwidth(__le32 * __pdesc,u32 __val)134*4882a593Smuzhiyun static inline void set_tx_desc_tx_bandwidth(__le32 *__pdesc, u32 __val)
135*4882a593Smuzhiyun {
136*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, BIT(18));
137*4882a593Smuzhiyun }
138*4882a593Smuzhiyun 
set_tx_desc_tx_sub_carrier(__le32 * __pdesc,u32 __val)139*4882a593Smuzhiyun static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val)
140*4882a593Smuzhiyun {
141*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, GENMASK(20, 19));
142*4882a593Smuzhiyun }
143*4882a593Smuzhiyun 
set_tx_desc_rts_short(__le32 * __pdesc,u32 __val)144*4882a593Smuzhiyun static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val)
145*4882a593Smuzhiyun {
146*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, BIT(25));
147*4882a593Smuzhiyun }
148*4882a593Smuzhiyun 
set_tx_desc_rts_bandwidth(__le32 * __pdesc,u32 __val)149*4882a593Smuzhiyun static inline void set_tx_desc_rts_bandwidth(__le32 *__pdesc, u32 __val)
150*4882a593Smuzhiyun {
151*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, BIT(26));
152*4882a593Smuzhiyun }
153*4882a593Smuzhiyun 
set_tx_desc_rts_sub_carrier(__le32 * __pdesc,u32 __val)154*4882a593Smuzhiyun static inline void set_tx_desc_rts_sub_carrier(__le32 *__pdesc, u32 __val)
155*4882a593Smuzhiyun {
156*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, GENMASK(28, 27));
157*4882a593Smuzhiyun }
158*4882a593Smuzhiyun 
set_tx_desc_rts_stbc(__le32 * __pdesc,u32 __val)159*4882a593Smuzhiyun static inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val)
160*4882a593Smuzhiyun {
161*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, GENMASK(30, 29));
162*4882a593Smuzhiyun }
163*4882a593Smuzhiyun 
set_tx_desc_user_rate(__le32 * __pdesc,u32 __val)164*4882a593Smuzhiyun static inline void set_tx_desc_user_rate(__le32 *__pdesc, u32 __val)
165*4882a593Smuzhiyun {
166*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 4), __val, BIT(31));
167*4882a593Smuzhiyun }
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun /* Dword 5 */
set_tx_desc_packet_id(__le32 * __pdesc,u32 __val)170*4882a593Smuzhiyun static inline void set_tx_desc_packet_id(__le32 *__pdesc, u32 __val)
171*4882a593Smuzhiyun {
172*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 5), __val, GENMASK(8, 0));
173*4882a593Smuzhiyun }
174*4882a593Smuzhiyun 
set_tx_desc_tx_rate(__le32 * __pdesc,u32 __val)175*4882a593Smuzhiyun static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
176*4882a593Smuzhiyun {
177*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 5), __val, GENMASK(14, 9));
178*4882a593Smuzhiyun }
179*4882a593Smuzhiyun 
set_tx_desc_data_rate_fb_limit(__le32 * __pdesc,u32 __val)180*4882a593Smuzhiyun static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val)
181*4882a593Smuzhiyun {
182*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 5), __val, GENMASK(20, 16));
183*4882a593Smuzhiyun }
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun /* Dword 7 */
set_tx_desc_tx_buffer_size(__le32 * __pdesc,u32 __val)186*4882a593Smuzhiyun static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val)
187*4882a593Smuzhiyun {
188*4882a593Smuzhiyun 	le32p_replace_bits((__pdesc + 7), __val, GENMASK(15, 0));
189*4882a593Smuzhiyun }
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun /* Dword 8 */
set_tx_desc_tx_buffer_address(__le32 * __pdesc,u32 __val)192*4882a593Smuzhiyun static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val)
193*4882a593Smuzhiyun {
194*4882a593Smuzhiyun 	*(__pdesc + 8) = cpu_to_le32(__val);
195*4882a593Smuzhiyun }
196*4882a593Smuzhiyun 
get_tx_desc_tx_buffer_address(__le32 * __pdesc)197*4882a593Smuzhiyun static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc)
198*4882a593Smuzhiyun {
199*4882a593Smuzhiyun 	return le32_to_cpu(*((__pdesc + 8)));
200*4882a593Smuzhiyun }
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun /* Dword 9 */
set_tx_desc_next_desc_address(__le32 * __pdesc,u32 __val)203*4882a593Smuzhiyun static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val)
204*4882a593Smuzhiyun {
205*4882a593Smuzhiyun 	*(__pdesc + 9) = cpu_to_le32(__val);
206*4882a593Smuzhiyun }
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun /* Because the PCI Tx descriptors are chaied at the
209*4882a593Smuzhiyun  * initialization and all the NextDescAddresses in
210*4882a593Smuzhiyun  * these descriptors cannot not be cleared (,or
211*4882a593Smuzhiyun  * driver/HW cannot find the next descriptor), the
212*4882a593Smuzhiyun  * offset 36 (NextDescAddresses) is reserved when
213*4882a593Smuzhiyun  * the desc is cleared. */
214*4882a593Smuzhiyun #define	TX_DESC_NEXT_DESC_OFFSET			36
215*4882a593Smuzhiyun #define CLEAR_PCI_TX_DESC_CONTENT(__pdesc, _size)		\
216*4882a593Smuzhiyun 	memset(__pdesc, 0, min_t(size_t, _size, TX_DESC_NEXT_DESC_OFFSET))
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun /* Rx Desc */
219*4882a593Smuzhiyun #define RX_STATUS_DESC_SIZE				24
220*4882a593Smuzhiyun #define RX_DRV_INFO_SIZE_UNIT				8
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun /* DWORD 0 */
set_rx_status_desc_pkt_len(__le32 * __pdesc,u32 __val)223*4882a593Smuzhiyun static inline void set_rx_status_desc_pkt_len(__le32 *__pdesc, u32 __val)
224*4882a593Smuzhiyun {
225*4882a593Smuzhiyun 	le32p_replace_bits(__pdesc, __val, GENMASK(13, 0));
226*4882a593Smuzhiyun }
227*4882a593Smuzhiyun 
set_rx_status_desc_eor(__le32 * __pdesc,u32 __val)228*4882a593Smuzhiyun static inline void set_rx_status_desc_eor(__le32 *__pdesc, u32 __val)
229*4882a593Smuzhiyun {
230*4882a593Smuzhiyun 	le32p_replace_bits(__pdesc, __val, BIT(30));
231*4882a593Smuzhiyun }
232*4882a593Smuzhiyun 
set_rx_status_desc_own(__le32 * __pdesc,u32 __val)233*4882a593Smuzhiyun static inline void set_rx_status_desc_own(__le32 *__pdesc, u32 __val)
234*4882a593Smuzhiyun {
235*4882a593Smuzhiyun 	le32p_replace_bits(__pdesc, __val, BIT(31));
236*4882a593Smuzhiyun }
237*4882a593Smuzhiyun 
get_rx_status_desc_pkt_len(__le32 * __pdesc)238*4882a593Smuzhiyun static inline u32 get_rx_status_desc_pkt_len(__le32 *__pdesc)
239*4882a593Smuzhiyun {
240*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc), GENMASK(13, 0));
241*4882a593Smuzhiyun }
242*4882a593Smuzhiyun 
get_rx_status_desc_crc32(__le32 * __pdesc)243*4882a593Smuzhiyun static inline u32 get_rx_status_desc_crc32(__le32 *__pdesc)
244*4882a593Smuzhiyun {
245*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc), BIT(14));
246*4882a593Smuzhiyun }
247*4882a593Smuzhiyun 
get_rx_status_desc_icv(__le32 * __pdesc)248*4882a593Smuzhiyun static inline u32 get_rx_status_desc_icv(__le32 *__pdesc)
249*4882a593Smuzhiyun {
250*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc), BIT(15));
251*4882a593Smuzhiyun }
252*4882a593Smuzhiyun 
get_rx_status_desc_drvinfo_size(__le32 * __pdesc)253*4882a593Smuzhiyun static inline u32 get_rx_status_desc_drvinfo_size(__le32 *__pdesc)
254*4882a593Smuzhiyun {
255*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc), GENMASK(19, 16));
256*4882a593Smuzhiyun }
257*4882a593Smuzhiyun 
get_rx_status_desc_shift(__le32 * __pdesc)258*4882a593Smuzhiyun static inline u32 get_rx_status_desc_shift(__le32 *__pdesc)
259*4882a593Smuzhiyun {
260*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc), GENMASK(25, 24));
261*4882a593Smuzhiyun }
262*4882a593Smuzhiyun 
get_rx_status_desc_phy_status(__le32 * __pdesc)263*4882a593Smuzhiyun static inline u32 get_rx_status_desc_phy_status(__le32 *__pdesc)
264*4882a593Smuzhiyun {
265*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc), BIT(26));
266*4882a593Smuzhiyun }
267*4882a593Smuzhiyun 
get_rx_status_desc_swdec(__le32 * __pdesc)268*4882a593Smuzhiyun static inline u32 get_rx_status_desc_swdec(__le32 *__pdesc)
269*4882a593Smuzhiyun {
270*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc), BIT(27));
271*4882a593Smuzhiyun }
272*4882a593Smuzhiyun 
get_rx_status_desc_own(__le32 * __pdesc)273*4882a593Smuzhiyun static inline u32 get_rx_status_desc_own(__le32 *__pdesc)
274*4882a593Smuzhiyun {
275*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc), BIT(31));
276*4882a593Smuzhiyun }
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun /* DWORD 1 */
get_rx_status_desc_paggr(__le32 * __pdesc)279*4882a593Smuzhiyun static inline u32 get_rx_status_desc_paggr(__le32 *__pdesc)
280*4882a593Smuzhiyun {
281*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc + 1), BIT(14));
282*4882a593Smuzhiyun }
283*4882a593Smuzhiyun 
get_rx_status_desc_faggr(__le32 * __pdesc)284*4882a593Smuzhiyun static inline u32 get_rx_status_desc_faggr(__le32 *__pdesc)
285*4882a593Smuzhiyun {
286*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc + 1), BIT(15));
287*4882a593Smuzhiyun }
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun /* DWORD 3 */
get_rx_status_desc_rx_mcs(__le32 * __pdesc)290*4882a593Smuzhiyun static inline u32 get_rx_status_desc_rx_mcs(__le32 *__pdesc)
291*4882a593Smuzhiyun {
292*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0));
293*4882a593Smuzhiyun }
294*4882a593Smuzhiyun 
get_rx_status_desc_rx_ht(__le32 * __pdesc)295*4882a593Smuzhiyun static inline u32 get_rx_status_desc_rx_ht(__le32 *__pdesc)
296*4882a593Smuzhiyun {
297*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc + 3), BIT(6));
298*4882a593Smuzhiyun }
299*4882a593Smuzhiyun 
get_rx_status_desc_splcp(__le32 * __pdesc)300*4882a593Smuzhiyun static inline u32 get_rx_status_desc_splcp(__le32 *__pdesc)
301*4882a593Smuzhiyun {
302*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc + 3), BIT(8));
303*4882a593Smuzhiyun }
304*4882a593Smuzhiyun 
get_rx_status_desc_bw(__le32 * __pdesc)305*4882a593Smuzhiyun static inline u32 get_rx_status_desc_bw(__le32 *__pdesc)
306*4882a593Smuzhiyun {
307*4882a593Smuzhiyun 	return le32_get_bits(*(__pdesc + 3), BIT(9));
308*4882a593Smuzhiyun }
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun /* DWORD 5 */
get_rx_status_desc_tsfl(__le32 * __pdesc)311*4882a593Smuzhiyun static inline u32 get_rx_status_desc_tsfl(__le32 *__pdesc)
312*4882a593Smuzhiyun {
313*4882a593Smuzhiyun 	return le32_to_cpu(*((__pdesc + 5)));
314*4882a593Smuzhiyun }
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun /* DWORD 6 */
set_rx_status__desc_buff_addr(__le32 * __pdesc,u32 __val)317*4882a593Smuzhiyun static inline void set_rx_status__desc_buff_addr(__le32 *__pdesc, u32 __val)
318*4882a593Smuzhiyun {
319*4882a593Smuzhiyun 	*(__pdesc + 6) = cpu_to_le32(__val);
320*4882a593Smuzhiyun }
321*4882a593Smuzhiyun 
get_rx_status_desc_buff_addr(__le32 * __pdesc)322*4882a593Smuzhiyun static inline u32 get_rx_status_desc_buff_addr(__le32 *__pdesc)
323*4882a593Smuzhiyun {
324*4882a593Smuzhiyun 	return le32_to_cpu(*(__pdesc + 6));
325*4882a593Smuzhiyun }
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun #define SE_RX_HAL_IS_CCK_RATE(_pdesc)\
328*4882a593Smuzhiyun 	(get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE1M ||	\
329*4882a593Smuzhiyun 	 get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE2M ||	\
330*4882a593Smuzhiyun 	 get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE5_5M ||\
331*4882a593Smuzhiyun 	 get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE11M)
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun enum rf_optype {
334*4882a593Smuzhiyun 	RF_OP_BY_SW_3WIRE = 0,
335*4882a593Smuzhiyun 	RF_OP_BY_FW,
336*4882a593Smuzhiyun 	RF_OP_MAX
337*4882a593Smuzhiyun };
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun enum ic_inferiority {
340*4882a593Smuzhiyun 	IC_INFERIORITY_A = 0,
341*4882a593Smuzhiyun 	IC_INFERIORITY_B = 1,
342*4882a593Smuzhiyun };
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun enum fwcmd_iotype {
345*4882a593Smuzhiyun 	/* For DIG DM */
346*4882a593Smuzhiyun 	FW_CMD_DIG_ENABLE = 0,
347*4882a593Smuzhiyun 	FW_CMD_DIG_DISABLE = 1,
348*4882a593Smuzhiyun 	FW_CMD_DIG_HALT = 2,
349*4882a593Smuzhiyun 	FW_CMD_DIG_RESUME = 3,
350*4882a593Smuzhiyun 	/* For High Power DM */
351*4882a593Smuzhiyun 	FW_CMD_HIGH_PWR_ENABLE = 4,
352*4882a593Smuzhiyun 	FW_CMD_HIGH_PWR_DISABLE = 5,
353*4882a593Smuzhiyun 	/* For Rate adaptive DM */
354*4882a593Smuzhiyun 	FW_CMD_RA_RESET = 6,
355*4882a593Smuzhiyun 	FW_CMD_RA_ACTIVE = 7,
356*4882a593Smuzhiyun 	FW_CMD_RA_REFRESH_N = 8,
357*4882a593Smuzhiyun 	FW_CMD_RA_REFRESH_BG = 9,
358*4882a593Smuzhiyun 	FW_CMD_RA_INIT = 10,
359*4882a593Smuzhiyun 	/* For FW supported IQK */
360*4882a593Smuzhiyun 	FW_CMD_IQK_INIT = 11,
361*4882a593Smuzhiyun 	/* Tx power tracking switch,
362*4882a593Smuzhiyun 	 * MP driver only */
363*4882a593Smuzhiyun 	FW_CMD_TXPWR_TRACK_ENABLE = 12,
364*4882a593Smuzhiyun 	/* Tx power tracking switch,
365*4882a593Smuzhiyun 	 * MP driver only */
366*4882a593Smuzhiyun 	FW_CMD_TXPWR_TRACK_DISABLE = 13,
367*4882a593Smuzhiyun 	/* Tx power tracking with thermal
368*4882a593Smuzhiyun 	 * indication, for Normal driver */
369*4882a593Smuzhiyun 	FW_CMD_TXPWR_TRACK_THERMAL = 14,
370*4882a593Smuzhiyun 	FW_CMD_PAUSE_DM_BY_SCAN = 15,
371*4882a593Smuzhiyun 	FW_CMD_RESUME_DM_BY_SCAN = 16,
372*4882a593Smuzhiyun 	FW_CMD_RA_REFRESH_N_COMB = 17,
373*4882a593Smuzhiyun 	FW_CMD_RA_REFRESH_BG_COMB = 18,
374*4882a593Smuzhiyun 	FW_CMD_ANTENNA_SW_ENABLE = 19,
375*4882a593Smuzhiyun 	FW_CMD_ANTENNA_SW_DISABLE = 20,
376*4882a593Smuzhiyun 	/* Tx Status report for CCX from FW */
377*4882a593Smuzhiyun 	FW_CMD_TX_FEEDBACK_CCX_ENABLE = 21,
378*4882a593Smuzhiyun 	/* Indifate firmware that driver
379*4882a593Smuzhiyun 	 * enters LPS, For PS-Poll issue */
380*4882a593Smuzhiyun 	FW_CMD_LPS_ENTER = 22,
381*4882a593Smuzhiyun 	/* Indicate firmware that driver
382*4882a593Smuzhiyun 	 * leave LPS*/
383*4882a593Smuzhiyun 	FW_CMD_LPS_LEAVE = 23,
384*4882a593Smuzhiyun 	/* Set DIG mode to signal strength */
385*4882a593Smuzhiyun 	FW_CMD_DIG_MODE_SS = 24,
386*4882a593Smuzhiyun 	/* Set DIG mode to false alarm. */
387*4882a593Smuzhiyun 	FW_CMD_DIG_MODE_FA = 25,
388*4882a593Smuzhiyun 	FW_CMD_ADD_A2_ENTRY = 26,
389*4882a593Smuzhiyun 	FW_CMD_CTRL_DM_BY_DRIVER = 27,
390*4882a593Smuzhiyun 	FW_CMD_CTRL_DM_BY_DRIVER_NEW = 28,
391*4882a593Smuzhiyun 	FW_CMD_PAPE_CONTROL = 29,
392*4882a593Smuzhiyun 	FW_CMD_IQK_ENABLE = 30,
393*4882a593Smuzhiyun };
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun /* Driver info contain PHY status
396*4882a593Smuzhiyun  * and other variabel size info
397*4882a593Smuzhiyun  * PHY Status content as below
398*4882a593Smuzhiyun  */
399*4882a593Smuzhiyun struct  rx_fwinfo {
400*4882a593Smuzhiyun 	/* DWORD 0 */
401*4882a593Smuzhiyun 	u8 gain_trsw[4];
402*4882a593Smuzhiyun 	/* DWORD 1 */
403*4882a593Smuzhiyun 	u8 pwdb_all;
404*4882a593Smuzhiyun 	u8 cfosho[4];
405*4882a593Smuzhiyun 	/* DWORD 2 */
406*4882a593Smuzhiyun 	u8 cfotail[4];
407*4882a593Smuzhiyun 	/* DWORD 3 */
408*4882a593Smuzhiyun 	s8 rxevm[2];
409*4882a593Smuzhiyun 	s8 rxsnr[4];
410*4882a593Smuzhiyun 	/* DWORD 4 */
411*4882a593Smuzhiyun 	u8 pdsnr[2];
412*4882a593Smuzhiyun 	/* DWORD 5 */
413*4882a593Smuzhiyun 	u8 csi_current[2];
414*4882a593Smuzhiyun 	u8 csi_target[2];
415*4882a593Smuzhiyun 	/* DWORD 6 */
416*4882a593Smuzhiyun 	u8 sigevm;
417*4882a593Smuzhiyun 	u8 max_ex_pwr;
418*4882a593Smuzhiyun 	u8 ex_intf_flag:1;
419*4882a593Smuzhiyun 	u8 sgi_en:1;
420*4882a593Smuzhiyun 	u8 rxsc:2;
421*4882a593Smuzhiyun 	u8 reserve:4;
422*4882a593Smuzhiyun };
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun struct phy_sts_cck_8192s_t {
425*4882a593Smuzhiyun 	u8 adc_pwdb_x[4];
426*4882a593Smuzhiyun 	u8 sq_rpt;
427*4882a593Smuzhiyun 	u8 cck_agc_rpt;
428*4882a593Smuzhiyun };
429*4882a593Smuzhiyun 
430*4882a593Smuzhiyun #endif
431*4882a593Smuzhiyun 
432