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