xref: /wlan-driver/qca-wifi-host-cmn/umac/cfr/dispatcher/inc/wlan_cfr_public_structs.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /**
19*5113495bSYour Name  * DOC: declare the data structure to hold CFR specific configurations
20*5113495bSYour Name  */
21*5113495bSYour Name #ifndef _WLAN_CFR_PUBLIC_STRUCTS_H_
22*5113495bSYour Name #define _WLAN_CFR_PUBLIC_STRUCTS_H_
23*5113495bSYour Name 
24*5113495bSYour Name #define MAC_ADDR_LEN 6
25*5113495bSYour Name 
26*5113495bSYour Name #define MAX_CAPTURE_COUNT_VAL 0xFFFF
27*5113495bSYour Name 
28*5113495bSYour Name /**
29*5113495bSYour Name  * enum cfr_cwm_width - Capture bandwidth
30*5113495bSYour Name  * @CFR_CWM_WIDTH20: 20 MHz
31*5113495bSYour Name  * @CFR_CWM_WIDTH40: 40 MHz
32*5113495bSYour Name  * @CFR_CWM_WIDTH80: 80 MHz
33*5113495bSYour Name  * @CFR_CWM_WIDTH160: 160 MHz
34*5113495bSYour Name  * @CFR_CWM_WIDTH80_80: 80+80 MHz
35*5113495bSYour Name  * @CFR_CWM_WIDTH320: 320 MHz
36*5113495bSYour Name  * @CFR_CWM_WIDTH_MAX:
37*5113495bSYour Name  * @CFR_CWM_WIDTHINVALID:
38*5113495bSYour Name  */
39*5113495bSYour Name enum cfr_cwm_width {
40*5113495bSYour Name 	CFR_CWM_WIDTH20,
41*5113495bSYour Name 	CFR_CWM_WIDTH40,
42*5113495bSYour Name 	CFR_CWM_WIDTH80,
43*5113495bSYour Name 	CFR_CWM_WIDTH160,
44*5113495bSYour Name 	CFR_CWM_WIDTH80_80,
45*5113495bSYour Name 	CFR_CWM_WIDTH320,
46*5113495bSYour Name 
47*5113495bSYour Name 	CFR_CWM_WIDTH_MAX,
48*5113495bSYour Name 	CFR_CWM_WIDTHINVALID = 0xff
49*5113495bSYour Name };
50*5113495bSYour Name 
51*5113495bSYour Name /**
52*5113495bSYour Name  * enum cfr_capture_method - Tx based CFR capture method
53*5113495bSYour Name  * @CFR_CAPTURE_METHOD_QOS_NULL : Send QOS Null frame and capture CFR on ACK
54*5113495bSYour Name  * @CFR_CAPTURE_METHOD_QOS_NULL_WITH_PHASE: Send QoS Null frame with phase
55*5113495bSYour Name  * @CFR_CAPTURE_METHOD_PROBE_RESPONSE : Capture is enabled on probe response
56*5113495bSYour Name  * If node is not found, trigger unassociated capture.
57*5113495bSYour Name  * @CFR_CAPTURE_METHOD_LAST_VALID:
58*5113495bSYour Name  * @CFR_CAPTURE_METHOD_AUTO:
59*5113495bSYour Name  * @CFR_CAPTURE_METHOD_MAX:
60*5113495bSYour Name  */
61*5113495bSYour Name enum cfr_capture_method {
62*5113495bSYour Name 	CFR_CAPTURE_METHOD_QOS_NULL = 0,
63*5113495bSYour Name 	CFR_CAPTURE_METHOD_QOS_NULL_WITH_PHASE = 1,
64*5113495bSYour Name 	CFR_CAPTURE_METHOD_PROBE_RESPONSE = 2,
65*5113495bSYour Name 	CFR_CAPTURE_METHOD_LAST_VALID,
66*5113495bSYour Name 	CFR_CAPTURE_METHOD_AUTO = 0xff,
67*5113495bSYour Name 	CFR_CAPTURE_METHOD_MAX,
68*5113495bSYour Name };
69*5113495bSYour Name 
70*5113495bSYour Name /**
71*5113495bSYour Name  * struct cfr_wlanconfig_param - CFR params used to store user provided inputs
72*5113495bSYour Name  * @bandwidth : CFR capture bandwidth
73*5113495bSYour Name  * @periodicity : CFR capture periodicity in milli seconds
74*5113495bSYour Name  * @capture_method : CFR capture method
75*5113495bSYour Name  * @mac : peer mac address
76*5113495bSYour Name  * @ta : Tx address
77*5113495bSYour Name  * @ra : Rx Address
78*5113495bSYour Name  * @ta_mask: Tx address mask
79*5113495bSYour Name  * @ra_mask: Rx address mask
80*5113495bSYour Name  * *** Controls for different capture modes in RCC ***
81*5113495bSYour Name  * @en_directed_ftm: Enable capture for directed RTT FTM Packet
82*5113495bSYour Name  * @en_directed_ndpa_ndp: Enable NDPA filter followed by directed NDP capture
83*5113495bSYour Name  * @en_ta_ra_filter: Enable MAC TA/RA/type filtering channel capture
84*5113495bSYour Name  * @en_all_ftm_ack: Enable all FTM and ACK capture
85*5113495bSYour Name  * @en_ndpa_ndp_all: Enable NDPA filter followed by NDP capture,
86*5113495bSYour Name  *                   capture includes both directed and non-directed packets.
87*5113495bSYour Name  * @en_all_pkt: Enable capture mode to filter in all packets
88*5113495bSYour Name  * @dis_directed_ftm: Drop directed RTT FTM packets
89*5113495bSYour Name  * @dis_directed_ndpa_ndp: Drop directed NDPA and NDP packets
90*5113495bSYour Name  * @dis_ta_ra_filter: Disable MAC TA/RA/type filtering channel capture
91*5113495bSYour Name  * @dis_all_ftm_ack: Drop all FTM and ACK capture
92*5113495bSYour Name  * @dis_ndpa_ndp_all: Drop all NDPA and NDP packets
93*5113495bSYour Name  * @dis_all_pkt: Do not filter in any packet
94*5113495bSYour Name  * @en_ta_ra_filter_in_as_fp: Filter in frames as FP/MO in m_ta_ra_filter mode
95*5113495bSYour Name  *		0: as MO
96*5113495bSYour Name  *		1: as FP
97*5113495bSYour Name  * @rsvd0: reserved bits
98*5113495bSYour Name  *
99*5113495bSYour Name  * **** Fixed parameters ****
100*5113495bSYour Name  * @cap_dur: Capture duration
101*5113495bSYour Name  * @rsvd1: reserved bits
102*5113495bSYour Name  * @cap_intvl: Capture interval
103*5113495bSYour Name  * FW may limit the interval and duration during which HW may attempt
104*5113495bSYour Name  * to capture by programming the user provided values.
105*5113495bSYour Name  * These values(cap_dur, cap_intvl) range from 1 us to roughly 16.8 in 1 us
106*5113495bSYour Name  * units. Max value is 0xFFFFFF, i.e., 16.777215 s
107*5113495bSYour Name  * @rsvd2: reserved bits
108*5113495bSYour Name  * @bw: Bandwidth: 20, 40, 80, 160, 240, 320MHz
109*5113495bSYour Name  * @nss: 8 bits are allotted for NSS mask. Specifies which numbers of
110*5113495bSYour Name  * spatial streams (MIMO factor) are permitted
111*5113495bSYour Name  * @grp_id:  Group id could of any value between 0 and 15
112*5113495bSYour Name  * @rsvd3: reserved bits
113*5113495bSYour Name  * @expected_mgmt_subtype:
114*5113495bSYour Name  * @expected_ctrl_subtype:
115*5113495bSYour Name  * @expected_data_subtype:
116*5113495bSYour Name  * corresponds to mgmt/ ctrl/ data, all are bitmasks, in which each bit
117*5113495bSYour Name  * represents the corresponding type/ subtype value as per IEEE80211.
118*5113495bSYour Name  * @rsvd5: reserved bits
119*5113495bSYour Name  *
120*5113495bSYour Name  * @en_cfg:
121*5113495bSYour Name  * @reset_cfg: This bitmap of 16 bits, indicates 16 groups.
122*5113495bSYour Name  * Valid entry should be in between 0 to 0xFFFF.
123*5113495bSYour Name  * Turning on a bit in en_cfg will enable MAC TA_RA filter
124*5113495bSYour Name  * for corresponding group; whereas turning on a bit in reset_cfg
125*5113495bSYour Name  * will reset all 9 params in the corresponding group to default values.
126*5113495bSYour Name  *
127*5113495bSYour Name  * @ul_mu_user_mask_lower:
128*5113495bSYour Name  * @ul_mu_user_mask_upper:
129*5113495bSYour Name  * Since Cypress supports max bandwidth of 80 MHz, maximum number
130*5113495bSYour Name  * of users in a UL MU-MIMO transmission would be 37.
131*5113495bSYour Name  * mask_lower_32: Bits from 31 to 0 indicate user indices for 32 users.
132*5113495bSYour Name  * mask_upper_32: Bits from 0 to 4 indicate user indices from 33 to 37.
133*5113495bSYour Name  *
134*5113495bSYour Name  * @freeze_tlv_delay_cnt_en: set to enable @freeze_tlv_delay_cnt_thr
135*5113495bSYour Name  * @freeze_tlv_delay_cnt_thr: the threshold for MAC to drop the
136*5113495bSYour Name  * freeze TLV. only be applicable if @freeze_tlv_delay_cnt_en is enabled.
137*5113495bSYour Name  * @rsvd6: reserved bits
138*5113495bSYour Name  *
139*5113495bSYour Name  * @cap_count: After capture_count+1 number of captures, MAC stops RCC and
140*5113495bSYour Name  * waits for capture_interval duration before enabling again
141*5113495bSYour Name  *
142*5113495bSYour Name  * @cap_intval_mode_sel: 0 indicates capture_duration mode, 1 indicates the
143*5113495bSYour Name  * capture_count mode.
144*5113495bSYour Name  * @rsvd7: reserved bits
145*5113495bSYour Name  */
146*5113495bSYour Name struct cfr_wlanconfig_param {
147*5113495bSYour Name 	enum cfr_cwm_width bandwidth;
148*5113495bSYour Name 	uint32_t periodicity;
149*5113495bSYour Name 	enum cfr_capture_method capture_method;
150*5113495bSYour Name 	uint8_t mac[MAC_ADDR_LEN];
151*5113495bSYour Name #ifdef WLAN_ENH_CFR_ENABLE
152*5113495bSYour Name 	uint8_t ta[MAC_ADDR_LEN];
153*5113495bSYour Name 	uint8_t ra[MAC_ADDR_LEN];
154*5113495bSYour Name 	uint8_t ta_mask[MAC_ADDR_LEN];
155*5113495bSYour Name 	uint8_t ra_mask[MAC_ADDR_LEN];
156*5113495bSYour Name 	uint16_t en_directed_ftm             :1,
157*5113495bSYour Name 		 en_directed_ndpa_ndp        :1,
158*5113495bSYour Name 		 en_ta_ra_filter             :1,
159*5113495bSYour Name 		 en_all_ftm_ack              :1,
160*5113495bSYour Name 		 en_ndpa_ndp_all             :1,
161*5113495bSYour Name 		 en_all_pkt                  :1,
162*5113495bSYour Name 		 dis_directed_ftm            :1,
163*5113495bSYour Name 		 dis_directed_ndpa_ndp       :1,
164*5113495bSYour Name 		 dis_ta_ra_filter            :1,
165*5113495bSYour Name 		 dis_all_ftm_ack             :1,
166*5113495bSYour Name 		 dis_ndpa_ndp_all            :1,
167*5113495bSYour Name 		 dis_all_pkt                 :1,
168*5113495bSYour Name 		 en_ta_ra_filter_in_as_fp    :1,
169*5113495bSYour Name 		 rsvd0                       :3;
170*5113495bSYour Name 
171*5113495bSYour Name 	uint32_t cap_dur                     :24,
172*5113495bSYour Name 		 rsvd1                       :8;
173*5113495bSYour Name 	uint32_t cap_intvl                   :24,
174*5113495bSYour Name 		 rsvd2                       :8;
175*5113495bSYour Name 	uint32_t bw                          :6,
176*5113495bSYour Name 		 nss                         :8,
177*5113495bSYour Name 		 grp_id                      :4,
178*5113495bSYour Name 		 rsvd3                       :14;
179*5113495bSYour Name 
180*5113495bSYour Name 	uint32_t expected_mgmt_subtype       :16,
181*5113495bSYour Name 		 expected_ctrl_subtype       :16;
182*5113495bSYour Name 
183*5113495bSYour Name 	uint32_t expected_data_subtype       :16,
184*5113495bSYour Name 		 rsvd5                       :16;
185*5113495bSYour Name 
186*5113495bSYour Name 	uint32_t en_cfg                      :16,
187*5113495bSYour Name 		 reset_cfg                   :16;
188*5113495bSYour Name 
189*5113495bSYour Name 	uint32_t ul_mu_user_mask_lower;
190*5113495bSYour Name 	uint32_t ul_mu_user_mask_upper;
191*5113495bSYour Name 
192*5113495bSYour Name 	uint32_t freeze_tlv_delay_cnt_en :1,
193*5113495bSYour Name 		 freeze_tlv_delay_cnt_thr :8,
194*5113495bSYour Name 		 rsvd6 :23;
195*5113495bSYour Name 
196*5113495bSYour Name 	uint32_t cap_count                   :16,
197*5113495bSYour Name 		 cap_intval_mode_sel         :1,
198*5113495bSYour Name 		 rsvd7                       :15;
199*5113495bSYour Name #endif
200*5113495bSYour Name };
201*5113495bSYour Name 
202*5113495bSYour Name #endif /* _WLAN_CFR_PUBLIC_STRUCTS_H_ */
203*5113495bSYour Name 
204