wifi: renew patch drivers/net/wireless
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rtl8723au / include / rtl8723a_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 __RTL8723A_XMIT_H__\r
21 #define __RTL8723A_XMIT_H__\r
22 \r
23 #include <rtl8192c_xmit.h>\r
24 \r
25 //\r
26 //defined for TX DESC Operation\r
27 //\r
28 \r
29 #define MAX_TID (15)\r
30 \r
31 //OFFSET 0\r
32 #define OFFSET_SZ       0\r
33 #define OFFSET_SHT      16\r
34 #define BMC             BIT(24)\r
35 #define LSG             BIT(26)\r
36 #define FSG             BIT(27)\r
37 #define OWN             BIT(31)\r
38 \r
39 \r
40 //OFFSET 4\r
41 #define PKT_OFFSET_SZ   0\r
42 #define BK              BIT(6)\r
43 #define QSEL_SHT        8\r
44 #define Rate_ID_SHT     16\r
45 #define NAVUSEHDR       BIT(20)\r
46 #define PKT_OFFSET_SHT  26\r
47 #define HWPC            BIT(31)\r
48 \r
49 //OFFSET 8\r
50 #define AGG_EN          BIT(29)\r
51 \r
52 //OFFSET 12\r
53 #define SEQ_SHT         16\r
54 \r
55 //OFFSET 16\r
56 #define QoS             BIT(6)\r
57 #define HW_SEQ_EN       BIT(7)\r
58 #define USERATE         BIT(8)\r
59 #define DISDATAFB       BIT(10)\r
60 #define DATA_SHORT      BIT(24)\r
61 #define DATA_BW         BIT(25)\r
62 \r
63 //OFFSET 20\r
64 #define SGI             BIT(6)\r
65 \r
66 typedef struct txdesc_8723a\r
67 {\r
68         u32 pktlen:16;\r
69         u32 offset:8;\r
70         u32 bmc:1;\r
71         u32 htc:1;\r
72         u32 ls:1;\r
73         u32 fs:1;\r
74         u32 linip:1;\r
75         u32 noacm:1;\r
76         u32 gf:1;\r
77         u32 own:1;\r
78 \r
79         u32 macid:5;\r
80         u32 agg_en:1;\r
81         u32 bk:1;\r
82         u32 rd_en:1;\r
83         u32 qsel:5;\r
84         u32 rd_nav_ext:1;\r
85         u32 lsig_txop_en:1;\r
86         u32 pifs:1;\r
87         u32 rate_id:4;\r
88         u32 navusehdr:1;\r
89         u32 en_desc_id:1;\r
90         u32 sectype:2;\r
91         u32 rsvd0424:2;\r
92         u32 pkt_offset:5;       // unit: 8 bytes\r
93         u32 rsvd0431:1;\r
94 \r
95         u32 rts_rc:6;\r
96         u32 data_rc:6;\r
97         u32 rsvd0812:2;\r
98         u32 bar_rty_th:2;\r
99         u32 rsvd0816:1;\r
100         u32 morefrag:1;\r
101         u32 raw:1;\r
102         u32 ccx:1;\r
103         u32 ampdu_density:3;\r
104         u32 bt_null:1;\r
105         u32 ant_sel_a:1;\r
106         u32 ant_sel_b:1;\r
107         u32 tx_ant_cck:2;\r
108         u32 tx_antl:2;\r
109         u32 tx_ant_ht:2;\r
110 \r
111         u32 nextheadpage:8;\r
112         u32 tailpage:8;\r
113         u32 seq:12;\r
114         u32 cpu_handle:1;\r
115         u32 tag1:1;\r
116         u32 trigger_int:1;\r
117         u32 hwseq_en:1;\r
118 \r
119         u32 rtsrate:5;\r
120         u32 ap_dcfe:1;\r
121         u32 hwseq_sel:2;\r
122         u32 userate:1;\r
123         u32 disrtsfb:1;\r
124         u32 disdatafb:1;\r
125         u32 cts2self:1;\r
126         u32 rtsen:1;\r
127         u32 hw_rts_en:1;\r
128         u32 port_id:1;\r
129         u32 rsvd1615:3;\r
130         u32 wait_dcts:1;\r
131         u32 cts2ap_en:1;\r
132         u32 data_sc:2;\r
133         u32 data_stbc:2;\r
134         u32 data_short:1;\r
135         u32 data_bw:1;\r
136         u32 rts_short:1;\r
137         u32 rts_bw:1;\r
138         u32 rts_sc:2;\r
139         u32 vcs_stbc:2;\r
140 \r
141         u32 datarate:6;\r
142         u32 sgi:1;\r
143         u32 try_rate:1;\r
144         u32 data_ratefb_lmt:5;\r
145         u32 rts_ratefb_lmt:4;\r
146         u32 rty_lmt_en:1;\r
147         u32 data_rt_lmt:6;\r
148         u32 usb_txagg_num:8;\r
149 \r
150         u32 txagg_a:5;\r
151         u32 txagg_b:5;\r
152         u32 use_max_len:1;\r
153         u32 max_agg_num:5;\r
154         u32 mcsg1_max_len:4;\r
155         u32 mcsg2_max_len:4;\r
156         u32 mcsg3_max_len:4;\r
157         u32 mcs7_sgi_max_len:4;\r
158 \r
159         u32 checksum:16;        // TxBuffSize(PCIe)/CheckSum(USB)\r
160         u32 mcsg4_max_len:4;\r
161         u32 mcsg5_max_len:4;\r
162         u32 mcsg6_max_len:4;\r
163         u32 mcs15_sgi_max_len:4;\r
164 }TXDESC, *PTXDESC;\r
165 \r
166 #define txdesc_set_ccx_sw_8723a(txdesc, value) \\r
167         do { \\r
168                 ((struct txdesc_8723a *)(txdesc))->mcsg4_max_len = (((value)>>8) & 0x0f); \\r
169                 ((struct txdesc_8723a *)(txdesc))->mcs15_sgi_max_len= (((value)>>4) & 0x0f); \\r
170                 ((struct txdesc_8723a *)(txdesc))->mcsg6_max_len = ((value) & 0x0f); \\r
171         } while (0)\r
172 \r
173 struct txrpt_ccx_8723a {\r
174         /* offset 0 */\r
175         u8 tag1:1;\r
176         u8 rsvd:4;\r
177         u8 int_bt:1;\r
178         u8 int_tri:1;\r
179         u8 int_ccx:1;\r
180 \r
181         /* offset 1 */\r
182         u8 mac_id:5;\r
183         u8 pkt_drop:1;\r
184         u8 pkt_ok:1;\r
185         u8 bmc:1;\r
186 \r
187         /* offset 2 */\r
188         u8 retry_cnt:6;\r
189         u8 lifetime_over:1;\r
190         u8 retry_over:1;\r
191 \r
192         /* offset 3 */\r
193         u8 ccx_qtime0;\r
194         u8 ccx_qtime1;\r
195 \r
196         /* offset 5 */\r
197         u8 final_data_rate;\r
198 \r
199         /* offset 6 */\r
200         u8 sw1:4;\r
201         u8 qsel:4;\r
202 \r
203         /* offset 7 */\r
204         u8 sw0;\r
205 };\r
206 \r
207 #define txrpt_ccx_sw_8723a(txrpt_ccx) ((txrpt_ccx)->sw0 + ((txrpt_ccx)->sw1<<8))\r
208 #define txrpt_ccx_qtime_8723a(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))\r
209 \r
210 #ifdef CONFIG_XMIT_ACK\r
211 void dump_txrpt_ccx_8723a(void *buf);\r
212 void handle_txrpt_ccx_8723a(_adapter *adapter, void *buf);\r
213 #else\r
214 #define dump_txrpt_ccx_8723a(buf) do {} while(0)\r
215 #define handle_txrpt_ccx_8723a(adapter, buf) do {} while(0)\r
216 #endif //CONFIG_XMIT_ACK\r
217 \r
218 void rtl8723a_update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem);\r
219 void rtl8723a_fill_fake_txdesc(PADAPTER padapter, u8 *pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull);\r
220 \r
221 #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)\r
222 s32 rtl8723as_init_xmit_priv(PADAPTER padapter);\r
223 void rtl8723as_free_xmit_priv(PADAPTER padapter);\r
224 s32 rtl8723as_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);\r
225 s32 rtl8723as_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);\r
226 s32     rtl8723as_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);\r
227 s32 rtl8723as_xmit_buf_handler(PADAPTER padapter);\r
228 thread_return rtl8723as_xmit_thread(thread_context context);\r
229 #define hal_xmit_handler rtl8723as_xmit_buf_handler\r
230 #endif\r
231 \r
232 #ifdef CONFIG_USB_HCI\r
233 s32     rtl8723au_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);\r
234 s32 rtl8723au_xmit_buf_handler(PADAPTER padapter);\r
235 #define hal_xmit_handler rtl8723au_xmit_buf_handler\r
236 #endif\r
237 #endif\r
238 \r