xref: /wlan-driver/qcacld-3.0/components/p2p/dispatcher/inc/wlan_p2p_public_struct.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-2019, 2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name /**
21*5113495bSYour Name  * DOC: Contains p2p public data structure definitions
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name #ifndef _WLAN_P2P_PUBLIC_STRUCT_H_
25*5113495bSYour Name #define _WLAN_P2P_PUBLIC_STRUCT_H_
26*5113495bSYour Name 
27*5113495bSYour Name #include <qdf_types.h>
28*5113495bSYour Name 
29*5113495bSYour Name #define P2P_MAX_NOA_DESC 4
30*5113495bSYour Name 
31*5113495bSYour Name #define HEADER_LEN_P2P_IE  6
32*5113495bSYour Name #define OUI_SIZE_P2P       4
33*5113495bSYour Name 
34*5113495bSYour Name #define P2P_1X1_WAR_OUI   "\x00\x50\xf2\x04"
35*5113495bSYour Name #define P2P_1X1_OUI_LEN    4
36*5113495bSYour Name 
37*5113495bSYour Name #define MAX_CONFIG_METHODS_LEN   2
38*5113495bSYour Name #define DEVICE_CATEGORY_MAX_LEN  1
39*5113495bSYour Name 
40*5113495bSYour Name /**
41*5113495bSYour Name  * struct p2p_ps_params - P2P powersave related params
42*5113495bSYour Name  * @opp_ps: opportunistic power save
43*5113495bSYour Name  * @ctwindow: CT window
44*5113495bSYour Name  * @count: count
45*5113495bSYour Name  * @duration: duration
46*5113495bSYour Name  * @interval: interval
47*5113495bSYour Name  * @single_noa_duration: single shot noa duration
48*5113495bSYour Name  * @ps_selection: power save selection
49*5113495bSYour Name  * @session_id: session id
50*5113495bSYour Name  * @start: start time
51*5113495bSYour Name  */
52*5113495bSYour Name struct p2p_ps_params {
53*5113495bSYour Name 	uint8_t opp_ps;
54*5113495bSYour Name 	uint32_t ctwindow;
55*5113495bSYour Name 	uint8_t count;
56*5113495bSYour Name 	uint32_t duration;
57*5113495bSYour Name 	uint32_t interval;
58*5113495bSYour Name 	uint32_t single_noa_duration;
59*5113495bSYour Name 	uint8_t ps_selection;
60*5113495bSYour Name 	uint8_t session_id;
61*5113495bSYour Name 	uint32_t start;
62*5113495bSYour Name };
63*5113495bSYour Name 
64*5113495bSYour Name /**
65*5113495bSYour Name  * struct p2p_roc_req - P2P roc request
66*5113495bSYour Name  * @vdev_id:     Vdev id on which this request has come
67*5113495bSYour Name  * @chan_freq:   Chan frequency for which this RoC has been requested
68*5113495bSYour Name  * @phy_mode:    PHY mode
69*5113495bSYour Name  * @duration:    Duration for the RoC
70*5113495bSYour Name  */
71*5113495bSYour Name struct p2p_roc_req {
72*5113495bSYour Name 	uint32_t vdev_id;
73*5113495bSYour Name 	qdf_freq_t chan_freq;
74*5113495bSYour Name 	uint32_t phy_mode;
75*5113495bSYour Name 	uint32_t duration;
76*5113495bSYour Name };
77*5113495bSYour Name 
78*5113495bSYour Name /**
79*5113495bSYour Name  * enum p2p_roc_event - P2P RoC event
80*5113495bSYour Name  * @ROC_EVENT_READY_ON_CHAN:  RoC has started now
81*5113495bSYour Name  * @ROC_EVENT_COMPLETED:      RoC has been completed
82*5113495bSYour Name  * @ROC_EVENT_INAVLID:        Invalid event
83*5113495bSYour Name  */
84*5113495bSYour Name enum p2p_roc_event {
85*5113495bSYour Name 	ROC_EVENT_READY_ON_CHAN = 0,
86*5113495bSYour Name 	ROC_EVENT_COMPLETED,
87*5113495bSYour Name 	ROC_EVENT_INAVLID,
88*5113495bSYour Name };
89*5113495bSYour Name 
90*5113495bSYour Name /**
91*5113495bSYour Name  * struct p2p_event - p2p event
92*5113495bSYour Name  * @vdev_id:     Vdev id
93*5113495bSYour Name  * @roc_event:   RoC event
94*5113495bSYour Name  * @cookie:      Cookie which is given to supplicant for this roc req
95*5113495bSYour Name  * @chan_freq:   Chan frequency for which this RoC has been requested
96*5113495bSYour Name  * @duration:    Duration for the RoC
97*5113495bSYour Name   */
98*5113495bSYour Name struct p2p_event {
99*5113495bSYour Name 	uint32_t vdev_id;
100*5113495bSYour Name 	enum p2p_roc_event roc_event;
101*5113495bSYour Name 	uint64_t cookie;
102*5113495bSYour Name 	qdf_freq_t chan_freq;
103*5113495bSYour Name 	uint32_t duration;
104*5113495bSYour Name };
105*5113495bSYour Name 
106*5113495bSYour Name /**
107*5113495bSYour Name  * struct p2p_rx_mgmt_frame - rx mgmt frame structure
108*5113495bSYour Name  * @frame_len:   Frame length
109*5113495bSYour Name  * @rx_freq:     RX Frequency
110*5113495bSYour Name  * @vdev_id:     Vdev id
111*5113495bSYour Name  * @frm_type:    Frame type
112*5113495bSYour Name  * @rx_rssi:     RX rssi
113*5113495bSYour Name  * @buf:         Buffer address
114*5113495bSYour Name  */
115*5113495bSYour Name struct p2p_rx_mgmt_frame {
116*5113495bSYour Name 	uint32_t frame_len;
117*5113495bSYour Name 	uint32_t rx_freq;
118*5113495bSYour Name 	uint32_t vdev_id;
119*5113495bSYour Name 	uint32_t frm_type;
120*5113495bSYour Name 	uint32_t rx_rssi;
121*5113495bSYour Name 	QDF_FLEX_ARRAY(uint8_t, buf);
122*5113495bSYour Name };
123*5113495bSYour Name 
124*5113495bSYour Name /**
125*5113495bSYour Name  * struct p2p_tx_cnf - tx confirm structure
126*5113495bSYour Name  * @vdev_id:        Vdev id
127*5113495bSYour Name  * @action_cookie:  TX cookie for this action frame
128*5113495bSYour Name  * @buf_len:        Frame length
129*5113495bSYour Name  * @status:         TX status
130*5113495bSYour Name  * @buf:            Buffer address
131*5113495bSYour Name  */
132*5113495bSYour Name struct p2p_tx_cnf {
133*5113495bSYour Name 	uint32_t vdev_id;
134*5113495bSYour Name 	uint64_t action_cookie;
135*5113495bSYour Name 	uint32_t buf_len;
136*5113495bSYour Name 	uint32_t status;
137*5113495bSYour Name 	uint8_t *buf;
138*5113495bSYour Name };
139*5113495bSYour Name 
140*5113495bSYour Name /**
141*5113495bSYour Name  * struct p2p_mgmt_tx - p2p mgmt tx structure
142*5113495bSYour Name  * @vdev_id:             Vdev id
143*5113495bSYour Name  * @chan_freq:           Chan frequency for which this RoC has been requested
144*5113495bSYour Name  * @wait:                Duration for the RoC
145*5113495bSYour Name  * @len:                 Length of tx buffer
146*5113495bSYour Name  * @no_cck:              Required cck or not
147*5113495bSYour Name  * @dont_wait_for_ack:   Wait for ack or not
148*5113495bSYour Name  * @off_chan:            Off channel tx or not
149*5113495bSYour Name  * @buf:                 TX buffer
150*5113495bSYour Name  */
151*5113495bSYour Name struct p2p_mgmt_tx {
152*5113495bSYour Name 	uint32_t vdev_id;
153*5113495bSYour Name 	qdf_freq_t chan_freq;
154*5113495bSYour Name 	uint32_t wait;
155*5113495bSYour Name 	uint32_t len;
156*5113495bSYour Name 	uint32_t no_cck;
157*5113495bSYour Name 	uint32_t dont_wait_for_ack;
158*5113495bSYour Name 	uint32_t off_chan;
159*5113495bSYour Name 	const uint8_t *buf;
160*5113495bSYour Name };
161*5113495bSYour Name 
162*5113495bSYour Name /**
163*5113495bSYour Name  * struct p2p_set_mac_filter_evt
164*5113495bSYour Name  * @vdev_id: Vdev id
165*5113495bSYour Name  * @status: target reported result of set mac addr filter
166*5113495bSYour Name  */
167*5113495bSYour Name struct p2p_set_mac_filter_evt {
168*5113495bSYour Name 	uint32_t vdev_id;
169*5113495bSYour Name 	uint32_t status;
170*5113495bSYour Name };
171*5113495bSYour Name 
172*5113495bSYour Name /**
173*5113495bSYour Name  * struct p2p_ps_config
174*5113495bSYour Name  * @vdev_id:               Vdev id
175*5113495bSYour Name  * @opp_ps:                Opportunistic power save
176*5113495bSYour Name  * @ct_window:             CT window
177*5113495bSYour Name  * @count:                 Count
178*5113495bSYour Name  * @duration:              Duration
179*5113495bSYour Name  * @interval:              Interval
180*5113495bSYour Name  * @single_noa_duration:   Single shot noa duration
181*5113495bSYour Name  * @ps_selection:          power save selection
182*5113495bSYour Name  * @start:                 Start time
183*5113495bSYour Name  */
184*5113495bSYour Name struct p2p_ps_config {
185*5113495bSYour Name 	uint32_t vdev_id;
186*5113495bSYour Name 	uint32_t opp_ps;
187*5113495bSYour Name 	uint32_t ct_window;
188*5113495bSYour Name 	uint32_t count;
189*5113495bSYour Name 	uint32_t duration;
190*5113495bSYour Name 	uint32_t interval;
191*5113495bSYour Name 	uint32_t single_noa_duration;
192*5113495bSYour Name 	uint32_t ps_selection;
193*5113495bSYour Name 	uint32_t start;
194*5113495bSYour Name };
195*5113495bSYour Name 
196*5113495bSYour Name /**
197*5113495bSYour Name  * struct p2p_lo_start - p2p listen offload start
198*5113495bSYour Name  * @vdev_id:            Vdev id
199*5113495bSYour Name  * @ctl_flags:          Control flag
200*5113495bSYour Name  * @freq:               P2P listen frequency
201*5113495bSYour Name  * @period:             Listen offload period
202*5113495bSYour Name  * @interval:           Listen offload interval
203*5113495bSYour Name  * @count:              Number listen offload intervals
204*5113495bSYour Name  * @dev_types_len:      Device types length
205*5113495bSYour Name  * @probe_resp_len:     Probe response template length
206*5113495bSYour Name  * @device_types:       Device types
207*5113495bSYour Name  * @probe_resp_tmplt:   Probe response template
208*5113495bSYour Name  */
209*5113495bSYour Name struct p2p_lo_start {
210*5113495bSYour Name 	uint32_t vdev_id;
211*5113495bSYour Name 	uint32_t ctl_flags;
212*5113495bSYour Name 	uint32_t freq;
213*5113495bSYour Name 	uint32_t period;
214*5113495bSYour Name 	uint32_t interval;
215*5113495bSYour Name 	uint32_t count;
216*5113495bSYour Name 	uint32_t dev_types_len;
217*5113495bSYour Name 	uint32_t probe_resp_len;
218*5113495bSYour Name 	uint8_t  *device_types;
219*5113495bSYour Name 	uint8_t  *probe_resp_tmplt;
220*5113495bSYour Name };
221*5113495bSYour Name 
222*5113495bSYour Name /**
223*5113495bSYour Name  * struct p2p_lo_event
224*5113495bSYour Name  * @vdev_id:        vdev id
225*5113495bSYour Name  * @reason_code:    reason code
226*5113495bSYour Name  */
227*5113495bSYour Name struct p2p_lo_event {
228*5113495bSYour Name 	uint32_t vdev_id;
229*5113495bSYour Name 	uint32_t reason_code;
230*5113495bSYour Name };
231*5113495bSYour Name 
232*5113495bSYour Name /**
233*5113495bSYour Name  * struct noa_descriptor - noa descriptor
234*5113495bSYour Name  * @type_count:     255: continuous schedule, 0: reserved
235*5113495bSYour Name  * @duration:       Absent period duration in micro seconds
236*5113495bSYour Name  * @interval:       Absent period interval in micro seconds
237*5113495bSYour Name  * @start_time:     32 bit tsf time when in starts
238*5113495bSYour Name  */
239*5113495bSYour Name struct noa_descriptor {
240*5113495bSYour Name 	uint32_t type_count;
241*5113495bSYour Name 	uint32_t duration;
242*5113495bSYour Name 	uint32_t interval;
243*5113495bSYour Name 	uint32_t start_time;
244*5113495bSYour Name };
245*5113495bSYour Name 
246*5113495bSYour Name /**
247*5113495bSYour Name  * struct p2p_noa_info - p2p noa information
248*5113495bSYour Name  * @index:             identifies instance of NOA su element
249*5113495bSYour Name  * @opps_ps:           opps ps state of the AP
250*5113495bSYour Name  * @ct_window:         ct window in TUs
251*5113495bSYour Name  * @vdev_id:           vdev id
252*5113495bSYour Name  * @num_desc:          number of NOA descriptors
253*5113495bSYour Name  * @noa_desc:          noa descriptors
254*5113495bSYour Name  */
255*5113495bSYour Name struct p2p_noa_info {
256*5113495bSYour Name 	uint32_t index;
257*5113495bSYour Name 	uint32_t opps_ps;
258*5113495bSYour Name 	uint32_t ct_window;
259*5113495bSYour Name 	uint32_t vdev_id;
260*5113495bSYour Name 	uint32_t num_desc;
261*5113495bSYour Name 	struct noa_descriptor noa_desc[P2P_MAX_NOA_DESC];
262*5113495bSYour Name };
263*5113495bSYour Name 
264*5113495bSYour Name /**
265*5113495bSYour Name  * struct p2p_protocol_callbacks - callback to non-converged driver
266*5113495bSYour Name  * @is_mgmt_protected: func to get 11w mgmt protection status
267*5113495bSYour Name  */
268*5113495bSYour Name struct p2p_protocol_callbacks {
269*5113495bSYour Name 	bool (*is_mgmt_protected)(uint32_t vdev_id, const uint8_t *peer_addr);
270*5113495bSYour Name };
271*5113495bSYour Name 
272*5113495bSYour Name /**
273*5113495bSYour Name  * enum p2p_attr_id - enum for P2P attributes ID in P2P IE
274*5113495bSYour Name  * @P2P_ATTR_STATUS: Attribute Status none
275*5113495bSYour Name  * @P2P_ATTR_MINOR_REASON_CODE: Minor reason code attribute
276*5113495bSYour Name  * @P2P_ATTR_CAPABILITY: Capability attribute
277*5113495bSYour Name  * @P2P_ATTR_DEVICE_ID: device ID attribute
278*5113495bSYour Name  * @P2P_ATTR_GROUP_OWNER_INTENT: Group owner intent attribute
279*5113495bSYour Name  * @P2P_ATTR_CONFIGURATION_TIMEOUT: Config timeout attribute
280*5113495bSYour Name  * @P2P_ATTR_LISTEN_CHANNEL: listen channel attribute
281*5113495bSYour Name  * @P2P_ATTR_GROUP_BSSID: Group BSSID attribute
282*5113495bSYour Name  * @P2P_ATTR_EXT_LISTEN_TIMING: Listen timing attribute
283*5113495bSYour Name  * @P2P_ATTR_INTENDED_INTERFACE_ADDR: Intended interface address attribute
284*5113495bSYour Name  * @P2P_ATTR_MANAGEABILITY:  Manageability attribute
285*5113495bSYour Name  * @P2P_ATTR_CHANNEL_LIST: Channel list attribute
286*5113495bSYour Name  * @P2P_ATTR_NOTICE_OF_ABSENCE: Notice of Absence attribute
287*5113495bSYour Name  * @P2P_ATTR_DEVICE_INFO: Device Info attribute
288*5113495bSYour Name  * @P2P_ATTR_GROUP_INFO: Group Info attribute
289*5113495bSYour Name  * @P2P_ATTR_GROUP_ID: Group ID attribute
290*5113495bSYour Name  * @P2P_ATTR_INTERFACE: Interface attribute
291*5113495bSYour Name  * @P2P_ATTR_OPERATING_CHANNEL: Operating channel attribute
292*5113495bSYour Name  * @P2P_ATTR_INVITATION_FLAGS: Invitation flags attribute
293*5113495bSYour Name  * @P2P_ATTR_OOB_GO_NEG_CHANNEL: GO neg channel attribute
294*5113495bSYour Name  * @P2P_ATTR_SERVICE_HASH: Service HASH attribute
295*5113495bSYour Name  * @P2P_ATTR_SESSION_INFORMATION_DATA: Session Info data attribute
296*5113495bSYour Name  * @P2P_ATTR_CONNECTION_CAPABILITY: Connection capability attribute
297*5113495bSYour Name  * @P2P_ATTR_ADVERTISEMENT_ID: Advertisement ID attribute
298*5113495bSYour Name  * @P2P_ATTR_ADVERTISED_SERVICE: Advertised Service attribute
299*5113495bSYour Name  * @P2P_ATTR_SESSION_ID: Session ID attribute
300*5113495bSYour Name  * @P2P_ATTR_FEATURE_CAPABILITY: Feature capability attribute
301*5113495bSYour Name  * @P2P_ATTR_PERSISTENT_GROUP: Persistent group attribute
302*5113495bSYour Name  * @P2P_ATTR_VENDOR_SPECIFIC: Vendor specific attribute
303*5113495bSYour Name  */
304*5113495bSYour Name enum p2p_attr_id {
305*5113495bSYour Name 	P2P_ATTR_STATUS = 0,
306*5113495bSYour Name 	P2P_ATTR_MINOR_REASON_CODE = 1,
307*5113495bSYour Name 	P2P_ATTR_CAPABILITY = 2,
308*5113495bSYour Name 	P2P_ATTR_DEVICE_ID = 3,
309*5113495bSYour Name 	P2P_ATTR_GROUP_OWNER_INTENT = 4,
310*5113495bSYour Name 	P2P_ATTR_CONFIGURATION_TIMEOUT = 5,
311*5113495bSYour Name 	P2P_ATTR_LISTEN_CHANNEL = 6,
312*5113495bSYour Name 	P2P_ATTR_GROUP_BSSID = 7,
313*5113495bSYour Name 	P2P_ATTR_EXT_LISTEN_TIMING = 8,
314*5113495bSYour Name 	P2P_ATTR_INTENDED_INTERFACE_ADDR = 9,
315*5113495bSYour Name 	P2P_ATTR_MANAGEABILITY = 10,
316*5113495bSYour Name 	P2P_ATTR_CHANNEL_LIST = 11,
317*5113495bSYour Name 	P2P_ATTR_NOTICE_OF_ABSENCE = 12,
318*5113495bSYour Name 	P2P_ATTR_DEVICE_INFO = 13,
319*5113495bSYour Name 	P2P_ATTR_GROUP_INFO = 14,
320*5113495bSYour Name 	P2P_ATTR_GROUP_ID = 15,
321*5113495bSYour Name 	P2P_ATTR_INTERFACE = 16,
322*5113495bSYour Name 	P2P_ATTR_OPERATING_CHANNEL = 17,
323*5113495bSYour Name 	P2P_ATTR_INVITATION_FLAGS = 18,
324*5113495bSYour Name 	P2P_ATTR_OOB_GO_NEG_CHANNEL = 19,
325*5113495bSYour Name 	P2P_ATTR_SERVICE_HASH = 21,
326*5113495bSYour Name 	P2P_ATTR_SESSION_INFORMATION_DATA = 22,
327*5113495bSYour Name 	P2P_ATTR_CONNECTION_CAPABILITY = 23,
328*5113495bSYour Name 	P2P_ATTR_ADVERTISEMENT_ID = 24,
329*5113495bSYour Name 	P2P_ATTR_ADVERTISED_SERVICE = 25,
330*5113495bSYour Name 	P2P_ATTR_SESSION_ID = 26,
331*5113495bSYour Name 	P2P_ATTR_FEATURE_CAPABILITY = 27,
332*5113495bSYour Name 	P2P_ATTR_PERSISTENT_GROUP = 28,
333*5113495bSYour Name 	P2P_ATTR_VENDOR_SPECIFIC = 221
334*5113495bSYour Name };
335*5113495bSYour Name #endif /* _WLAN_P2P_PUBLIC_STRUCT_H_ */
336