def.h revision e52dadb341c9c5ac25d6abd9216dd62752784f03
1e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/******************************************************************************
2e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li *
3e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * Copyright(c) 2009-2010  Realtek Corporation.
4e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li *
5e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * This program is free software; you can redistribute it and/or modify it
6e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * under the terms of version 2 of the GNU General Public License as
7e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * published by the Free Software Foundation.
8e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li *
9e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * This program is distributed in the hope that it will be useful, but WITHOUT
10e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * more details.
13e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li *
14e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * You should have received a copy of the GNU General Public License along with
15e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * this program; if not, write to the Free Software Foundation, Inc.,
16e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li *
18e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * The full GNU General Public License is included in this distribution in the
19e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * file called LICENSE.
20e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li *
21e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * Contact Information:
22e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * wlanfae <wlanfae@realtek.com>
23e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
24e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * Hsinchu 300, Taiwan.
25e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li *
26e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * Larry Finger <Larry.Finger@lwfinger.net>
27e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li *
28e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li *****************************************************************************/
29e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#ifndef __REALTEK_92S_DEF_H__
30e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define __REALTEK_92S_DEF_H__
31e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
32e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define RX_MPDU_QUEUE				0
33e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define RX_CMD_QUEUE				1
34e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define RX_MAX_QUEUE				2
35e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
36e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE1M				0x00
37e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE2M				0x01
38e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE5_5M			0x02
39e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE11M				0x03
40e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE6M				0x04
41e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE9M				0x05
42e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE12M				0x06
43e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE18M				0x07
44e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE24M				0x08
45e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE36M				0x09
46e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE48M				0x0a
47e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATE54M				0x0b
48e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS0			0x0c
49e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS1			0x0d
50e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS2			0x0e
51e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS3			0x0f
52e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS4			0x10
53e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS5			0x11
54e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS6			0x12
55e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS7			0x13
56e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS8			0x14
57e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS9			0x15
58e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS10			0x16
59e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS11			0x17
60e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS12			0x18
61e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS13			0x19
62e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS14			0x1a
63e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS15			0x1b
64e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS15_SG			0x1c
65e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define DESC92S_RATEMCS32			0x20
66e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
67e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SHORT_SLOT_TIME				9
68e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define NON_SHORT_SLOT_TIME			20
69e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
70e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Rx smooth factor */
71e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define	RX_SMOOTH_FACTOR			20
72e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
73e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Queue Select Value in TxDesc */
74e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define QSLT_BK					0x2
75e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define QSLT_BE					0x0
76e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define QSLT_VI					0x5
77e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define QSLT_VO					0x6
78e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define QSLT_BEACON				0x10
79e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define QSLT_HIGH				0x11
80e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define QSLT_MGNT				0x12
81e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define QSLT_CMD				0x13
82e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
83e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define	PHY_RSSI_SLID_WIN_MAX			100
84e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define	PHY_LINKQUALITY_SLID_WIN_MAX		20
85e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define	PHY_BEACON_RSSI_SLID_WIN_MAX		10
86e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
87e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Tx Desc */
88e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define TX_DESC_SIZE_RTL8192S			(16 * 4)
89e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define TX_CMDDESC_SIZE_RTL8192S		(16 * 4)
90e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
91e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Define a macro that takes a le32 word, converts it to host ordering,
92e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * right shifts by a specified count, creates a mask of the specified
93e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * bit count, and extracts that number of bits.
94e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li */
95e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
96e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SHIFT_AND_MASK_LE(__pdesc, __shift, __mask)		\
97e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	((le32_to_cpu(*(((__le32 *)(__pdesc)))) >> (__shift)) &	\
98e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	BIT_LEN_MASK_32(__mask))
99e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
100e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Define a macro that clears a bit field in an le32 word and
101e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * sets the specified value into that bit field. The resulting
102e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * value remains in le32 ordering; however, it is properly converted
103e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * to host ordering for the clear and set operations before conversion
104e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * back to le32.
105e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li */
106e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
107e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_BITS_OFFSET_LE(__pdesc, __shift, __len, __val)	\
108e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	(*(__le32 *)(__pdesc) =					\
109e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	(cpu_to_le32((le32_to_cpu(*((__le32 *)(__pdesc))) &	\
110e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	(~(BIT_OFFSET_LEN_MASK_32((__shift), __len)))) |	\
111e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	(((u32)(__val) & BIT_LEN_MASK_32(__len)) << (__shift)))));
112e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
113e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* macros to read/write various fields in RX or TX descriptors */
114e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
115e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 0 */
116e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_PKT_SIZE(__pdesc, __val)			\
117e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 0, 16, __val)
118e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_OFFSET(__pdesc, __val)			\
119e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 16, 8, __val)
120e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TYPE(__pdesc, __val)			\
121e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 24, 2, __val)
122e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_LAST_SEG(__pdesc, __val)			\
123e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 26, 1, __val)
124e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_FIRST_SEG(__pdesc, __val)			\
125e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 27, 1, __val)
126e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_LINIP(__pdesc, __val)			\
127e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 28, 1, __val)
128e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_AMSDU(__pdesc, __val)			\
129e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 29, 1, __val)
130e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_GREEN_FIELD(__pdesc, __val)			\
131e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 30, 1, __val)
132e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_OWN(__pdesc, __val)				\
133e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 31, 1, __val)
134e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
135e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_TX_DESC_OWN(__pdesc)				\
136e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 31, 1)
137e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
138e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 1 */
139e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_MACID(__pdesc, __val)			\
140e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 0, 5, __val)
141e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_MORE_DATA(__pdesc, __val)			\
142e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 5, 1, __val)
143e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_MORE_FRAG(__pdesc, __val)			\
144e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 6, 1, __val)
145e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_PIFS(__pdesc, __val)			\
146e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 7, 1, __val)
147e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_QUEUE_SEL(__pdesc, __val)			\
148e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 8, 5, __val)
149e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_ACK_POLICY(__pdesc, __val)			\
150e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 13, 2, __val)
151e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_NO_ACM(__pdesc, __val)			\
152e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 15, 1, __val)
153e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_NON_QOS(__pdesc, __val)			\
154e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 16, 1, __val)
155e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_KEY_ID(__pdesc, __val)			\
156e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 17, 2, __val)
157e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_OUI(__pdesc, __val)				\
158e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 19, 1, __val)
159e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_PKT_TYPE(__pdesc, __val)			\
160e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 20, 1, __val)
161e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_EN_DESC_ID(__pdesc, __val)			\
162e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 21, 1, __val)
163e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_SEC_TYPE(__pdesc, __val)			\
164e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 22, 2, __val)
165e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_WDS(__pdesc, __val)				\
166e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 24, 1, __val)
167e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_HTC(__pdesc, __val)				\
168e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 25, 1, __val)
169e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_PKT_OFFSET(__pdesc, __val)			\
170e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 26, 5, __val)
171e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_HWPC(__pdesc, __val)			\
172e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 27, 1, __val)
173e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
174e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 2 */
175e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_DATA_RETRY_LIMIT(__pdesc, __val)		\
176e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 0, 6, __val)
177e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RETRY_LIMIT_ENABLE(__pdesc, __val)		\
178e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 6, 1, __val)
179e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TSFL(__pdesc, __val)			\
180e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 7, 5, __val)
181e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RTS_RETRY_COUNT(__pdesc, __val)		\
182e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 12, 6, __val)
183e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_DATA_RETRY_COUNT(__pdesc, __val)		\
184e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 18, 6, __val)
185e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define	SET_TX_DESC_RSVD_MACID(__pdesc, __val)			\
186e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(((__pdesc) + 8), 24, 5, __val)
187e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_AGG_ENABLE(__pdesc, __val)			\
188e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 29, 1, __val)
189e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_AGG_BREAK(__pdesc, __val)			\
190e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 30, 1, __val)
191e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_OWN_MAC(__pdesc, __val)			\
192e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 31, 1, __val)
193e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
194e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 3 */
195e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_NEXT_HEAP_PAGE(__pdesc, __val)		\
196e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 0, 8, __val)
197e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TAIL_PAGE(__pdesc, __val)			\
198e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 8, 8, __val)
199e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_SEQ(__pdesc, __val)				\
200e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 16, 12, __val)
201e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_FRAG(__pdesc, __val)			\
202e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 28, 4, __val)
203e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
204e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 4 */
205e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RTS_RATE(__pdesc, __val)			\
206e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 0, 6, __val)
207e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_DISABLE_RTS_FB(__pdesc, __val)		\
208e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 6, 1, __val)
209e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RTS_RATE_FB_LIMIT(__pdesc, __val)		\
210e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 7, 4, __val)
211e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_CTS_ENABLE(__pdesc, __val)			\
212e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 11, 1, __val)
213e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RTS_ENABLE(__pdesc, __val)			\
214e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 12, 1, __val)
215e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RA_BRSR_ID(__pdesc, __val)			\
216e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 13, 3, __val)
217e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TXHT(__pdesc, __val)			\
218e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 16, 1, __val)
219e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TX_SHORT(__pdesc, __val)			\
220e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 17, 1, __val)
221e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TX_BANDWIDTH(__pdesc, __val)		\
222e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 18, 1, __val)
223e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TX_SUB_CARRIER(__pdesc, __val)		\
224e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 19, 2, __val)
225e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TX_STBC(__pdesc, __val)			\
226e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 21, 2, __val)
227e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TX_REVERSE_DIRECTION(__pdesc, __val)	\
228e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 23, 1, __val)
229e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RTS_HT(__pdesc, __val)			\
230e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 24, 1, __val)
231e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RTS_SHORT(__pdesc, __val)			\
232e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 25, 1, __val)
233e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RTS_BANDWIDTH(__pdesc, __val)		\
234e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 26, 1, __val)
235e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RTS_SUB_CARRIER(__pdesc, __val)		\
236e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 27, 2, __val)
237e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_RTS_STBC(__pdesc, __val)			\
238e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 29, 2, __val)
239e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_USER_RATE(__pdesc, __val)			\
240e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 31, 1, __val)
241e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
242e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 5 */
243e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_PACKET_ID(__pdesc, __val)			\
244e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 20, 0, 9, __val)
245e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TX_RATE(__pdesc, __val)			\
246e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 20, 9, 6, __val)
247e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_DISABLE_FB(__pdesc, __val)			\
248e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 20, 15, 1, __val)
249e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_DATA_RATE_FB_LIMIT(__pdesc, __val)		\
250e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 20, 16, 5, __val)
251e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TX_AGC(__pdesc, __val)			\
252e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 20, 21, 11, __val)
253e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
254e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 6 */
255e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_IP_CHECK_SUM(__pdesc, __val)		\
256e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 24, 0, 16, __val)
257e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TCP_CHECK_SUM(__pdesc, __val)		\
258e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 24, 16, 16, __val)
259e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
260e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 7 */
261e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TX_BUFFER_SIZE(__pdesc, __val)		\
262e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 28, 0, 16, __val)
263e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_IP_HEADER_OFFSET(__pdesc, __val)		\
264e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 28, 16, 8, __val)
265e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TCP_ENABLE(__pdesc, __val)			\
266e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 28, 31, 1, __val)
267e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
268e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 8 */
269e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc, __val)		\
270e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 32, 0, 32, __val)
271e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc)			\
272e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 32, 0, 32)
273e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
274e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Dword 9 */
275e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_TX_DESC_NEXT_DESC_ADDRESS(__pdesc, __val)		\
276e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 36, 0, 32, __val)
277e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
278e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Because the PCI Tx descriptors are chaied at the
279e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * initialization and all the NextDescAddresses in
280e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * these descriptors cannot not be cleared (,or
281e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * driver/HW cannot find the next descriptor), the
282e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * offset 36 (NextDescAddresses) is reserved when
283e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * the desc is cleared. */
284e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define	TX_DESC_NEXT_DESC_OFFSET			36
285e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define CLEAR_PCI_TX_DESC_CONTENT(__pdesc, _size)		\
286e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Lido {								\
287e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	if (_size > TX_DESC_NEXT_DESC_OFFSET)			\
288e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li		memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET);	\
289e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	else							\
290e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li		memset(__pdesc, 0, _size);			\
291e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li} while (0);
292e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
293e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* Rx Desc */
294e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define RX_STATUS_DESC_SIZE				24
295e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define RX_DRV_INFO_SIZE_UNIT				8
296e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
297e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* DWORD 0 */
298e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_PKT_LEN(__pdesc, __val)		\
299e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 0, 14, __val)
300e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_CRC32(__pdesc, __val)		\
301e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 14, 1, __val)
302e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_ICV(__pdesc, __val)			\
303e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 15, 1, __val)
304e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_DRVINFO_SIZE(__pdesc, __val)		\
305e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 16, 4, __val)
306e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_SECURITY(__pdesc, __val)		\
307e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 20, 3, __val)
308e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_QOS(__pdesc, __val)			\
309e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 23, 1, __val)
310e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_SHIFT(__pdesc, __val)		\
311e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 24, 2, __val)
312e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_PHY_STATUS(__pdesc, __val)		\
313e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 26, 1, __val)
314e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_SWDEC(__pdesc, __val)		\
315e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 27, 1, __val)
316e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_LAST_SEG(__pdesc, __val)		\
317e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 28, 1, __val)
318e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_FIRST_SEG(__pdesc, __val)		\
319e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 29, 1, __val)
320e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_EOR(__pdesc, __val)			\
321e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 30, 1, __val)
322e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_OWN(__pdesc, __val)			\
323e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc, 31, 1, __val)
324e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
325e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_PKT_LEN(__pdesc)			\
326e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 0, 14)
327e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_CRC32(__pdesc)			\
328e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 14, 1)
329e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_ICV(__pdesc)				\
330e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 15, 1)
331e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_DRVINFO_SIZE(__pdesc)		\
332e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 16, 4)
333e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_SECURITY(__pdesc)			\
334e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 20, 3)
335e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_QOS(__pdesc)				\
336e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 23, 1)
337e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_SHIFT(__pdesc)			\
338e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 24, 2)
339e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_PHY_STATUS(__pdesc)			\
340e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 26, 1)
341e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_SWDEC(__pdesc)			\
342e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 27, 1)
343e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_LAST_SEG(__pdesc)			\
344e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 28, 1)
345e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_FIRST_SEG(__pdesc)			\
346e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 29, 1)
347e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_EOR(__pdesc)				\
348e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 30, 1)
349e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_OWN(__pdesc)				\
350e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc, 31, 1)
351e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
352e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* DWORD 1 */
353e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_MACID(__pdesc, __val)		\
354e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 0, 5, __val)
355e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_TID(__pdesc, __val)			\
356e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 5, 4, __val)
357e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_PAGGR(__pdesc, __val)		\
358e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 14, 1, __val)
359e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_FAGGR(__pdesc, __val)		\
360e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 15, 1, __val)
361e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_A1_FIT(__pdesc, __val)		\
362e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 16, 4, __val)
363e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_A2_FIT(__pdesc, __val)		\
364e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 20, 4, __val)
365e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_PAM(__pdesc, __val)			\
366e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 24, 1, __val)
367e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_PWR(__pdesc, __val)			\
368e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 25, 1, __val)
369e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_MOREDATA(__pdesc, __val)		\
370e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 26, 1, __val)
371e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_MOREFRAG(__pdesc, __val)		\
372e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 27, 1, __val)
373e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_TYPE(__pdesc, __val)			\
374e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 28, 2, __val)
375e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_MC(__pdesc, __val)			\
376e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 30, 1, __val)
377e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_BC(__pdesc, __val)			\
378e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 4, 31, 1, __val)
379e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
380e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DEC_MACID(__pdesc)			\
381e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 0, 5)
382e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_TID(__pdesc)				\
383e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 5, 4)
384e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_PAGGR(__pdesc)			\
385e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 14, 1)
386e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_FAGGR(__pdesc)			\
387e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 15, 1)
388e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_A1_FIT(__pdesc)			\
389e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 16, 4)
390e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_A2_FIT(__pdesc)			\
391e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 20, 4)
392e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_PAM(__pdesc)				\
393e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 24, 1)
394e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_PWR(__pdesc)				\
395e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 25, 1)
396e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_MORE_DATA(__pdesc)			\
397e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 26, 1)
398e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_MORE_FRAG(__pdesc)			\
399e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 27, 1)
400e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_TYPE(__pdesc)			\
401e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 28, 2)
402e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_MC(__pdesc)				\
403e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 30, 1)
404e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_BC(__pdesc)				\
405e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 4, 31, 1)
406e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
407e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* DWORD 2 */
408e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_SEQ(__pdesc, __val)			\
409e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 0, 12, __val)
410e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_FRAG(__pdesc, __val)			\
411e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 12, 4, __val)
412e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_NEXT_PKTLEN(__pdesc, __val)		\
413e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 16, 8, __val)
414e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_NEXT_IND(__pdesc, __val)		\
415e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 8, 30, 1, __val)
416e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
417e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_SEQ(__pdesc)				\
418e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 8, 0, 12)
419e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_FRAG(__pdesc)			\
420e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 8, 12, 4)
421e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_NEXT_PKTLEN(__pdesc)			\
422e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 8, 16, 8)
423e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_NEXT_IND(__pdesc)			\
424e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 8, 30, 1)
425e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
426e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* DWORD 3 */
427e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_RX_MCS(__pdesc, __val)		\
428e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 0, 6, __val)
429e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_RX_HT(__pdesc, __val)		\
430e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 6, 1, __val)
431e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_AMSDU(__pdesc, __val)		\
432e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 7, 1, __val)
433e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_SPLCP(__pdesc, __val)		\
434e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 8, 1, __val)
435e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_BW(__pdesc, __val)			\
436e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 9, 1, __val)
437e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_HTC(__pdesc, __val)			\
438e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 10, 1, __val)
439e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_TCP_CHK_RPT(__pdesc, __val)		\
440e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 11, 1, __val)
441e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_IP_CHK_RPT(__pdesc, __val)		\
442e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 12, 1, __val)
443e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_TCP_CHK_VALID(__pdesc, __val)	\
444e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 13, 1, __val)
445e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_HWPC_ERR(__pdesc, __val)		\
446e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 14, 1, __val)
447e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_HWPC_IND(__pdesc, __val)		\
448e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 15, 1, __val)
449e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_IV0(__pdesc, __val)			\
450e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 12, 16, 16, __val)
451e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
452e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_RX_MCS(__pdesc)			\
453e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 0, 6)
454e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_RX_HT(__pdesc)			\
455e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 6, 1)
456e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_AMSDU(__pdesc)			\
457e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 7, 1)
458e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_SPLCP(__pdesc)			\
459e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 8, 1)
460e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_BW(__pdesc)				\
461e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 9, 1)
462e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_HTC(__pdesc)				\
463e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 10, 1)
464e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_TCP_CHK_RPT(__pdesc)			\
465e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 11, 1)
466e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_IP_CHK_RPT(__pdesc)			\
467e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 12, 1)
468e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_TCP_CHK_VALID(__pdesc)		\
469e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 13, 1)
470e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_HWPC_ERR(__pdesc)			\
471e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 14, 1)
472e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_HWPC_IND(__pdesc)			\
473e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 15, 1)
474e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_IV0(__pdesc)				\
475e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 12, 16, 16)
476e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
477e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* DWORD 4 */
478e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_IV1(__pdesc, __val)			\
479e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 16, 0, 32, __val)
480e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_IV1(__pdesc)				\
481e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 16, 0, 32)
482e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
483e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* DWORD 5 */
484e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS_DESC_TSFL(__pdesc, __val)			\
485e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 20, 0, 32, __val)
486e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define GET_RX_STATUS_DESC_TSFL(__pdesc)			\
487e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SHIFT_AND_MASK_LE(__pdesc + 20, 0, 32)
488e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
489e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/* DWORD 6 */
490e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define SET_RX_STATUS__DESC_BUFF_ADDR(__pdesc, __val)	\
491e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	SET_BITS_OFFSET_LE(__pdesc + 24, 0, 32, __val)
492e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
493e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#define RX_HAL_IS_CCK_RATE(_pdesc)\
494e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	(GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92S_RATE1M ||	\
495e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	 GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92S_RATE2M ||	\
496e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	 GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92S_RATE5_5M ||\
497e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	 GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92S_RATE11M)
498e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
499e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Lienum rf_optype {
500e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	RF_OP_BY_SW_3WIRE = 0,
501e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	RF_OP_BY_FW,
502e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	RF_OP_MAX
503e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li};
504e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
505e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Lienum ic_inferiority {
506e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	IC_INFERIORITY_A = 0,
507e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	IC_INFERIORITY_B = 1,
508e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li};
509e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
510e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Lienum fwcmd_iotype {
511e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* For DIG DM */
512e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_DIG_ENABLE = 0,
513e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_DIG_DISABLE = 1,
514e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_DIG_HALT = 2,
515e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_DIG_RESUME = 3,
516e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* For High Power DM */
517e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_HIGH_PWR_ENABLE = 4,
518e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_HIGH_PWR_DISABLE = 5,
519e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* For Rate adaptive DM */
520e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_RA_RESET = 6,
521e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_RA_ACTIVE = 7,
522e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_RA_REFRESH_N = 8,
523e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_RA_REFRESH_BG = 9,
524e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_RA_INIT = 10,
525e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* For FW supported IQK */
526e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_IQK_INIT = 11,
527e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* Tx power tracking switch,
528e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	 * MP driver only */
529e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_TXPWR_TRACK_ENABLE = 12,
530e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* Tx power tracking switch,
531e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	 * MP driver only */
532e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_TXPWR_TRACK_DISABLE = 13,
533e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* Tx power tracking with thermal
534e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	 * indication, for Normal driver */
535e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_TXPWR_TRACK_THERMAL = 14,
536e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_PAUSE_DM_BY_SCAN = 15,
537e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_RESUME_DM_BY_SCAN = 16,
538e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_RA_REFRESH_N_COMB = 17,
539e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_RA_REFRESH_BG_COMB = 18,
540e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_ANTENNA_SW_ENABLE = 19,
541e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_ANTENNA_SW_DISABLE = 20,
542e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* Tx Status report for CCX from FW */
543e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_TX_FEEDBACK_CCX_ENABLE = 21,
544e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* Indifate firmware that driver
545e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	 * enters LPS, For PS-Poll issue */
546e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_LPS_ENTER = 22,
547e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* Indicate firmware that driver
548e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	 * leave LPS*/
549e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_LPS_LEAVE = 23,
550e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* Set DIG mode to signal strength */
551e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_DIG_MODE_SS = 24,
552e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* Set DIG mode to false alarm. */
553e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_DIG_MODE_FA = 25,
554e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_ADD_A2_ENTRY = 26,
555e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_CTRL_DM_BY_DRIVER = 27,
556e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_CTRL_DM_BY_DRIVER_NEW = 28,
557e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_PAPE_CONTROL = 29,
558e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	FW_CMD_IQK_ENABLE = 30,
559e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li};
560e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
561e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li/*
562e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * Driver info contain PHY status
563e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * and other variabel size info
564e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li * PHY Status content as below
565e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li */
566e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Listruct  rx_fwinfo {
567e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* DWORD 0 */
568e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 gain_trsw[4];
569e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* DWORD 1 */
570e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 pwdb_all;
571e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 cfosho[4];
572e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* DWORD 2 */
573e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 cfotail[4];
574e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* DWORD 3 */
575e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	s8 rxevm[2];
576e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	s8 rxsnr[4];
577e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* DWORD 4 */
578e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 pdsnr[2];
579e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* DWORD 5 */
580e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 csi_current[2];
581e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 csi_target[2];
582e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	/* DWORD 6 */
583e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 sigevm;
584e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 max_ex_pwr;
585e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 ex_intf_flag:1;
586e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 sgi_en:1;
587e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 rxsc:2;
588e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 reserve:4;
589e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li};
590e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
591e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Listruct phy_sts_cck_8192s_t {
592e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 adc_pwdb_x[4];
593e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 sq_rpt;
594e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li	u8 cck_agc_rpt;
595e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li};
596e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
597e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li#endif
598e52dadb341c9c5ac25d6abd9216dd62752784f03Chaoming Li
599