blob: acad7abf54825d30a6d7a2bc8ea5c2768d6fe9a2 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam842dad02014-02-18 18:44:02 -08002 * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
3 *
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 )
Nirav Shah4f765af2015-01-21 19:51:30 +053052
53#define HDD_ETHERTYPE_802_1_X_FRAME_SUB_TYPE_OFFSET ( 19 )
54#define HDD_ETHERTYPE_802_1_X_SUB_TYPE_MASK ( 0x8003 )
55#define HDD_ETHERTYPE_802_1_X_M1_VALUE ( 0x8000 )
56#define HDD_ETHERTYPE_802_1_X_M2_VALUE ( 0x0001 )
57#define HDD_ETHERTYPE_802_1_X_M3_VALUE ( 0x8003 )
58#define HDD_ETHERTYPE_802_1_X_M4_VALUE ( 0x0003 )
59
Jeff Johnson295189b2012-06-20 16:38:30 -070060#ifdef FEATURE_WLAN_WAPI
61#define HDD_ETHERTYPE_WAI ( 0x88b4 )
62#endif
Abhishek Singhfa011222014-04-14 10:57:08 +053063#define HDD_ETHERTYPE_ARP ( 0x0806 )
64#define HDD_ETHERTYPE_ARP_SIZE 42
Jeff Johnson295189b2012-06-20 16:38:30 -070065
66#define HDD_80211_HEADER_LEN 24
67#define HDD_80211_HEADER_QOS_CTL 2
68#define HDD_LLC_HDR_LEN 6
69#define HDD_FRAME_TYPE_MASK 0x0c
70#define HDD_FRAME_SUBTYPE_MASK 0xf0
71#define HDD_FRAME_TYPE_DATA 0x08
72#define HDD_FRAME_TYPE_MGMT 0x00
73#define HDD_FRAME_SUBTYPE_QOSDATA 0x80
74#define HDD_FRAME_SUBTYPE_DEAUTH 0xC0
75#define HDD_FRAME_SUBTYPE_DISASSOC 0xA0
76#define HDD_DEST_ADDR_OFFSET 6
77
78#define HDD_MAC_HDR_SIZE 6
Kiet Lamf040f472013-11-20 21:15:23 +053079
80#define HDD_PSB_CFG_INVALID 0xFF
81#define HDD_PSB_CHANGED 0xFF
82#define SME_QOS_UAPSD_CFG_BK_CHANGED_MASK 0xF1
83#define SME_QOS_UAPSD_CFG_BE_CHANGED_MASK 0xF2
84#define SME_QOS_UAPSD_CFG_VI_CHANGED_MASK 0xF4
85#define SME_QOS_UAPSD_CFG_VO_CHANGED_MASK 0xF8
86
Dino Mycled9b7cc12014-09-04 18:43:07 +053087/* WLAN_DHCP_DEBUG */
88#define RX_PATH ( 0 )
89#define TX_PATH ( 1 )
90
91#define BOOTP_SERVER_PORT ( 67 )
92#define BOOTP_CLIENT_PORT ( 68 )
93
94#define ETH_TYPE_OFFSET ( 12 )
95#define ETH_TYPE_IP_PKT ( 0x0800 )
96#define BOOTP_MSG_OFFSET ( 42 )
97#define BOOTP_REQUEST_MSG ( 1 )
98#define BOOTP_RESPONSE_MSG ( 2 )
99
100#define DHCPDISCOVER ( 1 )
101#define DHCPOFFER ( 2 )
102#define DHCPREQUEST ( 3 )
103#define DHCPACK ( 5 )
104#define DHCPNAK ( 6 )
105#define DHCPRELEASE ( 7 )
106#define DHCPINFORM ( 8 )
107
108#define SKB_MIN_LENGTH ( 35 )
109#define PROTOCOL_OFFSET ( 9 )
110#define UDP_PROTOCOL ( 17 )
111
112#define UDP_SRC_PORT_OFFSET ( 34 )
113#define UDP_DEST_PORT_OFFSET ( 36 )
114
115#define DHCP_OPTION53 ( 0x35 )
116#define DHCP_OPTION53_LENGTH ( 1 )
117#define DHCP_OPTION53_OFFSET ( 0x11A )
118#define DHCP_OPTION53_LENGTH_OFFSET ( 0x11B )
119#define DHCP_OPTION53_STATUS_OFFSET ( 0x11C )
120/* WLAN_DHCP_DEBUG */
121
122
123
124
125
Jeff Johnson295189b2012-06-20 16:38:30 -0700126/*---------------------------------------------------------------------------
127 Type declarations
128 -------------------------------------------------------------------------*/
129
130/*---------------------------------------------------------------------------
131 Function declarations and documenation
132 -------------------------------------------------------------------------*/
133
134/**============================================================================
135 @brief hdd_hard_start_xmit() - Function registered with the Linux OS for
136 transmitting packets
137
138 @param skb : [in] pointer to OS packet (sk_buff)
139 @param dev : [in] pointer to Libra network device
140
141 @return : NET_XMIT_DROP if packets are dropped
142 : NET_XMIT_SUCCESS if packet is enqueued succesfully
143 ===========================================================================*/
144extern int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146extern int hdd_mon_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
Jeff Johnson295189b2012-06-20 16:38:30 -0700147/**============================================================================
148 @brief hdd_tx_timeout() - Function called by OS if there is any
149 timeout during transmission. Since HDD simply enqueues packet
150 and returns control to OS right away, this would never be invoked
151
152 @param dev : [in] pointer to Libra network device
153 @return : None
154 ===========================================================================*/
155extern void hdd_tx_timeout(struct net_device *dev);
156
157/**============================================================================
158 @brief hdd_stats() - Function registered with the Linux OS for
159 device TX/RX statistics
160
161 @param dev : [in] pointer to Libra network device
162
163 @return : pointer to net_device_stats structure
164 ===========================================================================*/
165extern struct net_device_stats* hdd_stats(struct net_device *dev);
166
167/**============================================================================
168 @brief hdd_init_tx_rx() - Init function to initialize Tx/RX
169 modules in HDD
170
171 @param pAdapter : [in] pointer to adapter context
172 @return : VOS_STATUS_E_FAILURE if any errors encountered
173 : VOS_STATUS_SUCCESS otherwise
174 ===========================================================================*/
175extern VOS_STATUS hdd_init_tx_rx( hdd_adapter_t *pAdapter );
176
177/**============================================================================
178 @brief hdd_deinit_tx_rx() - Deinit function to clean up Tx/RX
179 modules in HDD
180
181 @param pAdapter : [in] pointer to adapter context
182 @return : VOS_STATUS_E_FAILURE if any errors encountered
183 : VOS_STATUS_SUCCESS otherwise
184 ===========================================================================*/
185extern VOS_STATUS hdd_deinit_tx_rx( hdd_adapter_t *pAdapter );
186
187/**============================================================================
188 @brief hdd_disconnect_tx_rx() - Disconnect function to clean up Tx/RX
189 modules in HDD
190
191 @param pAdapter : [in] pointer to adapter context
192 @return : VOS_STATUS_E_FAILURE if any errors encountered
193 : VOS_STATUS_SUCCESS otherwise
194 ===========================================================================*/
195extern VOS_STATUS hdd_disconnect_tx_rx( hdd_adapter_t *pAdapter );
196
197/**============================================================================
198 @brief hdd_tx_complete_cbk() - Callback function invoked by TL
199 to indicate that a packet has been transmitted across the SDIO bus
200 succesfully. OS packet resources can be released after this cbk.
201
202 @param vosContext : [in] pointer to VOS context
203 @param pVosPacket : [in] pointer to VOS packet (containing skb)
204 @param vosStatusIn : [in] status of the transmission
205
206 @return : VOS_STATUS_E_FAILURE if any errors encountered
207 : VOS_STATUS_SUCCESS otherwise
208 ===========================================================================*/
209extern VOS_STATUS hdd_tx_complete_cbk( v_VOID_t *vosContext,
210 vos_pkt_t *pVosPacket,
211 VOS_STATUS vosStatusIn );
212
213/**============================================================================
214 @brief hdd_tx_fetch_packet_cbk() - Callback function invoked by TL to
215 fetch a packet for transmission.
216
217 @param vosContext : [in] pointer to VOS context
218 @param staId : [in] Station for which TL is requesting a pkt
219 @param ucAC : [in] pointer to access category requested by TL
220 @param pVosPacket : [out] pointer to VOS packet packet pointer
221 @param pPktMetaInfo : [out] pointer to meta info for the pkt
222
223 @return : VOS_STATUS_E_EMPTY if no packets to transmit
224 : VOS_STATUS_E_FAILURE if any errors encountered
225 : VOS_STATUS_SUCCESS otherwise
226 ===========================================================================*/
227extern VOS_STATUS hdd_tx_fetch_packet_cbk( v_VOID_t *vosContext,
228 v_U8_t *pStaId,
229 WLANTL_ACEnumType ucAC,
230 vos_pkt_t **ppVosPacket,
231 WLANTL_MetaInfoType *pPktMetaInfo );
232
233/**============================================================================
234 @brief hdd_tx_low_resource_cbk() - Callback function invoked in the
235 case where VOS packets are not available at the time of the call to get
236 packets. This callback function is invoked by VOS when packets are
237 available.
238
239 @param pVosPacket : [in] pointer to VOS packet
240 @param userData : [in] opaque user data that was passed initially
241
242 @return : VOS_STATUS_E_FAILURE if any errors encountered,
243 : VOS_STATUS_SUCCESS otherwise
244 =============================================================================*/
245extern VOS_STATUS hdd_tx_low_resource_cbk( vos_pkt_t *pVosPacket,
246 v_VOID_t *userData );
247
248/**============================================================================
249 @brief hdd_rx_packet_cbk() - Receive callback registered with TL.
250 TL will call this to notify the HDD when a packet was received
251 for a registered STA.
252
253 @param vosContext : [in] pointer to VOS context
254 @param pVosPacket : [in] pointer to VOS packet (conatining sk_buff)
255 @param staId : [in] Station Id
256 @param pRxMetaInfo : [in] pointer to meta info for the received pkt(s)
257
258 @return : VOS_STATUS_E_FAILURE if any errors encountered,
259 : VOS_STATUS_SUCCESS otherwise
260 ===========================================================================*/
261extern VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext,
262 vos_pkt_t *pVosPacket,
263 v_U8_t staId,
264 WLANTL_RxMetaInfoType* pRxMetaInfo );
265
Jeff Johnson295189b2012-06-20 16:38:30 -0700266
267/**============================================================================
268 @brief hdd_IsEAPOLPacket() - Checks the packet is EAPOL or not.
269
270 @param pVosPacket : [in] pointer to vos packet
271 @return : VOS_TRUE if the packet is EAPOL
272 : VOS_FALSE otherwise
273 ===========================================================================*/
274extern v_BOOL_t hdd_IsEAPOLPacket( vos_pkt_t *pVosPacket );
Jeff Johnson295189b2012-06-20 16:38:30 -0700275
Jeff Johnson295189b2012-06-20 16:38:30 -0700276/**============================================================================
Nirav Shah4f765af2015-01-21 19:51:30 +0530277 @brief hdd_FindEapolSubType() - Find EAPOL SubType.
278
279 @param pVosPacket : [in] pointer to vos packet
280 @return : EAPOL_SubType value
281 ===========================================================================*/
282extern EAPOL_SubType hdd_FindEapolSubType( vos_pkt_t *pVosPacket );
283
284/**============================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -0700285 @brief hdd_mon_tx_mgmt_pkt() - Transmit MGMT packet received on monitor
286 interface.
287
Jeff Johnsona8a1a482012-12-12 16:49:33 -0800288 @param pAdapter: [in] SAP/P2P GO adapter.
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 ===========================================================================*/
290void hdd_mon_tx_mgmt_pkt(hdd_adapter_t* pAdapter);
291
292/**============================================================================
293 @brief hdd_mon_tx_work_queue() - workqueue handler for transmitting mgmt packets..
294
295 @param work: [in] workqueue structure.
296 ===========================================================================*/
297void hdd_mon_tx_work_queue(struct work_struct *work);
Jeff Johnson295189b2012-06-20 16:38:30 -0700298
Shailender Karmuchia734f332013-04-19 14:02:48 -0700299/**============================================================================
300 @brief hdd_Ibss_GetStaId() - Get the StationID using the Peer Mac address
301 @param pHddStaCtx : [in] pointer to HDD Station Context
302 pMacAddress [in] pointer to Peer Mac address
303 staID [out] pointer to Station Index
304 @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE
305 ===========================================================================*/
306VOS_STATUS hdd_Ibss_GetStaId(hdd_station_ctx_t *pHddStaCtx,
307 v_MACADDR_t *pMacAddress, v_U8_t *staId);
308
Sudhir Sattayappa Kohalli37620692013-08-05 14:02:26 -0700309/**============================================================================
310 @brief hdd_tx_rx_pkt_cnt_stat_timer_handler() -
311 Timer handler to check enable/disable split scan
312 @param pHddStaCtx : Hdd adapter
313 @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE
314 ===========================================================================*/
315void hdd_tx_rx_pkt_cnt_stat_timer_handler( void *pAdapter);
316
Ravi Joshif9520d62013-10-18 04:11:46 -0700317/**============================================================================
318 @brief hdd_flush_ibss_tx_queues() -
319 Flush tx queues in IBSS mode
Ravi Joshi41914632013-10-21 23:02:21 -0700320 @param pAdapter: Hdd adapter
321 @param STAId: Sta index
Ravi Joshif9520d62013-10-18 04:11:46 -0700322 @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE
323 ===========================================================================*/
324void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId);
325
Kiet Lamf040f472013-11-20 21:15:23 +0530326/**=========================================================================
327 @brief hdd_wmm_acquire_access_required()-
328 Determine whether wmm ac acquire access is required
329 @param pAdapter : pointer to Adapter context
330 @param acType : AC
331 @return : void
332 ========================================================================*/
333void hdd_wmm_acquire_access_required(hdd_adapter_t *pAdapter,
334 WLANTL_ACEnumType acType);
Dino Mycled9b7cc12014-09-04 18:43:07 +0530335
336/**=========================================================================
337 @brief hdd_dump_dhcp_pkt()- For printing DHCP logs
338 @param skb : pointer to skb
339 @param path : path direction
340 @return : void
341 ========================================================================*/
342void hdd_dump_dhcp_pkt(struct sk_buff *skb, int path);
343
Jeff Johnson295189b2012-06-20 16:38:30 -0700344#endif // end #if !defined( WLAN_HDD_TX_RX_H )