blob: db57c16cb34ff612920da9d3716e062135a21028 [file] [log] [blame]
Ravi Joshia063dd92016-05-25 16:43:13 -07001/*
2 * Copyright (c) 2016 The Linux Foundation. All rights reserved.
3 *
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
40#define NDP_APP_INFO_LEN 255
41#define NDP_QOS_INFO_LEN 255
Naveen Rawatf28315c2016-06-29 18:06:02 -070042#define NDP_NUM_INSTANCE_ID 255
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070043
Deepak Dhamdhere5872c8c2016-06-02 15:51:47 -070044#define HDD_MAX_NUM_NDP_STA (MAX_IBSS_PEERS)
45#define NDP_BROADCAST_STAID (0)
46
Deepak Dhamdheref16015f2016-06-01 14:28:09 -070047#ifdef WLAN_FEATURE_NAN_DATAPATH
48#define WLAN_HDD_IS_NDI(adapter) ((adapter)->device_mode == QDF_NDI_MODE)
49
50#define WLAN_HDD_IS_NDI_CONNECTED(adapter) ( \
51 eConnectionState_NdiConnected ==\
52 (adapter)->sessionCtx.station.conn_info.connState)
53#else
54#define WLAN_HDD_IS_NDI(adapter) (false)
55#define WLAN_HDD_IS_NDI_CONNECTED(adapter) (false)
56#endif /* WLAN_FEATURE_NAN_DATAPATH */
57
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070058/**
59 * enum qca_wlan_vendor_attr_ndp_params - vendor attribute parameters
60 * @QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD: NDP Sub command
61 * @QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID: Transaction id reference
62 * @QCA_WLAN_VENDOR_ATTR_NDP_STATUS_ID: NDP status id
63 * @QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID: Service instance id
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070064 * @QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL: Requested channel
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070065 * @QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR: Peer discovery mac addr
66 * @QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR: Iface name
67 * @QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_SECURITY: Security configuration
68 * @QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS: Qos configuration
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070069 * @QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO: Application info
70 * @QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID: NDP instance id
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070071 * @QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY: NDP instance id array
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070072 * @QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE: Schedule response
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070073 * @QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR: NDI mac address
74 * @QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE: Driver return status
75 * @QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE: Driver return value
76 */
77enum qca_wlan_vendor_attr_ndp_params {
78 QCA_WLAN_VENDOR_ATTR_NDP_PARAM_INVALID = 0,
79 QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD,
80 QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID,
81 QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID,
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070082 QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070083 QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR,
84 QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR,
85 QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_SECURITY,
86 QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070087 QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO,
88 QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070089 QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY,
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070090 QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070091 QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR,
92 QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE,
93 QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE,
94
95 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_AFTER_LAST,
96 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX =
97 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_AFTER_LAST - 1,
98};
99
100/**
101 * enum qca_wlan_vendor_attr_ndp_cfg_security - vendor security attribute
102 * @QCA_WLAN_VENDOR_ATTR_NDP_SECURITY_ENABLE: Security enabled
103 */
104enum qca_wlan_vendor_attr_ndp_cfg_security {
105 QCA_WLAN_VENDOR_ATTR_NDP_SECURITY_ENABLE = 1,
106};
107
108/**
109 * enum qca_wlan_vendor_attr_ndp_qos - vendor qos attribute
110 * @QCA_WLAN_VENDOR_ATTR_NDP_QOS_CONFIG: NDP QoS configuration
111 */
112enum qca_wlan_vendor_attr_ndp_qos {
113 QCA_WLAN_VENDOR_ATTR_NDP_QOS_CONFIG = 1,
114};
115
116/**
117 * enum qca_wlan_vendor_attr_ndp_sub_cmd_value - NDP subcmd value
118 * @QCA_WLAN_VENDOR_ATTR_NDP_INVALID: Unused subcmd value
119 * @QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE: iface create
120 * @QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE: iface delete
121 * @QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_REQUEST: NDP initiator request
122 * @QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_RESPONSE: NDP initiator response
123 * @QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_REQUEST: NDP responder request
124 * @QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE: NDP responder response
125 * @QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST: NDP end request
126 * @QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE: NDP end response
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700127 * @QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND: NDP request indication
128 * @QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND: NDP confirm indication
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700129 * @QCA_WLAN_VENDOR_ATTR_NDP_END_IND: NDP End indication
130 */
131enum qca_wlan_vendor_attr_ndp_sub_cmd_value {
132 QCA_WLAN_VENDOR_ATTR_NDP_INVALID = 0,
133 QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE = 1,
134 QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE = 2,
135 QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_REQUEST = 3,
136 QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_RESPONSE = 4,
137 QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_REQUEST = 5,
138 QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE = 6,
139 QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST = 7,
140 QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE = 8,
Naveen Rawatd9153502016-06-06 15:30:29 -0700141 QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND = 9,
142 QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND = 10,
143 QCA_WLAN_VENDOR_ATTR_NDP_END_IND = 11
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700144};
145
146/** enum nan_datapath_state - NAN datapath states
147 * @NAN_DATA_NDI_CREATING_STATE: NDI create is in progress
148 * @NAN_DATA_NDI_CREATED_STATE: NDI successfully crated
149 * @NAN_DATA_NDI_DELETING_STATE: NDI delete is in progress
150 * @NAN_DATA_NDI_DELETED_STATE: NDI delete is in progress
151 * @NAN_DATA_PEER_CREATE_STATE: Peer create is in progress
152 * @NAN_DATA_PEER_DELETE_STATE: Peer delete is in progrss
153 * @NAN_DATA_CONNECTING_STATE: Data connection in progress
154 * @NAN_DATA_CONNECTED_STATE: Data connection successful
155 * @NAN_DATA_END_STATE: NDP end is in progress
156 * @NAN_DATA_DISCONNECTED_STATE: NDP is in disconnected state
157 */
158enum nan_datapath_state {
159 NAN_DATA_NDI_CREATING_STATE = 0,
160 NAN_DATA_NDI_CREATED_STATE = 1,
161 NAN_DATA_NDI_DELETING_STATE = 2,
162 NAN_DATA_NDI_DELETED_STATE = 3,
163 NAN_DATA_PEER_CREATE_STATE = 4,
164 NAN_DATA_PEER_DELETE_STATE = 5,
165 NAN_DATA_CONNECTING_STATE = 6,
166 NAN_DATA_CONNECTED_STATE = 7,
167 NAN_DATA_END_STATE = 8,
168 NAN_DATA_DISCONNECTED_STATE = 9,
169};
170
171/**
172 * struct nan_datapath_ctx - context for nan data path
173 * @state: Current state of NDP
174 * @active_ndp_sessions: active ndp sessions per adapter
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -0700175 * @active_ndp_peers: number of active ndp peers
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700176 * @ndp_create_transaction_id: transaction id for create req
177 * @ndp_delete_transaction_id: transaction id for delete req
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700178 * @ndp_key_installed: NDP security key installed
179 * @ndp_enc_key: NDP encryption key info
180 * @ndp_debug_state: debug state info
Naveen Rawat8d63a592016-06-29 18:30:59 -0700181 * @ndi_delete_rsp_reason: reason code for ndi_delete rsp
182 * @ndi_delete_rsp_status: status for ndi_delete rsp
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700183 */
184struct nan_datapath_ctx {
185 enum nan_datapath_state state;
Naveen Rawatf28315c2016-06-29 18:06:02 -0700186 /* idx in following array should follow conn_info.peerMacAddress */
187 uint32_t active_ndp_sessions[HDD_MAX_NUM_NDP_STA];
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -0700188 uint32_t active_ndp_peers;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700189 uint16_t ndp_create_transaction_id;
190 uint16_t ndp_delete_transaction_id;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700191 bool ndp_key_installed;
192 tCsrRoamSetKey ndp_enc_key;
193 uint32_t ndp_debug_state;
Naveen Rawat8d63a592016-06-29 18:30:59 -0700194 uint32_t ndi_delete_rsp_reason;
195 uint32_t ndi_delete_rsp_status;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700196};
Deepak Dhamdhere3385d752016-05-25 20:36:47 -0700197
198#ifdef WLAN_FEATURE_NAN_DATAPATH
199void hdd_ndp_print_ini_config(struct hdd_context_s *hdd_ctx);
Deepak Dhamdhere13230d32016-05-26 00:46:53 -0700200void hdd_nan_datapath_target_config(struct hdd_context_s *hdd_ctx,
201 struct wma_tgt_cfg *cfg);
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700202void hdd_ndp_event_handler(struct hdd_adapter_s *adapter,
203 tCsrRoamInfo *roam_info, uint32_t roam_id, eRoamCmdStatus roam_status,
204 eCsrRoamResult roam_result);
205int wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy,
206 struct wireless_dev *wdev, const void *data, int data_len);
207int hdd_init_nan_data_mode(struct hdd_adapter_s *adapter);
Deepak Dhamdhere13983f22016-05-31 19:06:09 -0700208void hdd_ndp_session_end_handler(hdd_adapter_t *adapter);
Deepak Dhamdhere3385d752016-05-25 20:36:47 -0700209#else
210static inline void hdd_ndp_print_ini_config(struct hdd_context_s *hdd_ctx)
211{
212}
Deepak Dhamdhere13230d32016-05-26 00:46:53 -0700213static inline void hdd_nan_datapath_target_config(struct hdd_context_s *hdd_ctx,
214 struct wma_tgt_cfg *cfg)
215{
216}
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700217static inline void hdd_ndp_event_handler(struct hdd_adapter_s *adapter,
218 tCsrRoamInfo *roam_info, uint32_t roam_id, eRoamCmdStatus roam_status,
219 eCsrRoamResult roam_result)
220{
221}
222static inline int wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy,
223 struct wireless_dev *wdev, const void *data, int data_len)
224{
225 return 0;
226}
227static inline int hdd_init_nan_data_mode(struct hdd_adapter_s *adapter)
228{
229 return 0;
230}
Deepak Dhamdhere13983f22016-05-31 19:06:09 -0700231static inline void hdd_ndp_session_end_handler(hdd_adapter_t *adapter)
232{
233}
Deepak Dhamdhere3385d752016-05-25 20:36:47 -0700234#endif /* WLAN_FEATURE_NAN_DATAPATH */
235
Ravi Joshia063dd92016-05-25 16:43:13 -0700236#endif /* __WLAN_HDD_NAN_DATAPATH_H */