1  /*
2   * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
3   * Copyright (c) 2021-2023 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  #ifndef _WLAN_PKT_CAPTURE_PUBLIC_STRUCTS_H_
21  #define _WLAN_PKT_CAPTURE_PUBLIC_STRUCTS_H_
22  
23  #define PACKET_CAPTURE_DATA_MAX_FILTER BIT(18)
24  #define PACKET_CAPTURE_MGMT_MAX_FILTER BIT(5)
25  #define PACKET_CAPTURE_CTRL_MAX_FILTER BIT(3)
26  
27  /**
28   * enum pkt_capture_mode - packet capture modes
29   * @PACKET_CAPTURE_MODE_DISABLE: packet capture mode disable
30   * @PACKET_CAPTURE_MODE_MGMT_ONLY: capture mgmt packets only
31   * @PACKET_CAPTURE_MODE_DATA_ONLY: capture data packets only
32   */
33  enum pkt_capture_mode {
34  	PACKET_CAPTURE_MODE_DISABLE = 0,
35  	PACKET_CAPTURE_MODE_MGMT_ONLY = BIT(0),
36  	PACKET_CAPTURE_MODE_DATA_ONLY = BIT(1),
37  };
38  
39  /**
40   * enum pkt_capture_config - packet capture config
41   * @PACKET_CAPTURE_CONFIG_TRIGGER_ENABLE: enable capture for trigger frames only
42   * @PACKET_CAPTURE_CONFIG_QOS_ENABLE: enable capture for qos frames only
43   * @PACKET_CAPTURE_CONFIG_BEACON_ENABLE: enable only connected BSSID
44   *                                      beacons, when device in connected state
45   * @PACKET_CAPTURE_CONFIG_OFF_CHANNEL_BEACON_ENABLE: enable off channel
46   *                                      beacons, when device in connected state
47   * @PACKET_CAPTURE_CONFIG_NO_BEACON_ENABLE: drop all beacons, when
48   *                                          device in connected state
49   */
50  enum pkt_capture_config {
51  	PACKET_CAPTURE_CONFIG_TRIGGER_ENABLE = BIT(0),
52  	PACKET_CAPTURE_CONFIG_QOS_ENABLE = BIT(1),
53  	PACKET_CAPTURE_CONFIG_BEACON_ENABLE = BIT(2),
54  	PACKET_CAPTURE_CONFIG_OFF_CHANNEL_BEACON_ENABLE = BIT(3),
55  	PACKET_CAPTURE_CONFIG_NO_BEACON_ENABLE = BIT(4),
56  };
57  
58  /**
59   * struct mgmt_offload_event_params - Management offload event params
60   * @tsf_l32: The lower 32 bits of the TSF
61   * @chan_freq: channel frequency in MHz
62   * @rate_kbps: Rate kbps
63   * @rssi: combined RSSI, i.e. the sum of the snr + noise floor (dBm units)
64   * @buf_len: length of the frame in bytes
65   * @tx_status: 0: xmit ok
66   *             1: excessive retries
67   *             2: blocked by tx filtering
68   *             4: fifo underrun
69   *             8: swabort
70   * @buf: management frame buffer
71   * @tx_retry_cnt: tx retry count
72   */
73  struct mgmt_offload_event_params {
74  	uint32_t tsf_l32;
75  	uint32_t chan_freq;
76  	uint16_t rate_kbps;
77  	uint32_t rssi;
78  	uint32_t buf_len;
79  	uint32_t tx_status;
80  	uint8_t *buf;
81  	uint8_t tx_retry_cnt;
82  };
83  
84  struct smu_event_params {
85  	uint32_t vdev_id;
86  	uint8_t rx_vht_sgi;
87  };
88  
89  /**
90   * struct pkt_capture_callbacks - callbacks to non-converged driver
91   * @get_rmf_status: callback to get rmf status
92   */
93  struct pkt_capture_callbacks {
94  	int (*get_rmf_status)(uint8_t vdev_id);
95  };
96  
97  /**
98   * struct wlan_pkt_capture_tx_ops - structure of tx operation function
99   * pointers for packet capture component
100   * @pkt_capture_send_mode: send packet capture mode
101   * @pkt_capture_send_config: send packet capture config
102   * @pkt_capture_send_beacon_interval: send beacon interval
103   *
104   */
105  struct wlan_pkt_capture_tx_ops {
106  	QDF_STATUS (*pkt_capture_send_mode)(struct wlan_objmgr_psoc *psoc,
107  					    uint8_t vdev_id,
108  					    enum pkt_capture_mode mode);
109  	QDF_STATUS (*pkt_capture_send_config)
110  				(struct wlan_objmgr_psoc *psoc,
111  				 uint8_t vdev_id,
112  				 enum pkt_capture_config config);
113  	QDF_STATUS (*pkt_capture_send_beacon_interval)
114  				(struct wlan_objmgr_psoc *psoc,
115  				 uint8_t vdev_id,
116  				 uint32_t nth_value);
117  };
118  
119  /**
120   * struct wlan_pkt_capture_rx_ops - structure of rx operation function
121   * pointers for packet capture component
122   * @pkt_capture_register_ev_handlers: register mgmt offload event
123   * @pkt_capture_unregister_ev_handlers: unregister mgmt offload event
124   * @pkt_capture_register_smart_monitor_event: register smu event
125   * @pkt_capture_unregister_smart_monitor_event: unregister smu event
126   */
127  struct wlan_pkt_capture_rx_ops {
128  	QDF_STATUS (*pkt_capture_register_ev_handlers)
129  					(struct wlan_objmgr_psoc *psoc);
130  	QDF_STATUS (*pkt_capture_unregister_ev_handlers)
131  					(struct wlan_objmgr_psoc *psoc);
132  	QDF_STATUS (*pkt_capture_register_smart_monitor_event)
133  					(struct wlan_objmgr_psoc *psoc);
134  	QDF_STATUS (*pkt_capture_unregister_smart_monitor_event)
135  					(struct wlan_objmgr_psoc *psoc);
136  };
137  
138  /**
139   * enum pkt_capture_data_frame_type - Represent the various
140   * data types to be filtered in packet capture.
141   * @PKT_CAPTURE_DATA_FRAME_TYPE_ALL:
142   * @PKT_CAPTURE_DATA_FRAME_TYPE_ARP:
143   * @PKT_CAPTURE_DATA_FRAME_TYPE_DHCPV4:
144   * @PKT_CAPTURE_DATA_FRAME_TYPE_DHCPV6:
145   * @PKT_CAPTURE_DATA_FRAME_TYPE_EAPOL:
146   * @PKT_CAPTURE_DATA_FRAME_TYPE_DNSV4:
147   * @PKT_CAPTURE_DATA_FRAME_TYPE_DNSV6:
148   * @PKT_CAPTURE_DATA_FRAME_TYPE_TCP_SYN:
149   * @PKT_CAPTURE_DATA_FRAME_TYPE_TCP_SYNACK:
150   * @PKT_CAPTURE_DATA_FRAME_TYPE_TCP_FIN:
151   * @PKT_CAPTURE_DATA_FRAME_TYPE_TCP_FINACK:
152   * @PKT_CAPTURE_DATA_FRAME_TYPE_TCP_ACK:
153   * @PKT_CAPTURE_DATA_FRAME_TYPE_TCP_RST:
154   * @PKT_CAPTURE_DATA_FRAME_TYPE_ICMPV4:
155   * @PKT_CAPTURE_DATA_FRAME_TYPE_ICMPV6:
156   * @PKT_CAPTURE_DATA_FRAME_TYPE_RTP:
157   * @PKT_CAPTURE_DATA_FRAME_TYPE_SIP:
158   * @PKT_CAPTURE_DATA_FRAME_QOS_NULL:
159   */
160  enum pkt_capture_data_frame_type {
161  	PKT_CAPTURE_DATA_FRAME_TYPE_ALL = BIT(0),
162  	/* valid only if PKT_CAPTURE_DATA_DATA_FRAME_TYPE_ALL is not set */
163  	PKT_CAPTURE_DATA_FRAME_TYPE_ARP = BIT(1),
164  	PKT_CAPTURE_DATA_FRAME_TYPE_DHCPV4 = BIT(2),
165  	PKT_CAPTURE_DATA_FRAME_TYPE_DHCPV6 = BIT(3),
166  	PKT_CAPTURE_DATA_FRAME_TYPE_EAPOL = BIT(4),
167  	PKT_CAPTURE_DATA_FRAME_TYPE_DNSV4 = BIT(5),
168  	PKT_CAPTURE_DATA_FRAME_TYPE_DNSV6 = BIT(6),
169  	PKT_CAPTURE_DATA_FRAME_TYPE_TCP_SYN = BIT(7),
170  	PKT_CAPTURE_DATA_FRAME_TYPE_TCP_SYNACK = BIT(8),
171  	PKT_CAPTURE_DATA_FRAME_TYPE_TCP_FIN = BIT(9),
172  	PKT_CAPTURE_DATA_FRAME_TYPE_TCP_FINACK = BIT(10),
173  	PKT_CAPTURE_DATA_FRAME_TYPE_TCP_ACK = BIT(11),
174  	PKT_CAPTURE_DATA_FRAME_TYPE_TCP_RST = BIT(12),
175  	PKT_CAPTURE_DATA_FRAME_TYPE_ICMPV4 = BIT(13),
176  	PKT_CAPTURE_DATA_FRAME_TYPE_ICMPV6 = BIT(14),
177  	PKT_CAPTURE_DATA_FRAME_TYPE_RTP = BIT(15),
178  	PKT_CAPTURE_DATA_FRAME_TYPE_SIP = BIT(16),
179  	PKT_CAPTURE_DATA_FRAME_QOS_NULL = BIT(17),
180  };
181  
182  /**
183   * enum pkt_capture_mgmt_frame_type - Represent the various
184   * mgmt types to be sent over the monitor interface.
185   * @PKT_CAPTURE_MGMT_FRAME_TYPE_ALL: All the MGMT Frames.
186   * @PKT_CAPTURE_MGMT_CONNECT_NO_BEACON: All the MGMT Frames
187   * except the Beacons. Valid only in the Connect state.
188   * @PKT_CAPTURE_MGMT_CONNECT_BEACON: Only the connected
189   * BSSID Beacons. Valid only in the Connect state.
190   * @PKT_CAPTURE_MGMT_CONNECT_SCAN_BEACON: Represents
191   * the Beacons obtained during the scan (off channel and connected channel)
192   * when in connected state.
193   */
194  
195  enum pkt_capture_mgmt_frame_type {
196  	PKT_CAPTURE_MGMT_FRAME_TYPE_ALL = BIT(0),
197  	/* valid only if PKT_CAPTURE_MGMT_FRAME_TYPE_ALL is not set */
198  	PKT_CAPTURE_MGMT_CONNECT_NO_BEACON = BIT(1),
199  	PKT_CAPTURE_MGMT_CONNECT_BEACON = BIT(2),
200  	PKT_CAPTURE_MGMT_CONNECT_SCAN_BEACON = BIT(3),
201  };
202  
203  /**
204   * enum pkt_capture_ctrl_frame_type - Represent the various
205   * ctrl types to be sent over the monitor interface.
206   * @PKT_CAPTURE_CTRL_FRAME_TYPE_ALL: All the ctrl Frames.
207   * @PKT_CAPTURE_CTRL_TRIGGER_FRAME: Trigger Frame.
208   */
209  enum pkt_capture_ctrl_frame_type {
210  	PKT_CAPTURE_CTRL_FRAME_TYPE_ALL = BIT(0),
211  	/* valid only if PKT_CAPTURE_CTRL_FRAME_TYPE_ALL is not set */
212  	PKT_CAPTURE_CTRL_TRIGGER_FRAME = BIT(1),
213  };
214  
215  /**
216   * enum pkt_capture_attr_set_monitor_mode - Used by the
217   * vendor command QCA_NL80211_VENDOR_SUBCMD_SET_MONITOR_MODE to set the
218   * monitor mode.
219   *
220   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_INVALID: Invalid value
221   *
222   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_DATA_TX_FRAME_TYPE: u32 attribute,
223   * Represents the tx data packet type to be monitored (u32). These data packets
224   * are represented by enum pkt_capture_data_frame_type.
225   *
226   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_DATA_RX_FRAME_TYPE: u32 attribute,
227   * Represents the tx data packet type to be monitored (u32). These data packets
228   * are represented by enum pkt_capture_data_frame_type.
229   *
230   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_MGMT_TX_FRAME_TYPE: u32 attribute,
231   * Represents the tx data packet type to be monitored (u32). These mgmt packets
232   * are represented by enum pkt_capture_mgmt_frame_type.
233   *
234   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_MGMT_RX_FRAME_TYPE: u32 attribute,
235   * Represents the tx data packet type to be monitored (u32). These mgmt packets
236   * are represented by enum pkt_capture_mgmt_frame_type.
237   *
238   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_CTRL_TX_FRAME_TYPE: u32 attribute,
239   * Represents the tx data packet type to be monitored (u32). These ctrl packets
240   * are represented by enum pkt_capture_ctrl_frame_type.
241   *
242   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_CTRL_RX_FRAME_TYPE: u32 attribute,
243   * Represents the tx data packet type to be monitored (u32). These ctrl packets
244   * are represented by enum pkt_capture_ctrl_frame_type.
245   *
246   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_CONNECTED_BEACON_INTERVAL: u32 attribute,
247   * An interval only for the connected beacon interval, which expects that the
248   * connected BSSID's beacons shall be sent on the monitor interface only on this
249   * specific interval.
250   *
251   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_AFTER_LAST: Internal use
252   * @PKT_CAPTURE_ATTR_SET_MONITOR_MODE_MAX: Value of last valid enumeration
253   */
254  enum pkt_capture_attr_set_monitor_mode {
255  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_INVALID = 0,
256  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_DATA_TX_FRAME_TYPE = 1,
257  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_DATA_RX_FRAME_TYPE = 2,
258  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_MGMT_TX_FRAME_TYPE = 3,
259  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_MGMT_RX_FRAME_TYPE = 4,
260  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_CTRL_TX_FRAME_TYPE = 5,
261  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_CTRL_RX_FRAME_TYPE = 6,
262  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_CONNECTED_BEACON_INTERVAL = 7,
263  
264  	/* keep last */
265  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_AFTER_LAST,
266  	PKT_CAPTURE_ATTR_SET_MONITOR_MODE_MAX =
267  		PKT_CAPTURE_ATTR_SET_MONITOR_MODE_AFTER_LAST - 1,
268  
269  };
270  
271  struct pkt_capture_frame_filter {
272  	enum pkt_capture_data_frame_type data_tx_frame_filter;
273  	enum pkt_capture_data_frame_type data_rx_frame_filter;
274  	enum pkt_capture_mgmt_frame_type mgmt_tx_frame_filter;
275  	enum pkt_capture_mgmt_frame_type mgmt_rx_frame_filter;
276  	enum pkt_capture_ctrl_frame_type ctrl_tx_frame_filter;
277  	enum pkt_capture_ctrl_frame_type ctrl_rx_frame_filter;
278  	uint32_t connected_beacon_interval;
279  	uint8_t vendor_attr_to_set;
280  };
281  #endif /* _WLAN_PKT_CAPTURE_PUBLIC_STRUCTS_H_ */
282