blob: 46bb816922009ac2bff6344e49038c1be2b8eb53 [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
42
Deepak Dhamdhere5872c8c2016-06-02 15:51:47 -070043#define HDD_MAX_NUM_NDP_STA (MAX_IBSS_PEERS)
44#define NDP_BROADCAST_STAID (0)
45
Deepak Dhamdheref16015f2016-06-01 14:28:09 -070046#ifdef WLAN_FEATURE_NAN_DATAPATH
47#define WLAN_HDD_IS_NDI(adapter) ((adapter)->device_mode == QDF_NDI_MODE)
48
49#define WLAN_HDD_IS_NDI_CONNECTED(adapter) ( \
50 eConnectionState_NdiConnected ==\
51 (adapter)->sessionCtx.station.conn_info.connState)
52#else
53#define WLAN_HDD_IS_NDI(adapter) (false)
54#define WLAN_HDD_IS_NDI_CONNECTED(adapter) (false)
55#endif /* WLAN_FEATURE_NAN_DATAPATH */
56
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070057/**
58 * enum qca_wlan_vendor_attr_ndp_params - vendor attribute parameters
59 * @QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD: NDP Sub command
60 * @QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID: Transaction id reference
61 * @QCA_WLAN_VENDOR_ATTR_NDP_STATUS_ID: NDP status id
62 * @QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID: Service instance id
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070063 * @QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL: Requested channel
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070064 * @QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR: Peer discovery mac addr
65 * @QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR: Iface name
66 * @QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_SECURITY: Security configuration
67 * @QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS: Qos configuration
68 * @QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO_LEN: Application info length
69 * @QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO: Application info
70 * @QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID: NDP instance id
71 * @QCA_WLAN_VENDOR_ATTR_NDP_NUM_INSTANCE_ID: Number of NDP instance ids
72 * @QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY: NDP instance id array
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070073 * @QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE: Schedule response
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070074 * @QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_STATUS_CODE: schedule status
75 * @QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR: NDI mac address
76 * @QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE: Driver return status
77 * @QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE: Driver return value
78 */
79enum qca_wlan_vendor_attr_ndp_params {
80 QCA_WLAN_VENDOR_ATTR_NDP_PARAM_INVALID = 0,
81 QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD,
82 QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID,
83 QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID,
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070084 QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070085 QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR,
86 QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR,
87 QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_SECURITY,
88 QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS,
89 QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO_LEN,
90 QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO,
91 QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID,
92 QCA_WLAN_VENDOR_ATTR_NDP_NUM_INSTANCE_ID,
93 QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY,
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -070094 QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE,
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -070095 QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_STATUS_CODE,
96 QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR,
97 QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE,
98 QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE,
99
100 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_AFTER_LAST,
101 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX =
102 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_AFTER_LAST - 1,
103};
104
105/**
106 * enum qca_wlan_vendor_attr_ndp_cfg_security - vendor security attribute
107 * @QCA_WLAN_VENDOR_ATTR_NDP_SECURITY_ENABLE: Security enabled
108 */
109enum qca_wlan_vendor_attr_ndp_cfg_security {
110 QCA_WLAN_VENDOR_ATTR_NDP_SECURITY_ENABLE = 1,
111};
112
113/**
114 * enum qca_wlan_vendor_attr_ndp_qos - vendor qos attribute
115 * @QCA_WLAN_VENDOR_ATTR_NDP_QOS_CONFIG: NDP QoS configuration
116 */
117enum qca_wlan_vendor_attr_ndp_qos {
118 QCA_WLAN_VENDOR_ATTR_NDP_QOS_CONFIG = 1,
119};
120
121/**
122 * enum qca_wlan_vendor_attr_ndp_sub_cmd_value - NDP subcmd value
123 * @QCA_WLAN_VENDOR_ATTR_NDP_INVALID: Unused subcmd value
124 * @QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE: iface create
125 * @QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE: iface delete
126 * @QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_REQUEST: NDP initiator request
127 * @QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_RESPONSE: NDP initiator response
128 * @QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_REQUEST: NDP responder request
129 * @QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE: NDP responder response
130 * @QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST: NDP end request
131 * @QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE: NDP end response
132 * @QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_REQUEST: NDP update request
133 * @QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_RESPONSE: NDP update response
134 * @QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND: NDP request indication
135 * @QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND: NDP confirm indication
136 * @QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_IND: NDP sched update indication
137 * @QCA_WLAN_VENDOR_ATTR_NDP_END_IND: NDP End indication
138 */
139enum qca_wlan_vendor_attr_ndp_sub_cmd_value {
140 QCA_WLAN_VENDOR_ATTR_NDP_INVALID = 0,
141 QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE = 1,
142 QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE = 2,
143 QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_REQUEST = 3,
144 QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_RESPONSE = 4,
145 QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_REQUEST = 5,
146 QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE = 6,
147 QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST = 7,
148 QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE = 8,
149 QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_REQUEST = 9,
150 QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_RESPONSE = 10,
151 QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND = 11,
152 QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND = 12,
153 QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_IND = 13,
154 QCA_WLAN_VENDOR_ATTR_NDP_END_IND = 14
155};
156
157/** enum nan_datapath_state - NAN datapath states
158 * @NAN_DATA_NDI_CREATING_STATE: NDI create is in progress
159 * @NAN_DATA_NDI_CREATED_STATE: NDI successfully crated
160 * @NAN_DATA_NDI_DELETING_STATE: NDI delete is in progress
161 * @NAN_DATA_NDI_DELETED_STATE: NDI delete is in progress
162 * @NAN_DATA_PEER_CREATE_STATE: Peer create is in progress
163 * @NAN_DATA_PEER_DELETE_STATE: Peer delete is in progrss
164 * @NAN_DATA_CONNECTING_STATE: Data connection in progress
165 * @NAN_DATA_CONNECTED_STATE: Data connection successful
166 * @NAN_DATA_END_STATE: NDP end is in progress
167 * @NAN_DATA_DISCONNECTED_STATE: NDP is in disconnected state
168 */
169enum nan_datapath_state {
170 NAN_DATA_NDI_CREATING_STATE = 0,
171 NAN_DATA_NDI_CREATED_STATE = 1,
172 NAN_DATA_NDI_DELETING_STATE = 2,
173 NAN_DATA_NDI_DELETED_STATE = 3,
174 NAN_DATA_PEER_CREATE_STATE = 4,
175 NAN_DATA_PEER_DELETE_STATE = 5,
176 NAN_DATA_CONNECTING_STATE = 6,
177 NAN_DATA_CONNECTED_STATE = 7,
178 NAN_DATA_END_STATE = 8,
179 NAN_DATA_DISCONNECTED_STATE = 9,
180};
181
182/**
183 * struct nan_datapath_ctx - context for nan data path
184 * @state: Current state of NDP
185 * @active_ndp_sessions: active ndp sessions per adapter
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -0700186 * @active_ndp_peers: number of active ndp peers
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700187 * @ndp_create_transaction_id: transaction id for create req
188 * @ndp_delete_transaction_id: transaction id for delete req
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700189 * @ndp_key_installed: NDP security key installed
190 * @ndp_enc_key: NDP encryption key info
191 * @ndp_debug_state: debug state info
192 */
193struct nan_datapath_ctx {
194 enum nan_datapath_state state;
195 uint32_t active_ndp_sessions;
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -0700196 uint32_t active_ndp_peers;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700197 uint16_t ndp_create_transaction_id;
198 uint16_t ndp_delete_transaction_id;
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700199 bool ndp_key_installed;
200 tCsrRoamSetKey ndp_enc_key;
201 uint32_t ndp_debug_state;
202};
Deepak Dhamdhere3385d752016-05-25 20:36:47 -0700203
204#ifdef WLAN_FEATURE_NAN_DATAPATH
205void hdd_ndp_print_ini_config(struct hdd_context_s *hdd_ctx);
Deepak Dhamdhere13230d32016-05-26 00:46:53 -0700206void hdd_nan_datapath_target_config(struct hdd_context_s *hdd_ctx,
207 struct wma_tgt_cfg *cfg);
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700208void hdd_ndp_event_handler(struct hdd_adapter_s *adapter,
209 tCsrRoamInfo *roam_info, uint32_t roam_id, eRoamCmdStatus roam_status,
210 eCsrRoamResult roam_result);
211int wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy,
212 struct wireless_dev *wdev, const void *data, int data_len);
213int hdd_init_nan_data_mode(struct hdd_adapter_s *adapter);
Deepak Dhamdhere13983f22016-05-31 19:06:09 -0700214void hdd_ndp_session_end_handler(hdd_adapter_t *adapter);
Deepak Dhamdhere3385d752016-05-25 20:36:47 -0700215#else
216static inline void hdd_ndp_print_ini_config(struct hdd_context_s *hdd_ctx)
217{
218}
Deepak Dhamdhere13230d32016-05-26 00:46:53 -0700219static inline void hdd_nan_datapath_target_config(struct hdd_context_s *hdd_ctx,
220 struct wma_tgt_cfg *cfg)
221{
222}
Deepak Dhamdhere5cdce842016-05-31 10:39:12 -0700223static inline void hdd_ndp_event_handler(struct hdd_adapter_s *adapter,
224 tCsrRoamInfo *roam_info, uint32_t roam_id, eRoamCmdStatus roam_status,
225 eCsrRoamResult roam_result)
226{
227}
228static inline int wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy,
229 struct wireless_dev *wdev, const void *data, int data_len)
230{
231 return 0;
232}
233static inline int hdd_init_nan_data_mode(struct hdd_adapter_s *adapter)
234{
235 return 0;
236}
Deepak Dhamdhere13983f22016-05-31 19:06:09 -0700237static inline void hdd_ndp_session_end_handler(hdd_adapter_t *adapter)
238{
239}
Deepak Dhamdhere3385d752016-05-25 20:36:47 -0700240#endif /* WLAN_FEATURE_NAN_DATAPATH */
241
Ravi Joshia063dd92016-05-25 16:43:13 -0700242#endif /* __WLAN_HDD_NAN_DATAPATH_H */