1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef __NAN_I_H__ 18 #define __NAN_I_H__ 19 20 #include "common.h" 21 #include "cpp_bindings.h" 22 #include "wifi_hal.h" 23 24 #ifdef __cplusplus 25 extern "C" 26 { 27 #endif /* __cplusplus */ 28 29 #ifndef PACKED 30 #define PACKED __attribute__((packed)) 31 #endif 32 #define BIT_NONE 0x00 33 #define BIT_0 0x01 34 #define BIT_1 0x02 35 #define BIT_2 0x04 36 #define BIT_3 0x08 37 #define BIT_4 0x10 38 #define BIT_5 0x20 39 #define BIT_6 0x40 40 #define BIT_7 0x80 41 #define BIT_8 0x0100 42 #define BIT_9 0x0200 43 #define BIT_10 0x0400 44 #define BIT_11 0x0800 45 #define BIT_12 0x1000 46 #define BIT_13 0x2000 47 #define BIT_14 0x4000 48 #define BIT_15 0x8000 49 #define BIT_16 0x010000 50 #define BIT_17 0x020000 51 #define BIT_18 0x040000 52 #define BIT_19 0x080000 53 #define BIT_20 0x100000 54 #define BIT_21 0x200000 55 #define BIT_22 0x400000 56 #define BIT_23 0x800000 57 #define BIT_24 0x01000000 58 #define BIT_25 0x02000000 59 #define BIT_26 0x04000000 60 #define BIT_27 0x08000000 61 #define BIT_28 0x10000000 62 #define BIT_29 0x20000000 63 #define BIT_30 0x40000000 64 #define BIT_31 0x80000000 65 66 /** macro to convert FW MAC address from WMI word format to User Space MAC char array */ 67 #define FW_MAC_ADDR_TO_CHAR_ARRAY(fw_mac_addr, mac_addr) do { \ 68 (mac_addr)[0] = ((fw_mac_addr).mac_addr31to0) & 0xff; \ 69 (mac_addr)[1] = (((fw_mac_addr).mac_addr31to0) >> 8) & 0xff; \ 70 (mac_addr)[2] = (((fw_mac_addr).mac_addr31to0) >> 16) & 0xff; \ 71 (mac_addr)[3] = (((fw_mac_addr).mac_addr31to0) >> 24) & 0xff; \ 72 (mac_addr)[4] = ((fw_mac_addr).mac_addr47to32) & 0xff; \ 73 (mac_addr)[5] = (((fw_mac_addr).mac_addr47to32) >> 8) & 0xff; \ 74 } while (0) 75 76 /** macro to convert User space MAC address from char array to FW WMI word format */ 77 #define CHAR_ARRAY_TO_MAC_ADDR(mac_addr, fw_mac_addr) do { \ 78 (fw_mac_addr).mac_addr31to0 = \ 79 ((mac_addr)[0] | ((mac_addr)[1] << 8) \ 80 | ((mac_addr)[2] << 16) | ((mac_addr)[3] << 24)); \ 81 (fw_mac_addr).mac_addr47to32 = \ 82 ((mac_addr)[4] | ((mac_addr)[5] << 8)); \ 83 } while (0) 84 85 /*--------------------------------------------------------------------------- 86 * WLAN NAN CONSTANTS 87 *--------------------------------------------------------------------------*/ 88 89 typedef enum 90 { 91 NAN_MSG_ID_ERROR_RSP = 0, 92 NAN_MSG_ID_CONFIGURATION_REQ = 1, 93 NAN_MSG_ID_CONFIGURATION_RSP = 2, 94 NAN_MSG_ID_PUBLISH_SERVICE_REQ = 3, 95 NAN_MSG_ID_PUBLISH_SERVICE_RSP = 4, 96 NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_REQ = 5, 97 NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_RSP = 6, 98 NAN_MSG_ID_PUBLISH_REPLIED_IND = 7, 99 NAN_MSG_ID_PUBLISH_TERMINATED_IND = 8, 100 NAN_MSG_ID_SUBSCRIBE_SERVICE_REQ = 9, 101 NAN_MSG_ID_SUBSCRIBE_SERVICE_RSP = 10, 102 NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_REQ = 11, 103 NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_RSP = 12, 104 NAN_MSG_ID_MATCH_IND = 13, 105 NAN_MSG_ID_MATCH_EXPIRED_IND = 14, 106 NAN_MSG_ID_SUBSCRIBE_TERMINATED_IND = 15, 107 NAN_MSG_ID_DE_EVENT_IND = 16, 108 NAN_MSG_ID_TRANSMIT_FOLLOWUP_REQ = 17, 109 NAN_MSG_ID_TRANSMIT_FOLLOWUP_RSP = 18, 110 NAN_MSG_ID_FOLLOWUP_IND = 19, 111 NAN_MSG_ID_STATS_REQ = 20, 112 NAN_MSG_ID_STATS_RSP = 21, 113 NAN_MSG_ID_ENABLE_REQ = 22, 114 NAN_MSG_ID_ENABLE_RSP = 23, 115 NAN_MSG_ID_DISABLE_REQ = 24, 116 NAN_MSG_ID_DISABLE_RSP = 25, 117 NAN_MSG_ID_DISABLE_IND = 26, 118 NAN_MSG_ID_TCA_REQ = 27, 119 NAN_MSG_ID_TCA_RSP = 28, 120 NAN_MSG_ID_TCA_IND = 29, 121 NAN_MSG_ID_BEACON_SDF_REQ = 30, 122 NAN_MSG_ID_BEACON_SDF_RSP = 31, 123 NAN_MSG_ID_BEACON_SDF_IND = 32, 124 NAN_MSG_ID_CAPABILITIES_REQ = 33, 125 NAN_MSG_ID_CAPABILITIES_RSP = 34, 126 NAN_MSG_ID_SELF_TRANSMIT_FOLLOWUP_IND = 35, 127 NAN_MSG_ID_RANGING_REQUEST_RECEVD_IND = 36, 128 NAN_MSG_ID_RANGING_RESULT_IND = 37, 129 NAN_MSG_ID_TESTMODE_REQ = 1025, 130 NAN_MSG_ID_TESTMODE_RSP = 1026 131 } NanMsgId; 132 133 /* 134 Various TLV Type ID sent as part of NAN Stats Response 135 or NAN TCA Indication 136 */ 137 typedef enum 138 { 139 NAN_TLV_TYPE_FIRST = 0, 140 141 /* Service Discovery Frame types */ 142 NAN_TLV_TYPE_SDF_FIRST = NAN_TLV_TYPE_FIRST, 143 NAN_TLV_TYPE_SERVICE_NAME = NAN_TLV_TYPE_SDF_FIRST, 144 NAN_TLV_TYPE_SDF_MATCH_FILTER, 145 NAN_TLV_TYPE_TX_MATCH_FILTER, 146 NAN_TLV_TYPE_RX_MATCH_FILTER, 147 NAN_TLV_TYPE_SERVICE_SPECIFIC_INFO, 148 NAN_TLV_TYPE_EXT_SERVICE_SPECIFIC_INFO =5, 149 NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_TRANSMIT = 6, 150 NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_RECEIVE = 7, 151 NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_RECEIVE = 8, 152 NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_RECEIVE = 9, 153 NAN_TLV_TYPE_BEACON_SDF_PAYLOAD_RECEIVE = 10, 154 NAN_TLV_TYPE_NAN_DATA_PATH_PARAMS = 11, 155 NAN_TLV_TYPE_NAN_DATA_SUPPORTED_BAND = 12, 156 NAN_TLV_TYPE_2G_COMMITTED_DW = 13, 157 NAN_TLV_TYPE_5G_COMMITTED_DW = 14, 158 NAN_TLV_TYPE_NAN_DATA_RESPONDER_MODE = 15, 159 NAN_TLV_TYPE_NAN_DATA_ENABLED_IN_MATCH = 16, 160 NAN_TLV_TYPE_NAN_SERVICE_ACCEPT_POLICY = 17, 161 NAN_TLV_TYPE_NAN_CSID = 18, 162 NAN_TLV_TYPE_NAN_SCID = 19, 163 NAN_TLV_TYPE_NAN_PMK = 20, 164 NAN_TLV_TYPE_SDEA_CTRL_PARAMS = 21, 165 NAN_TLV_TYPE_NAN_RANGING_CFG = 22, 166 NAN_TLV_TYPE_CONFIG_DISCOVERY_INDICATIONS = 23, 167 NAN_TLV_TYPE_NAN20_RANGING_REQUEST = 24, 168 NAN_TLV_TYPE_NAN20_RANGING_RESULT = 25, 169 NAN_TLV_TYPE_NAN20_RANGING_REQUEST_RECEIVED = 26, 170 NAN_TLV_TYPE_NAN_PASSPHRASE = 27, 171 NAN_TLV_TYPE_SDEA_SERVICE_SPECIFIC_INFO = 28, 172 NAN_TLV_TYPE_DEV_CAP_ATTR_CAPABILITY = 29, 173 NAN_TLV_TYPE_SDF_LAST = 4095, 174 175 /* Configuration types */ 176 NAN_TLV_TYPE_CONFIG_FIRST = 4096, 177 NAN_TLV_TYPE_24G_SUPPORT = NAN_TLV_TYPE_CONFIG_FIRST, 178 NAN_TLV_TYPE_24G_BEACON, 179 NAN_TLV_TYPE_24G_SDF, 180 NAN_TLV_TYPE_24G_RSSI_CLOSE, 181 NAN_TLV_TYPE_24G_RSSI_MIDDLE = 4100, 182 NAN_TLV_TYPE_24G_RSSI_CLOSE_PROXIMITY, 183 NAN_TLV_TYPE_5G_SUPPORT, 184 NAN_TLV_TYPE_5G_BEACON, 185 NAN_TLV_TYPE_5G_SDF, 186 NAN_TLV_TYPE_5G_RSSI_CLOSE, 187 NAN_TLV_TYPE_5G_RSSI_MIDDLE, 188 NAN_TLV_TYPE_5G_RSSI_CLOSE_PROXIMITY, 189 NAN_TLV_TYPE_SID_BEACON, 190 NAN_TLV_TYPE_HOP_COUNT_LIMIT, 191 NAN_TLV_TYPE_MASTER_PREFERENCE = 4110, 192 NAN_TLV_TYPE_CLUSTER_ID_LOW, 193 NAN_TLV_TYPE_CLUSTER_ID_HIGH, 194 NAN_TLV_TYPE_RSSI_AVERAGING_WINDOW_SIZE, 195 NAN_TLV_TYPE_CLUSTER_OUI_NETWORK_ID, 196 NAN_TLV_TYPE_SOURCE_MAC_ADDRESS, 197 NAN_TLV_TYPE_CLUSTER_ATTRIBUTE_IN_SDF, 198 NAN_TLV_TYPE_SOCIAL_CHANNEL_SCAN_PARAMS, 199 NAN_TLV_TYPE_DEBUGGING_FLAGS, 200 NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_TRANSMIT, 201 NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_TRANSMIT = 4120, 202 NAN_TLV_TYPE_FURTHER_AVAILABILITY_MAP, 203 NAN_TLV_TYPE_HOP_COUNT_FORCE, 204 NAN_TLV_TYPE_RANDOM_FACTOR_FORCE, 205 NAN_TLV_TYPE_RANDOM_UPDATE_TIME = 4124, 206 NAN_TLV_TYPE_EARLY_WAKEUP, 207 NAN_TLV_TYPE_PERIODIC_SCAN_INTERVAL, 208 NAN_TLV_TYPE_DW_INTERVAL = 4128, 209 NAN_TLV_TYPE_DB_INTERVAL, 210 NAN_TLV_TYPE_FURTHER_AVAILABILITY, 211 NAN_TLV_TYPE_24G_CHANNEL, 212 NAN_TLV_TYPE_5G_CHANNEL, 213 NAN_TLV_TYPE_DISC_MAC_ADDR_RANDOM_INTERVAL, 214 NAN_TLV_TYPE_RANGING_AUTO_RESPONSE_CFG = 4134, 215 NAN_TLV_TYPE_SUBSCRIBE_SID_BEACON = 4135, 216 NAN_TLV_TYPE_DW_EARLY_TERMINATION = 4136, 217 NAN_TLV_TYPE_TX_RX_CHAINS = 4137, 218 NAN_TLV_TYPE_ENABLE_DEVICE_RANGING = 4138, 219 NAN_TLV_TYPE_CONFIG_LAST = 8191, 220 221 /* Attributes types */ 222 NAN_TLV_TYPE_ATTRS_FIRST = 8192, 223 NAN_TLV_TYPE_AVAILABILITY_INTERVALS_MAP = NAN_TLV_TYPE_ATTRS_FIRST, 224 NAN_TLV_TYPE_WLAN_MESH_ID, 225 NAN_TLV_TYPE_MAC_ADDRESS, 226 NAN_TLV_TYPE_RECEIVED_RSSI_VALUE, 227 NAN_TLV_TYPE_CLUSTER_ATTRIBUTE, 228 NAN_TLV_TYPE_WLAN_INFRA_SSID, 229 NAN_TLV_TYPE_ATTRS_LAST = 12287, 230 231 /* Events Type */ 232 NAN_TLV_TYPE_EVENTS_FIRST = 12288, 233 NAN_TLV_TYPE_EVENT_SELF_STATION_MAC_ADDRESS = NAN_TLV_TYPE_EVENTS_FIRST, 234 NAN_TLV_TYPE_EVENT_STARTED_CLUSTER, 235 NAN_TLV_TYPE_EVENT_JOINED_CLUSTER, 236 NAN_TLV_TYPE_EVENT_CLUSTER_SCAN_RESULTS, 237 NAN_TLV_TYPE_FAW_MEM_AVAIL, 238 NAN_TLV_TYPE_EVENTS_LAST = 16383, 239 240 /* TCA types */ 241 NAN_TLV_TYPE_TCA_FIRST = 16384, 242 NAN_TLV_TYPE_CLUSTER_SIZE_REQ = NAN_TLV_TYPE_TCA_FIRST, 243 NAN_TLV_TYPE_CLUSTER_SIZE_RSP, 244 NAN_TLV_TYPE_TCA_LAST = 32767, 245 246 /* Statistics types */ 247 NAN_TLV_TYPE_STATS_FIRST = 32768, 248 NAN_TLV_TYPE_DE_PUBLISH_STATS = NAN_TLV_TYPE_STATS_FIRST, 249 NAN_TLV_TYPE_DE_SUBSCRIBE_STATS, 250 NAN_TLV_TYPE_DE_MAC_STATS, 251 NAN_TLV_TYPE_DE_TIMING_SYNC_STATS, 252 NAN_TLV_TYPE_DE_DW_STATS, 253 NAN_TLV_TYPE_DE_STATS, 254 NAN_TLV_TYPE_STATS_LAST = 36863, 255 256 /* Testmode types */ 257 NAN_TLV_TYPE_TESTMODE_FIRST = 36864, 258 NAN_TLV_TYPE_TESTMODE_GENERIC_CMD = NAN_TLV_TYPE_TESTMODE_FIRST, 259 NAN_TLV_TYPE_TESTMODE_LAST = 37000, 260 261 NAN_TLV_TYPE_LAST = 65535 262 } NanTlvType; 263 264 /* 8-byte control message header used by NAN*/ 265 typedef struct PACKED 266 { 267 u16 msgVersion:4; 268 u16 msgId:12; 269 u16 msgLen; 270 u16 handle; 271 u16 transactionId; 272 } NanMsgHeader, *pNanMsgHeader; 273 274 /* Enumeration for Version */ 275 typedef enum 276 { 277 NAN_MSG_VERSION1 = 1, 278 }NanMsgVersion; 279 280 typedef struct PACKED 281 { 282 u16 type; 283 u16 length; 284 u8* value; 285 } NanTlv, *pNanTlv; 286 287 #define SIZEOF_TLV_HDR (sizeof(NanTlv::type) + sizeof(NanTlv::length)) 288 /* NAN TLV Groups and Types */ 289 typedef enum 290 { 291 NAN_TLV_GROUP_FIRST = 0, 292 NAN_TLV_GROUP_SDF = NAN_TLV_GROUP_FIRST, 293 NAN_TLV_GROUP_CONFIG, 294 NAN_TLV_GROUP_STATS, 295 NAN_TLV_GROUP_ATTRS, 296 NAN_TLV_NUM_GROUPS, 297 NAN_TLV_GROUP_LAST = NAN_TLV_NUM_GROUPS 298 } NanTlvGroup; 299 300 /* NAN Miscellaneous Constants */ 301 #define NAN_TTL_INFINITE 0 302 #define NAN_REPLY_COUNT_INFINITE 0 303 304 /* NAN Confguration 5G Channel Access Bit */ 305 #define NAN_5G_CHANNEL_ACCESS_UNSUPPORTED 0 306 #define NAN_5G_CHANNEL_ACCESS_SUPPORTED 1 307 308 /* NAN Configuration Service IDs Enclosure Bit */ 309 #define NAN_SIDS_NOT_ENCLOSED_IN_BEACONS 0 310 #define NAN_SIBS_ENCLOSED_IN_BEACONS 1 311 312 /* NAN Configuration Priority */ 313 #define NAN_CFG_PRIORITY_SERVICE_DISCOVERY 0 314 #define NAN_CFG_PRIORITY_DATA_CONNECTION 1 315 316 /* NAN Configuration 5G Channel Usage */ 317 #define NAN_5G_CHANNEL_USAGE_SYNC_AND_DISCOVERY 0 318 #define NAN_5G_CHANNEL_USAGE_DISCOVERY_ONLY 1 319 320 /* NAN Configuration TX_Beacon Content */ 321 #define NAN_TX_BEACON_CONTENT_OLD_AM_INFO 0 322 #define NAN_TX_BEACON_CONTENT_UPDATED_AM_INFO 1 323 324 /* NAN Configuration Miscellaneous Constants */ 325 #define NAN_MAC_INTERFACE_PERIODICITY_MIN 30 326 #define NAN_MAC_INTERFACE_PERIODICITY_MAX 255 327 328 #define NAN_DW_RANDOM_TIME_MIN 120 329 #define NAN_DW_RANDOM_TIME_MAX 240 330 331 #define NAN_INITIAL_SCAN_MIN_IDEAL_PERIOD 200 332 #define NAN_INITIAL_SCAN_MAX_IDEAL_PERIOD 300 333 334 #define NAN_ONGOING_SCAN_MIN_PERIOD 10 335 #define NAN_ONGOING_SCAN_MAX_PERIOD 30 336 337 #define NAN_HOP_COUNT_LIMIT 5 338 339 #define NAN_WINDOW_DW 0 340 #define NAN_WINDOW_FAW 1 341 342 /* NAN Error Rsp */ 343 typedef struct PACKED 344 { 345 NanMsgHeader fwHeader; 346 u16 status; 347 u16 value; 348 } NanErrorRspMsg, *pNanErrorRspMsg; 349 350 //* NAN Publish Service Req */ 351 typedef struct PACKED 352 { 353 u16 ttl; 354 u16 period; 355 u32 replyIndFlag:1; 356 u32 publishType:2; 357 u32 txType:1; 358 u32 rssiThresholdFlag:1; 359 u32 ota_flag:1; 360 u32 matchAlg:2; 361 u32 count:8; 362 u32 connmap:8; 363 u32 pubTerminatedIndDisableFlag:1; 364 u32 pubMatchExpiredIndDisableFlag:1; 365 u32 followupRxIndDisableFlag:1; 366 u32 reserved2:5; 367 /* 368 * Excludes TLVs 369 * 370 * Required: Service Name, 371 * Optional: Tx Match Filter, Rx Match Filter, Service Specific Info, 372 */ 373 } NanPublishServiceReqParams, *pNanPublishServiceReqParams; 374 375 typedef struct PACKED 376 { 377 NanMsgHeader fwHeader; 378 NanPublishServiceReqParams publishServiceReqParams; 379 u8 ptlv[]; 380 } NanPublishServiceReqMsg, *pNanPublishServiceReqMsg; 381 382 /* NAN Publish Service Rsp */ 383 typedef struct PACKED 384 { 385 NanMsgHeader fwHeader; 386 /* status of the request */ 387 u16 status; 388 u16 value; 389 } NanPublishServiceRspMsg, *pNanPublishServiceRspMsg; 390 391 /* NAN Publish Service Cancel Req */ 392 typedef struct PACKED 393 { 394 NanMsgHeader fwHeader; 395 } NanPublishServiceCancelReqMsg, *pNanPublishServiceCancelReqMsg; 396 397 /* NAN Publish Service Cancel Rsp */ 398 typedef struct PACKED 399 { 400 NanMsgHeader fwHeader; 401 /* status of the request */ 402 u16 status; 403 u16 value; 404 } NanPublishServiceCancelRspMsg, *pNanPublishServiceCancelRspMsg; 405 406 /* NAN Publish Terminated Ind */ 407 typedef struct PACKED 408 { 409 NanMsgHeader fwHeader; 410 /* reason for the termination */ 411 u16 reason; 412 u16 reserved; 413 } NanPublishTerminatedIndMsg, *pNanPublishTerminatedIndMsg; 414 415 /* Params for NAN Publish Replied Ind */ 416 typedef struct PACKED 417 { 418 u32 matchHandle; 419 } NanPublishRepliedIndParams; 420 421 /* NAN Publish Replied Ind */ 422 typedef struct PACKED 423 { 424 NanMsgHeader fwHeader; 425 NanPublishRepliedIndParams publishRepliedIndParams; 426 /* 427 * Excludes TLVs 428 * 429 * Required: MAC Address 430 * Optional: Received RSSI Value 431 * 432 */ 433 u8 ptlv[]; 434 } NanPublishRepliedIndMsg, *pNanPublishRepliedIndMsg; 435 436 /* NAN Device Capability Attribute */ 437 typedef struct PACKED 438 { 439 u32 dfs_master:1; 440 u32 ext_key_id:1; 441 u32 simu_ndp_data_recept:1; 442 u32 ndpe_attr_supp:1; 443 u32 reserved:28; 444 } NanDevCapAttrCap, *pNanDevCapAttrCap; 445 446 /* NAN Subscribe Service Req */ 447 typedef struct PACKED 448 { 449 u16 ttl; 450 u16 period; 451 u32 subscribeType:1; 452 u32 srfAttr:1; 453 u32 srfInclude:1; 454 u32 srfSend:1; 455 u32 ssiRequired:1; 456 u32 matchAlg:2; 457 u32 xbit:1; 458 u32 count:8; 459 u32 rssiThresholdFlag:1; 460 u32 ota_flag:1; 461 u32 subTerminatedIndDisableFlag:1; 462 u32 subMatchExpiredIndDisableFlag:1; 463 u32 followupRxIndDisableFlag:1; 464 u32 reserved:3; 465 u32 connmap:8; 466 /* 467 * Excludes TLVs 468 * 469 * Required: Service Name 470 * Optional: Rx Match Filter, Tx Match Filter, Service Specific Info, 471 */ 472 } NanSubscribeServiceReqParams, *pNanSubscribeServiceReqParams; 473 474 typedef struct PACKED 475 { 476 NanMsgHeader fwHeader; 477 NanSubscribeServiceReqParams subscribeServiceReqParams; 478 u8 ptlv[]; 479 } NanSubscribeServiceReqMsg, *pNanSubscribeServiceReqMsg; 480 481 /* NAN Subscribe Service Rsp */ 482 typedef struct PACKED 483 { 484 NanMsgHeader fwHeader; 485 /* status of the request */ 486 u16 status; 487 u16 value; 488 } NanSubscribeServiceRspMsg, *pNanSubscribeServiceRspMsg; 489 490 /* NAN Subscribe Service Cancel Req */ 491 typedef struct PACKED 492 { 493 NanMsgHeader fwHeader; 494 } NanSubscribeServiceCancelReqMsg, *pNanSubscribeServiceCancelReqMsg; 495 496 /* NAN Subscribe Service Cancel Rsp */ 497 typedef struct PACKED 498 { 499 NanMsgHeader fwHeader; 500 /* status of the request */ 501 u16 status; 502 u16 value; 503 } NanSubscribeServiceCancelRspMsg, *pNanSubscribeServiceCancelRspMsg; 504 505 /* NAN Subscribe Match Ind */ 506 typedef struct PACKED 507 { 508 u32 matchHandle; 509 u32 matchOccuredFlag:1; 510 u32 outOfResourceFlag:1; 511 u32 reserved:30; 512 } NanMatchIndParams; 513 514 typedef struct PACKED 515 { 516 NanMsgHeader fwHeader; 517 NanMatchIndParams matchIndParams; 518 u8 ptlv[]; 519 } NanMatchIndMsg, *pNanMatchIndMsg; 520 521 /* NAN Subscribe Unmatch Ind */ 522 typedef struct PACKED 523 { 524 u32 matchHandle; 525 } NanmatchExpiredIndParams; 526 527 typedef struct PACKED 528 { 529 NanMsgHeader fwHeader; 530 NanmatchExpiredIndParams matchExpiredIndParams; 531 } NanMatchExpiredIndMsg, *pNanMatchExpiredIndMsg; 532 533 /* NAN Subscribe Terminated Ind */ 534 typedef struct PACKED 535 { 536 NanMsgHeader fwHeader; 537 /* reason for the termination */ 538 u16 reason; 539 u16 reserved; 540 } NanSubscribeTerminatedIndMsg, *pNanSubscribeTerminatedIndMsg; 541 542 /* Event Ind */ 543 typedef struct PACKED 544 { 545 u32 eventId:8; 546 u32 reserved:24; 547 } NanEventIndParams; 548 549 typedef struct PACKED 550 { 551 NanMsgHeader fwHeader; 552 u8 ptlv[]; 553 } NanEventIndMsg, *pNanEventIndMsg; 554 555 /* NAN Transmit Followup Req */ 556 typedef struct PACKED 557 { 558 u32 matchHandle; 559 u32 priority:4; 560 u32 window:1; 561 u32 followupTxRspDisableFlag:1; 562 u32 reserved:26; 563 /* 564 * Excludes TLVs 565 * 566 * Required: Service Specific Info or Extended Service Specific Info 567 */ 568 } NanTransmitFollowupReqParams; 569 570 typedef struct PACKED 571 { 572 NanMsgHeader fwHeader; 573 NanTransmitFollowupReqParams transmitFollowupReqParams; 574 u8 ptlv[]; 575 } NanTransmitFollowupReqMsg, *pNanTransmitFollowupReqMsg; 576 577 /* NAN Transmit Followup Rsp */ 578 typedef struct PACKED 579 { 580 NanMsgHeader fwHeader; 581 /* status of the request */ 582 u16 status; 583 u16 value; 584 } NanTransmitFollowupRspMsg, *pNanTransmitFollowupRspMsg; 585 586 /* NAN Publish Followup Ind */ 587 typedef struct PACKED 588 { 589 u32 matchHandle; 590 u32 window:1; 591 u32 reserved:31; 592 /* 593 * Excludes TLVs 594 * 595 * Required: Service Specific Info or Extended Service Specific Info 596 */ 597 } NanFollowupIndParams; 598 599 typedef struct PACKED 600 { 601 NanMsgHeader fwHeader; 602 NanFollowupIndParams followupIndParams; 603 u8 ptlv[]; 604 } NanFollowupIndMsg, *pNanFollowupIndMsg; 605 606 /* NAN Statistics Req */ 607 typedef struct PACKED 608 { 609 u32 statsType:8; 610 u32 clear:1; 611 u32 reserved:23; 612 } NanStatsReqParams, *pNanStatsReqParams; 613 614 typedef struct PACKED 615 { 616 NanMsgHeader fwHeader; 617 NanStatsReqParams statsReqParams; 618 } NanStatsReqMsg, *pNanStatsReqMsg; 619 620 /* NAN Statistics Rsp */ 621 typedef struct PACKED 622 { 623 /* status of the request */ 624 u16 status; 625 u16 value; 626 u8 statsType; 627 u8 reserved; 628 } NanStatsRspParams, *pNanStatsRspParams; 629 630 typedef struct PACKED 631 { 632 NanMsgHeader fwHeader; 633 NanStatsRspParams statsRspParams; 634 u8 ptlv[]; 635 } NanStatsRspMsg, *pNanStatsRspMsg; 636 637 typedef struct PACKED 638 { 639 u8 count:7; 640 u8 s:1; 641 } NanSidAttr, *pSidAttr; 642 643 644 /* NAN Configuration Req */ 645 typedef struct PACKED 646 { 647 NanMsgHeader fwHeader; 648 /* 649 * TLVs: 650 * 651 * Required: None. 652 * Optional: SID, Random Time, Master Preference, WLAN Intra Attr, 653 * P2P Operation Attr, WLAN IBSS Attr, WLAN Mesh Attr 654 */ 655 u8 ptlv[]; 656 } NanConfigurationReqMsg, *pNanConfigurationReqMsg; 657 658 /* 659 * Because the Configuration Req message has TLVs in it use the macro below 660 * for the size argument to buffer allocation functions (vs. sizeof(msg)). 661 */ 662 #define NAN_MAX_CONFIGURATION_REQ_SIZE \ 663 ( \ 664 sizeof(NanMsgHeader) + \ 665 SIZEOF_TLV_HDR + sizeof(u8) /* SID Beacon */ + \ 666 SIZEOF_TLV_HDR + sizeof(u8) /* Random Time */ + \ 667 SIZEOF_TLV_HDR + sizeof(u8) /* Master Pref */ \ 668 ) 669 670 /* NAN Configuration Rsp */ 671 typedef struct PACKED 672 { 673 NanMsgHeader fwHeader; 674 /* status of the request */ 675 u16 status; 676 u16 value; 677 } NanConfigurationRspMsg, *pNanConfigurationRspMsg; 678 679 /* 680 * Because the Enable Req message has TLVs in it use the macro below for 681 * the size argument to buffer allocation functions (vs. sizeof(msg)). 682 */ 683 #define NAN_MAX_ENABLE_REQ_SIZE \ 684 ( \ 685 sizeof(NanMsgHeader) + \ 686 SIZEOF_TLV_HDR + sizeof(u16) /* Cluster Low */ + \ 687 SIZEOF_TLV_HDR + sizeof(u16) /* Cluster High */ + \ 688 SIZEOF_TLV_HDR + sizeof(u8) /* Master Pref */ \ 689 ) 690 691 /* Config Discovery Indication */ 692 typedef struct PACKED 693 { 694 u32 disableDiscoveryMacAddressEvent:1; 695 u32 disableDiscoveryStartedClusterEvent:1; 696 u32 disableDiscoveryJoinedClusterEvent:1; 697 u32 reserved:29; 698 } NanConfigDiscoveryIndications; 699 700 /* NAN Enable Req */ 701 typedef struct PACKED 702 { 703 NanMsgHeader fwHeader; 704 /* 705 * TLVs: 706 * 707 * Required: Cluster Low, Cluster High, Master Preference, 708 * Optional: 5G Support, SID, 5G Sync Disc, RSSI Close, RSSI Medium, 709 * Hop Count Limit, Random Time, Master Preference, 710 * WLAN Intra Attr, P2P Operation Attr, WLAN IBSS Attr, 711 * WLAN Mesh Attr 712 */ 713 u8 ptlv[]; 714 } NanEnableReqMsg, *pNanEnableReqMsg; 715 716 /* NAN Enable Rsp */ 717 typedef struct PACKED 718 { 719 NanMsgHeader fwHeader; 720 /* status of the request */ 721 u16 status; 722 u16 value; 723 } NanEnableRspMsg, *pNanEnableRspMsg; 724 725 /* NAN Disable Req */ 726 typedef struct PACKED 727 { 728 NanMsgHeader fwHeader; 729 } NanDisableReqMsg, *pNanDisableReqMsg; 730 731 /* NAN Disable Rsp */ 732 typedef struct PACKED 733 { 734 NanMsgHeader fwHeader; 735 /* status of the request */ 736 u16 status; 737 u16 reserved; 738 } NanDisableRspMsg, *pNanDisableRspMsg; 739 740 /* NAN Disable Ind */ 741 typedef struct PACKED 742 { 743 NanMsgHeader fwHeader; 744 /* reason for the termination */ 745 u16 reason; 746 u16 reserved; 747 } NanDisableIndMsg, *pNanDisableIndMsg; 748 749 typedef struct PACKED 750 { 751 NanMsgHeader fwHeader; 752 u8 ptlv[]; 753 } NanTcaReqMsg, *pNanTcaReqMsg; 754 755 /* NAN TCA Rsp */ 756 typedef struct PACKED 757 { 758 NanMsgHeader fwHeader; 759 /* status of the request */ 760 u16 status; 761 u16 value; 762 } NanTcaRspMsg, *pNanTcaRspMsg; 763 764 typedef struct PACKED 765 { 766 NanMsgHeader fwHeader; 767 /* 768 * TLVs: 769 * 770 * Optional: Cluster size. 771 */ 772 u8 ptlv[]; 773 } NanTcaIndMsg, *pNanTcaIndMsg; 774 775 /* 776 * Because the TCA Ind message has TLVs in it use the macro below for the 777 * size argument to buffer allocation functions (vs. sizeof(msg)). 778 */ 779 #define NAN_MAX_TCA_IND_SIZE \ 780 ( \ 781 sizeof(NanMsgHeader) + \ 782 sizeof(NanTcaIndParams) + \ 783 SIZEOF_TLV_HDR + sizeof(u16) /* Cluster Size */ \ 784 ) 785 786 /* Function Declarations */ 787 u8* addTlv(u16 type, u16 length, const u8* value, u8* pOutTlv); 788 u16 NANTLV_ReadTlv(u8 *pInTlv, pNanTlv pOutTlv); 789 u16 NANTLV_WriteTlv(pNanTlv pInTlv, u8 *pOutTlv); 790 791 /* NAN Beacon Sdf Payload Req */ 792 typedef struct PACKED 793 { 794 NanMsgHeader fwHeader; 795 /* 796 * TLVs: 797 * 798 * Optional: Vendor specific attribute 799 */ 800 u8 ptlv[]; 801 } NanBeaconSdfPayloadReqMsg, *pNanBeaconSdfPayloadReqMsg; 802 803 /* NAN Beacon Sdf Payload Rsp */ 804 typedef struct PACKED 805 { 806 NanMsgHeader fwHeader; 807 /* status of the request */ 808 u16 status; 809 u16 reserved; 810 } NanBeaconSdfPayloadRspMsg, *pNanBeaconSdfPayloadRspMsg; 811 812 /* NAN Beacon Sdf Payload Ind */ 813 typedef struct PACKED 814 { 815 NanMsgHeader fwHeader; 816 /* 817 * TLVs: 818 * 819 * Required: Mac address 820 * Optional: Vendor specific attribute, sdf payload 821 * receive 822 */ 823 u8 ptlv[]; 824 } NanBeaconSdfPayloadIndMsg, *pNanBeaconSdfPayloadIndMsg; 825 826 typedef struct PACKED 827 { 828 u8 availIntDuration:2; 829 u8 mapId:4; 830 u8 reserved:2; 831 } NanApiEntryCtrl; 832 833 /* 834 * Valid Operating Classes were derived from IEEE Std. 802.11-2012 Annex E 835 * Table E-4 Global Operating Classe and, filtered by channel, are: 81, 83, 836 * 84, 103, 114, 115, 116, 124, 125. 837 */ 838 typedef struct PACKED 839 { 840 NanApiEntryCtrl entryCtrl; 841 u8 opClass; 842 u8 channel; 843 u8 availIntBitmap[4]; 844 } NanFurtherAvailabilityChan, *pNanFurtherAvailabilityChan; 845 846 typedef struct PACKED 847 { 848 u8 numChan; 849 u8 pFaChan[]; 850 } NanFurtherAvailabilityMapAttrTlv, *pNanFurtherAvailabilityMapAttrTlv; 851 852 /* Publish statistics. */ 853 typedef struct PACKED 854 { 855 u32 validPublishServiceReqMsgs; 856 u32 validPublishServiceRspMsgs; 857 u32 validPublishServiceCancelReqMsgs; 858 u32 validPublishServiceCancelRspMsgs; 859 u32 validPublishRepliedIndMsgs; 860 u32 validPublishTerminatedIndMsgs; 861 u32 validActiveSubscribes; 862 u32 validMatches; 863 u32 validFollowups; 864 u32 invalidPublishServiceReqMsgs; 865 u32 invalidPublishServiceCancelReqMsgs; 866 u32 invalidActiveSubscribes; 867 u32 invalidMatches; 868 u32 invalidFollowups; 869 u32 publishCount; 870 u32 publishNewMatchCount; 871 u32 pubsubGlobalNewMatchCount; 872 } FwNanPublishStats, *pFwNanPublishStats; 873 874 /* Subscribe statistics. */ 875 typedef struct PACKED 876 { 877 u32 validSubscribeServiceReqMsgs; 878 u32 validSubscribeServiceRspMsgs; 879 u32 validSubscribeServiceCancelReqMsgs; 880 u32 validSubscribeServiceCancelRspMsgs; 881 u32 validSubscribeTerminatedIndMsgs; 882 u32 validSubscribeMatchIndMsgs; 883 u32 validSubscribeUnmatchIndMsgs; 884 u32 validSolicitedPublishes; 885 u32 validMatches; 886 u32 validFollowups; 887 u32 invalidSubscribeServiceReqMsgs; 888 u32 invalidSubscribeServiceCancelReqMsgs; 889 u32 invalidSubscribeFollowupReqMsgs; 890 u32 invalidSolicitedPublishes; 891 u32 invalidMatches; 892 u32 invalidFollowups; 893 u32 subscribeCount; 894 u32 bloomFilterIndex; 895 u32 subscribeNewMatchCount; 896 u32 pubsubGlobalNewMatchCount; 897 } FwNanSubscribeStats, *pFwNanSubscribeStats; 898 899 /* NAN MAC Statistics. Used for MAC and DW statistics. */ 900 typedef struct PACKED 901 { 902 /* RX stats */ 903 u32 validFrames; 904 u32 validActionFrames; 905 u32 validBeaconFrames; 906 u32 ignoredActionFrames; 907 u32 ignoredBeaconFrames; 908 u32 invalidFrames; 909 u32 invalidActionFrames; 910 u32 invalidBeaconFrames; 911 u32 invalidMacHeaders; 912 u32 invalidPafHeaders; 913 u32 nonNanBeaconFrames; 914 915 u32 earlyActionFrames; 916 u32 inDwActionFrames; 917 u32 lateActionFrames; 918 919 /* TX stats */ 920 u32 framesQueued; 921 u32 totalTRSpUpdates; 922 u32 completeByTRSp; 923 u32 completeByTp75DW; 924 u32 completeByTendDW; 925 u32 lateActionFramesTx; 926 927 /* Misc stats - ignored for DW. */ 928 u32 twIncreases; 929 u32 twDecreases; 930 u32 twChanges; 931 u32 twHighwater; 932 u32 bloomFilterIndex; 933 } FwNanMacStats, *pFwNanMacStats; 934 935 /* NAN Sync and DW Statistics*/ 936 typedef struct PACKED 937 { 938 u64 currTsf; 939 u64 myRank; 940 u64 currAmRank; 941 u64 lastAmRank; 942 u32 currAmBTT; 943 u32 lastAmBTT; 944 u8 currAmHopCount; 945 u8 currRole; 946 u16 currClusterId; 947 u32 reserved1; 948 949 u64 timeSpentInCurrRole; 950 u64 totalTimeSpentAsMaster; 951 u64 totalTimeSpentAsNonMasterSync; 952 u64 totalTimeSpentAsNonMasterNonSync; 953 u32 transitionsToAnchorMaster; 954 u32 transitionsToMaster; 955 u32 transitionsToNonMasterSync; 956 u32 transitionsToNonMasterNonSync; 957 u32 amrUpdateCount; 958 u32 amrUpdateRankChangedCount; 959 u32 amrUpdateBTTChangedCount; 960 u32 amrUpdateHcChangedCount; 961 u32 amrUpdateNewDeviceCount; 962 u32 amrExpireCount; 963 u32 mergeCount; 964 u32 beaconsAboveHcLimit; 965 u32 beaconsBelowRssiThresh; 966 u32 beaconsIgnoredNoSpace; 967 u32 beaconsForOurCluster; 968 u32 beaconsForOtherCluster; 969 u32 beaconCancelRequests; 970 u32 beaconCancelFailures; 971 u32 beaconUpdateRequests; 972 u32 beaconUpdateFailures; 973 u32 syncBeaconTxAttempts; 974 u32 syncBeaconTxFailures; 975 u32 discBeaconTxAttempts; 976 u32 discBeaconTxFailures; 977 u32 amHopCountExpireCount; 978 u32 ndpChannelFreq; 979 u32 ndpChannelFreq2; 980 u32 schedUpdateChannelFreq; 981 } FwNanSyncStats, *pFwNanSyncStats; 982 983 /* NAN Misc DE Statistics */ 984 typedef struct PACKED 985 { 986 u32 validErrorRspMsgs; 987 u32 validTransmitFollowupReqMsgs; 988 u32 validTransmitFollowupRspMsgs; 989 u32 validFollowupIndMsgs; 990 u32 validConfigurationReqMsgs; 991 u32 validConfigurationRspMsgs; 992 u32 validStatsReqMsgs; 993 u32 validStatsRspMsgs; 994 u32 validEnableReqMsgs; 995 u32 validEnableRspMsgs; 996 u32 validDisableReqMsgs; 997 u32 validDisableRspMsgs; 998 u32 validDisableIndMsgs; 999 u32 validEventIndMsgs; 1000 u32 validTcaReqMsgs; 1001 u32 validTcaRspMsgs; 1002 u32 validTcaIndMsgs; 1003 u32 invalidTransmitFollowupReqMsgs; 1004 u32 invalidConfigurationReqMsgs; 1005 u32 invalidStatsReqMsgs; 1006 u32 invalidEnableReqMsgs; 1007 u32 invalidDisableReqMsgs; 1008 u32 invalidTcaReqMsgs; 1009 } FwNanDeStats, *pFwNanDeStats; 1010 1011 /* 1012 Definition of various NanIndication(events) 1013 */ 1014 typedef enum { 1015 NAN_INDICATION_PUBLISH_REPLIED =0, 1016 NAN_INDICATION_PUBLISH_TERMINATED =1, 1017 NAN_INDICATION_MATCH =2, 1018 NAN_INDICATION_MATCH_EXPIRED =3, 1019 NAN_INDICATION_SUBSCRIBE_TERMINATED =4, 1020 NAN_INDICATION_DE_EVENT =5, 1021 NAN_INDICATION_FOLLOWUP =6, 1022 NAN_INDICATION_DISABLED =7, 1023 NAN_INDICATION_TCA =8, 1024 NAN_INDICATION_BEACON_SDF_PAYLOAD =9, 1025 NAN_INDICATION_SELF_TRANSMIT_FOLLOWUP =10, 1026 NAN_INDICATION_RANGING_REQUEST_RECEIVED =11, 1027 NAN_INDICATION_RANGING_RESULT =12, 1028 NAN_INDICATION_UNKNOWN =0xFFFF 1029 } NanIndicationType; 1030 1031 /* NAN Capabilities Req */ 1032 typedef struct PACKED 1033 { 1034 NanMsgHeader fwHeader; 1035 } NanCapabilitiesReqMsg, *pNanCapabilitiesReqMsg; 1036 1037 /* NAN Capabilities Rsp */ 1038 typedef struct PACKED 1039 { 1040 NanMsgHeader fwHeader; 1041 /* status of the request */ 1042 u32 status; 1043 u32 value; 1044 u32 max_concurrent_nan_clusters; 1045 u32 max_publishes; 1046 u32 max_subscribes; 1047 u32 max_service_name_len; 1048 u32 max_match_filter_len; 1049 u32 max_total_match_filter_len; 1050 u32 max_service_specific_info_len; 1051 u32 max_vsa_data_len; 1052 u32 max_mesh_data_len; 1053 u32 max_ndi_interfaces; 1054 u32 max_ndp_sessions; 1055 u32 max_app_info_len; 1056 u32 max_queued_transmit_followup_msgs; 1057 u32 ndp_supported_bands; 1058 u32 cipher_suites_supported; 1059 u32 max_scid_len; 1060 u32 is_ndp_security_supported:1; 1061 u32 max_sdea_service_specific_info_len:16; 1062 u32 reserved1:5; 1063 u32 reserved2:5; 1064 u32 ndpe_attr_supported:1; 1065 u32 reserved:4; 1066 u32 max_subscribe_address; 1067 } NanCapabilitiesRspMsg, *pNanCapabilitiesRspMsg; 1068 1069 /* NAN Self Transmit Followup */ 1070 typedef struct PACKED 1071 { 1072 NanMsgHeader fwHeader; 1073 u32 reason; 1074 } NanSelfTransmitFollowupIndMsg, *pNanSelfTransmitFollowupIndMsg; 1075 1076 /* NAN Cipher Suite Shared Key */ 1077 typedef struct PACKED 1078 { 1079 u32 csid_type; 1080 } NanCsidType; 1081 1082 /* Service Discovery Extended Attribute params */ 1083 typedef struct PACKED 1084 { 1085 u32 fsd_required:1; 1086 u32 fsd_with_gas:1; 1087 u32 data_path_required:1; 1088 u32 data_path_type:1; 1089 u32 multicast_type:1; 1090 u32 qos_required:1; 1091 u32 security_required:1; 1092 u32 ranging_required:1; 1093 u32 range_limit_present:1; 1094 u32 service_update_ind_present:1; 1095 u32 reserved1:6; 1096 u32 range_report:1; 1097 u32 reserved2:15; 1098 } NanFWSdeaCtrlParams; 1099 1100 /* NAN Ranging Configuration params */ 1101 typedef struct PACKED 1102 { 1103 u32 inner_threshold; 1104 u32 outer_threshold; 1105 } NanFWGeoFenceDescriptor; 1106 1107 typedef struct PACKED 1108 { 1109 u32 range_resolution; 1110 u32 range_interval; 1111 u32 ranging_indication_event; 1112 NanFWGeoFenceDescriptor geo_fence_threshold; 1113 } NanFWRangeConfigParams; 1114 1115 typedef struct PACKED 1116 { 1117 NanMsgHeader fwHeader; 1118 /* 1119 Excludes TLVs 1120 Optional: Nan Availability 1121 */ 1122 u8 ptlv[]; 1123 } NanTestModeReqMsg, *pNanTestModeReqMsg; 1124 1125 /* 1126 NAN Status codes exchanged between firmware 1127 and WifiHal. 1128 */ 1129 typedef enum { 1130 /* NAN Protocol Response Codes */ 1131 NAN_I_STATUS_SUCCESS = 0, 1132 NAN_I_STATUS_TIMEOUT = 1, 1133 NAN_I_STATUS_DE_FAILURE = 2, 1134 NAN_I_STATUS_INVALID_MSG_VERSION = 3, 1135 NAN_I_STATUS_INVALID_MSG_LEN = 4, 1136 NAN_I_STATUS_INVALID_MSG_ID = 5, 1137 NAN_I_STATUS_INVALID_HANDLE = 6, 1138 NAN_I_STATUS_NO_SPACE_AVAILABLE = 7, 1139 NAN_I_STATUS_INVALID_PUBLISH_TYPE = 8, 1140 NAN_I_STATUS_INVALID_TX_TYPE = 9, 1141 NAN_I_STATUS_INVALID_MATCH_ALGORITHM = 10, 1142 NAN_I_STATUS_DISABLE_IN_PROGRESS = 11, 1143 NAN_I_STATUS_INVALID_TLV_LEN = 12, 1144 NAN_I_STATUS_INVALID_TLV_TYPE = 13, 1145 NAN_I_STATUS_MISSING_TLV_TYPE = 14, 1146 NAN_I_STATUS_INVALID_TOTAL_TLVS_LEN = 15, 1147 NAN_I_STATUS_INVALID_REQUESTER_INSTANCE_ID= 16, 1148 NAN_I_STATUS_INVALID_TLV_VALUE = 17, 1149 NAN_I_STATUS_INVALID_TX_PRIORITY = 18, 1150 NAN_I_STATUS_INVALID_CONNECTION_MAP = 19, 1151 NAN_I_STATUS_INVALID_THRESHOLD_CROSSING_ALERT_ID = 20, 1152 NAN_I_STATUS_INVALID_STATS_ID = 21, 1153 NAN_I_STATUS_NAN_NOT_ALLOWED = 22, 1154 NAN_I_STATUS_NO_OTA_ACK = 23, 1155 NAN_I_STATUS_TX_FAIL = 24, 1156 NAN_I_STATUS_NAN_ALREADY_ENABLED = 25, 1157 NAN_I_STATUS_FOLLOWUP_QUEUE_FULL = 26, 1158 /* 27-4095 Reserved */ 1159 /* NAN Configuration Response codes */ 1160 NAN_I_STATUS_INVALID_RSSI_CLOSE_VALUE = 4096, 1161 NAN_I_STATUS_INVALID_RSSI_MIDDLE_VALUE = 4097, 1162 NAN_I_STATUS_INVALID_HOP_COUNT_LIMIT = 4098, 1163 NAN_I_STATUS_INVALID_MASTER_PREFERENCE_VALUE = 4099, 1164 NAN_I_STATUS_INVALID_LOW_CLUSTER_ID_VALUE = 4100, 1165 NAN_I_STATUS_INVALID_HIGH_CLUSTER_ID_VALUE = 4101, 1166 NAN_I_STATUS_INVALID_BACKGROUND_SCAN_PERIOD = 4102, 1167 NAN_I_STATUS_INVALID_RSSI_PROXIMITY_VALUE = 4103, 1168 NAN_I_STATUS_INVALID_SCAN_CHANNEL = 4104, 1169 NAN_I_STATUS_INVALID_POST_NAN_CONNECTIVITY_CAPABILITIES_BITMAP = 4105, 1170 NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_NUMCHAN_VALUE = 4106, 1171 NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_DURATION_VALUE = 4107, 1172 NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_CLASS_VALUE = 4108, 1173 NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_CHANNEL_VALUE = 4109, 1174 NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_AVAILABILITY_INTERVAL_BITMAP_VALUE = 4110, 1175 NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_MAP_ID = 4111, 1176 NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_CONN_TYPE_VALUE = 4112, 1177 NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_DEVICE_ROLE_VALUE = 4113, 1178 NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_DURATION_VALUE = 4114, 1179 NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_BITMAP_VALUE = 4115, 1180 NAN_I_STATUS_MISSING_FUTHER_AVAILABILITY_MAP = 4116, 1181 NAN_I_STATUS_INVALID_BAND_CONFIG_FLAGS = 4117, 1182 NAN_I_STATUS_INVALID_RANDOM_FACTOR_UPDATE_TIME_VALUE = 4118, 1183 NAN_I_STATUS_INVALID_ONGOING_SCAN_PERIOD = 4119, 1184 NAN_I_STATUS_INVALID_DW_INTERVAL_VALUE = 4120, 1185 NAN_I_STATUS_INVALID_DB_INTERVAL_VALUE = 4121, 1186 /* 4122-8191 RESERVED */ 1187 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_INVALID = 8192, 1188 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_TIMEOUT = 8193, 1189 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_USER_REQUEST = 8194, 1190 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_FAILURE = 8195, 1191 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_COUNT_REACHED = 8196, 1192 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_DE_SHUTDOWN = 8197, 1193 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_DISABLE_IN_PROGRESS = 8198, 1194 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_POST_DISC_ATTR_EXPIRED = 8199, 1195 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_POST_DISC_LEN_EXCEEDED = 8200, 1196 NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_FURTHER_AVAIL_MAP_EMPTY = 8201, 1197 /* 9000-9500 NDP Status type */ 1198 NDP_I_UNSUPPORTED_CONCURRENCY = 9000, 1199 NDP_I_NAN_DATA_IFACE_CREATE_FAILED = 9001, 1200 NDP_I_NAN_DATA_IFACE_DELETE_FAILED = 9002, 1201 NDP_I_DATA_INITIATOR_REQUEST_FAILED = 9003, 1202 NDP_I_DATA_RESPONDER_REQUEST_FAILED = 9004, 1203 NDP_I_INVALID_SERVICE_INSTANCE_ID = 9005, 1204 NDP_I_INVALID_NDP_INSTANCE_ID = 9006, 1205 NDP_I_INVALID_RESPONSE_CODE = 9007, 1206 NDP_I_INVALID_APP_INFO_LEN = 9008, 1207 /* OTA failures and timeouts during negotiation */ 1208 NDP_I_MGMT_FRAME_REQUEST_FAILED = 9009, 1209 NDP_I_MGMT_FRAME_RESPONSE_FAILED = 9010, 1210 NDP_I_MGMT_FRAME_CONFIRM_FAILED = 9011, 1211 NDP_I_END_FAILED = 9012, 1212 NDP_I_MGMT_FRAME_END_REQUEST_FAILED = 9013, 1213 NDP_I_MGMT_FRAME_SECURITY_INSTALL_FAILED = 9014, 1214 1215 /* 9500 onwards vendor specific error codes */ 1216 NDP_I_VENDOR_SPECIFIC_ERROR = 9500 1217 } NanInternalStatusType; 1218 1219 /* This is the TLV used for range report */ 1220 typedef struct PACKED 1221 { 1222 u32 publish_id; 1223 u32 event_type; 1224 u32 range_measurement; 1225 } NanFWRangeReportParams; 1226 1227 typedef struct PACKED 1228 { 1229 NanMsgHeader fwHeader; 1230 /*TLV Required: 1231 MANDATORY 1232 1. MAC_ADDRESS 1233 2. NanFWRangeReportParams 1234 OPTIONAL: 1235 1. A_UINT32 event type 1236 */ 1237 u8 ptlv[1]; 1238 } NanFWRangeReportInd, *pNanFWRangeReportInd; 1239 1240 /** 2 word representation of MAC addr */ 1241 typedef struct { 1242 /** upper 4 bytes of MAC address */ 1243 u32 mac_addr31to0; 1244 /** lower 2 bytes of MAC address */ 1245 u32 mac_addr47to32; 1246 } fw_mac_addr; 1247 1248 /* This is the TLV used to trigger ranging requests*/ 1249 typedef struct PACKED 1250 { 1251 fw_mac_addr range_mac_addr; 1252 u32 range_id; //Match handle in match_ind, publish_id in result ind 1253 u32 ranging_accept:1; 1254 u32 ranging_reject:1; 1255 u32 ranging_cancel:1; 1256 u32 reserved:29; 1257 } NanFWRangeReqMsg, *pNanFWRangeReqMsg; 1258 1259 typedef struct PACKED 1260 { 1261 fw_mac_addr range_mac_addr; 1262 u32 range_id;//This will publish_id in case of receiving publish. 1263 } NanFWRangeReqRecvdMsg, *pNanFWRangeReqRecvdMsg; 1264 1265 typedef struct PACKED 1266 { 1267 NanMsgHeader fwHeader; 1268 /*TLV Required 1269 1. t_nan_range_req_recvd_msg 1270 */ 1271 u8 ptlv[1]; 1272 } NanFWRangeReqRecvdInd, *pNanFWRangeReqRecvdInd; 1273 1274 /* Function for NAN error translation 1275 For NanResponse, NanPublishTerminatedInd, NanSubscribeTerminatedInd, 1276 NanDisabledInd, NanTransmitFollowupInd: 1277 function to translate firmware specific errors 1278 to generic freamework error along with the error string 1279 */ 1280 void NanErrorTranslation(NanInternalStatusType firmwareErrorRecvd, 1281 u32 valueRcvd, 1282 void *pRsp, 1283 bool is_ndp_rsp); 1284 1285 #ifdef __cplusplus 1286 } 1287 #endif /* __cplusplus */ 1288 1289 #endif /* __NAN_I_H__ */ 1290 1291