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