WiFi: add rtl8189es/etv support, Optimization wifi configuration.
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8189es / include / rtl8188e_xmit.h
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
4  *\r
5  * This program is free software; you can redistribute it and/or modify it\r
6  * under the terms of version 2 of the GNU General Public License as\r
7  * published by the Free Software Foundation.\r
8  *\r
9  * This program is distributed in the hope that it will be useful, but WITHOUT\r
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
12  * more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along with\r
15  * this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
17  *\r
18  *\r
19  ******************************************************************************/\r
20 #ifndef __RTL8188E_XMIT_H__\r
21 #define __RTL8188E_XMIT_H__\r
22 \r
23 \r
24 //\r
25 // Queue Select Value in TxDesc\r
26 //\r
27 #define QSLT_BK                                                 0x2//0x01\r
28 #define QSLT_BE                                                 0x0\r
29 #define QSLT_VI                                                 0x5//0x4\r
30 #define QSLT_VO                                                 0x7//0x6\r
31 #define QSLT_BEACON                                             0x10\r
32 #define QSLT_HIGH                                               0x11\r
33 #define QSLT_MGNT                                               0x12\r
34 #define QSLT_CMD                                                0x13\r
35 \r
36 //For 88e early mode\r
37 #define SET_EARLYMODE_PKTNUM(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 0, 3, __Value)\r
38 #define SET_EARLYMODE_LEN0(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 4, 12, __Value)\r
39 #define SET_EARLYMODE_LEN1(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 16, 12, __Value)\r
40 #define SET_EARLYMODE_LEN2_1(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 28, 4, __Value)\r
41 #define SET_EARLYMODE_LEN2_2(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 0, 8, __Value)\r
42 #define SET_EARLYMODE_LEN3(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 8, 12, __Value)\r
43 #define SET_EARLYMODE_LEN4(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 20, 12, __Value)\r
44 \r
45 //\r
46 //defined for TX DESC Operation\r
47 //\r
48 \r
49 #define MAX_TID (15)\r
50 \r
51 //OFFSET 0\r
52 #define OFFSET_SZ       0\r
53 #define OFFSET_SHT      16\r
54 #define BMC             BIT(24)\r
55 #define LSG             BIT(26)\r
56 #define FSG             BIT(27)\r
57 #define OWN             BIT(31)\r
58 \r
59 \r
60 //OFFSET 4\r
61 #define PKT_OFFSET_SZ           0\r
62 #define QSEL_SHT                        8\r
63 #define RATE_ID_SHT                     16\r
64 #define NAVUSEHDR                       BIT(20)\r
65 #define SEC_TYPE_SHT            22\r
66 #define PKT_OFFSET_SHT          26\r
67 \r
68 //OFFSET 8\r
69 #define AGG_EN                          BIT(12)\r
70 #define AGG_BK                                  BIT(16)\r
71 #define AMPDU_DENSITY_SHT       20\r
72 #define ANTSEL_A                        BIT(24)\r
73 #define ANTSEL_B                        BIT(25)\r
74 #define TX_ANT_CCK_SHT          26\r
75 #define TX_ANTL_SHT                     28\r
76 #define TX_ANT_HT_SHT           30\r
77 \r
78 //OFFSET 12\r
79 #define SEQ_SHT                         16\r
80 #define EN_HWSEQ                        BIT(31)\r
81 \r
82 //OFFSET 16\r
83 #define         QOS                          BIT(6)\r
84 #define HW_SSN                          BIT(7)\r
85 #define         USERATE                 BIT(8)\r
86 #define         DISDATAFB                       BIT(10)\r
87 #define   CTS_2_SELF                    BIT(11)\r
88 #define RTS_EN                          BIT(12)\r
89 #define HW_RTS_EN                       BIT(13)\r
90 #define         DATA_SHORT                      BIT(24)\r
91 #define         PWR_STATUS_SHT  15\r
92 #define         DATA_SC_SHT             20\r
93 #define         DATA_BW                 BIT(25)\r
94 \r
95 //OFFSET 20\r
96 #define RTY_LMT_EN                      BIT(17)\r
97 \r
98 \r
99 //OFFSET 20\r
100 #define SGI                                     BIT(6)\r
101 #define USB_TXAGG_NUM_SHT       24\r
102 \r
103 typedef struct txdesc_88e\r
104 {\r
105         //Offset 0\r
106         u32 pktlen:16;\r
107         u32 offset:8;\r
108         u32 bmc:1;\r
109         u32 htc:1;\r
110         u32 ls:1;\r
111         u32 fs:1;\r
112         u32 linip:1;\r
113         u32 noacm:1;\r
114         u32 gf:1;\r
115         u32 own:1;\r
116 \r
117         //Offset 4\r
118         u32 macid:6;\r
119         u32 rsvd0406:2; \r
120         u32 qsel:5;\r
121         u32 rd_nav_ext:1;\r
122         u32 lsig_txop_en:1;\r
123         u32 pifs:1;\r
124         u32 rate_id:4;\r
125         u32 navusehdr:1;\r
126         u32 en_desc_id:1;\r
127         u32 sectype:2;\r
128         u32 rsvd0424:2;\r
129         u32 pkt_offset:5;       // unit: 8 bytes\r
130         u32 rsvd0431:1;\r
131 \r
132         //Offset 8\r
133         u32 rts_rc:6;\r
134         u32 data_rc:6;\r
135         u32 agg_en:1;\r
136         u32 rd_en:1;\r
137         u32 bar_rty_th:2;\r
138         u32 bk:1;\r
139         u32 morefrag:1;\r
140         u32 raw:1;\r
141         u32 ccx:1;\r
142         u32 ampdu_density:3;\r
143         u32 bt_null:1;\r
144         u32 ant_sel_a:1;\r
145         u32 ant_sel_b:1;\r
146         u32 tx_ant_cck:2;\r
147         u32 tx_antl:2;\r
148         u32 tx_ant_ht:2;\r
149 \r
150         //Offset 12\r
151         u32 nextheadpage:8;\r
152         u32 tailpage:8;\r
153         u32 seq:12;\r
154         u32 cpu_handle:1;\r
155         u32 tag1:1;\r
156         u32 trigger_int:1;\r
157         u32 hwseq_en:1;\r
158 \r
159         //Offset 16\r
160         u32 rtsrate:5;\r
161         u32 ap_dcfe:1;\r
162         u32 hwseq_sel:2;\r
163         u32 userate:1;\r
164         u32 disrtsfb:1;\r
165         u32 disdatafb:1;\r
166         u32 cts2self:1;\r
167         u32 rtsen:1;\r
168         u32 hw_rts_en:1;\r
169         u32 port_id:1;  \r
170         u32 pwr_status:3;\r
171         u32 wait_dcts:1;\r
172         u32 cts2ap_en:1;\r
173         u32 data_sc:2;\r
174         u32 data_stbc:2;\r
175         u32 data_short:1;\r
176         u32 data_bw:1;\r
177         u32 rts_short:1;\r
178         u32 rts_bw:1;\r
179         u32 rts_sc:2;\r
180         u32 vcs_stbc:2;\r
181 \r
182         //Offset 20\r
183         u32 datarate:6;\r
184         u32 sgi:1;\r
185         u32 try_rate:1;\r
186         u32 data_ratefb_lmt:5;\r
187         u32 rts_ratefb_lmt:4;\r
188         u32 rty_lmt_en:1;\r
189         u32 data_rt_lmt:6;\r
190         u32 usb_txagg_num:8;\r
191 \r
192         //Offset 24\r
193         u32 txagg_a:5;\r
194         u32 txagg_b:5;\r
195         u32 use_max_len:1;\r
196         u32 max_agg_num:5;\r
197         u32 mcsg1_max_len:4;\r
198         u32 mcsg2_max_len:4;\r
199         u32 mcsg3_max_len:4;\r
200         u32 mcs7_sgi_max_len:4;\r
201 \r
202         //Offset 28\r
203         u32 checksum:16;        // TxBuffSize(PCIe)/CheckSum(USB)\r
204         u32 sw0:8; /* offset 30 */\r
205         u32 sw1:4;\r
206         u32 mcs15_sgi_max_len:4;\r
207 }TXDESC_8188E, *PTXDESC_8188E;\r
208 \r
209 #define txdesc_set_ccx_sw_88e(txdesc, value) \\r
210         do { \\r
211                 ((struct txdesc_88e *)(txdesc))->sw1 = (((value)>>8) & 0x0f); \\r
212                 ((struct txdesc_88e *)(txdesc))->sw0 = ((value) & 0xff); \\r
213         } while (0)\r
214 \r
215 struct txrpt_ccx_88e {\r
216         /* offset 0 */\r
217         u8 tag1:1;\r
218         u8 pkt_num:3;\r
219         u8 txdma_underflow:1;\r
220         u8 int_bt:1;\r
221         u8 int_tri:1;\r
222         u8 int_ccx:1;\r
223 \r
224         /* offset 1 */\r
225         u8 mac_id:6;\r
226         u8 pkt_ok:1;\r
227         u8 bmc:1;\r
228 \r
229         /* offset 2 */\r
230         u8 retry_cnt:6;\r
231         u8 lifetime_over:1;\r
232         u8 retry_over:1;\r
233 \r
234         /* offset 3 */\r
235         u8 ccx_qtime0;\r
236         u8 ccx_qtime1;\r
237 \r
238         /* offset 5 */\r
239         u8 final_data_rate;\r
240 \r
241         /* offset 6 */\r
242         u8 sw1:4;\r
243         u8 qsel:4;\r
244 \r
245         /* offset 7 */\r
246         u8 sw0;\r
247 };\r
248 \r
249 #define txrpt_ccx_sw_88e(txrpt_ccx) ((txrpt_ccx)->sw0 + ((txrpt_ccx)->sw1<<8))\r
250 #define txrpt_ccx_qtime_88e(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))\r
251 \r
252 void rtl8188e_fill_fake_txdesc(PADAPTER padapter, u8*pDesc, u32 BufferLen,\r
253                 u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame);\r
254 #ifdef CONFIG_SDIO_HCI\r
255 s32 rtl8188es_init_xmit_priv(PADAPTER padapter);\r
256 void rtl8188es_free_xmit_priv(PADAPTER padapter);\r
257 s32 rtl8188es_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);\r
258 s32 rtl8188es_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);\r
259 s32     rtl8188es_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);\r
260 thread_return rtl8188es_xmit_thread(thread_context context);\r
261 s32 rtl8188es_xmit_buf_handler(PADAPTER padapter);\r
262 \r
263 #ifdef CONFIG_SDIO_TX_TASKLET\r
264 void rtl8188es_xmit_tasklet(void *priv);\r
265 #endif\r
266 #endif\r
267 \r
268 #ifdef CONFIG_USB_HCI\r
269 s32 rtl8188eu_init_xmit_priv(PADAPTER padapter);\r
270 void rtl8188eu_free_xmit_priv(PADAPTER padapter);\r
271 s32 rtl8188eu_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);\r
272 s32 rtl8188eu_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);\r
273 s32     rtl8188eu_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);\r
274 s32 rtl8188eu_xmit_buf_handler(PADAPTER padapter);\r
275 void rtl8188eu_xmit_tasklet(void *priv);\r
276 s32 rtl8188eu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);\r
277 #endif\r
278 \r
279 #ifdef CONFIG_PCI_HCI\r
280 s32 rtl8188ee_init_xmit_priv(PADAPTER padapter);\r
281 void rtl8188ee_free_xmit_priv(PADAPTER padapter);\r
282 struct xmit_buf *rtl8188ee_dequeue_xmitbuf(struct rtw_tx_ring *ring);\r
283 void    rtl8188ee_xmitframe_resume(_adapter *padapter);\r
284 s32 rtl8188ee_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);\r
285 s32 rtl8188ee_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);\r
286 void rtl8188ee_xmit_tasklet(void *priv);\r
287 #endif\r
288 \r
289 #define SET_TX_DESC_SEC_TYPE_8188E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 22, 2, __Value)\r
290 \r
291 #ifdef CONFIG_TX_EARLY_MODE\r
292 void UpdateEarlyModeInfo8188E(struct xmit_priv *pxmitpriv,struct xmit_buf *pxmitbuf );\r
293 #endif\r
294 \r
295 #ifdef CONFIG_XMIT_ACK\r
296 void dump_txrpt_ccx_88e(void *buf);\r
297 void handle_txrpt_ccx_88e(_adapter *adapter, u8 *buf);\r
298 #else\r
299 #define dump_txrpt_ccx_88e(buf) do {} while(0)\r
300 #define handle_txrpt_ccx_88e(adapter, buf) do {} while(0)\r
301 #endif //CONFIG_XMIT_ACK\r
302 \r
303 void _dbg_dump_tx_info(_adapter *padapter,int frame_tag,struct tx_desc *ptxdesc);\r
304 #endif //__RTL8188E_XMIT_H__\r
305 \r