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