xref: /linux/drivers/net/wireless/ath/wcn36xx/txrx.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
18e84c258SEugene Krasnikov /*
28e84c258SEugene Krasnikov  * Copyright (c) 2013 Eugene Krasnikov <k.eugene.e@gmail.com>
38e84c258SEugene Krasnikov  *
48e84c258SEugene Krasnikov  * Permission to use, copy, modify, and/or distribute this software for any
58e84c258SEugene Krasnikov  * purpose with or without fee is hereby granted, provided that the above
68e84c258SEugene Krasnikov  * copyright notice and this permission notice appear in all copies.
78e84c258SEugene Krasnikov  *
88e84c258SEugene Krasnikov  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
98e84c258SEugene Krasnikov  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
108e84c258SEugene Krasnikov  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
118e84c258SEugene Krasnikov  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
128e84c258SEugene Krasnikov  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
138e84c258SEugene Krasnikov  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
148e84c258SEugene Krasnikov  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
158e84c258SEugene Krasnikov  */
168e84c258SEugene Krasnikov 
178e84c258SEugene Krasnikov #ifndef _TXRX_H_
188e84c258SEugene Krasnikov #define _TXRX_H_
198e84c258SEugene Krasnikov 
208e84c258SEugene Krasnikov #include <linux/etherdevice.h>
218e84c258SEugene Krasnikov #include "wcn36xx.h"
228e84c258SEugene Krasnikov 
238e84c258SEugene Krasnikov /* TODO describe all properties */
248e84c258SEugene Krasnikov #define WCN36XX_802_11_HEADER_LEN	24
258e84c258SEugene Krasnikov #define WCN36XX_BMU_WQ_TX		25
268e84c258SEugene Krasnikov #define WCN36XX_TID			7
278e84c258SEugene Krasnikov /* broadcast wq ID */
288e84c258SEugene Krasnikov #define WCN36XX_TX_B_WQ_ID		0xA
298e84c258SEugene Krasnikov #define WCN36XX_TX_U_WQ_ID		0x9
308e84c258SEugene Krasnikov /* bd_rate */
318e84c258SEugene Krasnikov #define WCN36XX_BD_RATE_DATA 0
328e84c258SEugene Krasnikov #define WCN36XX_BD_RATE_MGMT 2
338e84c258SEugene Krasnikov #define WCN36XX_BD_RATE_CTRL 3
348e84c258SEugene Krasnikov 
35232ddcd8SBob Copeland enum wcn36xx_txbd_ssn_type {
36232ddcd8SBob Copeland 	WCN36XX_TXBD_SSN_FILL_HOST = 0,
37232ddcd8SBob Copeland 	WCN36XX_TXBD_SSN_FILL_DPU_NON_QOS = 1,
38232ddcd8SBob Copeland 	WCN36XX_TXBD_SSN_FILL_DPU_QOS = 2,
39232ddcd8SBob Copeland };
40232ddcd8SBob Copeland 
418e84c258SEugene Krasnikov struct wcn36xx_pdu {
428e84c258SEugene Krasnikov 	u32	dpu_fb:8;
438e84c258SEugene Krasnikov 	u32	adu_fb:8;
448e84c258SEugene Krasnikov 	u32	pdu_id:16;
458e84c258SEugene Krasnikov 
468e84c258SEugene Krasnikov 	/* 0x04*/
478e84c258SEugene Krasnikov 	u32	tail_pdu_idx:16;
488e84c258SEugene Krasnikov 	u32	head_pdu_idx:16;
498e84c258SEugene Krasnikov 
508e84c258SEugene Krasnikov 	/* 0x08*/
518e84c258SEugene Krasnikov 	u32	pdu_count:7;
528e84c258SEugene Krasnikov 	u32	mpdu_data_off:9;
538e84c258SEugene Krasnikov 	u32	mpdu_header_off:8;
548e84c258SEugene Krasnikov 	u32	mpdu_header_len:8;
558e84c258SEugene Krasnikov 
568e84c258SEugene Krasnikov 	/* 0x0c*/
578e84c258SEugene Krasnikov 	u32	reserved4:8;
588e84c258SEugene Krasnikov 	u32	tid:4;
59232ddcd8SBob Copeland 	u32	bd_ssn:2;
60232ddcd8SBob Copeland 	u32	reserved3:2;
618e84c258SEugene Krasnikov 	u32	mpdu_len:16;
628e84c258SEugene Krasnikov };
638e84c258SEugene Krasnikov 
648e84c258SEugene Krasnikov struct wcn36xx_rx_bd {
658e84c258SEugene Krasnikov 	u32	bdt:2;
668e84c258SEugene Krasnikov 	u32	ft:1;
678e84c258SEugene Krasnikov 	u32	dpu_ne:1;
688e84c258SEugene Krasnikov 	u32	rx_key_id:3;
698e84c258SEugene Krasnikov 	u32	ub:1;
708e84c258SEugene Krasnikov 	u32	rmf:1;
718e84c258SEugene Krasnikov 	u32	uma_bypass:1;
728e84c258SEugene Krasnikov 	u32	csr11:1;
738e84c258SEugene Krasnikov 	u32	reserved0:1;
748e84c258SEugene Krasnikov 	u32	scan_learn:1;
758e84c258SEugene Krasnikov 	u32	rx_ch:4;
768e84c258SEugene Krasnikov 	u32	rtsf:1;
778e84c258SEugene Krasnikov 	u32	bsf:1;
788e84c258SEugene Krasnikov 	u32	a2hf:1;
798e84c258SEugene Krasnikov 	u32	st_auf:1;
808e84c258SEugene Krasnikov 	u32	dpu_sign:3;
818e84c258SEugene Krasnikov 	u32	dpu_rf:8;
828e84c258SEugene Krasnikov 
838e84c258SEugene Krasnikov 	struct wcn36xx_pdu pdu;
848e84c258SEugene Krasnikov 
858e84c258SEugene Krasnikov 	/* 0x14*/
868e84c258SEugene Krasnikov 	u32	addr3:8;
878e84c258SEugene Krasnikov 	u32	addr2:8;
888e84c258SEugene Krasnikov 	u32	addr1:8;
898e84c258SEugene Krasnikov 	u32	dpu_desc_idx:8;
908e84c258SEugene Krasnikov 
918e84c258SEugene Krasnikov 	/* 0x18*/
928e84c258SEugene Krasnikov 	u32	rxp_flags:23;
938e84c258SEugene Krasnikov 	u32	rate_id:9;
948e84c258SEugene Krasnikov 
958e84c258SEugene Krasnikov 	u32	phy_stat0;
968e84c258SEugene Krasnikov 	u32	phy_stat1;
978e84c258SEugene Krasnikov 
988e84c258SEugene Krasnikov 	/* 0x24 */
998e84c258SEugene Krasnikov 	u32	rx_times;
1008e84c258SEugene Krasnikov 
1018e84c258SEugene Krasnikov 	u32	pmi_cmd[6];
1028e84c258SEugene Krasnikov 
1038e84c258SEugene Krasnikov 	/* 0x40 */
1048e84c258SEugene Krasnikov 	u32	reserved7:4;
1058e84c258SEugene Krasnikov 	u32	reorder_slot_id:6;
1068e84c258SEugene Krasnikov 	u32	reorder_fwd_id:6;
1078e84c258SEugene Krasnikov 	u32	reserved6:12;
1088e84c258SEugene Krasnikov 	u32	reorder_code:4;
1098e84c258SEugene Krasnikov 
1108e84c258SEugene Krasnikov 	/* 0x44 */
1118e84c258SEugene Krasnikov 	u32	exp_seq_num:12;
1128e84c258SEugene Krasnikov 	u32	cur_seq_num:12;
1138a27ca39SLoic Poulain 	u32	rf_band:2;
1148a27ca39SLoic Poulain 	u32	fr_type_subtype:6;
1158e84c258SEugene Krasnikov 
1168e84c258SEugene Krasnikov 	/* 0x48 */
1178e84c258SEugene Krasnikov 	u32	msdu_size:16;
1188e84c258SEugene Krasnikov 	u32	sub_fr_id:4;
1198e84c258SEugene Krasnikov 	u32	proc_order:4;
1208e84c258SEugene Krasnikov 	u32	reserved9:4;
1218e84c258SEugene Krasnikov 	u32	aef:1;
1228e84c258SEugene Krasnikov 	u32	lsf:1;
1238e84c258SEugene Krasnikov 	u32	esf:1;
1248e84c258SEugene Krasnikov 	u32	asf:1;
1258e84c258SEugene Krasnikov };
1268e84c258SEugene Krasnikov 
1278e84c258SEugene Krasnikov struct wcn36xx_tx_bd {
1288e84c258SEugene Krasnikov 	u32	bdt:2;
1298e84c258SEugene Krasnikov 	u32	ft:1;
1308e84c258SEugene Krasnikov 	u32	dpu_ne:1;
1318e84c258SEugene Krasnikov 	u32	fw_tx_comp:1;
1328e84c258SEugene Krasnikov 	u32	tx_comp:1;
1338e84c258SEugene Krasnikov 	u32	reserved1:1;
1348e84c258SEugene Krasnikov 	u32	ub:1;
1358e84c258SEugene Krasnikov 	u32	rmf:1;
1368e84c258SEugene Krasnikov 	u32	reserved0:12;
1378e84c258SEugene Krasnikov 	u32	dpu_sign:3;
1388e84c258SEugene Krasnikov 	u32	dpu_rf:8;
1398e84c258SEugene Krasnikov 
1408e84c258SEugene Krasnikov 	struct wcn36xx_pdu pdu;
1418e84c258SEugene Krasnikov 
1428e84c258SEugene Krasnikov 	/* 0x14*/
1438e84c258SEugene Krasnikov 	u32	reserved5:7;
1448e84c258SEugene Krasnikov 	u32	queue_id:5;
1458e84c258SEugene Krasnikov 	u32	bd_rate:2;
1468e84c258SEugene Krasnikov 	u32	ack_policy:2;
1478e84c258SEugene Krasnikov 	u32	sta_index:8;
1488e84c258SEugene Krasnikov 	u32	dpu_desc_idx:8;
1498e84c258SEugene Krasnikov 
1508e84c258SEugene Krasnikov 	u32	tx_bd_sign;
1518e84c258SEugene Krasnikov 	u32	reserved6;
1528e84c258SEugene Krasnikov 	u32	dxe_start_time;
1538e84c258SEugene Krasnikov 	u32	dxe_end_time;
1548e84c258SEugene Krasnikov 
1558e84c258SEugene Krasnikov 	/*u32	tcp_udp_start_off:10;
1568e84c258SEugene Krasnikov 	u32	header_cks:16;
1578e84c258SEugene Krasnikov 	u32	reserved7:6;*/
1588e84c258SEugene Krasnikov };
1598e84c258SEugene Krasnikov 
1608e84c258SEugene Krasnikov struct wcn36xx_sta;
1618e84c258SEugene Krasnikov struct wcn36xx;
1628e84c258SEugene Krasnikov 
1638e84c258SEugene Krasnikov int  wcn36xx_rx_skb(struct wcn36xx *wcn, struct sk_buff *skb);
1648e84c258SEugene Krasnikov int wcn36xx_start_tx(struct wcn36xx *wcn,
1658e84c258SEugene Krasnikov 		     struct wcn36xx_sta *sta_priv,
1668e84c258SEugene Krasnikov 		     struct sk_buff *skb);
167*1216c4d3SEdmond Gagnon void wcn36xx_process_tx_rate(struct ani_global_class_a_stats_info *stats, struct rate_info *info);
1688e84c258SEugene Krasnikov 
1698e84c258SEugene Krasnikov #endif	/* _TXRX_H_ */
170