blob: fef8e1095cdaf3802aab414a4d78d7c4d425ecfc [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Rajeev Kumar Sirasanagandla5b21a9c2018-01-08 17:05:11 +05302 * Copyright (c) 2012-2013, 2017-2018 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#ifndef __P2P_H
29#define __P2P_H
30/**===========================================================================
31
32\file wlan_hdd_p2p.h
33
34\brief Linux HDD P2P include file
Jeff Johnson295189b2012-06-20 16:38:30 -070035
36==========================================================================*/
Ganesh Kondabattinibabfb492014-12-17 20:25:29 +053037#include <linux/netdevice.h>
38#include <linux/inetdevice.h>
Sudhir Sattayappa Kohalli8ee532d2013-02-15 13:16:26 -080039#define ACTION_FRAME_TX_TIMEOUT 2000
Jeff Johnsone7245742012-09-05 17:12:55 -070040#define WAIT_CANCEL_REM_CHAN 1000
41#define WAIT_REM_CHAN_READY 1000
Jeff Johnson295189b2012-06-20 16:38:30 -070042#define WAIT_CHANGE_CHANNEL_FOR_OFFCHANNEL_TX 3000
Nirav Shah87cd0cb2013-12-28 21:22:09 +053043#define READY_EVENT_PROPOGATE_TIME 2
Jeff Johnson295189b2012-06-20 16:38:30 -070044
Jeff Johnsone7245742012-09-05 17:12:55 -070045#define ACTION_FRAME_DEFAULT_WAIT 200
46
vamsida0e5ab2013-12-26 14:33:27 +053047#define ESTIMATED_ROC_DUR_REQD_FOR_ACTION_TX 20
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049#define WLAN_HDD_GET_TYPE_FRM_FC(__fc__) (((__fc__) & 0x0F) >> 2)
50#define WLAN_HDD_GET_SUBTYPE_FRM_FC(__fc__) (((__fc__) & 0xF0) >> 4)
51#define WLAN_HDD_80211_FRM_DA_OFFSET 4
52#define P2P_WILDCARD_SSID_LEN 7
53#define P2P_WILDCARD_SSID "DIRECT-"
Sushant Kaushik22257d62014-05-20 19:27:07 +053054#define ACTION_FRAME_RSP_WAIT 500
55#define ACTION_FRAME_ACK_WAIT 300
Chet Lanctot186b5732013-03-18 10:26:30 -070056#ifdef WLAN_FEATURE_11W
57#define WLAN_HDD_SET_WEP_FRM_FC(__fc__) ( (__fc__) = ((__fc__) | 0x40))
58#endif //WLAN_FEATURE_11W
59
Ganesh Kondabattinibabfb492014-12-17 20:25:29 +053060#define HDD_P2P_MAX_ROC_DURATION 1000
61
Jeff Johnson295189b2012-06-20 16:38:30 -070062enum hdd_rx_flags {
63 HDD_RX_FLAG_DECRYPTED = 1 << 0,
64 HDD_RX_FLAG_MMIC_STRIPPED = 1 << 1,
65 HDD_RX_FLAG_IV_STRIPPED = 1 << 2,
66};
67
68
Madan Mohan Koyyalamudic0d1b3f2012-11-13 10:41:07 -080069#define P2P_POWER_SAVE_TYPE_OPPORTUNISTIC (1 << 0)
70#define P2P_POWER_SAVE_TYPE_PERIODIC_NOA (1 << 1)
71#define P2P_POWER_SAVE_TYPE_SINGLE_NOA (1 << 2)
Jeff Johnson295189b2012-06-20 16:38:30 -070072
Madan Mohan Koyyalamudi26bd7142012-10-30 18:14:19 -070073#ifdef WLAN_FEATURE_P2P_DEBUG
74typedef enum { P2P_NOT_ACTIVE,
75 P2P_GO_NEG_PROCESS,
76 P2P_GO_NEG_COMPLETED,
77 P2P_CLIENT_CONNECTING_STATE_1,
78 P2P_GO_COMPLETED_STATE,
79 P2P_CLIENT_CONNECTED_STATE_1,
80 P2P_CLIENT_DISCONNECTED_STATE,
81 P2P_CLIENT_CONNECTING_STATE_2,
82 P2P_CLIENT_COMPLETED_STATE
83 }tP2PConnectionStatus;
84
85extern tP2PConnectionStatus globalP2PConnectionStatus;
86#endif
87
Jeff Johnson295189b2012-06-20 16:38:30 -070088typedef struct p2p_app_setP2pPs{
89 tANI_U8 opp_ps;
90 tANI_U32 ctWindow;
91 tANI_U8 count;
92 tANI_U32 duration;
93 tANI_U32 interval;
94 tANI_U32 single_noa_duration;
95 tANI_U8 psSelection;
96}p2p_app_setP2pPs_t;
97
98int wlan_hdd_cfg80211_remain_on_channel( struct wiphy *wiphy,
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -080099#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
100 struct wireless_dev *wdev,
101#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700102 struct net_device *dev,
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800103#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700104 struct ieee80211_channel *chan,
Yue Maf49ba872013-08-19 12:04:25 -0700105#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106 enum nl80211_channel_type channel_type,
Yue Maf49ba872013-08-19 12:04:25 -0700107#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700108 unsigned int duration, u64 *cookie );
109
110int wlan_hdd_cfg80211_cancel_remain_on_channel( struct wiphy *wiphy,
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800111#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
112 struct wireless_dev *wdev,
113#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700114 struct net_device *dev,
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800115#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700116 u64 cookie );
117
118#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
119int wlan_hdd_cfg80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800120#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
121 struct wireless_dev *wdev,
122#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700123 struct net_device *dev,
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800124#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700125 u64 cookie);
126#endif
127
128int hdd_setP2pPs( struct net_device *dev, void *msgData );
129int hdd_setP2pOpps( struct net_device *dev, tANI_U8 *command );
130int hdd_setP2pNoa( struct net_device *dev, tANI_U8 *command );
131
Abhishek Singh7d624e12015-11-30 14:29:27 +0530132void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter,
Jeff Johnson295189b2012-06-20 16:38:30 -0700133 tANI_U32 nFrameLength, tANI_U8* pbFrames,
134 tANI_U8 frameType,
Chilam NG571c65a2013-01-19 12:27:36 +0530135 tANI_U32 rxChan, tANI_S8 rxRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -0700136void hdd_remainChanReadyHandler( hdd_adapter_t *pAdapter );
137void hdd_sendActionCnf( hdd_adapter_t *pAdapter, tANI_BOOLEAN actionSendSuccess );
Jeff Johnson32d95a32012-09-10 13:15:23 -0700138int wlan_hdd_check_remain_on_channel(hdd_adapter_t *pAdapter);
Sushant Kaushik5ad9b7b2014-05-21 21:09:43 +0530139VOS_STATUS wlan_hdd_cancel_existing_remain_on_channel(hdd_adapter_t *pAdapter);
Jeff Johnson295189b2012-06-20 16:38:30 -0700140
Anand N Sunkade9adb1b2015-07-29 09:56:45 +0530141#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0))
142int wlan_hdd_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
143 struct cfg80211_mgmt_tx_params *params, u64 *cookie);
144#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
DARAM SUDHA39eede62014-02-12 11:16:40 +0530145int wlan_hdd_mgmt_tx( struct wiphy *wiphy, struct wireless_dev *wdev,
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800146 struct ieee80211_channel *chan, bool offchan,
Yue Maf49ba872013-08-19 12:04:25 -0700147#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800148 enum nl80211_channel_type channel_type,
Yue Maf49ba872013-08-19 12:04:25 -0700149 bool channel_type_valid,
150#endif
151 unsigned int wait,
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800152 const u8 *buf, size_t len, bool no_cck,
153 bool dont_wait_for_ack, u64 *cookie );
154#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
DARAM SUDHA39eede62014-02-12 11:16:40 +0530155int wlan_hdd_mgmt_tx( struct wiphy *wiphy, struct net_device *dev,
Jeff Johnson295189b2012-06-20 16:38:30 -0700156 struct ieee80211_channel *chan, bool offchan,
157 enum nl80211_channel_type channel_type,
158 bool channel_type_valid, unsigned int wait,
159 const u8 *buf, size_t len, bool no_cck,
160 bool dont_wait_for_ack, u64 *cookie );
161#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
DARAM SUDHA39eede62014-02-12 11:16:40 +0530162int wlan_hdd_mgmt_tx( struct wiphy *wiphy, struct net_device *dev,
Jeff Johnson295189b2012-06-20 16:38:30 -0700163 struct ieee80211_channel *chan, bool offchan,
164 enum nl80211_channel_type channel_type,
165 bool channel_type_valid, unsigned int wait,
166 const u8 *buf, size_t len, u64 *cookie );
167#else
DARAM SUDHA39eede62014-02-12 11:16:40 +0530168int wlan_hdd_mgmt_tx( struct wiphy *wiphy, struct net_device *dev,
Jeff Johnson295189b2012-06-20 16:38:30 -0700169 struct ieee80211_channel *chan,
170 enum nl80211_channel_type channel_type,
171 bool channel_type_valid,
172 const u8 *buf, size_t len, u64 *cookie );
173#endif
174
Rajeev Kumar Sirasanagandla5b21a9c2018-01-08 17:05:11 +0530175#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
176struct wireless_dev *wlan_hdd_add_virtual_intf(struct wiphy *wiphy,
177 const char *name,
178 unsigned char name_assign_type,
179 enum nl80211_iftype type,
180 struct vif_params *params);
Jeff Johnson295189b2012-06-20 16:38:30 -0700181
Rajeev Kumar Sirasanagandla5b21a9c2018-01-08 17:05:11 +0530182#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) || \
183 defined(WITH_BACKPORTS)
184/**
185 * wlan_hdd_add_virtual_intf() - Add virtual interface wrapper
186 * @wiphy: wiphy pointer
187 * @name: User-visible name of the interface
188 * @name_assign_type: the name of assign type of the netdev
189 * @nl80211_iftype: (virtual) interface types
190 * @flags: monitor mode configuration flags (not used)
191 * @vif_params: virtual interface parameters (not used)
192 *
193 * Return: the pointer of wireless dev, otherwise ERR_PTR.
194 */
195struct wireless_dev *wlan_hdd_add_virtual_intf(struct wiphy *wiphy,
196 const char *name,
197 unsigned char name_assign_type,
198 enum nl80211_iftype type,
199 u32 *flags,
200 struct vif_params *params);
201
202#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0))
203/**
204 * wlan_hdd_add_virtual_intf() - Add virtual interface wrapper
205 * @wiphy: wiphy pointer
206 * @name: User-visible name of the interface
207 * @nl80211_iftype: (virtual) interface types
208 * @flags: monitor mode configuration flags (not used)
209 * @vif_params: virtual interface parameters (not used)
210 *
211 * Return: the pointer of wireless dev, otherwise ERR_PTR.
212 */
213struct wireless_dev *wlan_hdd_add_virtual_intf(struct wiphy *wiphy,
214 const char *name,
215 enum nl80211_iftype type,
216 u32 *flags,
217 struct vif_params *params);
218
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800219#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
220struct wireless_dev* wlan_hdd_add_virtual_intf(
221 struct wiphy *wiphy, char *name, enum nl80211_iftype type,
222 u32 *flags, struct vif_params *params );
Rajeev Kumar Sirasanagandla5b21a9c2018-01-08 17:05:11 +0530223
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800224#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
Rajeev Kumar Sirasanagandla5b21a9c2018-01-08 17:05:11 +0530225struct net_device* wlan_hdd_add_virtual_intf(struct wiphy *wiphy,
226 char *name,
227 enum nl80211_iftype type,
228 u32 *flags,
229 struct vif_params *params);
230
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800231#else
Rajeev Kumar Sirasanagandla5b21a9c2018-01-08 17:05:11 +0530232int wlan_hdd_add_virtual_intf(struct wiphy *wiphy, char *name,
233 enum nl80211_iftype type,
234 u32 *flags, struct vif_params *params);
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800235#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700236
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800237#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
238int wlan_hdd_del_virtual_intf( struct wiphy *wiphy, struct wireless_dev *wdev );
239#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700240int wlan_hdd_del_virtual_intf( struct wiphy *wiphy, struct net_device *dev );
Jeff Johnson3bbe4bf2013-01-18 17:05:29 -0800241#endif
Ganesh Kondabattinibabfb492014-12-17 20:25:29 +0530242void hdd_p2p_roc_work_queue(struct work_struct *work);
Jeff Johnson295189b2012-06-20 16:38:30 -0700243#endif // __P2P_H