blob: bd263ecced8eb87c8141de91076d7d7c9e55da52 [file] [log] [blame]
Ravi Joshia063dd92016-05-25 16:43:13 -07001/*
Naveen Rawat0a017052016-10-19 14:17:07 -07002 * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
Ravi Joshia063dd92016-05-25 16:43:13 -07003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 * Permission to use, copy, modify, and/or distribute this software for
7 * any purpose with or without fee is hereby granted, provided that the
8 * above copyright notice and this permission notice appear in all
9 * copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
12 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
15 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
16 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
17 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
18 * PERFORMANCE OF THIS SOFTWARE.
19 */
20
21/**
22 * DOC: wlan_hdd_nan_datapath.h
23 *
24 * WLAN Host Device Driver nan datapath API specification
25 */
Ravi Joshia063dd92016-05-25 16:43:13 -070026#ifndef __WLAN_HDD_NAN_DATAPATH_H
27#define __WLAN_HDD_NAN_DATAPATH_H
28
Deepak Dhamdhere3385d752016-05-25 20:36:47 -070029struct hdd_context_s;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070030struct hdd_tgt_cfg;
Deepak Dhamdhere13230d32016-05-26 00:46:53 -070031struct hdd_config;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070032struct hdd_adapter_s;
33struct wireless_dev;
34
35/* NAN Social channels */
36#define NAN_SOCIAL_CHANNEL_2_4GHZ 6
37#define NAN_SOCIAL_CHANNEL_5GHZ_LOWER_BAND 44
38#define NAN_SOCIAL_CHANNEL_5GHZ_UPPER_BAND 149
39
Deepak Dhamdhere5872c8c2016-06-02 15:51:47 -070040#define NDP_BROADCAST_STAID (0)
41
Deepak Dhamdheref16015f2016-06-01 14:28:09 -070042#ifdef WLAN_FEATURE_NAN_DATAPATH
43#define WLAN_HDD_IS_NDI(adapter) ((adapter)->device_mode == QDF_NDI_MODE)
44
45#define WLAN_HDD_IS_NDI_CONNECTED(adapter) ( \
46 eConnectionState_NdiConnected ==\
47 (adapter)->sessionCtx.station.conn_info.connState)
48#else
49#define WLAN_HDD_IS_NDI(adapter) (false)
50#define WLAN_HDD_IS_NDI_CONNECTED(adapter) (false)
51#endif /* WLAN_FEATURE_NAN_DATAPATH */
52
Naveen Rawat97500352017-03-22 10:07:58 -070053#ifndef WLAN_FEATURE_NAN_CONVERGENCE
54
55#define NDP_QOS_INFO_LEN 255
56#define NDP_APP_INFO_LEN 255
57#define NDP_PMK_LEN 32
58#define NDP_SCID_BUF_LEN 256
59#define NDP_NUM_INSTANCE_ID 255
60
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070061/**
62 * enum qca_wlan_vendor_attr_ndp_params - vendor attribute parameters
63 * @QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD: NDP Sub command
64 * @QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID: Transaction id reference
65 * @QCA_WLAN_VENDOR_ATTR_NDP_STATUS_ID: NDP status id
66 * @QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID: Service instance id
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070067 * @QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL: Requested channel
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070068 * @QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR: Peer discovery mac addr
69 * @QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR: Iface name
70 * @QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_SECURITY: Security configuration
71 * @QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS: Qos configuration
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070072 * @QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO: Application info
73 * @QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID: NDP instance id
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070074 * @QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY: NDP instance id array
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070075 * @QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE: Schedule response
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070076 * @QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR: NDI mac address
Rakesh Sunkid92d1082017-01-04 15:14:28 -080077 * @QCA_WLAN_VENDOR_ATTR_NDP_DRV_RESPONSE_STATUS_TYPE: Driver return status
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070078 * @QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE: Driver return value
Naveen Rawat0a017052016-10-19 14:17:07 -070079 * @QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL_CONFIG: Channel config request type
Naveen Rawat4f3983e2016-11-29 16:12:09 -080080 * @QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE: Cipher Suit ID
81 * @QCA_WLAN_VENDOR_ATTR_NDP_PMK: Pairwise Master Key
82 * @QCA_WLAN_VENDOR_ATTR_NDP_SCID: Security Context ID
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070083 */
84enum qca_wlan_vendor_attr_ndp_params {
85 QCA_WLAN_VENDOR_ATTR_NDP_PARAM_INVALID = 0,
86 QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD,
87 QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID,
88 QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID,
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070089 QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070090 QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR,
91 QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR,
Naveen Rawat4f3983e2016-11-29 16:12:09 -080092 /* CONFIG_SECURITY is deprecated, use NCS_SK_TYPE/PMK/SCID instead */
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070093 QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_SECURITY,
94 QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070095 QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO,
96 QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070097 QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY,
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070098 QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070099 QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR,
Rakesh Sunkid92d1082017-01-04 15:14:28 -0800100 QCA_WLAN_VENDOR_ATTR_NDP_DRV_RESPONSE_STATUS_TYPE,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700101 QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE,
Naveen Rawat0a017052016-10-19 14:17:07 -0700102 QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL_CONFIG,
Naveen Rawat4f3983e2016-11-29 16:12:09 -0800103 QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE,
104 QCA_WLAN_VENDOR_ATTR_NDP_PMK,
105 QCA_WLAN_VENDOR_ATTR_NDP_SCID,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700106
107 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_AFTER_LAST,
108 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX =
109 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_AFTER_LAST - 1,
110};
111
112/**
113 * enum qca_wlan_vendor_attr_ndp_cfg_security - vendor security attribute
114 * @QCA_WLAN_VENDOR_ATTR_NDP_SECURITY_ENABLE: Security enabled
115 */
116enum qca_wlan_vendor_attr_ndp_cfg_security {
117 QCA_WLAN_VENDOR_ATTR_NDP_SECURITY_ENABLE = 1,
118};
119
120/**
121 * enum qca_wlan_vendor_attr_ndp_qos - vendor qos attribute
122 * @QCA_WLAN_VENDOR_ATTR_NDP_QOS_CONFIG: NDP QoS configuration
123 */
124enum qca_wlan_vendor_attr_ndp_qos {
125 QCA_WLAN_VENDOR_ATTR_NDP_QOS_CONFIG = 1,
126};
127
128/**
129 * enum qca_wlan_vendor_attr_ndp_sub_cmd_value - NDP subcmd value
130 * @QCA_WLAN_VENDOR_ATTR_NDP_INVALID: Unused subcmd value
131 * @QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE: iface create
132 * @QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE: iface delete
133 * @QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_REQUEST: NDP initiator request
134 * @QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_RESPONSE: NDP initiator response
135 * @QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_REQUEST: NDP responder request
136 * @QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE: NDP responder response
137 * @QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST: NDP end request
138 * @QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE: NDP end response
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700139 * @QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND: NDP request indication
140 * @QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND: NDP confirm indication
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700141 * @QCA_WLAN_VENDOR_ATTR_NDP_END_IND: NDP End indication
142 */
143enum qca_wlan_vendor_attr_ndp_sub_cmd_value {
144 QCA_WLAN_VENDOR_ATTR_NDP_INVALID = 0,
145 QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE = 1,
146 QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE = 2,
147 QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_REQUEST = 3,
148 QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_RESPONSE = 4,
149 QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_REQUEST = 5,
150 QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE = 6,
151 QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST = 7,
152 QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE = 8,
Naveen Rawatd9153502016-06-06 15:30:29 -0700153 QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND = 9,
154 QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND = 10,
155 QCA_WLAN_VENDOR_ATTR_NDP_END_IND = 11
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700156};
157
158/** enum nan_datapath_state - NAN datapath states
159 * @NAN_DATA_NDI_CREATING_STATE: NDI create is in progress
160 * @NAN_DATA_NDI_CREATED_STATE: NDI successfully crated
161 * @NAN_DATA_NDI_DELETING_STATE: NDI delete is in progress
162 * @NAN_DATA_NDI_DELETED_STATE: NDI delete is in progress
163 * @NAN_DATA_PEER_CREATE_STATE: Peer create is in progress
164 * @NAN_DATA_PEER_DELETE_STATE: Peer delete is in progrss
165 * @NAN_DATA_CONNECTING_STATE: Data connection in progress
166 * @NAN_DATA_CONNECTED_STATE: Data connection successful
167 * @NAN_DATA_END_STATE: NDP end is in progress
168 * @NAN_DATA_DISCONNECTED_STATE: NDP is in disconnected state
169 */
170enum nan_datapath_state {
171 NAN_DATA_NDI_CREATING_STATE = 0,
172 NAN_DATA_NDI_CREATED_STATE = 1,
173 NAN_DATA_NDI_DELETING_STATE = 2,
174 NAN_DATA_NDI_DELETED_STATE = 3,
175 NAN_DATA_PEER_CREATE_STATE = 4,
176 NAN_DATA_PEER_DELETE_STATE = 5,
177 NAN_DATA_CONNECTING_STATE = 6,
178 NAN_DATA_CONNECTED_STATE = 7,
179 NAN_DATA_END_STATE = 8,
180 NAN_DATA_DISCONNECTED_STATE = 9,
181};
182
183/**
184 * struct nan_datapath_ctx - context for nan data path
185 * @state: Current state of NDP
186 * @active_ndp_sessions: active ndp sessions per adapter
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -0700187 * @active_ndp_peers: number of active ndp peers
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700188 * @ndp_create_transaction_id: transaction id for create req
189 * @ndp_delete_transaction_id: transaction id for delete req
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700190 * @ndp_key_installed: NDP security key installed
191 * @ndp_enc_key: NDP encryption key info
192 * @ndp_debug_state: debug state info
Naveen Rawat8d63a592016-06-29 18:30:59 -0700193 * @ndi_delete_rsp_reason: reason code for ndi_delete rsp
194 * @ndi_delete_rsp_status: status for ndi_delete rsp
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700195 */
196struct nan_datapath_ctx {
197 enum nan_datapath_state state;
Naveen Rawatf28315c2016-06-29 18:06:02 -0700198 /* idx in following array should follow conn_info.peerMacAddress */
Naveen Rawatc45d1622016-07-05 12:20:09 -0700199 uint32_t active_ndp_sessions[MAX_PEERS];
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -0700200 uint32_t active_ndp_peers;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700201 uint16_t ndp_create_transaction_id;
202 uint16_t ndp_delete_transaction_id;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700203 bool ndp_key_installed;
204 tCsrRoamSetKey ndp_enc_key;
205 uint32_t ndp_debug_state;
Naveen Rawat8d63a592016-06-29 18:30:59 -0700206 uint32_t ndi_delete_rsp_reason;
207 uint32_t ndi_delete_rsp_status;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700208};
Naveen Rawat97500352017-03-22 10:07:58 -0700209#endif
Deepak Dhamdhere3385d752016-05-25 20:36:47 -0700210
211#ifdef WLAN_FEATURE_NAN_DATAPATH
212void hdd_ndp_print_ini_config(struct hdd_context_s *hdd_ctx);
Deepak Dhamdhere13230d32016-05-26 00:46:53 -0700213void hdd_nan_datapath_target_config(struct hdd_context_s *hdd_ctx,
214 struct wma_tgt_cfg *cfg);
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700215void hdd_ndp_event_handler(struct hdd_adapter_s *adapter,
216 tCsrRoamInfo *roam_info, uint32_t roam_id, eRoamCmdStatus roam_status,
217 eCsrRoamResult roam_result);
218int wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy,
219 struct wireless_dev *wdev, const void *data, int data_len);
220int hdd_init_nan_data_mode(struct hdd_adapter_s *adapter);
Deepak Dhamdhere13983f22016-05-31 19:06:09 -0700221void hdd_ndp_session_end_handler(hdd_adapter_t *adapter);
Deepak Dhamdhere3385d752016-05-25 20:36:47 -0700222#else
223static inline void hdd_ndp_print_ini_config(struct hdd_context_s *hdd_ctx)
224{
225}
Deepak Dhamdhere13230d32016-05-26 00:46:53 -0700226static inline void hdd_nan_datapath_target_config(struct hdd_context_s *hdd_ctx,
227 struct wma_tgt_cfg *cfg)
228{
229}
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700230static inline void hdd_ndp_event_handler(struct hdd_adapter_s *adapter,
231 tCsrRoamInfo *roam_info, uint32_t roam_id, eRoamCmdStatus roam_status,
232 eCsrRoamResult roam_result)
233{
234}
235static inline int wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy,
236 struct wireless_dev *wdev, const void *data, int data_len)
237{
238 return 0;
239}
240static inline int hdd_init_nan_data_mode(struct hdd_adapter_s *adapter)
241{
242 return 0;
243}
Deepak Dhamdhere13983f22016-05-31 19:06:09 -0700244static inline void hdd_ndp_session_end_handler(hdd_adapter_t *adapter)
245{
246}
Deepak Dhamdhere3385d752016-05-25 20:36:47 -0700247#endif /* WLAN_FEATURE_NAN_DATAPATH */
248
Naveen Rawatcb5c5402017-03-22 10:12:19 -0700249enum nan_datapath_state;
250struct nan_datapath_inf_create_rsp;
251
252struct wlan_objmgr_vdev *hdd_ndi_open(char *iface_name);
253int hdd_ndi_start(uint8_t vdev_id);
254int hdd_ndi_delete(uint8_t vdev_id, char *iface_name, uint16_t transaction_id);
255void hdd_ndi_close(uint8_t vdev_id);
256void hdd_ndi_drv_ndi_create_rsp_handler(uint8_t vdev_id,
257 struct nan_datapath_inf_create_rsp *ndi_rsp);
258void hdd_ndi_drv_ndi_delete_rsp_handler(uint8_t vdev_id);
Naveen Rawat37f62c82017-03-26 22:24:43 -0700259int hdd_ndp_get_peer_idx(uint8_t vdev_id, struct qdf_mac_addr *addr);
260int hdd_ndp_new_peer_handler(uint8_t vdev_id, uint16_t sta_id,
261 struct qdf_mac_addr *peer_mac_addr, bool fist_peer);
Naveen Rawatcb5c5402017-03-22 10:12:19 -0700262
Ravi Joshia063dd92016-05-25 16:43:13 -0700263#endif /* __WLAN_HDD_NAN_DATAPATH_H */