xref: /linux/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h (revision a23e1966932464e1c5226cb9ac4ce1d5fc10ba22)
1b44febedSLarry Finger /* SPDX-License-Identifier: GPL-2.0 */
2b44febedSLarry Finger /* Copyright(c) 2009-2012  Realtek Corporation.*/
318d30067SGeorge 
418d30067SGeorge #ifndef __RTL92CU_TRX_H__
518d30067SGeorge #define __RTL92CU_TRX_H__
618d30067SGeorge 
718d30067SGeorge #define RTL92C_NUM_RX_URBS			8
818d30067SGeorge #define RTL92C_NUM_TX_URBS			32
918d30067SGeorge 
1018d30067SGeorge #define RTL92C_SIZE_MAX_RX_BUFFER		15360   /* 8192 */
1118d30067SGeorge #define RX_DRV_INFO_SIZE_UNIT			8
1218d30067SGeorge 
1318d30067SGeorge enum usb_rx_agg_mode {
1418d30067SGeorge 	USB_RX_AGG_DISABLE,
1518d30067SGeorge 	USB_RX_AGG_DMA,
1618d30067SGeorge 	USB_RX_AGG_USB,
1718d30067SGeorge 	USB_RX_AGG_DMA_USB
1818d30067SGeorge };
1918d30067SGeorge 
2018d30067SGeorge #define TX_SELE_HQ				BIT(0)	/* High Queue */
2118d30067SGeorge #define TX_SELE_LQ				BIT(1)	/* Low Queue */
2218d30067SGeorge #define TX_SELE_NQ				BIT(2)	/* Normal Queue */
2318d30067SGeorge 
2418d30067SGeorge #define RTL_USB_TX_AGG_NUM_DESC			5
2518d30067SGeorge 
2618d30067SGeorge #define RTL_USB_RX_AGG_PAGE_NUM			4
2718d30067SGeorge #define RTL_USB_RX_AGG_PAGE_TIMEOUT		3
2818d30067SGeorge 
2918d30067SGeorge #define RTL_USB_RX_AGG_BLOCK_NUM		5
3018d30067SGeorge #define RTL_USB_RX_AGG_BLOCK_TIMEOUT		3
3118d30067SGeorge 
3218d30067SGeorge /*======================== rx status =========================================*/
3318d30067SGeorge 
3418d30067SGeorge struct rx_drv_info_92c {
3518d30067SGeorge 	/*
3618d30067SGeorge 	 * Driver info contain PHY status and other variabel size info
3718d30067SGeorge 	 * PHY Status content as below
3818d30067SGeorge 	 */
3918d30067SGeorge 
4018d30067SGeorge 	/* DWORD 0 */
4118d30067SGeorge 	u8 gain_trsw[4];
4218d30067SGeorge 
4318d30067SGeorge 	/* DWORD 1 */
4418d30067SGeorge 	u8 pwdb_all;
4518d30067SGeorge 	u8 cfosho[4];
4618d30067SGeorge 
4718d30067SGeorge 	/* DWORD 2 */
4818d30067SGeorge 	u8 cfotail[4];
4918d30067SGeorge 
5018d30067SGeorge 	/* DWORD 3 */
5118d30067SGeorge 	s8 rxevm[2];
5218d30067SGeorge 	s8 rxsnr[4];
5318d30067SGeorge 
5418d30067SGeorge 	/* DWORD 4 */
5518d30067SGeorge 	u8 pdsnr[2];
5618d30067SGeorge 
5718d30067SGeorge 	/* DWORD 5 */
5818d30067SGeorge 	u8 csi_current[2];
5918d30067SGeorge 	u8 csi_target[2];
6018d30067SGeorge 
6118d30067SGeorge 	/* DWORD 6 */
6218d30067SGeorge 	u8 sigevm;
6318d30067SGeorge 	u8 max_ex_pwr;
6418d30067SGeorge 	u8 ex_intf_flag:1;
6518d30067SGeorge 	u8 sgi_en:1;
6618d30067SGeorge 	u8 rxsc:2;
6718d30067SGeorge 	u8 reserve:4;
6818d30067SGeorge } __packed;
6918d30067SGeorge 
7018d30067SGeorge /* macros to read various fields in RX descriptor */
7118d30067SGeorge 
7218d30067SGeorge /* DWORD 0 */
get_rx_desc_pkt_len(__le32 * __rxdesc)73afd708f7SLarry Finger static inline u32 get_rx_desc_pkt_len(__le32 *__rxdesc)
743925ae06SLarry Finger {
75afd708f7SLarry Finger 	return le32_get_bits(*__rxdesc, GENMASK(13, 0));
763925ae06SLarry Finger }
773925ae06SLarry Finger 
get_rx_desc_crc32(__le32 * __rxdesc)78afd708f7SLarry Finger static inline u32 get_rx_desc_crc32(__le32 *__rxdesc)
793925ae06SLarry Finger {
80afd708f7SLarry Finger 	return le32_get_bits(*__rxdesc, BIT(14));
813925ae06SLarry Finger }
823925ae06SLarry Finger 
get_rx_desc_icv(__le32 * __rxdesc)83afd708f7SLarry Finger static inline u32 get_rx_desc_icv(__le32 *__rxdesc)
843925ae06SLarry Finger {
85afd708f7SLarry Finger 	return le32_get_bits(*__rxdesc, BIT(15));
863925ae06SLarry Finger }
873925ae06SLarry Finger 
get_rx_desc_drvinfo_size(__le32 * __rxdesc)88afd708f7SLarry Finger static inline u32 get_rx_desc_drvinfo_size(__le32 *__rxdesc)
893925ae06SLarry Finger {
90afd708f7SLarry Finger 	return le32_get_bits(*__rxdesc, GENMASK(19, 16));
913925ae06SLarry Finger }
923925ae06SLarry Finger 
get_rx_desc_shift(__le32 * __rxdesc)93afd708f7SLarry Finger static inline u32 get_rx_desc_shift(__le32 *__rxdesc)
943925ae06SLarry Finger {
95afd708f7SLarry Finger 	return le32_get_bits(*__rxdesc, GENMASK(25, 24));
963925ae06SLarry Finger }
973925ae06SLarry Finger 
get_rx_desc_phy_status(__le32 * __rxdesc)98afd708f7SLarry Finger static inline u32 get_rx_desc_phy_status(__le32 *__rxdesc)
993925ae06SLarry Finger {
100afd708f7SLarry Finger 	return le32_get_bits(*__rxdesc, BIT(26));
1013925ae06SLarry Finger }
1023925ae06SLarry Finger 
get_rx_desc_swdec(__le32 * __rxdesc)103afd708f7SLarry Finger static inline u32 get_rx_desc_swdec(__le32 *__rxdesc)
1043925ae06SLarry Finger {
105afd708f7SLarry Finger 	return le32_get_bits(*__rxdesc, BIT(27));
1063925ae06SLarry Finger }
1073925ae06SLarry Finger 
10818d30067SGeorge 
10918d30067SGeorge /* DWORD 1 */
get_rx_desc_paggr(__le32 * __rxdesc)110afd708f7SLarry Finger static inline u32 get_rx_desc_paggr(__le32 *__rxdesc)
1113925ae06SLarry Finger {
112afd708f7SLarry Finger 	return le32_get_bits(*(__rxdesc + 1), BIT(14));
1133925ae06SLarry Finger }
1143925ae06SLarry Finger 
get_rx_desc_faggr(__le32 * __rxdesc)115afd708f7SLarry Finger static inline u32 get_rx_desc_faggr(__le32 *__rxdesc)
1163925ae06SLarry Finger {
117afd708f7SLarry Finger 	return le32_get_bits(*(__rxdesc + 1), BIT(15));
1183925ae06SLarry Finger }
1193925ae06SLarry Finger 
12018d30067SGeorge 
12118d30067SGeorge /* DWORD 3 */
get_rx_desc_rx_mcs(__le32 * __rxdesc)122afd708f7SLarry Finger static inline u32 get_rx_desc_rx_mcs(__le32 *__rxdesc)
1233925ae06SLarry Finger {
124afd708f7SLarry Finger 	return le32_get_bits(*(__rxdesc + 3), GENMASK(5, 0));
1253925ae06SLarry Finger }
1263925ae06SLarry Finger 
get_rx_desc_rx_ht(__le32 * __rxdesc)127afd708f7SLarry Finger static inline u32 get_rx_desc_rx_ht(__le32 *__rxdesc)
1283925ae06SLarry Finger {
129afd708f7SLarry Finger 	return le32_get_bits(*(__rxdesc + 3), BIT(6));
1303925ae06SLarry Finger }
1313925ae06SLarry Finger 
get_rx_desc_splcp(__le32 * __rxdesc)132afd708f7SLarry Finger static inline u32 get_rx_desc_splcp(__le32 *__rxdesc)
1333925ae06SLarry Finger {
134afd708f7SLarry Finger 	return le32_get_bits(*(__rxdesc + 3), BIT(8));
1353925ae06SLarry Finger }
1363925ae06SLarry Finger 
get_rx_desc_bw(__le32 * __rxdesc)137afd708f7SLarry Finger static inline u32 get_rx_desc_bw(__le32 *__rxdesc)
1383925ae06SLarry Finger {
139afd708f7SLarry Finger 	return le32_get_bits(*(__rxdesc + 3), BIT(9));
1403925ae06SLarry Finger }
1413925ae06SLarry Finger 
14218d30067SGeorge 
14318d30067SGeorge /* DWORD 5 */
get_rx_desc_tsfl(__le32 * __rxdesc)144afd708f7SLarry Finger static inline u32 get_rx_desc_tsfl(__le32 *__rxdesc)
1453925ae06SLarry Finger {
146afd708f7SLarry Finger 	return le32_to_cpu(*((__rxdesc + 5)));
1473925ae06SLarry Finger }
1483925ae06SLarry Finger 
14918d30067SGeorge 
15018d30067SGeorge /*======================= tx desc ============================================*/
15118d30067SGeorge 
15218d30067SGeorge /* macros to set various fields in TX descriptor */
15318d30067SGeorge 
15418d30067SGeorge /* Dword 0 */
set_tx_desc_pkt_size(__le32 * __txdesc,u32 __value)155afd708f7SLarry Finger static inline void set_tx_desc_pkt_size(__le32 *__txdesc, u32 __value)
1563925ae06SLarry Finger {
157afd708f7SLarry Finger 	le32p_replace_bits(__txdesc, __value, GENMASK(15, 0));
1583925ae06SLarry Finger }
1593925ae06SLarry Finger 
set_tx_desc_offset(__le32 * __txdesc,u32 __value)160afd708f7SLarry Finger static inline void set_tx_desc_offset(__le32 *__txdesc, u32 __value)
1613925ae06SLarry Finger {
162afd708f7SLarry Finger 	le32p_replace_bits(__txdesc, __value, GENMASK(23, 16));
1633925ae06SLarry Finger }
1643925ae06SLarry Finger 
set_tx_desc_bmc(__le32 * __txdesc,u32 __value)165afd708f7SLarry Finger static inline void set_tx_desc_bmc(__le32 *__txdesc, u32 __value)
1663925ae06SLarry Finger {
167afd708f7SLarry Finger 	le32p_replace_bits(__txdesc, __value, BIT(24));
1683925ae06SLarry Finger }
1693925ae06SLarry Finger 
set_tx_desc_htc(__le32 * __txdesc,u32 __value)170afd708f7SLarry Finger static inline void set_tx_desc_htc(__le32 *__txdesc, u32 __value)
1713925ae06SLarry Finger {
172afd708f7SLarry Finger 	le32p_replace_bits(__txdesc, __value, BIT(25));
1733925ae06SLarry Finger }
1743925ae06SLarry Finger 
set_tx_desc_last_seg(__le32 * __txdesc,u32 __value)175afd708f7SLarry Finger static inline void set_tx_desc_last_seg(__le32 *__txdesc, u32 __value)
1763925ae06SLarry Finger {
177afd708f7SLarry Finger 	le32p_replace_bits(__txdesc, __value, BIT(26));
1783925ae06SLarry Finger }
1793925ae06SLarry Finger 
set_tx_desc_first_seg(__le32 * __txdesc,u32 __value)180afd708f7SLarry Finger static inline void set_tx_desc_first_seg(__le32 *__txdesc, u32 __value)
1813925ae06SLarry Finger {
182afd708f7SLarry Finger 	le32p_replace_bits(__txdesc, __value, BIT(27));
1833925ae06SLarry Finger }
1843925ae06SLarry Finger 
set_tx_desc_linip(__le32 * __txdesc,u32 __value)185afd708f7SLarry Finger static inline void set_tx_desc_linip(__le32 *__txdesc, u32 __value)
1863925ae06SLarry Finger {
187afd708f7SLarry Finger 	le32p_replace_bits(__txdesc, __value, BIT(28));
1883925ae06SLarry Finger }
1893925ae06SLarry Finger 
set_tx_desc_own(__le32 * __txdesc,u32 __value)190afd708f7SLarry Finger static inline void set_tx_desc_own(__le32 *__txdesc, u32 __value)
1913925ae06SLarry Finger {
192afd708f7SLarry Finger 	le32p_replace_bits(__txdesc, __value, BIT(31));
1933925ae06SLarry Finger }
1943925ae06SLarry Finger 
19518d30067SGeorge 
19618d30067SGeorge /* Dword 1 */
set_tx_desc_macid(__le32 * __txdesc,u32 __value)197afd708f7SLarry Finger static inline void set_tx_desc_macid(__le32 *__txdesc, u32 __value)
1983925ae06SLarry Finger {
199afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 1), __value, GENMASK(4, 0));
2003925ae06SLarry Finger }
2013925ae06SLarry Finger 
set_tx_desc_agg_enable(__le32 * __txdesc,u32 __value)202afd708f7SLarry Finger static inline void set_tx_desc_agg_enable(__le32 *__txdesc, u32 __value)
2033925ae06SLarry Finger {
204afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 1), __value, BIT(5));
2053925ae06SLarry Finger }
2063925ae06SLarry Finger 
set_tx_desc_agg_break(__le32 * __txdesc,u32 __value)207afd708f7SLarry Finger static inline void set_tx_desc_agg_break(__le32 *__txdesc, u32 __value)
2083925ae06SLarry Finger {
209afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 1), __value, BIT(6));
2103925ae06SLarry Finger }
2113925ae06SLarry Finger 
set_tx_desc_rdg_enable(__le32 * __txdesc,u32 __value)212afd708f7SLarry Finger static inline void set_tx_desc_rdg_enable(__le32 *__txdesc, u32 __value)
2133925ae06SLarry Finger {
214afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 1), __value, BIT(7));
2153925ae06SLarry Finger }
2163925ae06SLarry Finger 
set_tx_desc_queue_sel(__le32 * __txdesc,u32 __value)217afd708f7SLarry Finger static inline void set_tx_desc_queue_sel(__le32 *__txdesc, u32 __value)
2183925ae06SLarry Finger {
219afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 1), __value, GENMASK(12, 8));
2203925ae06SLarry Finger }
2213925ae06SLarry Finger 
set_tx_desc_rate_id(__le32 * __txdesc,u32 __value)222afd708f7SLarry Finger static inline void set_tx_desc_rate_id(__le32 *__txdesc, u32 __value)
2233925ae06SLarry Finger {
224afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 1), __value, GENMASK(19, 16));
2253925ae06SLarry Finger }
2263925ae06SLarry Finger 
set_tx_desc_nav_use_hdr(__le32 * __txdesc,u32 __value)227afd708f7SLarry Finger static inline void set_tx_desc_nav_use_hdr(__le32 *__txdesc, u32 __value)
2283925ae06SLarry Finger {
229afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 1), __value, BIT(20));
2303925ae06SLarry Finger }
2313925ae06SLarry Finger 
set_tx_desc_sec_type(__le32 * __txdesc,u32 __value)232afd708f7SLarry Finger static inline void set_tx_desc_sec_type(__le32 *__txdesc, u32 __value)
2333925ae06SLarry Finger {
234afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 1), __value, GENMASK(23, 22));
2353925ae06SLarry Finger }
2363925ae06SLarry Finger 
set_tx_desc_pkt_offset(__le32 * __txdesc,u32 __value)237afd708f7SLarry Finger static inline void set_tx_desc_pkt_offset(__le32 *__txdesc, u32 __value)
2383925ae06SLarry Finger {
239afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 1), __value, GENMASK(30, 26));
2403925ae06SLarry Finger }
2413925ae06SLarry Finger 
24218d30067SGeorge 
24318d30067SGeorge /* Dword 2 */
set_tx_desc_more_frag(__le32 * __txdesc,u32 __value)244afd708f7SLarry Finger static inline void set_tx_desc_more_frag(__le32 *__txdesc, u32 __value)
2453925ae06SLarry Finger {
246afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 2), __value, BIT(17));
2473925ae06SLarry Finger }
2483925ae06SLarry Finger 
set_tx_desc_ampdu_density(__le32 * __txdesc,u32 __value)249afd708f7SLarry Finger static inline void set_tx_desc_ampdu_density(__le32 *__txdesc, u32 __value)
2503925ae06SLarry Finger {
251afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 2), __value, GENMASK(22, 20));
2523925ae06SLarry Finger }
2533925ae06SLarry Finger 
25418d30067SGeorge 
25518d30067SGeorge /* Dword 3 */
set_tx_desc_seq(__le32 * __txdesc,u32 __value)256afd708f7SLarry Finger static inline void set_tx_desc_seq(__le32 *__txdesc, u32 __value)
2573925ae06SLarry Finger {
258afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 3), __value, GENMASK(27, 16));
2593925ae06SLarry Finger }
2603925ae06SLarry Finger 
set_tx_desc_pkt_id(__le32 * __txdesc,u32 __value)261afd708f7SLarry Finger static inline void set_tx_desc_pkt_id(__le32 *__txdesc, u32 __value)
2623925ae06SLarry Finger {
263afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 3), __value, GENMASK(31, 28));
2643925ae06SLarry Finger }
2653925ae06SLarry Finger 
26618d30067SGeorge 
26718d30067SGeorge /* Dword 4 */
set_tx_desc_rts_rate(__le32 * __txdesc,u32 __value)268afd708f7SLarry Finger static inline void set_tx_desc_rts_rate(__le32 *__txdesc, u32 __value)
2693925ae06SLarry Finger {
270afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, GENMASK(4, 0));
2713925ae06SLarry Finger }
2723925ae06SLarry Finger 
set_tx_desc_qos(__le32 * __txdesc,u32 __value)273afd708f7SLarry Finger static inline void set_tx_desc_qos(__le32 *__txdesc, u32 __value)
2743925ae06SLarry Finger {
275afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(6));
2763925ae06SLarry Finger }
2773925ae06SLarry Finger 
set_tx_desc_hwseq_en(__le32 * __txdesc,u32 __value)278afd708f7SLarry Finger static inline void set_tx_desc_hwseq_en(__le32 *__txdesc, u32 __value)
2793925ae06SLarry Finger {
280afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(7));
2813925ae06SLarry Finger }
2823925ae06SLarry Finger 
set_tx_desc_use_rate(__le32 * __txdesc,u32 __value)283afd708f7SLarry Finger static inline void set_tx_desc_use_rate(__le32 *__txdesc, u32 __value)
2843925ae06SLarry Finger {
285afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(8));
2863925ae06SLarry Finger }
2873925ae06SLarry Finger 
set_tx_desc_disable_fb(__le32 * __txdesc,u32 __value)288afd708f7SLarry Finger static inline void set_tx_desc_disable_fb(__le32 *__txdesc, u32 __value)
2893925ae06SLarry Finger {
290afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(10));
2913925ae06SLarry Finger }
2923925ae06SLarry Finger 
set_tx_desc_cts2self(__le32 * __txdesc,u32 __value)293afd708f7SLarry Finger static inline void set_tx_desc_cts2self(__le32 *__txdesc, u32 __value)
2943925ae06SLarry Finger {
295afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(11));
2963925ae06SLarry Finger }
2973925ae06SLarry Finger 
set_tx_desc_rts_enable(__le32 * __txdesc,u32 __value)298afd708f7SLarry Finger static inline void set_tx_desc_rts_enable(__le32 *__txdesc, u32 __value)
2993925ae06SLarry Finger {
300afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(12));
3013925ae06SLarry Finger }
3023925ae06SLarry Finger 
set_tx_desc_hw_rts_enable(__le32 * __txdesc,u32 __value)303afd708f7SLarry Finger static inline void set_tx_desc_hw_rts_enable(__le32 *__txdesc, u32 __value)
3043925ae06SLarry Finger {
305afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(13));
3063925ae06SLarry Finger }
3073925ae06SLarry Finger 
set_tx_desc_data_sc(__le32 * __txdesc,u32 __value)308afd708f7SLarry Finger static inline void set_tx_desc_data_sc(__le32 *__txdesc, u32 __value)
3093925ae06SLarry Finger {
310afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, GENMASK(21, 20));
3113925ae06SLarry Finger }
3123925ae06SLarry Finger 
set_tx_desc_data_bw(__le32 * __txdesc,u32 __value)313afd708f7SLarry Finger static inline void set_tx_desc_data_bw(__le32 *__txdesc, u32 __value)
3143925ae06SLarry Finger {
315afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(25));
3163925ae06SLarry Finger }
3173925ae06SLarry Finger 
set_tx_desc_rts_short(__le32 * __txdesc,u32 __value)318afd708f7SLarry Finger static inline void set_tx_desc_rts_short(__le32 *__txdesc, u32 __value)
3193925ae06SLarry Finger {
320afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(26));
3213925ae06SLarry Finger }
3223925ae06SLarry Finger 
set_tx_desc_rts_bw(__le32 * __txdesc,u32 __value)323afd708f7SLarry Finger static inline void set_tx_desc_rts_bw(__le32 *__txdesc, u32 __value)
3243925ae06SLarry Finger {
325afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, BIT(27));
3263925ae06SLarry Finger }
3273925ae06SLarry Finger 
set_tx_desc_rts_sc(__le32 * __txdesc,u32 __value)328afd708f7SLarry Finger static inline void set_tx_desc_rts_sc(__le32 *__txdesc, u32 __value)
3293925ae06SLarry Finger {
330afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, GENMASK(29, 28));
3313925ae06SLarry Finger }
3323925ae06SLarry Finger 
set_tx_desc_rts_stbc(__le32 * __txdesc,u32 __value)333afd708f7SLarry Finger static inline void set_tx_desc_rts_stbc(__le32 *__txdesc, u32 __value)
3343925ae06SLarry Finger {
335afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 4), __value, GENMASK(31, 30));
3363925ae06SLarry Finger }
3373925ae06SLarry Finger 
33818d30067SGeorge 
33918d30067SGeorge /* Dword 5 */
set_tx_desc_tx_rate(__le32 * __pdesc,u32 __val)340afd708f7SLarry Finger static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
3413925ae06SLarry Finger {
342afd708f7SLarry Finger 	le32p_replace_bits((__pdesc + 5), __val, GENMASK(5, 0));
3433925ae06SLarry Finger }
3443925ae06SLarry Finger 
set_tx_desc_data_shortgi(__le32 * __pdesc,u32 __val)345afd708f7SLarry Finger static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val)
3463925ae06SLarry Finger {
347afd708f7SLarry Finger 	le32p_replace_bits((__pdesc + 5), __val, BIT(6));
3483925ae06SLarry Finger }
3493925ae06SLarry Finger 
set_tx_desc_data_rate_fb_limit(__le32 * __txdesc,u32 __value)350afd708f7SLarry Finger static inline void set_tx_desc_data_rate_fb_limit(__le32 *__txdesc, u32 __value)
3513925ae06SLarry Finger {
352afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 5), __value, GENMASK(12, 8));
3533925ae06SLarry Finger }
3543925ae06SLarry Finger 
set_tx_desc_rts_rate_fb_limit(__le32 * __txdesc,u32 __value)355afd708f7SLarry Finger static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__txdesc, u32 __value)
3563925ae06SLarry Finger {
357afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 5), __value, GENMASK(16, 13));
3583925ae06SLarry Finger }
3593925ae06SLarry Finger 
36018d30067SGeorge 
36118d30067SGeorge /* Dword 6 */
set_tx_desc_max_agg_num(__le32 * __txdesc,u32 __value)362afd708f7SLarry Finger static inline void set_tx_desc_max_agg_num(__le32 *__txdesc, u32 __value)
3633925ae06SLarry Finger {
364afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 6), __value, GENMASK(15, 11));
3653925ae06SLarry Finger }
3663925ae06SLarry Finger 
36718d30067SGeorge 
36818d30067SGeorge /* Dword 7 */
set_tx_desc_tx_desc_checksum(__le32 * __txdesc,u32 __value)369afd708f7SLarry Finger static inline void set_tx_desc_tx_desc_checksum(__le32 *__txdesc, u32 __value)
3703925ae06SLarry Finger {
371afd708f7SLarry Finger 	le32p_replace_bits((__txdesc + 7), __value, GENMASK(15, 0));
3723925ae06SLarry Finger }
3733925ae06SLarry Finger 
37418d30067SGeorge 
37518d30067SGeorge int  rtl8192cu_endpoint_mapping(struct ieee80211_hw *hw);
37618d30067SGeorge u16 rtl8192cu_mq_to_hwq(__le16 fc, u16 mac80211_queue_index);
37718d30067SGeorge bool rtl92cu_rx_query_desc(struct ieee80211_hw *hw,
37818d30067SGeorge 			   struct rtl_stats *stats,
37918d30067SGeorge 			   struct ieee80211_rx_status *rx_status,
38018d30067SGeorge 			   u8 *p_desc, struct sk_buff *skb);
38118d30067SGeorge void  rtl8192cu_rx_hdl(struct ieee80211_hw *hw, struct sk_buff * skb);
38218d30067SGeorge void rtl8192c_tx_cleanup(struct ieee80211_hw *hw, struct sk_buff  *skb);
38318d30067SGeorge int rtl8192c_tx_post_hdl(struct ieee80211_hw *hw, struct urb *urb,
38418d30067SGeorge 			 struct sk_buff *skb);
38518d30067SGeorge struct sk_buff *rtl8192c_tx_aggregate_hdl(struct ieee80211_hw *,
38618d30067SGeorge 					   struct sk_buff_head *);
38718d30067SGeorge void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw,
38818d30067SGeorge 			  struct ieee80211_hdr *hdr, u8 *pdesc_tx,
389f3355dd9SLarry Finger 			  u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
39036323f81SThomas Huehn 			  struct ieee80211_sta *sta,
39136323f81SThomas Huehn 			  struct sk_buff *skb,
39276c34f91SChaoming_Li 			  u8 queue_index,
39376c34f91SChaoming_Li 			  struct rtl_tcb_desc *tcb_desc);
39446190882SDmitry Antipov void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
39546190882SDmitry Antipov 			     struct sk_buff *skb);
39618d30067SGeorge 
39718d30067SGeorge #endif
398