blob: 5fab1806f2771a333b5fe022f3eae492fc100724 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Katya Nigam77fcf582015-02-09 16:48:24 +05302 * Copyright (c) 2013-2015 The Linux Foundation. All rights reserved.
Kiet Lam842dad02014-02-18 18:44:02 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet Lam842dad02014-02-18 18:44:02 -080021
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028#if !defined( WLAN_HDD_TX_RX_H )
29#define WLAN_HDD_TX_RX_H
30
31/**===========================================================================
Jeff Johnson7dda7772013-02-27 08:36:13 -080032
Jeff Johnson295189b2012-06-20 16:38:30 -070033 \file wlan_hdd_tx_rx.h
Jeff Johnson7dda7772013-02-27 08:36:13 -080034
Jeff Johnson295189b2012-06-20 16:38:30 -070035 \brief Linux HDD Tx/RX APIs
Jeff Johnson295189b2012-06-20 16:38:30 -070036 ==========================================================================*/
Jeff Johnson7dda7772013-02-27 08:36:13 -080037
38/*---------------------------------------------------------------------------
Jeff Johnson295189b2012-06-20 16:38:30 -070039 Include files
Jeff Johnson7dda7772013-02-27 08:36:13 -080040 -------------------------------------------------------------------------*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041#include <wlan_hdd_includes.h>
42#include <vos_api.h>
43#include <linux/skbuff.h>
44#include <wlan_qct_tl.h>
45
Jeff Johnson7dda7772013-02-27 08:36:13 -080046/*---------------------------------------------------------------------------
Jeff Johnson295189b2012-06-20 16:38:30 -070047 Preprocessor definitions and constants
Jeff Johnson7dda7772013-02-27 08:36:13 -080048 -------------------------------------------------------------------------*/
Jeff Johnson295189b2012-06-20 16:38:30 -070049#define HDD_ETHERTYPE_802_1_X ( 0x888E )
50#define HDD_ETHERTYPE_802_1_X_FRAME_OFFSET ( 12 )
51#define HDD_ETHERTYPE_802_1_X_SIZE ( 2 )
52#ifdef FEATURE_WLAN_WAPI
53#define HDD_ETHERTYPE_WAI ( 0x88b4 )
54#endif
Abhishek Singhfa011222014-04-14 10:57:08 +053055#define HDD_ETHERTYPE_ARP ( 0x0806 )
56#define HDD_ETHERTYPE_ARP_SIZE 42
Jeff Johnson295189b2012-06-20 16:38:30 -070057
58#define HDD_80211_HEADER_LEN 24
59#define HDD_80211_HEADER_QOS_CTL 2
60#define HDD_LLC_HDR_LEN 6
61#define HDD_FRAME_TYPE_MASK 0x0c
62#define HDD_FRAME_SUBTYPE_MASK 0xf0
63#define HDD_FRAME_TYPE_DATA 0x08
64#define HDD_FRAME_TYPE_MGMT 0x00
65#define HDD_FRAME_SUBTYPE_QOSDATA 0x80
66#define HDD_FRAME_SUBTYPE_DEAUTH 0xC0
67#define HDD_FRAME_SUBTYPE_DISASSOC 0xA0
68#define HDD_DEST_ADDR_OFFSET 6
69
70#define HDD_MAC_HDR_SIZE 6
Kiet Lamf040f472013-11-20 21:15:23 +053071
72#define HDD_PSB_CFG_INVALID 0xFF
73#define HDD_PSB_CHANGED 0xFF
74#define SME_QOS_UAPSD_CFG_BK_CHANGED_MASK 0xF1
75#define SME_QOS_UAPSD_CFG_BE_CHANGED_MASK 0xF2
76#define SME_QOS_UAPSD_CFG_VI_CHANGED_MASK 0xF4
77#define SME_QOS_UAPSD_CFG_VO_CHANGED_MASK 0xF8
78
Dino Mycled9b7cc12014-09-04 18:43:07 +053079/* WLAN_DHCP_DEBUG */
80#define RX_PATH ( 0 )
81#define TX_PATH ( 1 )
82
83#define BOOTP_SERVER_PORT ( 67 )
84#define BOOTP_CLIENT_PORT ( 68 )
85
86#define ETH_TYPE_OFFSET ( 12 )
87#define ETH_TYPE_IP_PKT ( 0x0800 )
88#define BOOTP_MSG_OFFSET ( 42 )
89#define BOOTP_REQUEST_MSG ( 1 )
90#define BOOTP_RESPONSE_MSG ( 2 )
91
92#define DHCPDISCOVER ( 1 )
93#define DHCPOFFER ( 2 )
94#define DHCPREQUEST ( 3 )
95#define DHCPACK ( 5 )
96#define DHCPNAK ( 6 )
97#define DHCPRELEASE ( 7 )
98#define DHCPINFORM ( 8 )
99
100#define SKB_MIN_LENGTH ( 35 )
101#define PROTOCOL_OFFSET ( 9 )
102#define UDP_PROTOCOL ( 17 )
103
104#define UDP_SRC_PORT_OFFSET ( 34 )
105#define UDP_DEST_PORT_OFFSET ( 36 )
106
107#define DHCP_OPTION53 ( 0x35 )
108#define DHCP_OPTION53_LENGTH ( 1 )
109#define DHCP_OPTION53_OFFSET ( 0x11A )
110#define DHCP_OPTION53_LENGTH_OFFSET ( 0x11B )
111#define DHCP_OPTION53_STATUS_OFFSET ( 0x11C )
112/* WLAN_DHCP_DEBUG */
113
Hanumantha Reddy Pothulaee001fc2015-05-26 15:21:53 +0530114#define TID3 0x60
Dino Mycled9b7cc12014-09-04 18:43:07 +0530115
116
Jeff Johnson295189b2012-06-20 16:38:30 -0700117/*---------------------------------------------------------------------------
118 Type declarations
119 -------------------------------------------------------------------------*/
120
Katya Nigam77fcf582015-02-09 16:48:24 +0530121/*---------------------------------------------------------------------------
Jeff Johnson295189b2012-06-20 16:38:30 -0700122 Function declarations and documenation
Katya Nigam77fcf582015-02-09 16:48:24 +0530123 -------------------------------------------------------------------------*/
124/**============================================================================
125 @brief hdd_ibss_hard_start_xmit() - Function registered with the Linux OS for
126 transmitting packets in IBSS mode.
127
128 @param skb : [in] pointer to OS packet (sk_buff)
129 @param dev : [in] pointer to network device
130
131 @return : NET_XMIT_DROP if packets are dropped
132 : NET_XMIT_SUCCESS if packet is enqueued succesfully
133 ===========================================================================*/
134extern int hdd_ibss_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
Jeff Johnson295189b2012-06-20 16:38:30 -0700135
136/**============================================================================
Katya Nigam77fcf582015-02-09 16:48:24 +0530137 @brief hdd_hard_start_xmit() - Function registered with the Linux OS for
Jeff Johnson295189b2012-06-20 16:38:30 -0700138 transmitting packets
139
140 @param skb : [in] pointer to OS packet (sk_buff)
141 @param dev : [in] pointer to Libra network device
142
143 @return : NET_XMIT_DROP if packets are dropped
144 : NET_XMIT_SUCCESS if packet is enqueued succesfully
145 ===========================================================================*/
146extern int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
147
Jeff Johnson295189b2012-06-20 16:38:30 -0700148extern int hdd_mon_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
Jeff Johnson295189b2012-06-20 16:38:30 -0700149/**============================================================================
150 @brief hdd_tx_timeout() - Function called by OS if there is any
151 timeout during transmission. Since HDD simply enqueues packet
152 and returns control to OS right away, this would never be invoked
153
154 @param dev : [in] pointer to Libra network device
155 @return : None
156 ===========================================================================*/
157extern void hdd_tx_timeout(struct net_device *dev);
158
159/**============================================================================
160 @brief hdd_stats() - Function registered with the Linux OS for
161 device TX/RX statistics
162
163 @param dev : [in] pointer to Libra network device
164
165 @return : pointer to net_device_stats structure
166 ===========================================================================*/
167extern struct net_device_stats* hdd_stats(struct net_device *dev);
168
169/**============================================================================
Katya Nigam1fd24402015-02-16 14:52:19 +0530170 @brief hdd_ibss_init_tx_rx() - Init function to initialize Tx/RX
171 modules in HDD
172
173 @param pAdapter : [in] pointer to adapter context
174 @return : VOS_STATUS_E_FAILURE if any errors encountered
175 : VOS_STATUS_SUCCESS otherwise
176 ===========================================================================*/
177extern void hdd_ibss_init_tx_rx( hdd_adapter_t *pAdapter );
178
179/**============================================================================
180 @brief hdd_ibss_deinit_tx_rx() - Deinit function to clean up Tx/RX
181 modules in HDD
182
183 @param pAdapter : [in] pointer to adapter context..
184 @return : VOS_STATUS_E_FAILURE if any errors encountered.
185 : VOS_STATUS_SUCCESS otherwise
186 ===========================================================================*/
187extern VOS_STATUS hdd_ibss_deinit_tx_rx( hdd_adapter_t *pAdapter );
188
189/**============================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -0700190 @brief hdd_init_tx_rx() - Init function to initialize Tx/RX
191 modules in HDD
192
193 @param pAdapter : [in] pointer to adapter context
194 @return : VOS_STATUS_E_FAILURE if any errors encountered
195 : VOS_STATUS_SUCCESS otherwise
196 ===========================================================================*/
197extern VOS_STATUS hdd_init_tx_rx( hdd_adapter_t *pAdapter );
198
199/**============================================================================
200 @brief hdd_deinit_tx_rx() - Deinit function to clean up Tx/RX
201 modules in HDD
202
203 @param pAdapter : [in] pointer to adapter context
204 @return : VOS_STATUS_E_FAILURE if any errors encountered
205 : VOS_STATUS_SUCCESS otherwise
206 ===========================================================================*/
207extern VOS_STATUS hdd_deinit_tx_rx( hdd_adapter_t *pAdapter );
208
209/**============================================================================
210 @brief hdd_disconnect_tx_rx() - Disconnect function to clean up Tx/RX
211 modules in HDD
212
213 @param pAdapter : [in] pointer to adapter context
214 @return : VOS_STATUS_E_FAILURE if any errors encountered
215 : VOS_STATUS_SUCCESS otherwise
216 ===========================================================================*/
217extern VOS_STATUS hdd_disconnect_tx_rx( hdd_adapter_t *pAdapter );
218
219/**============================================================================
220 @brief hdd_tx_complete_cbk() - Callback function invoked by TL
221 to indicate that a packet has been transmitted across the SDIO bus
222 succesfully. OS packet resources can be released after this cbk.
223
224 @param vosContext : [in] pointer to VOS context
225 @param pVosPacket : [in] pointer to VOS packet (containing skb)
226 @param vosStatusIn : [in] status of the transmission
227
228 @return : VOS_STATUS_E_FAILURE if any errors encountered
229 : VOS_STATUS_SUCCESS otherwise
230 ===========================================================================*/
231extern VOS_STATUS hdd_tx_complete_cbk( v_VOID_t *vosContext,
232 vos_pkt_t *pVosPacket,
233 VOS_STATUS vosStatusIn );
234
235/**============================================================================
Katya Nigamf944e5e2015-02-10 15:05:43 +0530236 @brief hdd_ibss_tx_fetch_packet_cbk() - Callback function invoked by TL to
237 fetch a packet for transmission.
238
239 @param vosContext : [in] pointer to VOS context
240 @param staId : [in] Station for which TL is requesting a pkt
241 @param ucAC : [in] pointer to access category requested by TL
242 @param pVosPacket : [out] pointer to VOS packet packet pointer
243 @param pPktMetaInfo : [out] pointer to meta info for the pkt
244
245 @return : VOS_STATUS_E_EMPTY if no packets to transmit
246 : VOS_STATUS_E_FAILURE if any errors encountered
247 : VOS_STATUS_SUCCESS otherwise
248 ===========================================================================*/
249extern VOS_STATUS hdd_ibss_tx_fetch_packet_cbk( v_VOID_t *vosContext,
250 v_U8_t *pStaId,
251 WLANTL_ACEnumType ucAC,
252 vos_pkt_t **ppVosPacket,
253 WLANTL_MetaInfoType *pPktMetaInfo );
254
255/**============================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -0700256 @brief hdd_tx_fetch_packet_cbk() - Callback function invoked by TL to
257 fetch a packet for transmission.
258
259 @param vosContext : [in] pointer to VOS context
260 @param staId : [in] Station for which TL is requesting a pkt
261 @param ucAC : [in] pointer to access category requested by TL
262 @param pVosPacket : [out] pointer to VOS packet packet pointer
263 @param pPktMetaInfo : [out] pointer to meta info for the pkt
264
265 @return : VOS_STATUS_E_EMPTY if no packets to transmit
266 : VOS_STATUS_E_FAILURE if any errors encountered
267 : VOS_STATUS_SUCCESS otherwise
268 ===========================================================================*/
269extern VOS_STATUS hdd_tx_fetch_packet_cbk( v_VOID_t *vosContext,
270 v_U8_t *pStaId,
271 WLANTL_ACEnumType ucAC,
272 vos_pkt_t **ppVosPacket,
273 WLANTL_MetaInfoType *pPktMetaInfo );
274
275/**============================================================================
276 @brief hdd_tx_low_resource_cbk() - Callback function invoked in the
277 case where VOS packets are not available at the time of the call to get
278 packets. This callback function is invoked by VOS when packets are
279 available.
280
281 @param pVosPacket : [in] pointer to VOS packet
282 @param userData : [in] opaque user data that was passed initially
283
284 @return : VOS_STATUS_E_FAILURE if any errors encountered,
285 : VOS_STATUS_SUCCESS otherwise
286 =============================================================================*/
287extern VOS_STATUS hdd_tx_low_resource_cbk( vos_pkt_t *pVosPacket,
288 v_VOID_t *userData );
289
Katya Nigame7b69a82015-04-28 15:24:06 +0530290extern VOS_STATUS hdd_rx_packet_monitor_cbk(v_VOID_t *vosContext,vos_pkt_t *pVosPacket, int conversion);
291
Jeff Johnson295189b2012-06-20 16:38:30 -0700292/**============================================================================
293 @brief hdd_rx_packet_cbk() - Receive callback registered with TL.
294 TL will call this to notify the HDD when a packet was received
295 for a registered STA.
296
297 @param vosContext : [in] pointer to VOS context
298 @param pVosPacket : [in] pointer to VOS packet (conatining sk_buff)
299 @param staId : [in] Station Id
300 @param pRxMetaInfo : [in] pointer to meta info for the received pkt(s)
301
302 @return : VOS_STATUS_E_FAILURE if any errors encountered,
303 : VOS_STATUS_SUCCESS otherwise
304 ===========================================================================*/
305extern VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext,
306 vos_pkt_t *pVosPacket,
307 v_U8_t staId,
308 WLANTL_RxMetaInfoType* pRxMetaInfo );
309
Jeff Johnson295189b2012-06-20 16:38:30 -0700310
311/**============================================================================
312 @brief hdd_IsEAPOLPacket() - Checks the packet is EAPOL or not.
313
314 @param pVosPacket : [in] pointer to vos packet
315 @return : VOS_TRUE if the packet is EAPOL
316 : VOS_FALSE otherwise
317 ===========================================================================*/
318extern v_BOOL_t hdd_IsEAPOLPacket( vos_pkt_t *pVosPacket );
Jeff Johnson295189b2012-06-20 16:38:30 -0700319
Jeff Johnson295189b2012-06-20 16:38:30 -0700320/**============================================================================
321 @brief hdd_mon_tx_mgmt_pkt() - Transmit MGMT packet received on monitor
322 interface.
323
Jeff Johnsona8a1a482012-12-12 16:49:33 -0800324 @param pAdapter: [in] SAP/P2P GO adapter.
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 ===========================================================================*/
326void hdd_mon_tx_mgmt_pkt(hdd_adapter_t* pAdapter);
327
328/**============================================================================
329 @brief hdd_mon_tx_work_queue() - workqueue handler for transmitting mgmt packets..
330
331 @param work: [in] workqueue structure.
332 ===========================================================================*/
333void hdd_mon_tx_work_queue(struct work_struct *work);
Jeff Johnson295189b2012-06-20 16:38:30 -0700334
Shailender Karmuchia734f332013-04-19 14:02:48 -0700335/**============================================================================
336 @brief hdd_Ibss_GetStaId() - Get the StationID using the Peer Mac address
337 @param pHddStaCtx : [in] pointer to HDD Station Context
338 pMacAddress [in] pointer to Peer Mac address
339 staID [out] pointer to Station Index
340 @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE
341 ===========================================================================*/
342VOS_STATUS hdd_Ibss_GetStaId(hdd_station_ctx_t *pHddStaCtx,
343 v_MACADDR_t *pMacAddress, v_U8_t *staId);
344
Sudhir Sattayappa Kohalli37620692013-08-05 14:02:26 -0700345/**============================================================================
346 @brief hdd_tx_rx_pkt_cnt_stat_timer_handler() -
347 Timer handler to check enable/disable split scan
348 @param pHddStaCtx : Hdd adapter
349 @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE
350 ===========================================================================*/
351void hdd_tx_rx_pkt_cnt_stat_timer_handler( void *pAdapter);
352
Ravi Joshif9520d62013-10-18 04:11:46 -0700353/**============================================================================
354 @brief hdd_flush_ibss_tx_queues() -
355 Flush tx queues in IBSS mode
Ravi Joshi41914632013-10-21 23:02:21 -0700356 @param pAdapter: Hdd adapter
357 @param STAId: Sta index
Ravi Joshif9520d62013-10-18 04:11:46 -0700358 @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE
359 ===========================================================================*/
360void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId);
361
Kiet Lamf040f472013-11-20 21:15:23 +0530362/**=========================================================================
363 @brief hdd_wmm_acquire_access_required()-
364 Determine whether wmm ac acquire access is required
365 @param pAdapter : pointer to Adapter context
366 @param acType : AC
367 @return : void
368 ========================================================================*/
369void hdd_wmm_acquire_access_required(hdd_adapter_t *pAdapter,
370 WLANTL_ACEnumType acType);
Dino Mycled9b7cc12014-09-04 18:43:07 +0530371
372/**=========================================================================
373 @brief hdd_dump_dhcp_pkt()- For printing DHCP logs
374 @param skb : pointer to skb
375 @param path : path direction
376 @return : void
377 ========================================================================*/
378void hdd_dump_dhcp_pkt(struct sk_buff *skb, int path);
379
Sushant Kaushika8073312015-05-04 17:33:52 +0530380#ifdef FEATURE_WLAN_DIAG_SUPPORT
381/**
382 * wlan_hdd_log_eapol() - Function to check and extract EAPOL params
383 * @skb: skb data
384 * @event_type: One of enum wifi_connectivity_events to indicate Tx/Rx
385 *
386 * This function parses the input skb data to get the EAPOL params,if the
387 * packet is EAPOL and store it in the pointer passed as input
388 *
389 * Return: None
390 *
391 */
392void wlan_hdd_log_eapol(struct sk_buff *skb,
393 uint8_t event_type);
394#else
395static inline void wlan_hdd_log_eapol(struct sk_buff *skb,
396 uint8_t event_type)
397{
398}
399#endif /* FEATURE_WLAN_DIAG_SUPPORT */
400
Jeff Johnson295189b2012-06-20 16:38:30 -0700401#endif // end #if !defined( WLAN_HDD_TX_RX_H )