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