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