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 typedef u8 SirMacAddr[NAN_MAC_ADDR_LEN]; 66 /*--------------------------------------------------------------------------- 67 * WLAN NAN CONSTANTS 68 *--------------------------------------------------------------------------*/ 69 70 typedef enum 71 { 72 NAN_MSG_ID_ERROR_RSP = 0, 73 NAN_MSG_ID_CONFIGURATION_REQ = 1, 74 NAN_MSG_ID_CONFIGURATION_RSP = 2, 75 NAN_MSG_ID_PUBLISH_SERVICE_REQ = 3, 76 NAN_MSG_ID_PUBLISH_SERVICE_RSP = 4, 77 NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_REQ = 5, 78 NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_RSP = 6, 79 NAN_MSG_ID_PUBLISH_REPLIED_IND = 7, 80 NAN_MSG_ID_PUBLISH_TERMINATED_IND = 8, 81 NAN_MSG_ID_SUBSCRIBE_SERVICE_REQ = 9, 82 NAN_MSG_ID_SUBSCRIBE_SERVICE_RSP = 10, 83 NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_REQ = 11, 84 NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_RSP = 12, 85 NAN_MSG_ID_MATCH_IND = 13, 86 NAN_MSG_ID_MATCH_EXPIRED_IND = 14, 87 NAN_MSG_ID_SUBSCRIBE_TERMINATED_IND = 15, 88 NAN_MSG_ID_DE_EVENT_IND = 16, 89 NAN_MSG_ID_TRANSMIT_FOLLOWUP_REQ = 17, 90 NAN_MSG_ID_TRANSMIT_FOLLOWUP_RSP = 18, 91 NAN_MSG_ID_FOLLOWUP_IND = 19, 92 NAN_MSG_ID_STATS_REQ = 20, 93 NAN_MSG_ID_STATS_RSP = 21, 94 NAN_MSG_ID_ENABLE_REQ = 22, 95 NAN_MSG_ID_ENABLE_RSP = 23, 96 NAN_MSG_ID_DISABLE_REQ = 24, 97 NAN_MSG_ID_DISABLE_RSP = 25, 98 NAN_MSG_ID_DISABLE_IND = 26, 99 NAN_MSG_ID_TCA_REQ = 27, 100 NAN_MSG_ID_TCA_RSP = 28, 101 NAN_MSG_ID_TCA_IND = 29, 102 NAN_MSG_ID_BEACON_SDF_REQ = 30, 103 NAN_MSG_ID_BEACON_SDF_RSP = 31, 104 NAN_MSG_ID_BEACON_SDF_IND = 32, 105 NAN_MSG_ID_CAPABILITIES_REQ = 33, 106 NAN_MSG_ID_CAPABILITIES_RSP = 34 107 } NanMsgId; 108 109 /* 110 Various TLV Type ID sent as part of NAN Stats Response 111 or NAN TCA Indication 112 */ 113 typedef enum 114 { 115 NAN_TLV_TYPE_FIRST = 0, 116 117 /* Service Discovery Frame types */ 118 NAN_TLV_TYPE_SDF_FIRST = NAN_TLV_TYPE_FIRST, 119 NAN_TLV_TYPE_SERVICE_NAME = NAN_TLV_TYPE_SDF_FIRST, 120 NAN_TLV_TYPE_SDF_MATCH_FILTER, 121 NAN_TLV_TYPE_TX_MATCH_FILTER, 122 NAN_TLV_TYPE_RX_MATCH_FILTER, 123 NAN_TLV_TYPE_SERVICE_SPECIFIC_INFO, 124 NAN_TLV_TYPE_EXT_SERVICE_SPECIFIC_INFO =5, 125 NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_TRANSMIT = 6, 126 NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_RECEIVE = 7, 127 NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_RECEIVE = 8, 128 NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_RECEIVE = 9, 129 NAN_TLV_TYPE_BEACON_SDF_PAYLOAD_RECEIVE = 10, 130 NAN_TLV_TYPE_SDF_LAST = 4095, 131 132 /* Configuration types */ 133 NAN_TLV_TYPE_CONFIG_FIRST = 4096, 134 NAN_TLV_TYPE_24G_SUPPORT = NAN_TLV_TYPE_CONFIG_FIRST, 135 NAN_TLV_TYPE_24G_BEACON, 136 NAN_TLV_TYPE_24G_SDF, 137 NAN_TLV_TYPE_24G_RSSI_CLOSE, 138 NAN_TLV_TYPE_24G_RSSI_MIDDLE = 4100, 139 NAN_TLV_TYPE_24G_RSSI_CLOSE_PROXIMITY, 140 NAN_TLV_TYPE_5G_SUPPORT, 141 NAN_TLV_TYPE_5G_BEACON, 142 NAN_TLV_TYPE_5G_SDF, 143 NAN_TLV_TYPE_5G_RSSI_CLOSE, 144 NAN_TLV_TYPE_5G_RSSI_MIDDLE, 145 NAN_TLV_TYPE_5G_RSSI_CLOSE_PROXIMITY, 146 NAN_TLV_TYPE_SID_BEACON, 147 NAN_TLV_TYPE_HOP_COUNT_LIMIT, 148 NAN_TLV_TYPE_MASTER_PREFERENCE = 4110, 149 NAN_TLV_TYPE_CLUSTER_ID_LOW, 150 NAN_TLV_TYPE_CLUSTER_ID_HIGH, 151 NAN_TLV_TYPE_RSSI_AVERAGING_WINDOW_SIZE, 152 NAN_TLV_TYPE_CLUSTER_OUI_NETWORK_ID, 153 NAN_TLV_TYPE_SOURCE_MAC_ADDRESS, 154 NAN_TLV_TYPE_CLUSTER_ATTRIBUTE_IN_SDF, 155 NAN_TLV_TYPE_SOCIAL_CHANNEL_SCAN_PARAMS, 156 NAN_TLV_TYPE_DEBUGGING_FLAGS, 157 NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_TRANSMIT, 158 NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_TRANSMIT = 4120, 159 NAN_TLV_TYPE_FURTHER_AVAILABILITY_MAP, 160 NAN_TLV_TYPE_HOP_COUNT_FORCE, 161 NAN_TLV_TYPE_RANDOM_FACTOR_FORCE, 162 NAN_TLV_TYPE_RANDOM_UPDATE_TIME = 4124, 163 NAN_TLV_TYPE_EARLY_WAKEUP, 164 NAN_TLV_TYPE_PERIODIC_SCAN_INTERVAL, 165 NAN_TLV_TYPE_DW_INTERVAL = 4128, 166 NAN_TLV_TYPE_DB_INTERVAL, 167 NAN_TLV_TYPE_FURTHER_AVAILABILITY, 168 NAN_TLV_TYPE_24G_CHANNEL, 169 NAN_TLV_TYPE_5G_CHANNEL, 170 NAN_TLV_TYPE_CONFIG_LAST = 8191, 171 172 /* Attributes types */ 173 NAN_TLV_TYPE_ATTRS_FIRST = 8192, 174 NAN_TLV_TYPE_AVAILABILITY_INTERVALS_MAP = NAN_TLV_TYPE_ATTRS_FIRST, 175 NAN_TLV_TYPE_WLAN_MESH_ID, 176 NAN_TLV_TYPE_MAC_ADDRESS, 177 NAN_TLV_TYPE_RECEIVED_RSSI_VALUE, 178 NAN_TLV_TYPE_CLUSTER_ATTRIBUTE, 179 NAN_TLV_TYPE_WLAN_INFRA_SSID, 180 NAN_TLV_TYPE_ATTRS_LAST = 12287, 181 182 /* Events Type */ 183 NAN_TLV_TYPE_EVENTS_FIRST = 12288, 184 NAN_TLV_TYPE_EVENT_SELF_STATION_MAC_ADDRESS = NAN_TLV_TYPE_EVENTS_FIRST, 185 NAN_TLV_TYPE_EVENT_STARTED_CLUSTER, 186 NAN_TLV_TYPE_EVENT_JOINED_CLUSTER, 187 NAN_TLV_TYPE_EVENT_CLUSTER_SCAN_RESULTS, 188 NAN_TLV_TYPE_FAW_MEM_AVAIL, 189 NAN_TLV_TYPE_EVENTS_LAST = 16383, 190 191 /* TCA types */ 192 NAN_TLV_TYPE_TCA_FIRST = 16384, 193 NAN_TLV_TYPE_CLUSTER_SIZE_REQ = NAN_TLV_TYPE_TCA_FIRST, 194 NAN_TLV_TYPE_CLUSTER_SIZE_RSP, 195 NAN_TLV_TYPE_TCA_LAST = 32767, 196 197 /* Statistics types */ 198 NAN_TLV_TYPE_STATS_FIRST = 32768, 199 NAN_TLV_TYPE_DE_PUBLISH_STATS = NAN_TLV_TYPE_STATS_FIRST, 200 NAN_TLV_TYPE_DE_SUBSCRIBE_STATS, 201 NAN_TLV_TYPE_DE_MAC_STATS, 202 NAN_TLV_TYPE_DE_TIMING_SYNC_STATS, 203 NAN_TLV_TYPE_DE_DW_STATS, 204 NAN_TLV_TYPE_DE_STATS, 205 NAN_TLV_TYPE_STATS_LAST = 36863, 206 207 NAN_TLV_TYPE_LAST = 65535 208 } NanTlvType; 209 210 /* 8-byte control message header used by NAN*/ 211 typedef struct PACKED 212 { 213 u16 msgVersion:4; 214 u16 msgId:12; 215 u16 msgLen; 216 u16 handle; 217 u16 transactionId; 218 } NanMsgHeader, *pNanMsgHeader; 219 220 /* Enumeration for Version */ 221 typedef enum 222 { 223 NAN_MSG_VERSION1 = 1, 224 }NanMsgVersion; 225 226 typedef struct PACKED 227 { 228 u16 type; 229 u16 length; 230 u8* value; 231 } NanTlv, *pNanTlv; 232 233 #define SIZEOF_TLV_HDR (sizeof(NanTlv::type) + sizeof(NanTlv::length)) 234 /* NAN TLV Groups and Types */ 235 typedef enum 236 { 237 NAN_TLV_GROUP_FIRST = 0, 238 NAN_TLV_GROUP_SDF = NAN_TLV_GROUP_FIRST, 239 NAN_TLV_GROUP_CONFIG, 240 NAN_TLV_GROUP_STATS, 241 NAN_TLV_GROUP_ATTRS, 242 NAN_TLV_NUM_GROUPS, 243 NAN_TLV_GROUP_LAST = NAN_TLV_NUM_GROUPS 244 } NanTlvGroup; 245 246 /* NAN Miscellaneous Constants */ 247 #define NAN_TTL_INFINITE 0 248 #define NAN_REPLY_COUNT_INFINITE 0 249 250 /* NAN Confguration 5G Channel Access Bit */ 251 #define NAN_5G_CHANNEL_ACCESS_UNSUPPORTED 0 252 #define NAN_5G_CHANNEL_ACCESS_SUPPORTED 1 253 254 /* NAN Configuration Service IDs Enclosure Bit */ 255 #define NAN_SIDS_NOT_ENCLOSED_IN_BEACONS 0 256 #define NAN_SIBS_ENCLOSED_IN_BEACONS 1 257 258 /* NAN Configuration Priority */ 259 #define NAN_CFG_PRIORITY_SERVICE_DISCOVERY 0 260 #define NAN_CFG_PRIORITY_DATA_CONNECTION 1 261 262 /* NAN Configuration 5G Channel Usage */ 263 #define NAN_5G_CHANNEL_USAGE_SYNC_AND_DISCOVERY 0 264 #define NAN_5G_CHANNEL_USAGE_DISCOVERY_ONLY 1 265 266 /* NAN Configuration TX_Beacon Content */ 267 #define NAN_TX_BEACON_CONTENT_OLD_AM_INFO 0 268 #define NAN_TX_BEACON_CONTENT_UPDATED_AM_INFO 1 269 270 /* NAN Configuration Miscellaneous Constants */ 271 #define NAN_MAC_INTERFACE_PERIODICITY_MIN 30 272 #define NAN_MAC_INTERFACE_PERIODICITY_MAX 255 273 274 #define NAN_DW_RANDOM_TIME_MIN 120 275 #define NAN_DW_RANDOM_TIME_MAX 240 276 277 #define NAN_INITIAL_SCAN_MIN_IDEAL_PERIOD 200 278 #define NAN_INITIAL_SCAN_MAX_IDEAL_PERIOD 300 279 280 #define NAN_ONGOING_SCAN_MIN_PERIOD 10 281 #define NAN_ONGOING_SCAN_MAX_PERIOD 30 282 283 #define NAN_HOP_COUNT_LIMIT 5 284 285 #define NAN_WINDOW_DW 0 286 #define NAN_WINDOW_FAW 1 287 288 /* NAN Error Rsp */ 289 typedef struct PACKED 290 { 291 NanMsgHeader fwHeader; 292 u16 status; 293 u16 value; 294 } NanErrorRspMsg, *pNanErrorRspMsg; 295 296 //* NAN Publish Service Req */ 297 typedef struct PACKED 298 { 299 u16 ttl; 300 u16 period; 301 u32 reserved:1; 302 u32 publishType:2; 303 u32 txType:1; 304 u32 rssiThresholdFlag:1; 305 u32 ota_flag:1; 306 u32 matchAlg:2; 307 u32 count:8; 308 u32 connmap:8; 309 u32 pubTerminatedIndDisableFlag:1; 310 u32 pubMatchExpiredIndDisableFlag:1; 311 u32 followupRxIndDisableFlag:1; 312 u32 reserved2:5; 313 /* 314 * Excludes TLVs 315 * 316 * Required: Service Name, 317 * Optional: Tx Match Filter, Rx Match Filter, Service Specific Info, 318 */ 319 } NanPublishServiceReqParams, *pNanPublishServiceReqParams; 320 321 typedef struct PACKED 322 { 323 NanMsgHeader fwHeader; 324 NanPublishServiceReqParams publishServiceReqParams; 325 u8 ptlv[]; 326 } NanPublishServiceReqMsg, *pNanPublishServiceReqMsg; 327 328 /* NAN Publish Service Rsp */ 329 typedef struct PACKED 330 { 331 NanMsgHeader fwHeader; 332 /* status of the request */ 333 u16 status; 334 u16 value; 335 } NanPublishServiceRspMsg, *pNanPublishServiceRspMsg; 336 337 /* NAN Publish Service Cancel Req */ 338 typedef struct PACKED 339 { 340 NanMsgHeader fwHeader; 341 } NanPublishServiceCancelReqMsg, *pNanPublishServiceCancelReqMsg; 342 343 /* NAN Publish Service Cancel Rsp */ 344 typedef struct PACKED 345 { 346 NanMsgHeader fwHeader; 347 /* status of the request */ 348 u16 status; 349 u16 value; 350 } NanPublishServiceCancelRspMsg, *pNanPublishServiceCancelRspMsg; 351 352 /* NAN Publish Terminated Ind */ 353 typedef struct PACKED 354 { 355 NanMsgHeader fwHeader; 356 /* reason for the termination */ 357 u16 reason; 358 u16 reserved; 359 } NanPublishTerminatedIndMsg, *pNanPublishTerminatedIndMsg; 360 361 /* NAN Subscribe Service Req */ 362 typedef struct PACKED 363 { 364 u16 ttl; 365 u16 period; 366 u32 subscribeType:1; 367 u32 srfAttr:1; 368 u32 srfInclude:1; 369 u32 srfSend:1; 370 u32 ssiRequired:1; 371 u32 matchAlg:2; 372 u32 xbit:1; 373 u32 count:8; 374 u32 rssiThresholdFlag:1; 375 u32 ota_flag:1; 376 u32 subTerminatedIndDisableFlag:1; 377 u32 subMatchExpiredIndDisableFlag:1; 378 u32 followupRxIndDisableFlag:1; 379 u32 reserved:3; 380 u32 connmap:8; 381 /* 382 * Excludes TLVs 383 * 384 * Required: Service Name 385 * Optional: Rx Match Filter, Tx Match Filter, Service Specific Info, 386 */ 387 } NanSubscribeServiceReqParams, *pNanSubscribeServiceReqParams; 388 389 typedef struct PACKED 390 { 391 NanMsgHeader fwHeader; 392 NanSubscribeServiceReqParams subscribeServiceReqParams; 393 u8 ptlv[]; 394 } NanSubscribeServiceReqMsg, *pNanSubscribeServiceReqMsg; 395 396 /* NAN Subscribe Service Rsp */ 397 typedef struct PACKED 398 { 399 NanMsgHeader fwHeader; 400 /* status of the request */ 401 u16 status; 402 u16 value; 403 } NanSubscribeServiceRspMsg, *pNanSubscribeServiceRspMsg; 404 405 /* NAN Subscribe Service Cancel Req */ 406 typedef struct PACKED 407 { 408 NanMsgHeader fwHeader; 409 } NanSubscribeServiceCancelReqMsg, *pNanSubscribeServiceCancelReqMsg; 410 411 /* NAN Subscribe Service Cancel Rsp */ 412 typedef struct PACKED 413 { 414 NanMsgHeader fwHeader; 415 /* status of the request */ 416 u16 status; 417 u16 value; 418 } NanSubscribeServiceCancelRspMsg, *pNanSubscribeServiceCancelRspMsg; 419 420 /* NAN Subscribe Match Ind */ 421 typedef struct PACKED 422 { 423 u32 matchHandle; 424 u32 matchOccuredFlag:1; 425 u32 outOfResourceFlag:1; 426 u32 reserved:30; 427 } NanMatchIndParams; 428 429 typedef struct PACKED 430 { 431 NanMsgHeader fwHeader; 432 NanMatchIndParams matchIndParams; 433 u8 ptlv[]; 434 } NanMatchIndMsg, *pNanMatchIndMsg; 435 436 /* NAN Subscribe Unmatch Ind */ 437 typedef struct PACKED 438 { 439 u32 matchHandle; 440 } NanmatchExpiredIndParams; 441 442 typedef struct PACKED 443 { 444 NanMsgHeader fwHeader; 445 NanmatchExpiredIndParams matchExpiredIndParams; 446 } NanMatchExpiredIndMsg, *pNanMatchExpiredIndMsg; 447 448 /* NAN Subscribe Terminated Ind */ 449 typedef struct PACKED 450 { 451 NanMsgHeader fwHeader; 452 /* reason for the termination */ 453 u16 reason; 454 u16 reserved; 455 } NanSubscribeTerminatedIndMsg, *pNanSubscribeTerminatedIndMsg; 456 457 /* Event Ind */ 458 typedef struct PACKED 459 { 460 u32 eventId:8; 461 u32 reserved:24; 462 } NanEventIndParams; 463 464 typedef struct PACKED 465 { 466 NanMsgHeader fwHeader; 467 u8 ptlv[]; 468 } NanEventIndMsg, *pNanEventIndMsg; 469 470 /* NAN Transmit Followup Req */ 471 typedef struct PACKED 472 { 473 u32 matchHandle; 474 u32 priority:4; 475 u32 window:1; 476 u32 followupTxRspDisableFlag:1; 477 u32 reserved:26; 478 /* 479 * Excludes TLVs 480 * 481 * Required: Service Specific Info or Extended Service Specific Info 482 */ 483 } NanTransmitFollowupReqParams; 484 485 typedef struct PACKED 486 { 487 NanMsgHeader fwHeader; 488 NanTransmitFollowupReqParams transmitFollowupReqParams; 489 u8 ptlv[]; 490 } NanTransmitFollowupReqMsg, *pNanTransmitFollowupReqMsg; 491 492 /* NAN Transmit Followup Rsp */ 493 typedef struct PACKED 494 { 495 NanMsgHeader fwHeader; 496 /* status of the request */ 497 u16 status; 498 u16 value; 499 } NanTransmitFollowupRspMsg, *pNanTransmitFollowupRspMsg; 500 501 /* NAN Publish Followup Ind */ 502 typedef struct PACKED 503 { 504 u32 matchHandle; 505 u32 window:1; 506 u32 reserved:31; 507 /* 508 * Excludes TLVs 509 * 510 * Required: Service Specific Info or Extended Service Specific Info 511 */ 512 } NanFollowupIndParams; 513 514 typedef struct PACKED 515 { 516 NanMsgHeader fwHeader; 517 NanFollowupIndParams followupIndParams; 518 u8 ptlv[]; 519 } NanFollowupIndMsg, *pNanFollowupIndMsg; 520 521 /* NAN Statistics Req */ 522 typedef struct PACKED 523 { 524 u32 statsType:8; 525 u32 clear:1; 526 u32 reserved:23; 527 } NanStatsReqParams, *pNanStatsReqParams; 528 529 typedef struct PACKED 530 { 531 NanMsgHeader fwHeader; 532 NanStatsReqParams statsReqParams; 533 } NanStatsReqMsg, *pNanStatsReqMsg; 534 535 /* NAN Statistics Rsp */ 536 typedef struct PACKED 537 { 538 /* status of the request */ 539 u16 status; 540 u16 value; 541 u8 statsType; 542 u8 reserved; 543 } NanStatsRspParams, *pNanStatsRspParams; 544 545 typedef struct PACKED 546 { 547 NanMsgHeader fwHeader; 548 NanStatsRspParams statsRspParams; 549 u8 ptlv[]; 550 } NanStatsRspMsg, *pNanStatsRspMsg; 551 552 typedef struct PACKED 553 { 554 u8 count:7; 555 u8 s:1; 556 } NanSidAttr, *pSidAttr; 557 558 559 /* NAN Configuration Req */ 560 typedef struct PACKED 561 { 562 NanMsgHeader fwHeader; 563 /* 564 * TLVs: 565 * 566 * Required: None. 567 * Optional: SID, Random Time, Master Preference, WLAN Intra Attr, 568 * P2P Operation Attr, WLAN IBSS Attr, WLAN Mesh Attr 569 */ 570 u8 ptlv[]; 571 } NanConfigurationReqMsg, *pNanConfigurationReqMsg; 572 573 /* 574 * Because the Configuration Req message has TLVs in it use the macro below 575 * for the size argument to buffer allocation functions (vs. sizeof(msg)). 576 */ 577 #define NAN_MAX_CONFIGURATION_REQ_SIZE \ 578 ( \ 579 sizeof(NanMsgHeader) + \ 580 SIZEOF_TLV_HDR + sizeof(u8) /* SID Beacon */ + \ 581 SIZEOF_TLV_HDR + sizeof(u8) /* Random Time */ + \ 582 SIZEOF_TLV_HDR + sizeof(u8) /* Master Pref */ \ 583 ) 584 585 /* NAN Configuration Rsp */ 586 typedef struct PACKED 587 { 588 NanMsgHeader fwHeader; 589 /* status of the request */ 590 u16 status; 591 u16 value; 592 } NanConfigurationRspMsg, *pNanConfigurationRspMsg; 593 594 /* 595 * Because the Enable Req message has TLVs in it use the macro below for 596 * the size argument to buffer allocation functions (vs. sizeof(msg)). 597 */ 598 #define NAN_MAX_ENABLE_REQ_SIZE \ 599 ( \ 600 sizeof(NanMsgHeader) + \ 601 SIZEOF_TLV_HDR + sizeof(u16) /* Cluster Low */ + \ 602 SIZEOF_TLV_HDR + sizeof(u16) /* Cluster High */ + \ 603 SIZEOF_TLV_HDR + sizeof(u8) /* Master Pref */ \ 604 ) 605 606 /* NAN Enable Req */ 607 typedef struct PACKED 608 { 609 NanMsgHeader fwHeader; 610 /* 611 * TLVs: 612 * 613 * Required: Cluster Low, Cluster High, Master Preference, 614 * Optional: 5G Support, SID, 5G Sync Disc, RSSI Close, RSSI Medium, 615 * Hop Count Limit, Random Time, Master Preference, 616 * WLAN Intra Attr, P2P Operation Attr, WLAN IBSS Attr, 617 * WLAN Mesh Attr 618 */ 619 u8 ptlv[]; 620 } NanEnableReqMsg, *pNanEnableReqMsg; 621 622 /* NAN Enable Rsp */ 623 typedef struct PACKED 624 { 625 NanMsgHeader fwHeader; 626 /* status of the request */ 627 u16 status; 628 u16 value; 629 } NanEnableRspMsg, *pNanEnableRspMsg; 630 631 /* NAN Disable Req */ 632 typedef struct PACKED 633 { 634 NanMsgHeader fwHeader; 635 } NanDisableReqMsg, *pNanDisableReqMsg; 636 637 /* NAN Disable Rsp */ 638 typedef struct PACKED 639 { 640 NanMsgHeader fwHeader; 641 /* status of the request */ 642 u16 status; 643 u16 reserved; 644 } NanDisableRspMsg, *pNanDisableRspMsg; 645 646 /* NAN Disable Ind */ 647 typedef struct PACKED 648 { 649 NanMsgHeader fwHeader; 650 /* reason for the termination */ 651 u16 reason; 652 u16 reserved; 653 } NanDisableIndMsg, *pNanDisableIndMsg; 654 655 typedef struct PACKED 656 { 657 NanMsgHeader fwHeader; 658 u8 ptlv[]; 659 } NanTcaReqMsg, *pNanTcaReqMsg; 660 661 /* NAN TCA Rsp */ 662 typedef struct PACKED 663 { 664 NanMsgHeader fwHeader; 665 /* status of the request */ 666 u16 status; 667 u16 value; 668 } NanTcaRspMsg, *pNanTcaRspMsg; 669 670 typedef struct PACKED 671 { 672 NanMsgHeader fwHeader; 673 /* 674 * TLVs: 675 * 676 * Optional: Cluster size. 677 */ 678 u8 ptlv[]; 679 } NanTcaIndMsg, *pNanTcaIndMsg; 680 681 /* 682 * Because the TCA Ind message has TLVs in it use the macro below for the 683 * size argument to buffer allocation functions (vs. sizeof(msg)). 684 */ 685 #define NAN_MAX_TCA_IND_SIZE \ 686 ( \ 687 sizeof(NanMsgHeader) + \ 688 sizeof(NanTcaIndParams) + \ 689 SIZEOF_TLV_HDR + sizeof(u16) /* Cluster Size */ \ 690 ) 691 692 /* Function Declarations */ 693 u8* addTlv(u16 type, u16 length, const u8* value, u8* pOutTlv); 694 u16 NANTLV_ReadTlv(u8 *pInTlv, pNanTlv pOutTlv); 695 u16 NANTLV_WriteTlv(pNanTlv pInTlv, u8 *pOutTlv); 696 697 /* NAN Beacon Sdf Payload Req */ 698 typedef struct PACKED 699 { 700 NanMsgHeader fwHeader; 701 /* 702 * TLVs: 703 * 704 * Optional: Vendor specific attribute 705 */ 706 u8 ptlv[]; 707 } NanBeaconSdfPayloadReqMsg, *pNanBeaconSdfPayloadReqMsg; 708 709 /* NAN Beacon Sdf Payload Rsp */ 710 typedef struct PACKED 711 { 712 NanMsgHeader fwHeader; 713 /* status of the request */ 714 u16 status; 715 u16 reserved; 716 } NanBeaconSdfPayloadRspMsg, *pNanBeaconSdfPayloadRspMsg; 717 718 /* NAN Beacon Sdf Payload Ind */ 719 typedef struct PACKED 720 { 721 NanMsgHeader fwHeader; 722 /* 723 * TLVs: 724 * 725 * Required: Mac address 726 * Optional: Vendor specific attribute, sdf payload 727 * receive 728 */ 729 u8 ptlv[]; 730 } NanBeaconSdfPayloadIndMsg, *pNanBeaconSdfPayloadIndMsg; 731 732 typedef struct PACKED 733 { 734 u8 availIntDuration:2; 735 u8 mapId:4; 736 u8 reserved:2; 737 } NanApiEntryCtrl; 738 739 /* 740 * Valid Operating Classes were derived from IEEE Std. 802.11-2012 Annex E 741 * Table E-4 Global Operating Classe and, filtered by channel, are: 81, 83, 742 * 84, 103, 114, 115, 116, 124, 125. 743 */ 744 typedef struct PACKED 745 { 746 NanApiEntryCtrl entryCtrl; 747 u8 opClass; 748 u8 channel; 749 u8 availIntBitmap[4]; 750 } NanFurtherAvailabilityChan, *pNanFurtherAvailabilityChan; 751 752 typedef struct PACKED 753 { 754 u8 numChan; 755 u8 pFaChan[]; 756 } NanFurtherAvailabilityMapAttrTlv, *pNanFurtherAvailabilityMapAttrTlv; 757 758 /* Publish statistics. */ 759 typedef struct PACKED 760 { 761 u32 validPublishServiceReqMsgs; 762 u32 validPublishServiceRspMsgs; 763 u32 validPublishServiceCancelReqMsgs; 764 u32 validPublishServiceCancelRspMsgs; 765 u32 validPublishRepliedIndMsgs; 766 u32 validPublishTerminatedIndMsgs; 767 u32 validActiveSubscribes; 768 u32 validMatches; 769 u32 validFollowups; 770 u32 invalidPublishServiceReqMsgs; 771 u32 invalidPublishServiceCancelReqMsgs; 772 u32 invalidActiveSubscribes; 773 u32 invalidMatches; 774 u32 invalidFollowups; 775 u32 publishCount; 776 u32 publishNewMatchCount; 777 u32 pubsubGlobalNewMatchCount; 778 } FwNanPublishStats, *pFwNanPublishStats; 779 780 /* Subscribe statistics. */ 781 typedef struct PACKED 782 { 783 u32 validSubscribeServiceReqMsgs; 784 u32 validSubscribeServiceRspMsgs; 785 u32 validSubscribeServiceCancelReqMsgs; 786 u32 validSubscribeServiceCancelRspMsgs; 787 u32 validSubscribeTerminatedIndMsgs; 788 u32 validSubscribeMatchIndMsgs; 789 u32 validSubscribeUnmatchIndMsgs; 790 u32 validSolicitedPublishes; 791 u32 validMatches; 792 u32 validFollowups; 793 u32 invalidSubscribeServiceReqMsgs; 794 u32 invalidSubscribeServiceCancelReqMsgs; 795 u32 invalidSubscribeFollowupReqMsgs; 796 u32 invalidSolicitedPublishes; 797 u32 invalidMatches; 798 u32 invalidFollowups; 799 u32 subscribeCount; 800 u32 bloomFilterIndex; 801 u32 subscribeNewMatchCount; 802 u32 pubsubGlobalNewMatchCount; 803 } FwNanSubscribeStats, *pFwNanSubscribeStats; 804 805 /* NAN MAC Statistics. Used for MAC and DW statistics. */ 806 typedef struct PACKED 807 { 808 /* RX stats */ 809 u32 validFrames; 810 u32 validActionFrames; 811 u32 validBeaconFrames; 812 u32 ignoredActionFrames; 813 u32 ignoredBeaconFrames; 814 u32 invalidFrames; 815 u32 invalidActionFrames; 816 u32 invalidBeaconFrames; 817 u32 invalidMacHeaders; 818 u32 invalidPafHeaders; 819 u32 nonNanBeaconFrames; 820 821 u32 earlyActionFrames; 822 u32 inDwActionFrames; 823 u32 lateActionFrames; 824 825 /* TX stats */ 826 u32 framesQueued; 827 u32 totalTRSpUpdates; 828 u32 completeByTRSp; 829 u32 completeByTp75DW; 830 u32 completeByTendDW; 831 u32 lateActionFramesTx; 832 833 /* Misc stats - ignored for DW. */ 834 u32 twIncreases; 835 u32 twDecreases; 836 u32 twChanges; 837 u32 twHighwater; 838 u32 bloomFilterIndex; 839 } FwNanMacStats, *pFwNanMacStats; 840 841 /* NAN Sync and DW Statistics*/ 842 typedef struct PACKED 843 { 844 u64 currTsf; 845 u64 myRank; 846 u64 currAmRank; 847 u64 lastAmRank; 848 u32 currAmBTT; 849 u32 lastAmBTT; 850 u8 currAmHopCount; 851 u8 currRole; 852 u16 currClusterId; 853 u32 reserved1; 854 855 u64 timeSpentInCurrRole; 856 u64 totalTimeSpentAsMaster; 857 u64 totalTimeSpentAsNonMasterSync; 858 u64 totalTimeSpentAsNonMasterNonSync; 859 u32 transitionsToAnchorMaster; 860 u32 transitionsToMaster; 861 u32 transitionsToNonMasterSync; 862 u32 transitionsToNonMasterNonSync; 863 u32 amrUpdateCount; 864 u32 amrUpdateRankChangedCount; 865 u32 amrUpdateBTTChangedCount; 866 u32 amrUpdateHcChangedCount; 867 u32 amrUpdateNewDeviceCount; 868 u32 amrExpireCount; 869 u32 mergeCount; 870 u32 beaconsAboveHcLimit; 871 u32 beaconsBelowRssiThresh; 872 u32 beaconsIgnoredNoSpace; 873 u32 beaconsForOurCluster; 874 u32 beaconsForOtherCluster; 875 u32 beaconCancelRequests; 876 u32 beaconCancelFailures; 877 u32 beaconUpdateRequests; 878 u32 beaconUpdateFailures; 879 u32 syncBeaconTxAttempts; 880 u32 syncBeaconTxFailures; 881 u32 discBeaconTxAttempts; 882 u32 discBeaconTxFailures; 883 u32 amHopCountExpireCount; 884 } FwNanSyncStats, *pFwNanSyncStats; 885 886 /* NAN Misc DE Statistics */ 887 typedef struct PACKED 888 { 889 u32 validErrorRspMsgs; 890 u32 validTransmitFollowupReqMsgs; 891 u32 validTransmitFollowupRspMsgs; 892 u32 validFollowupIndMsgs; 893 u32 validConfigurationReqMsgs; 894 u32 validConfigurationRspMsgs; 895 u32 validStatsReqMsgs; 896 u32 validStatsRspMsgs; 897 u32 validEnableReqMsgs; 898 u32 validEnableRspMsgs; 899 u32 validDisableReqMsgs; 900 u32 validDisableRspMsgs; 901 u32 validDisableIndMsgs; 902 u32 validEventIndMsgs; 903 u32 validTcaReqMsgs; 904 u32 validTcaRspMsgs; 905 u32 validTcaIndMsgs; 906 u32 invalidTransmitFollowupReqMsgs; 907 u32 invalidConfigurationReqMsgs; 908 u32 invalidStatsReqMsgs; 909 u32 invalidEnableReqMsgs; 910 u32 invalidDisableReqMsgs; 911 u32 invalidTcaReqMsgs; 912 } FwNanDeStats, *pFwNanDeStats; 913 914 /* 915 Definition of various NanIndication(events) 916 */ 917 typedef enum { 918 NAN_INDICATION_PUBLISH_TERMINATED =1, 919 NAN_INDICATION_MATCH =2, 920 NAN_INDICATION_MATCH_EXPIRED =3, 921 NAN_INDICATION_SUBSCRIBE_TERMINATED =4, 922 NAN_INDICATION_DE_EVENT =5, 923 NAN_INDICATION_FOLLOWUP =6, 924 NAN_INDICATION_DISABLED =7, 925 NAN_INDICATION_TCA =8, 926 NAN_INDICATION_BEACON_SDF_PAYLOAD =9, 927 NAN_INDICATION_UNKNOWN =0xFFFF 928 } NanIndicationType; 929 930 typedef struct { 931 /* NAN master rank being advertised by DE */ 932 u64 master_rank; 933 /* NAN master preference being advertised by DE */ 934 u8 master_pref; 935 /* random value being advertised by DE */ 936 u8 random_factor; 937 /* hop_count from anchor master */ 938 u8 hop_count; 939 u32 beacon_transmit_time; 940 } NanStaParameter; 941 942 /* NAN Capabilities Req */ 943 typedef struct PACKED 944 { 945 NanMsgHeader fwHeader; 946 } NanCapabilitiesReqMsg, *pNanCapabilitiesReqMsg; 947 948 /* NAN Capabilities Rsp */ 949 typedef struct PACKED 950 { 951 NanMsgHeader fwHeader; 952 /* status of the request */ 953 u32 status; 954 u32 value; 955 u32 max_concurrent_nan_clusters; 956 u32 max_publishes; 957 u32 max_subscribes; 958 u32 max_service_name_len; 959 u32 max_match_filter_len; 960 u32 max_total_match_filter_len; 961 u32 max_service_specific_info_len; 962 u32 max_vsa_data_len; 963 u32 max_mesh_data_len; 964 u32 max_ndi_interfaces; 965 u32 max_ndp_sessions; 966 u32 max_app_info_len; 967 } NanCapabilitiesRspMsg, *pNanCapabilitiesRspMsg; 968 969 /* 970 Function to get the sta_parameter expected by Sigma 971 as per CAPI spec. 972 */ 973 wifi_error nan_get_sta_parameter(wifi_request_id id, 974 wifi_interface_handle iface, 975 NanStaParameter* msg); 976 977 #ifdef __cplusplus 978 } 979 #endif /* __cplusplus */ 980 981 #endif /* __NAN_I_H__ */ 982 983