hc
2023-02-13 e440ec23c5a540cdd3f7464e8779219be6fd3d95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __SPRDWL_NAN_H__
#define __SPRDWL_NAN_H__
 
/* macro */
enum nan_msg_id {
   NAN_MSG_ID_ERROR_RSP                    = 0,
   NAN_MSG_ID_CONFIGURATION_REQ            = 1,
   NAN_MSG_ID_CONFIGURATION_RSP            = 2,
   NAN_MSG_ID_PUBLISH_SERVICE_REQ          = 3,
   NAN_MSG_ID_PUBLISH_SERVICE_RSP          = 4,
   NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_REQ   = 5,
   NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_RSP   = 6,
   NAN_MSG_ID_PUBLISH_REPLIED_IND          = 7,
   NAN_MSG_ID_PUBLISH_TERMINATED_IND       = 8,
   NAN_MSG_ID_SUBSCRIBE_SERVICE_REQ        = 9,
   NAN_MSG_ID_SUBSCRIBE_SERVICE_RSP        = 10,
   NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_REQ = 11,
   NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_RSP = 12,
   NAN_MSG_ID_MATCH_IND                    = 13,
   NAN_MSG_ID_MATCH_EXPIRED_IND            = 14,
   NAN_MSG_ID_SUBSCRIBE_TERMINATED_IND     = 15,
   NAN_MSG_ID_DE_EVENT_IND                 = 16,
   NAN_MSG_ID_TRANSMIT_FOLLOWUP_REQ        = 17,
   NAN_MSG_ID_TRANSMIT_FOLLOWUP_RSP        = 18,
   NAN_MSG_ID_FOLLOWUP_IND                 = 19,
   NAN_MSG_ID_STATS_REQ                    = 20,
   NAN_MSG_ID_STATS_RSP                    = 21,
   NAN_MSG_ID_ENABLE_REQ                   = 22,
   NAN_MSG_ID_ENABLE_RSP                   = 23,
   NAN_MSG_ID_DISABLE_REQ                  = 24,
   NAN_MSG_ID_DISABLE_RSP                  = 25,
   NAN_MSG_ID_DISABLE_IND                  = 26,
   NAN_MSG_ID_TCA_REQ                      = 27,
   NAN_MSG_ID_TCA_RSP                      = 28,
   NAN_MSG_ID_TCA_IND                      = 29,
   NAN_MSG_ID_BEACON_SDF_REQ               = 30,
   NAN_MSG_ID_BEACON_SDF_RSP               = 31,
   NAN_MSG_ID_BEACON_SDF_IND               = 32,
   NAN_MSG_ID_CAPABILITIES_REQ             = 33,
   NAN_MSG_ID_CAPABILITIES_RSP             = 34
};
 
enum nan_tlv_type {
   NAN_TLV_TYPE_FIRST = 0,
 
   /* Service Discovery Frame types */
   NAN_TLV_TYPE_SDF_FIRST = NAN_TLV_TYPE_FIRST,
   NAN_TLV_TYPE_SERVICE_NAME = NAN_TLV_TYPE_SDF_FIRST,
   NAN_TLV_TYPE_SDF_MATCH_FILTER,
   NAN_TLV_TYPE_TX_MATCH_FILTER,
   NAN_TLV_TYPE_RX_MATCH_FILTER,
   NAN_TLV_TYPE_SERVICE_SPECIFIC_INFO,
   NAN_TLV_TYPE_EXT_SERVICE_SPECIFIC_INFO = 5,
   NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_TRANSMIT = 6,
   NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_RECEIVE = 7,
   NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_RECEIVE = 8,
   NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_RECEIVE = 9,
   NAN_TLV_TYPE_BEACON_SDF_PAYLOAD_RECEIVE = 10,
   NAN_TLV_TYPE_SDF_LAST = 4095,
 
   /* Configuration types */
   NAN_TLV_TYPE_CONFIG_FIRST = 4096,
   NAN_TLV_TYPE_24G_SUPPORT = NAN_TLV_TYPE_CONFIG_FIRST,
   NAN_TLV_TYPE_24G_BEACON,
   NAN_TLV_TYPE_24G_SDF,
   NAN_TLV_TYPE_24G_RSSI_CLOSE,
   NAN_TLV_TYPE_24G_RSSI_MIDDLE = 4100,
   NAN_TLV_TYPE_24G_RSSI_CLOSE_PROXIMITY,
   NAN_TLV_TYPE_5G_SUPPORT,
   NAN_TLV_TYPE_5G_BEACON,
   NAN_TLV_TYPE_5G_SDF,
   NAN_TLV_TYPE_5G_RSSI_CLOSE,
   NAN_TLV_TYPE_5G_RSSI_MIDDLE,
   NAN_TLV_TYPE_5G_RSSI_CLOSE_PROXIMITY,
   NAN_TLV_TYPE_SID_BEACON,
   NAN_TLV_TYPE_HOP_COUNT_LIMIT,
   NAN_TLV_TYPE_MASTER_PREFERENCE = 4110,
   NAN_TLV_TYPE_CLUSTER_ID_LOW,
   NAN_TLV_TYPE_CLUSTER_ID_HIGH,
   NAN_TLV_TYPE_RSSI_AVERAGING_WINDOW_SIZE,
   NAN_TLV_TYPE_CLUSTER_OUI_NETWORK_ID,
   NAN_TLV_TYPE_SOURCE_MAC_ADDRESS,
   NAN_TLV_TYPE_CLUSTER_ATTRIBUTE_IN_SDF,
   NAN_TLV_TYPE_SOCIAL_CHANNEL_SCAN_PARAMS,
   NAN_TLV_TYPE_DEBUGGING_FLAGS,
   NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_TRANSMIT,
   NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_TRANSMIT = 4120,
   NAN_TLV_TYPE_FURTHER_AVAILABILITY_MAP,
   NAN_TLV_TYPE_HOP_COUNT_FORCE,
   NAN_TLV_TYPE_RANDOM_FACTOR_FORCE,
   NAN_TLV_TYPE_RANDOM_UPDATE_TIME = 4124,
   NAN_TLV_TYPE_EARLY_WAKEUP,
   NAN_TLV_TYPE_PERIODIC_SCAN_INTERVAL,
   NAN_TLV_TYPE_DW_INTERVAL = 4128,
   NAN_TLV_TYPE_DB_INTERVAL,
   NAN_TLV_TYPE_FURTHER_AVAILABILITY,
   NAN_TLV_TYPE_24G_CHANNEL,
   NAN_TLV_TYPE_5G_CHANNEL,
   NAN_TLV_TYPE_CONFIG_LAST = 8191,
 
   /* Attributes types */
   NAN_TLV_TYPE_ATTRS_FIRST = 8192,
   NAN_TLV_TYPE_AVAILABILITY_INTERVALS_MAP = NAN_TLV_TYPE_ATTRS_FIRST,
   NAN_TLV_TYPE_WLAN_MESH_ID,
   NAN_TLV_TYPE_MAC_ADDRESS,
   NAN_TLV_TYPE_RECEIVED_RSSI_VALUE,
   NAN_TLV_TYPE_CLUSTER_ATTRIBUTE,
   NAN_TLV_TYPE_WLAN_INFRA_SSID,
   NAN_TLV_TYPE_ATTRS_LAST = 12287,
 
   /* Events Type */
   NAN_TLV_TYPE_EVENTS_FIRST = 12288,
   NAN_TLV_TYPE_EVENT_SELF_STATION_MAC_ADDRESS = NAN_TLV_TYPE_EVENTS_FIRST,
   NAN_TLV_TYPE_EVENT_STARTED_CLUSTER,
   NAN_TLV_TYPE_EVENT_JOINED_CLUSTER,
   NAN_TLV_TYPE_EVENT_CLUSTER_SCAN_RESULTS,
   NAN_TLV_TYPE_FAW_MEM_AVAIL,
   NAN_TLV_TYPE_EVENTS_LAST = 16383,
 
   /* TCA types */
   NAN_TLV_TYPE_TCA_FIRST = 16384,
   NAN_TLV_TYPE_CLUSTER_SIZE_REQ = NAN_TLV_TYPE_TCA_FIRST,
   NAN_TLV_TYPE_CLUSTER_SIZE_RSP,
   NAN_TLV_TYPE_TCA_LAST = 32767,
 
   /* Statistics types */
   NAN_TLV_TYPE_STATS_FIRST = 32768,
   NAN_TLV_TYPE_DE_PUBLISH_STATS = NAN_TLV_TYPE_STATS_FIRST,
   NAN_TLV_TYPE_DE_SUBSCRIBE_STATS,
   NAN_TLV_TYPE_DE_MAC_STATS,
   NAN_TLV_TYPE_DE_TIMING_SYNC_STATS,
   NAN_TLV_TYPE_DE_DW_STATS,
   NAN_TLV_TYPE_DE_STATS,
   NAN_TLV_TYPE_STATS_LAST = 36863,
 
   NAN_TLV_TYPE_LAST = 65535
};
 
/* structure */
struct nan_msg_header {
   u16 msg_ver:4; /* NAN_MSG_VERSION 1 */
   u16 msg_id:12;
   u16 msg_len;
   u16 handle; /* publish_id or subscribe_id */
   u16 transaction_id;
} __packed;
 
struct nan_tlv {
   u16 type;
   u16 length;
   u8 *value;
} __packed;
 
struct nan_enable_req {
   struct nan_msg_header header;
   /* TLVs:
    *
    * Required: Cluster Low, Cluster High, Master Preference,
    * Optional: 5G Support, SID, 5G Sync Disc, RSSI Close, RSSI Medium,
    *           Hop Count Limit, Random Time, Master Preference,
    *           WLAN Intra Attr, P2P Operation Attr, WLAN IBSS Attr,
    *           WLAN Mesh Attr
   */
   u8 nan_tlv[];
} __packed;
 
struct nan_disable_req {
   struct nan_msg_header header;
} __packed;
 
struct nan_disable_rsp {
   struct nan_msg_header header;
   /* status of the request */
   u16 status;
   u16 value;
} __packed;
 
struct publish_config_params {
   u16 ttl;
   u16 period;
   u32 reserved:1;
   u32 publish_type:2;
   u32 tx_type:1;
   u32 rssi_threshold_flag:1;
   u32 ota_flag:1;
   u32 publish_match_indicator:2;
   u32 publish_count:8;
   u32 connmap:8;
   u32 disable_pub_terminated_ind:1;
   u32 disable_pub_match_expired_ind:1;
   u32 disable_followup_rx_ind:1;
   u32 reserved2:5;
} __packed;
 
struct nan_publish_req {
   struct nan_msg_header header;
   struct publish_config_params pub_params;
   /* TLVs:
    *
    * Required: Service Name,
    * Optional: Tx Match Filter, Rx Match Filter, Service Specific Info,
    */
   u8 nan_tlv[];
} __packed;
 
struct nan_cancel_pub_req {
   struct nan_msg_header header;
} __packed;
 
struct subscribe_config_parames {
   u16 ttl;
   u16 period;
   u32 subscribe_type:1;
   u32 srf_type:1;
   u32 srf_include_type:1;
   u32 srf_state:1;
   u32 ssi_required:1;
   u32 subscribe_match_indicator:2;
   u32 xbit:1;
   u32 subscribe_count:8;
   u32 rssi_threshold_flag:1;
   u32 ota_flag:1;
   u32 disable_sub_terminated_ind:1;
   u32 disable_sub_match_expired_ind:1;
   u32 disable_followup_rx_ind:1;
   u32 reserved:3;
   u32 connmap:8;
} __packed;
 
struct nan_subscribe_req {
   struct nan_msg_header header;
   struct subscribe_config_parames sub_params;
   /* TLVs:
    *
    * Required: Service Name
    * Optional: Rx Match Filter, Tx Match Filter, Service Specific Info,
    */
   u8 nan_tlv[];
} __packed;
 
struct nan_cancel_sub_req {
   struct nan_msg_header header;
} __packed;
 
struct followup_config_params {
   u32 requestor_instance_id;
   u32 priority:4;
   u32 dw_or_faw:1;
   u32 recv_indication_cfg:1;
   u32 reserved:26;
} __packed;
 
struct nan_followup_req {
   struct nan_msg_header header;
   struct followup_config_params followup_params;
   /* TLVs:
    *
    * Required: Service Specific Info or Extended Service Specific Info
    */
   u8 nan_tlv[];
} __packed;
 
struct nan_capabilities_req {
   struct nan_msg_header header;
} __packed;
 
struct sprdwl_event_nan {
   struct nan_msg_header header;
   /* status of the request */
   u16 status;
   u16 value;
} __packed;
 
struct nan_capa {
   struct nan_msg_header header;
   u32 status;
   u32 value;
   u32 max_concurrent_nan_clusters;
   u32 max_publishes;
   u32 max_subscribes;
   u32 max_service_name_len;
   u32 max_match_filter_len;
   u32 max_total_match_filter_len;
   u32 max_service_specific_info_len;
   u32 max_vsa_data_len;
   u32 max_mesh_data_len;
   u32 max_ndi_interfaces;
   u32 max_ndp_sessions;
   u32 max_app_info_len;
} __packed;
 
struct nan_cmd_header {
   u16 data_len;
   u8 data[0];
} __packed;
 
/* cmd handler*/
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
int sprdwl_vendor_nan_cmds(struct wiphy *wiphy,
              struct wireless_dev *wdev,
              const void  *data, int len);
/* event handler*/
int sprdwl_event_nan(struct sprdwl_vif *vif, u8 *data, u16 len);
#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0) */
 
#endif /* __SPRDWL_NAN_H__ */