xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8189fs/include/rtl8821a_xmit.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2013 - 2017 Realtek Corporation.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun  * under the terms of version 2 of the GNU General Public License as
7*4882a593Smuzhiyun  * published by the Free Software Foundation.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful, but WITHOUT
10*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12*4882a593Smuzhiyun  * more details.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  *****************************************************************************/
15*4882a593Smuzhiyun #ifndef __RTL8821A_XMIT_H__
16*4882a593Smuzhiyun #define __RTL8821A_XMIT_H__
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #include <drv_types.h>
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun typedef struct txdescriptor_8821a {
21*4882a593Smuzhiyun 	/* Offset 0 */
22*4882a593Smuzhiyun 	u32 pktlen:16;
23*4882a593Smuzhiyun 	u32 offset:8;
24*4882a593Smuzhiyun 	u32 bmc:1;
25*4882a593Smuzhiyun 	u32 htc:1;
26*4882a593Smuzhiyun 	u32 rsvd0026:1;
27*4882a593Smuzhiyun 	u32 rsvd0027:1;
28*4882a593Smuzhiyun 	u32 linip:1;
29*4882a593Smuzhiyun 	u32 noacm:1;
30*4882a593Smuzhiyun 	u32 gf:1;
31*4882a593Smuzhiyun 	u32 rsvd0031:1;
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun 	/* Offset 4 */
34*4882a593Smuzhiyun 	u32 macid:7;
35*4882a593Smuzhiyun 	u32 rsvd0407:1;
36*4882a593Smuzhiyun 	u32 qsel:5;
37*4882a593Smuzhiyun 	u32 rdg_nav_ext:1;
38*4882a593Smuzhiyun 	u32 lsig_txop_en:1;
39*4882a593Smuzhiyun 	u32 pifs:1;
40*4882a593Smuzhiyun 	u32 rate_id:5;
41*4882a593Smuzhiyun 	u32 en_desc_id:1;
42*4882a593Smuzhiyun 	u32 sectype:2;
43*4882a593Smuzhiyun 	u32 pkt_offset:5; /* unit: 8 bytes */
44*4882a593Smuzhiyun 	u32 moredata:1;
45*4882a593Smuzhiyun 	u32 txop_ps_cap:1;
46*4882a593Smuzhiyun 	u32 txop_ps_mode:1;
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun 	/* Offset 8 */
49*4882a593Smuzhiyun 	u32 p_aid:9;
50*4882a593Smuzhiyun 	u32 rsvd0809:1;
51*4882a593Smuzhiyun 	u32 cca_rts:2;
52*4882a593Smuzhiyun 	u32 agg_en:1;
53*4882a593Smuzhiyun 	u32 rdg_en:1;
54*4882a593Smuzhiyun 	u32 null_0:1;
55*4882a593Smuzhiyun 	u32 null_1:1;
56*4882a593Smuzhiyun 	u32 bk:1;
57*4882a593Smuzhiyun 	u32 morefrag:1;
58*4882a593Smuzhiyun 	u32 raw:1;
59*4882a593Smuzhiyun 	u32 spe_rpt:1;
60*4882a593Smuzhiyun 	u32 ampdu_density:3;
61*4882a593Smuzhiyun 	u32 bt_null:1;
62*4882a593Smuzhiyun 	u32 g_id:6;
63*4882a593Smuzhiyun 	u32 rsvd0830:2;
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun 	/* Offset 12 */
66*4882a593Smuzhiyun 	u32 wheader_len:4;
67*4882a593Smuzhiyun 	u32 chk_en:1;
68*4882a593Smuzhiyun 	u32 early_rate:1;
69*4882a593Smuzhiyun 	u32 hw_ssn_sel:2;
70*4882a593Smuzhiyun 	u32 userate:1;
71*4882a593Smuzhiyun 	u32 disrtsfb:1;
72*4882a593Smuzhiyun 	u32 disdatafb:1;
73*4882a593Smuzhiyun 	u32 cts2self:1;
74*4882a593Smuzhiyun 	u32 rtsen:1;
75*4882a593Smuzhiyun 	u32 hw_rts_en:1;
76*4882a593Smuzhiyun 	u32 port_id:1;
77*4882a593Smuzhiyun 	u32 navusehdr:1;
78*4882a593Smuzhiyun 	u32 use_max_len:1;
79*4882a593Smuzhiyun 	u32 max_agg_num:5;
80*4882a593Smuzhiyun 	u32 ndpa:2;
81*4882a593Smuzhiyun 	u32 ampdu_max_time:8;
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	/* Offset 16 */
84*4882a593Smuzhiyun 	u32 datarate:7;
85*4882a593Smuzhiyun 	u32 try_rate:1;
86*4882a593Smuzhiyun 	u32 data_ratefb_lmt:5;
87*4882a593Smuzhiyun 	u32 rts_ratefb_lmt:4;
88*4882a593Smuzhiyun 	u32 rty_lmt_en:1;
89*4882a593Smuzhiyun 	u32 data_rt_lmt:6;
90*4882a593Smuzhiyun 	u32 rtsrate:5;
91*4882a593Smuzhiyun 	u32 pcts_en:1;
92*4882a593Smuzhiyun 	u32 pcts_mask_idx:2;
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun 	/* Offset 20 */
95*4882a593Smuzhiyun 	u32 data_sc:4;
96*4882a593Smuzhiyun 	u32 data_short:1;
97*4882a593Smuzhiyun 	u32 data_bw:2;
98*4882a593Smuzhiyun 	u32 data_ldpc:1;
99*4882a593Smuzhiyun 	u32 data_stbc:2;
100*4882a593Smuzhiyun 	u32 vcs_stbc:2;
101*4882a593Smuzhiyun 	u32 rts_short:1;
102*4882a593Smuzhiyun 	u32 rts_sc:4;
103*4882a593Smuzhiyun 	u32 rsvd2016:7;
104*4882a593Smuzhiyun 	u32 tx_ant:4;
105*4882a593Smuzhiyun 	u32 txpwr_offset:3;
106*4882a593Smuzhiyun 	u32 rsvd2031:1;
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun 	/* Offset 24 */
109*4882a593Smuzhiyun 	u32 sw_define:12;
110*4882a593Smuzhiyun 	u32 mbssid:4;
111*4882a593Smuzhiyun 	u32 antsel_A:3;
112*4882a593Smuzhiyun 	u32 antsel_B:3;
113*4882a593Smuzhiyun 	u32 antsel_C:3;
114*4882a593Smuzhiyun 	u32 antsel_D:3;
115*4882a593Smuzhiyun 	u32 rsvd2428:4;
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun 	/* Offset 28 */
118*4882a593Smuzhiyun 	u32 checksum:16;
119*4882a593Smuzhiyun 	u32 rsvd2816:8;
120*4882a593Smuzhiyun 	u32 usb_txagg_num:8;
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun 	/* Offset 32 */
123*4882a593Smuzhiyun 	u32 rts_rc:6;
124*4882a593Smuzhiyun 	u32 bar_rty_th:2;
125*4882a593Smuzhiyun 	u32 data_rc:6;
126*4882a593Smuzhiyun 	u32 rsvd3214:1;
127*4882a593Smuzhiyun 	u32 en_hwseq:1;
128*4882a593Smuzhiyun 	u32 nextneadpage:8;
129*4882a593Smuzhiyun 	u32 tailpage:8;
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun 	/* Offset 36 */
132*4882a593Smuzhiyun 	u32 padding_len:11;
133*4882a593Smuzhiyun 	u32 txbf_path:1;
134*4882a593Smuzhiyun 	u32 seq:12;
135*4882a593Smuzhiyun 	u32 final_data_rate:8;
136*4882a593Smuzhiyun } TXDESC_8821A, *PTXDESC_8821A;
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun #ifdef CONFIG_SDIO_HCI
139*4882a593Smuzhiyun s32 InitXmitPriv8821AS(PADAPTER padapter);
140*4882a593Smuzhiyun void FreeXmitPriv8821AS(PADAPTER padapter);
141*4882a593Smuzhiyun s32 XmitBufHandler8821AS(PADAPTER padapter);
142*4882a593Smuzhiyun s32 MgntXmit8821AS(PADAPTER padapter, struct xmit_frame *pmgntframe);
143*4882a593Smuzhiyun s32	HalXmitNoLock8821AS(PADAPTER padapter, struct xmit_frame *pxmitframe);
144*4882a593Smuzhiyun s32 HalXmit8821AS(PADAPTER padapter, struct xmit_frame *pxmitframe);
145*4882a593Smuzhiyun #ifndef CONFIG_SDIO_TX_TASKLET
146*4882a593Smuzhiyun thread_return XmitThread8821AS(thread_context context);
147*4882a593Smuzhiyun #endif /* !CONFIG_SDIO_TX_TASKLET */
148*4882a593Smuzhiyun #endif /* CONFIG_SDIO_HCI */
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun #if 0
151*4882a593Smuzhiyun #ifdef CONFIG_USB_HCI
152*4882a593Smuzhiyun s32 rtl8821au_init_xmit_priv(PADAPTER padapter);
153*4882a593Smuzhiyun void rtl8821au_free_xmit_priv(PADAPTER padapter);
154*4882a593Smuzhiyun s32 rtl8821au_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
155*4882a593Smuzhiyun s32 rtl8821au_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
156*4882a593Smuzhiyun s32 rtl8821au_hal_xmitframe_enqueue(PADAPTER padapter, struct xmit_frame *pxmitframe);
157*4882a593Smuzhiyun s32 rtl8821au_xmit_buf_handler(PADAPTER padapter);
158*4882a593Smuzhiyun void rtl8821au_xmit_tasklet(void *priv);
159*4882a593Smuzhiyun s32 rtl8821au_xmitframe_complete(PADAPTER padapter, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
160*4882a593Smuzhiyun #endif /* CONFIG_USB_HCI */
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI
163*4882a593Smuzhiyun s32 rtl8821e_init_xmit_priv(PADAPTER padapter);
164*4882a593Smuzhiyun void rtl8821e_free_xmit_priv(PADAPTER padapter);
165*4882a593Smuzhiyun struct xmit_buf *rtl8821e_dequeue_xmitbuf(struct rtw_tx_ring *ring);
166*4882a593Smuzhiyun void rtl8821e_xmitframe_resume(PADAPTER padapter);
167*4882a593Smuzhiyun s32 rtl8821e_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
168*4882a593Smuzhiyun s32 rtl8821e_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
169*4882a593Smuzhiyun void rtl8821e_xmit_tasklet(void *priv);
170*4882a593Smuzhiyun #endif /* CONFIG_PCI_HCI */
171*4882a593Smuzhiyun #endif
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun #endif /* __RTL8821_XMIT_H__ */
174