1291 lines
37 KiB
C
1291 lines
37 KiB
C
/*
|
|
* Copyright (C) 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef __NAN_I_H__
|
|
#define __NAN_I_H__
|
|
|
|
#include "common.h"
|
|
#include "cpp_bindings.h"
|
|
#include "wifi_hal.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif /* __cplusplus */
|
|
|
|
#ifndef PACKED
|
|
#define PACKED __attribute__((packed))
|
|
#endif
|
|
#define BIT_NONE 0x00
|
|
#define BIT_0 0x01
|
|
#define BIT_1 0x02
|
|
#define BIT_2 0x04
|
|
#define BIT_3 0x08
|
|
#define BIT_4 0x10
|
|
#define BIT_5 0x20
|
|
#define BIT_6 0x40
|
|
#define BIT_7 0x80
|
|
#define BIT_8 0x0100
|
|
#define BIT_9 0x0200
|
|
#define BIT_10 0x0400
|
|
#define BIT_11 0x0800
|
|
#define BIT_12 0x1000
|
|
#define BIT_13 0x2000
|
|
#define BIT_14 0x4000
|
|
#define BIT_15 0x8000
|
|
#define BIT_16 0x010000
|
|
#define BIT_17 0x020000
|
|
#define BIT_18 0x040000
|
|
#define BIT_19 0x080000
|
|
#define BIT_20 0x100000
|
|
#define BIT_21 0x200000
|
|
#define BIT_22 0x400000
|
|
#define BIT_23 0x800000
|
|
#define BIT_24 0x01000000
|
|
#define BIT_25 0x02000000
|
|
#define BIT_26 0x04000000
|
|
#define BIT_27 0x08000000
|
|
#define BIT_28 0x10000000
|
|
#define BIT_29 0x20000000
|
|
#define BIT_30 0x40000000
|
|
#define BIT_31 0x80000000
|
|
|
|
/** macro to convert FW MAC address from WMI word format to User Space MAC char array */
|
|
#define FW_MAC_ADDR_TO_CHAR_ARRAY(fw_mac_addr, mac_addr) do { \
|
|
(mac_addr)[0] = ((fw_mac_addr).mac_addr31to0) & 0xff; \
|
|
(mac_addr)[1] = (((fw_mac_addr).mac_addr31to0) >> 8) & 0xff; \
|
|
(mac_addr)[2] = (((fw_mac_addr).mac_addr31to0) >> 16) & 0xff; \
|
|
(mac_addr)[3] = (((fw_mac_addr).mac_addr31to0) >> 24) & 0xff; \
|
|
(mac_addr)[4] = ((fw_mac_addr).mac_addr47to32) & 0xff; \
|
|
(mac_addr)[5] = (((fw_mac_addr).mac_addr47to32) >> 8) & 0xff; \
|
|
} while (0)
|
|
|
|
/** macro to convert User space MAC address from char array to FW WMI word format */
|
|
#define CHAR_ARRAY_TO_MAC_ADDR(mac_addr, fw_mac_addr) do { \
|
|
(fw_mac_addr).mac_addr31to0 = \
|
|
((mac_addr)[0] | ((mac_addr)[1] << 8) \
|
|
| ((mac_addr)[2] << 16) | ((mac_addr)[3] << 24)); \
|
|
(fw_mac_addr).mac_addr47to32 = \
|
|
((mac_addr)[4] | ((mac_addr)[5] << 8)); \
|
|
} while (0)
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* WLAN NAN CONSTANTS
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
typedef enum
|
|
{
|
|
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,
|
|
NAN_MSG_ID_SELF_TRANSMIT_FOLLOWUP_IND = 35,
|
|
NAN_MSG_ID_RANGING_REQUEST_RECEVD_IND = 36,
|
|
NAN_MSG_ID_RANGING_RESULT_IND = 37,
|
|
NAN_MSG_ID_TESTMODE_REQ = 1025,
|
|
NAN_MSG_ID_TESTMODE_RSP = 1026
|
|
} NanMsgId;
|
|
|
|
/*
|
|
Various TLV Type ID sent as part of NAN Stats Response
|
|
or NAN TCA Indication
|
|
*/
|
|
typedef enum
|
|
{
|
|
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_NAN_DATA_PATH_PARAMS = 11,
|
|
NAN_TLV_TYPE_NAN_DATA_SUPPORTED_BAND = 12,
|
|
NAN_TLV_TYPE_2G_COMMITTED_DW = 13,
|
|
NAN_TLV_TYPE_5G_COMMITTED_DW = 14,
|
|
NAN_TLV_TYPE_NAN_DATA_RESPONDER_MODE = 15,
|
|
NAN_TLV_TYPE_NAN_DATA_ENABLED_IN_MATCH = 16,
|
|
NAN_TLV_TYPE_NAN_SERVICE_ACCEPT_POLICY = 17,
|
|
NAN_TLV_TYPE_NAN_CSID = 18,
|
|
NAN_TLV_TYPE_NAN_SCID = 19,
|
|
NAN_TLV_TYPE_NAN_PMK = 20,
|
|
NAN_TLV_TYPE_SDEA_CTRL_PARAMS = 21,
|
|
NAN_TLV_TYPE_NAN_RANGING_CFG = 22,
|
|
NAN_TLV_TYPE_CONFIG_DISCOVERY_INDICATIONS = 23,
|
|
NAN_TLV_TYPE_NAN20_RANGING_REQUEST = 24,
|
|
NAN_TLV_TYPE_NAN20_RANGING_RESULT = 25,
|
|
NAN_TLV_TYPE_NAN20_RANGING_REQUEST_RECEIVED = 26,
|
|
NAN_TLV_TYPE_NAN_PASSPHRASE = 27,
|
|
NAN_TLV_TYPE_SDEA_SERVICE_SPECIFIC_INFO = 28,
|
|
NAN_TLV_TYPE_DEV_CAP_ATTR_CAPABILITY = 29,
|
|
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_DISC_MAC_ADDR_RANDOM_INTERVAL,
|
|
NAN_TLV_TYPE_RANGING_AUTO_RESPONSE_CFG = 4134,
|
|
NAN_TLV_TYPE_SUBSCRIBE_SID_BEACON = 4135,
|
|
NAN_TLV_TYPE_DW_EARLY_TERMINATION = 4136,
|
|
NAN_TLV_TYPE_TX_RX_CHAINS = 4137,
|
|
NAN_TLV_TYPE_ENABLE_DEVICE_RANGING = 4138,
|
|
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,
|
|
|
|
/* Testmode types */
|
|
NAN_TLV_TYPE_TESTMODE_FIRST = 36864,
|
|
NAN_TLV_TYPE_TESTMODE_GENERIC_CMD = NAN_TLV_TYPE_TESTMODE_FIRST,
|
|
NAN_TLV_TYPE_TESTMODE_LAST = 37000,
|
|
|
|
NAN_TLV_TYPE_LAST = 65535
|
|
} NanTlvType;
|
|
|
|
/* 8-byte control message header used by NAN*/
|
|
typedef struct PACKED
|
|
{
|
|
u16 msgVersion:4;
|
|
u16 msgId:12;
|
|
u16 msgLen;
|
|
u16 handle;
|
|
u16 transactionId;
|
|
} NanMsgHeader, *pNanMsgHeader;
|
|
|
|
/* Enumeration for Version */
|
|
typedef enum
|
|
{
|
|
NAN_MSG_VERSION1 = 1,
|
|
}NanMsgVersion;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
u16 type;
|
|
u16 length;
|
|
u8* value;
|
|
} NanTlv, *pNanTlv;
|
|
|
|
#define SIZEOF_TLV_HDR (sizeof(NanTlv::type) + sizeof(NanTlv::length))
|
|
/* NAN TLV Groups and Types */
|
|
typedef enum
|
|
{
|
|
NAN_TLV_GROUP_FIRST = 0,
|
|
NAN_TLV_GROUP_SDF = NAN_TLV_GROUP_FIRST,
|
|
NAN_TLV_GROUP_CONFIG,
|
|
NAN_TLV_GROUP_STATS,
|
|
NAN_TLV_GROUP_ATTRS,
|
|
NAN_TLV_NUM_GROUPS,
|
|
NAN_TLV_GROUP_LAST = NAN_TLV_NUM_GROUPS
|
|
} NanTlvGroup;
|
|
|
|
/* NAN Miscellaneous Constants */
|
|
#define NAN_TTL_INFINITE 0
|
|
#define NAN_REPLY_COUNT_INFINITE 0
|
|
|
|
/* NAN Confguration 5G Channel Access Bit */
|
|
#define NAN_5G_CHANNEL_ACCESS_UNSUPPORTED 0
|
|
#define NAN_5G_CHANNEL_ACCESS_SUPPORTED 1
|
|
|
|
/* NAN Configuration Service IDs Enclosure Bit */
|
|
#define NAN_SIDS_NOT_ENCLOSED_IN_BEACONS 0
|
|
#define NAN_SIBS_ENCLOSED_IN_BEACONS 1
|
|
|
|
/* NAN Configuration Priority */
|
|
#define NAN_CFG_PRIORITY_SERVICE_DISCOVERY 0
|
|
#define NAN_CFG_PRIORITY_DATA_CONNECTION 1
|
|
|
|
/* NAN Configuration 5G Channel Usage */
|
|
#define NAN_5G_CHANNEL_USAGE_SYNC_AND_DISCOVERY 0
|
|
#define NAN_5G_CHANNEL_USAGE_DISCOVERY_ONLY 1
|
|
|
|
/* NAN Configuration TX_Beacon Content */
|
|
#define NAN_TX_BEACON_CONTENT_OLD_AM_INFO 0
|
|
#define NAN_TX_BEACON_CONTENT_UPDATED_AM_INFO 1
|
|
|
|
/* NAN Configuration Miscellaneous Constants */
|
|
#define NAN_MAC_INTERFACE_PERIODICITY_MIN 30
|
|
#define NAN_MAC_INTERFACE_PERIODICITY_MAX 255
|
|
|
|
#define NAN_DW_RANDOM_TIME_MIN 120
|
|
#define NAN_DW_RANDOM_TIME_MAX 240
|
|
|
|
#define NAN_INITIAL_SCAN_MIN_IDEAL_PERIOD 200
|
|
#define NAN_INITIAL_SCAN_MAX_IDEAL_PERIOD 300
|
|
|
|
#define NAN_ONGOING_SCAN_MIN_PERIOD 10
|
|
#define NAN_ONGOING_SCAN_MAX_PERIOD 30
|
|
|
|
#define NAN_HOP_COUNT_LIMIT 5
|
|
|
|
#define NAN_WINDOW_DW 0
|
|
#define NAN_WINDOW_FAW 1
|
|
|
|
/* NAN Error Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
u16 status;
|
|
u16 value;
|
|
} NanErrorRspMsg, *pNanErrorRspMsg;
|
|
|
|
//* NAN Publish Service Req */
|
|
typedef struct PACKED
|
|
{
|
|
u16 ttl;
|
|
u16 period;
|
|
u32 replyIndFlag:1;
|
|
u32 publishType:2;
|
|
u32 txType:1;
|
|
u32 rssiThresholdFlag:1;
|
|
u32 ota_flag:1;
|
|
u32 matchAlg:2;
|
|
u32 count:8;
|
|
u32 connmap:8;
|
|
u32 pubTerminatedIndDisableFlag:1;
|
|
u32 pubMatchExpiredIndDisableFlag:1;
|
|
u32 followupRxIndDisableFlag:1;
|
|
u32 reserved2:5;
|
|
/*
|
|
* Excludes TLVs
|
|
*
|
|
* Required: Service Name,
|
|
* Optional: Tx Match Filter, Rx Match Filter, Service Specific Info,
|
|
*/
|
|
} NanPublishServiceReqParams, *pNanPublishServiceReqParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
NanPublishServiceReqParams publishServiceReqParams;
|
|
u8 ptlv[];
|
|
} NanPublishServiceReqMsg, *pNanPublishServiceReqMsg;
|
|
|
|
/* NAN Publish Service Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 value;
|
|
} NanPublishServiceRspMsg, *pNanPublishServiceRspMsg;
|
|
|
|
/* NAN Publish Service Cancel Req */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
} NanPublishServiceCancelReqMsg, *pNanPublishServiceCancelReqMsg;
|
|
|
|
/* NAN Publish Service Cancel Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 value;
|
|
} NanPublishServiceCancelRspMsg, *pNanPublishServiceCancelRspMsg;
|
|
|
|
/* NAN Publish Terminated Ind */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* reason for the termination */
|
|
u16 reason;
|
|
u16 reserved;
|
|
} NanPublishTerminatedIndMsg, *pNanPublishTerminatedIndMsg;
|
|
|
|
/* Params for NAN Publish Replied Ind */
|
|
typedef struct PACKED
|
|
{
|
|
u32 matchHandle;
|
|
} NanPublishRepliedIndParams;
|
|
|
|
/* NAN Publish Replied Ind */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
NanPublishRepliedIndParams publishRepliedIndParams;
|
|
/*
|
|
* Excludes TLVs
|
|
*
|
|
* Required: MAC Address
|
|
* Optional: Received RSSI Value
|
|
*
|
|
*/
|
|
u8 ptlv[];
|
|
} NanPublishRepliedIndMsg, *pNanPublishRepliedIndMsg;
|
|
|
|
/* NAN Device Capability Attribute */
|
|
typedef struct PACKED
|
|
{
|
|
u32 dfs_master:1;
|
|
u32 ext_key_id:1;
|
|
u32 simu_ndp_data_recept:1;
|
|
u32 ndpe_attr_supp:1;
|
|
u32 reserved:28;
|
|
} NanDevCapAttrCap, *pNanDevCapAttrCap;
|
|
|
|
/* NAN Subscribe Service Req */
|
|
typedef struct PACKED
|
|
{
|
|
u16 ttl;
|
|
u16 period;
|
|
u32 subscribeType:1;
|
|
u32 srfAttr:1;
|
|
u32 srfInclude:1;
|
|
u32 srfSend:1;
|
|
u32 ssiRequired:1;
|
|
u32 matchAlg:2;
|
|
u32 xbit:1;
|
|
u32 count:8;
|
|
u32 rssiThresholdFlag:1;
|
|
u32 ota_flag:1;
|
|
u32 subTerminatedIndDisableFlag:1;
|
|
u32 subMatchExpiredIndDisableFlag:1;
|
|
u32 followupRxIndDisableFlag:1;
|
|
u32 reserved:3;
|
|
u32 connmap:8;
|
|
/*
|
|
* Excludes TLVs
|
|
*
|
|
* Required: Service Name
|
|
* Optional: Rx Match Filter, Tx Match Filter, Service Specific Info,
|
|
*/
|
|
} NanSubscribeServiceReqParams, *pNanSubscribeServiceReqParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
NanSubscribeServiceReqParams subscribeServiceReqParams;
|
|
u8 ptlv[];
|
|
} NanSubscribeServiceReqMsg, *pNanSubscribeServiceReqMsg;
|
|
|
|
/* NAN Subscribe Service Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 value;
|
|
} NanSubscribeServiceRspMsg, *pNanSubscribeServiceRspMsg;
|
|
|
|
/* NAN Subscribe Service Cancel Req */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
} NanSubscribeServiceCancelReqMsg, *pNanSubscribeServiceCancelReqMsg;
|
|
|
|
/* NAN Subscribe Service Cancel Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 value;
|
|
} NanSubscribeServiceCancelRspMsg, *pNanSubscribeServiceCancelRspMsg;
|
|
|
|
/* NAN Subscribe Match Ind */
|
|
typedef struct PACKED
|
|
{
|
|
u32 matchHandle;
|
|
u32 matchOccuredFlag:1;
|
|
u32 outOfResourceFlag:1;
|
|
u32 reserved:30;
|
|
} NanMatchIndParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
NanMatchIndParams matchIndParams;
|
|
u8 ptlv[];
|
|
} NanMatchIndMsg, *pNanMatchIndMsg;
|
|
|
|
/* NAN Subscribe Unmatch Ind */
|
|
typedef struct PACKED
|
|
{
|
|
u32 matchHandle;
|
|
} NanmatchExpiredIndParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
NanmatchExpiredIndParams matchExpiredIndParams;
|
|
} NanMatchExpiredIndMsg, *pNanMatchExpiredIndMsg;
|
|
|
|
/* NAN Subscribe Terminated Ind */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* reason for the termination */
|
|
u16 reason;
|
|
u16 reserved;
|
|
} NanSubscribeTerminatedIndMsg, *pNanSubscribeTerminatedIndMsg;
|
|
|
|
/* Event Ind */
|
|
typedef struct PACKED
|
|
{
|
|
u32 eventId:8;
|
|
u32 reserved:24;
|
|
} NanEventIndParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
u8 ptlv[];
|
|
} NanEventIndMsg, *pNanEventIndMsg;
|
|
|
|
/* NAN Transmit Followup Req */
|
|
typedef struct PACKED
|
|
{
|
|
u32 matchHandle;
|
|
u32 priority:4;
|
|
u32 window:1;
|
|
u32 followupTxRspDisableFlag:1;
|
|
u32 reserved:26;
|
|
/*
|
|
* Excludes TLVs
|
|
*
|
|
* Required: Service Specific Info or Extended Service Specific Info
|
|
*/
|
|
} NanTransmitFollowupReqParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
NanTransmitFollowupReqParams transmitFollowupReqParams;
|
|
u8 ptlv[];
|
|
} NanTransmitFollowupReqMsg, *pNanTransmitFollowupReqMsg;
|
|
|
|
/* NAN Transmit Followup Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 value;
|
|
} NanTransmitFollowupRspMsg, *pNanTransmitFollowupRspMsg;
|
|
|
|
/* NAN Publish Followup Ind */
|
|
typedef struct PACKED
|
|
{
|
|
u32 matchHandle;
|
|
u32 window:1;
|
|
u32 reserved:31;
|
|
/*
|
|
* Excludes TLVs
|
|
*
|
|
* Required: Service Specific Info or Extended Service Specific Info
|
|
*/
|
|
} NanFollowupIndParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
NanFollowupIndParams followupIndParams;
|
|
u8 ptlv[];
|
|
} NanFollowupIndMsg, *pNanFollowupIndMsg;
|
|
|
|
/* NAN Statistics Req */
|
|
typedef struct PACKED
|
|
{
|
|
u32 statsType:8;
|
|
u32 clear:1;
|
|
u32 reserved:23;
|
|
} NanStatsReqParams, *pNanStatsReqParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
NanStatsReqParams statsReqParams;
|
|
} NanStatsReqMsg, *pNanStatsReqMsg;
|
|
|
|
/* NAN Statistics Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 value;
|
|
u8 statsType;
|
|
u8 reserved;
|
|
} NanStatsRspParams, *pNanStatsRspParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
NanStatsRspParams statsRspParams;
|
|
u8 ptlv[];
|
|
} NanStatsRspMsg, *pNanStatsRspMsg;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
u8 count:7;
|
|
u8 s:1;
|
|
} NanSidAttr, *pSidAttr;
|
|
|
|
|
|
/* NAN Configuration Req */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/*
|
|
* TLVs:
|
|
*
|
|
* Required: None.
|
|
* Optional: SID, Random Time, Master Preference, WLAN Intra Attr,
|
|
* P2P Operation Attr, WLAN IBSS Attr, WLAN Mesh Attr
|
|
*/
|
|
u8 ptlv[];
|
|
} NanConfigurationReqMsg, *pNanConfigurationReqMsg;
|
|
|
|
/*
|
|
* Because the Configuration Req message has TLVs in it use the macro below
|
|
* for the size argument to buffer allocation functions (vs. sizeof(msg)).
|
|
*/
|
|
#define NAN_MAX_CONFIGURATION_REQ_SIZE \
|
|
( \
|
|
sizeof(NanMsgHeader) + \
|
|
SIZEOF_TLV_HDR + sizeof(u8) /* SID Beacon */ + \
|
|
SIZEOF_TLV_HDR + sizeof(u8) /* Random Time */ + \
|
|
SIZEOF_TLV_HDR + sizeof(u8) /* Master Pref */ \
|
|
)
|
|
|
|
/* NAN Configuration Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 value;
|
|
} NanConfigurationRspMsg, *pNanConfigurationRspMsg;
|
|
|
|
/*
|
|
* Because the Enable Req message has TLVs in it use the macro below for
|
|
* the size argument to buffer allocation functions (vs. sizeof(msg)).
|
|
*/
|
|
#define NAN_MAX_ENABLE_REQ_SIZE \
|
|
( \
|
|
sizeof(NanMsgHeader) + \
|
|
SIZEOF_TLV_HDR + sizeof(u16) /* Cluster Low */ + \
|
|
SIZEOF_TLV_HDR + sizeof(u16) /* Cluster High */ + \
|
|
SIZEOF_TLV_HDR + sizeof(u8) /* Master Pref */ \
|
|
)
|
|
|
|
/* Config Discovery Indication */
|
|
typedef struct PACKED
|
|
{
|
|
u32 disableDiscoveryMacAddressEvent:1;
|
|
u32 disableDiscoveryStartedClusterEvent:1;
|
|
u32 disableDiscoveryJoinedClusterEvent:1;
|
|
u32 reserved:29;
|
|
} NanConfigDiscoveryIndications;
|
|
|
|
/* NAN Enable Req */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/*
|
|
* 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 ptlv[];
|
|
} NanEnableReqMsg, *pNanEnableReqMsg;
|
|
|
|
/* NAN Enable Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 value;
|
|
} NanEnableRspMsg, *pNanEnableRspMsg;
|
|
|
|
/* NAN Disable Req */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
} NanDisableReqMsg, *pNanDisableReqMsg;
|
|
|
|
/* NAN Disable Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 reserved;
|
|
} NanDisableRspMsg, *pNanDisableRspMsg;
|
|
|
|
/* NAN Disable Ind */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* reason for the termination */
|
|
u16 reason;
|
|
u16 reserved;
|
|
} NanDisableIndMsg, *pNanDisableIndMsg;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
u8 ptlv[];
|
|
} NanTcaReqMsg, *pNanTcaReqMsg;
|
|
|
|
/* NAN TCA Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 value;
|
|
} NanTcaRspMsg, *pNanTcaRspMsg;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/*
|
|
* TLVs:
|
|
*
|
|
* Optional: Cluster size.
|
|
*/
|
|
u8 ptlv[];
|
|
} NanTcaIndMsg, *pNanTcaIndMsg;
|
|
|
|
/*
|
|
* Because the TCA Ind message has TLVs in it use the macro below for the
|
|
* size argument to buffer allocation functions (vs. sizeof(msg)).
|
|
*/
|
|
#define NAN_MAX_TCA_IND_SIZE \
|
|
( \
|
|
sizeof(NanMsgHeader) + \
|
|
sizeof(NanTcaIndParams) + \
|
|
SIZEOF_TLV_HDR + sizeof(u16) /* Cluster Size */ \
|
|
)
|
|
|
|
/* Function Declarations */
|
|
u8* addTlv(u16 type, u16 length, const u8* value, u8* pOutTlv);
|
|
u16 NANTLV_ReadTlv(u8 *pInTlv, pNanTlv pOutTlv);
|
|
u16 NANTLV_WriteTlv(pNanTlv pInTlv, u8 *pOutTlv);
|
|
|
|
/* NAN Beacon Sdf Payload Req */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/*
|
|
* TLVs:
|
|
*
|
|
* Optional: Vendor specific attribute
|
|
*/
|
|
u8 ptlv[];
|
|
} NanBeaconSdfPayloadReqMsg, *pNanBeaconSdfPayloadReqMsg;
|
|
|
|
/* NAN Beacon Sdf Payload Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
u16 status;
|
|
u16 reserved;
|
|
} NanBeaconSdfPayloadRspMsg, *pNanBeaconSdfPayloadRspMsg;
|
|
|
|
/* NAN Beacon Sdf Payload Ind */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/*
|
|
* TLVs:
|
|
*
|
|
* Required: Mac address
|
|
* Optional: Vendor specific attribute, sdf payload
|
|
* receive
|
|
*/
|
|
u8 ptlv[];
|
|
} NanBeaconSdfPayloadIndMsg, *pNanBeaconSdfPayloadIndMsg;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
u8 availIntDuration:2;
|
|
u8 mapId:4;
|
|
u8 reserved:2;
|
|
} NanApiEntryCtrl;
|
|
|
|
/*
|
|
* Valid Operating Classes were derived from IEEE Std. 802.11-2012 Annex E
|
|
* Table E-4 Global Operating Classe and, filtered by channel, are: 81, 83,
|
|
* 84, 103, 114, 115, 116, 124, 125.
|
|
*/
|
|
typedef struct PACKED
|
|
{
|
|
NanApiEntryCtrl entryCtrl;
|
|
u8 opClass;
|
|
u8 channel;
|
|
u8 availIntBitmap[4];
|
|
} NanFurtherAvailabilityChan, *pNanFurtherAvailabilityChan;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
u8 numChan;
|
|
u8 pFaChan[];
|
|
} NanFurtherAvailabilityMapAttrTlv, *pNanFurtherAvailabilityMapAttrTlv;
|
|
|
|
/* Publish statistics. */
|
|
typedef struct PACKED
|
|
{
|
|
u32 validPublishServiceReqMsgs;
|
|
u32 validPublishServiceRspMsgs;
|
|
u32 validPublishServiceCancelReqMsgs;
|
|
u32 validPublishServiceCancelRspMsgs;
|
|
u32 validPublishRepliedIndMsgs;
|
|
u32 validPublishTerminatedIndMsgs;
|
|
u32 validActiveSubscribes;
|
|
u32 validMatches;
|
|
u32 validFollowups;
|
|
u32 invalidPublishServiceReqMsgs;
|
|
u32 invalidPublishServiceCancelReqMsgs;
|
|
u32 invalidActiveSubscribes;
|
|
u32 invalidMatches;
|
|
u32 invalidFollowups;
|
|
u32 publishCount;
|
|
u32 publishNewMatchCount;
|
|
u32 pubsubGlobalNewMatchCount;
|
|
} FwNanPublishStats, *pFwNanPublishStats;
|
|
|
|
/* Subscribe statistics. */
|
|
typedef struct PACKED
|
|
{
|
|
u32 validSubscribeServiceReqMsgs;
|
|
u32 validSubscribeServiceRspMsgs;
|
|
u32 validSubscribeServiceCancelReqMsgs;
|
|
u32 validSubscribeServiceCancelRspMsgs;
|
|
u32 validSubscribeTerminatedIndMsgs;
|
|
u32 validSubscribeMatchIndMsgs;
|
|
u32 validSubscribeUnmatchIndMsgs;
|
|
u32 validSolicitedPublishes;
|
|
u32 validMatches;
|
|
u32 validFollowups;
|
|
u32 invalidSubscribeServiceReqMsgs;
|
|
u32 invalidSubscribeServiceCancelReqMsgs;
|
|
u32 invalidSubscribeFollowupReqMsgs;
|
|
u32 invalidSolicitedPublishes;
|
|
u32 invalidMatches;
|
|
u32 invalidFollowups;
|
|
u32 subscribeCount;
|
|
u32 bloomFilterIndex;
|
|
u32 subscribeNewMatchCount;
|
|
u32 pubsubGlobalNewMatchCount;
|
|
} FwNanSubscribeStats, *pFwNanSubscribeStats;
|
|
|
|
/* NAN MAC Statistics. Used for MAC and DW statistics. */
|
|
typedef struct PACKED
|
|
{
|
|
/* RX stats */
|
|
u32 validFrames;
|
|
u32 validActionFrames;
|
|
u32 validBeaconFrames;
|
|
u32 ignoredActionFrames;
|
|
u32 ignoredBeaconFrames;
|
|
u32 invalidFrames;
|
|
u32 invalidActionFrames;
|
|
u32 invalidBeaconFrames;
|
|
u32 invalidMacHeaders;
|
|
u32 invalidPafHeaders;
|
|
u32 nonNanBeaconFrames;
|
|
|
|
u32 earlyActionFrames;
|
|
u32 inDwActionFrames;
|
|
u32 lateActionFrames;
|
|
|
|
/* TX stats */
|
|
u32 framesQueued;
|
|
u32 totalTRSpUpdates;
|
|
u32 completeByTRSp;
|
|
u32 completeByTp75DW;
|
|
u32 completeByTendDW;
|
|
u32 lateActionFramesTx;
|
|
|
|
/* Misc stats - ignored for DW. */
|
|
u32 twIncreases;
|
|
u32 twDecreases;
|
|
u32 twChanges;
|
|
u32 twHighwater;
|
|
u32 bloomFilterIndex;
|
|
} FwNanMacStats, *pFwNanMacStats;
|
|
|
|
/* NAN Sync and DW Statistics*/
|
|
typedef struct PACKED
|
|
{
|
|
u64 currTsf;
|
|
u64 myRank;
|
|
u64 currAmRank;
|
|
u64 lastAmRank;
|
|
u32 currAmBTT;
|
|
u32 lastAmBTT;
|
|
u8 currAmHopCount;
|
|
u8 currRole;
|
|
u16 currClusterId;
|
|
u32 reserved1;
|
|
|
|
u64 timeSpentInCurrRole;
|
|
u64 totalTimeSpentAsMaster;
|
|
u64 totalTimeSpentAsNonMasterSync;
|
|
u64 totalTimeSpentAsNonMasterNonSync;
|
|
u32 transitionsToAnchorMaster;
|
|
u32 transitionsToMaster;
|
|
u32 transitionsToNonMasterSync;
|
|
u32 transitionsToNonMasterNonSync;
|
|
u32 amrUpdateCount;
|
|
u32 amrUpdateRankChangedCount;
|
|
u32 amrUpdateBTTChangedCount;
|
|
u32 amrUpdateHcChangedCount;
|
|
u32 amrUpdateNewDeviceCount;
|
|
u32 amrExpireCount;
|
|
u32 mergeCount;
|
|
u32 beaconsAboveHcLimit;
|
|
u32 beaconsBelowRssiThresh;
|
|
u32 beaconsIgnoredNoSpace;
|
|
u32 beaconsForOurCluster;
|
|
u32 beaconsForOtherCluster;
|
|
u32 beaconCancelRequests;
|
|
u32 beaconCancelFailures;
|
|
u32 beaconUpdateRequests;
|
|
u32 beaconUpdateFailures;
|
|
u32 syncBeaconTxAttempts;
|
|
u32 syncBeaconTxFailures;
|
|
u32 discBeaconTxAttempts;
|
|
u32 discBeaconTxFailures;
|
|
u32 amHopCountExpireCount;
|
|
u32 ndpChannelFreq;
|
|
u32 ndpChannelFreq2;
|
|
u32 schedUpdateChannelFreq;
|
|
} FwNanSyncStats, *pFwNanSyncStats;
|
|
|
|
/* NAN Misc DE Statistics */
|
|
typedef struct PACKED
|
|
{
|
|
u32 validErrorRspMsgs;
|
|
u32 validTransmitFollowupReqMsgs;
|
|
u32 validTransmitFollowupRspMsgs;
|
|
u32 validFollowupIndMsgs;
|
|
u32 validConfigurationReqMsgs;
|
|
u32 validConfigurationRspMsgs;
|
|
u32 validStatsReqMsgs;
|
|
u32 validStatsRspMsgs;
|
|
u32 validEnableReqMsgs;
|
|
u32 validEnableRspMsgs;
|
|
u32 validDisableReqMsgs;
|
|
u32 validDisableRspMsgs;
|
|
u32 validDisableIndMsgs;
|
|
u32 validEventIndMsgs;
|
|
u32 validTcaReqMsgs;
|
|
u32 validTcaRspMsgs;
|
|
u32 validTcaIndMsgs;
|
|
u32 invalidTransmitFollowupReqMsgs;
|
|
u32 invalidConfigurationReqMsgs;
|
|
u32 invalidStatsReqMsgs;
|
|
u32 invalidEnableReqMsgs;
|
|
u32 invalidDisableReqMsgs;
|
|
u32 invalidTcaReqMsgs;
|
|
} FwNanDeStats, *pFwNanDeStats;
|
|
|
|
/*
|
|
Definition of various NanIndication(events)
|
|
*/
|
|
typedef enum {
|
|
NAN_INDICATION_PUBLISH_REPLIED =0,
|
|
NAN_INDICATION_PUBLISH_TERMINATED =1,
|
|
NAN_INDICATION_MATCH =2,
|
|
NAN_INDICATION_MATCH_EXPIRED =3,
|
|
NAN_INDICATION_SUBSCRIBE_TERMINATED =4,
|
|
NAN_INDICATION_DE_EVENT =5,
|
|
NAN_INDICATION_FOLLOWUP =6,
|
|
NAN_INDICATION_DISABLED =7,
|
|
NAN_INDICATION_TCA =8,
|
|
NAN_INDICATION_BEACON_SDF_PAYLOAD =9,
|
|
NAN_INDICATION_SELF_TRANSMIT_FOLLOWUP =10,
|
|
NAN_INDICATION_RANGING_REQUEST_RECEIVED =11,
|
|
NAN_INDICATION_RANGING_RESULT =12,
|
|
NAN_INDICATION_UNKNOWN =0xFFFF
|
|
} NanIndicationType;
|
|
|
|
/* NAN Capabilities Req */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
} NanCapabilitiesReqMsg, *pNanCapabilitiesReqMsg;
|
|
|
|
/* NAN Capabilities Rsp */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/* status of the request */
|
|
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;
|
|
u32 max_queued_transmit_followup_msgs;
|
|
u32 ndp_supported_bands;
|
|
u32 cipher_suites_supported;
|
|
u32 max_scid_len;
|
|
u32 is_ndp_security_supported:1;
|
|
u32 max_sdea_service_specific_info_len:16;
|
|
u32 reserved1:5;
|
|
u32 reserved2:5;
|
|
u32 ndpe_attr_supported:1;
|
|
u32 reserved:4;
|
|
u32 max_subscribe_address;
|
|
} NanCapabilitiesRspMsg, *pNanCapabilitiesRspMsg;
|
|
|
|
/* NAN Self Transmit Followup */
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
u32 reason;
|
|
} NanSelfTransmitFollowupIndMsg, *pNanSelfTransmitFollowupIndMsg;
|
|
|
|
/* NAN Cipher Suite Shared Key */
|
|
typedef struct PACKED
|
|
{
|
|
u32 csid_type;
|
|
} NanCsidType;
|
|
|
|
/* Service Discovery Extended Attribute params */
|
|
typedef struct PACKED
|
|
{
|
|
u32 fsd_required:1;
|
|
u32 fsd_with_gas:1;
|
|
u32 data_path_required:1;
|
|
u32 data_path_type:1;
|
|
u32 multicast_type:1;
|
|
u32 qos_required:1;
|
|
u32 security_required:1;
|
|
u32 ranging_required:1;
|
|
u32 range_limit_present:1;
|
|
u32 service_update_ind_present:1;
|
|
u32 reserved1:6;
|
|
u32 range_report:1;
|
|
u32 reserved2:15;
|
|
} NanFWSdeaCtrlParams;
|
|
|
|
/* NAN Ranging Configuration params */
|
|
typedef struct PACKED
|
|
{
|
|
u32 inner_threshold;
|
|
u32 outer_threshold;
|
|
} NanFWGeoFenceDescriptor;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
u32 range_resolution;
|
|
u32 range_interval;
|
|
u32 ranging_indication_event;
|
|
NanFWGeoFenceDescriptor geo_fence_threshold;
|
|
} NanFWRangeConfigParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/*
|
|
Excludes TLVs
|
|
Optional: Nan Availability
|
|
*/
|
|
u8 ptlv[];
|
|
} NanTestModeReqMsg, *pNanTestModeReqMsg;
|
|
|
|
/*
|
|
NAN Status codes exchanged between firmware
|
|
and WifiHal.
|
|
*/
|
|
typedef enum {
|
|
/* NAN Protocol Response Codes */
|
|
NAN_I_STATUS_SUCCESS = 0,
|
|
NAN_I_STATUS_TIMEOUT = 1,
|
|
NAN_I_STATUS_DE_FAILURE = 2,
|
|
NAN_I_STATUS_INVALID_MSG_VERSION = 3,
|
|
NAN_I_STATUS_INVALID_MSG_LEN = 4,
|
|
NAN_I_STATUS_INVALID_MSG_ID = 5,
|
|
NAN_I_STATUS_INVALID_HANDLE = 6,
|
|
NAN_I_STATUS_NO_SPACE_AVAILABLE = 7,
|
|
NAN_I_STATUS_INVALID_PUBLISH_TYPE = 8,
|
|
NAN_I_STATUS_INVALID_TX_TYPE = 9,
|
|
NAN_I_STATUS_INVALID_MATCH_ALGORITHM = 10,
|
|
NAN_I_STATUS_DISABLE_IN_PROGRESS = 11,
|
|
NAN_I_STATUS_INVALID_TLV_LEN = 12,
|
|
NAN_I_STATUS_INVALID_TLV_TYPE = 13,
|
|
NAN_I_STATUS_MISSING_TLV_TYPE = 14,
|
|
NAN_I_STATUS_INVALID_TOTAL_TLVS_LEN = 15,
|
|
NAN_I_STATUS_INVALID_REQUESTER_INSTANCE_ID= 16,
|
|
NAN_I_STATUS_INVALID_TLV_VALUE = 17,
|
|
NAN_I_STATUS_INVALID_TX_PRIORITY = 18,
|
|
NAN_I_STATUS_INVALID_CONNECTION_MAP = 19,
|
|
NAN_I_STATUS_INVALID_THRESHOLD_CROSSING_ALERT_ID = 20,
|
|
NAN_I_STATUS_INVALID_STATS_ID = 21,
|
|
NAN_I_STATUS_NAN_NOT_ALLOWED = 22,
|
|
NAN_I_STATUS_NO_OTA_ACK = 23,
|
|
NAN_I_STATUS_TX_FAIL = 24,
|
|
NAN_I_STATUS_NAN_ALREADY_ENABLED = 25,
|
|
NAN_I_STATUS_FOLLOWUP_QUEUE_FULL = 26,
|
|
/* 27-4095 Reserved */
|
|
/* NAN Configuration Response codes */
|
|
NAN_I_STATUS_INVALID_RSSI_CLOSE_VALUE = 4096,
|
|
NAN_I_STATUS_INVALID_RSSI_MIDDLE_VALUE = 4097,
|
|
NAN_I_STATUS_INVALID_HOP_COUNT_LIMIT = 4098,
|
|
NAN_I_STATUS_INVALID_MASTER_PREFERENCE_VALUE = 4099,
|
|
NAN_I_STATUS_INVALID_LOW_CLUSTER_ID_VALUE = 4100,
|
|
NAN_I_STATUS_INVALID_HIGH_CLUSTER_ID_VALUE = 4101,
|
|
NAN_I_STATUS_INVALID_BACKGROUND_SCAN_PERIOD = 4102,
|
|
NAN_I_STATUS_INVALID_RSSI_PROXIMITY_VALUE = 4103,
|
|
NAN_I_STATUS_INVALID_SCAN_CHANNEL = 4104,
|
|
NAN_I_STATUS_INVALID_POST_NAN_CONNECTIVITY_CAPABILITIES_BITMAP = 4105,
|
|
NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_NUMCHAN_VALUE = 4106,
|
|
NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_DURATION_VALUE = 4107,
|
|
NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_CLASS_VALUE = 4108,
|
|
NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_CHANNEL_VALUE = 4109,
|
|
NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_AVAILABILITY_INTERVAL_BITMAP_VALUE = 4110,
|
|
NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_MAP_ID = 4111,
|
|
NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_CONN_TYPE_VALUE = 4112,
|
|
NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_DEVICE_ROLE_VALUE = 4113,
|
|
NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_DURATION_VALUE = 4114,
|
|
NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_BITMAP_VALUE = 4115,
|
|
NAN_I_STATUS_MISSING_FUTHER_AVAILABILITY_MAP = 4116,
|
|
NAN_I_STATUS_INVALID_BAND_CONFIG_FLAGS = 4117,
|
|
NAN_I_STATUS_INVALID_RANDOM_FACTOR_UPDATE_TIME_VALUE = 4118,
|
|
NAN_I_STATUS_INVALID_ONGOING_SCAN_PERIOD = 4119,
|
|
NAN_I_STATUS_INVALID_DW_INTERVAL_VALUE = 4120,
|
|
NAN_I_STATUS_INVALID_DB_INTERVAL_VALUE = 4121,
|
|
/* 4122-8191 RESERVED */
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_INVALID = 8192,
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_TIMEOUT = 8193,
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_USER_REQUEST = 8194,
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_FAILURE = 8195,
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_COUNT_REACHED = 8196,
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_DE_SHUTDOWN = 8197,
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_DISABLE_IN_PROGRESS = 8198,
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_POST_DISC_ATTR_EXPIRED = 8199,
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_POST_DISC_LEN_EXCEEDED = 8200,
|
|
NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_FURTHER_AVAIL_MAP_EMPTY = 8201,
|
|
/* 9000-9500 NDP Status type */
|
|
NDP_I_UNSUPPORTED_CONCURRENCY = 9000,
|
|
NDP_I_NAN_DATA_IFACE_CREATE_FAILED = 9001,
|
|
NDP_I_NAN_DATA_IFACE_DELETE_FAILED = 9002,
|
|
NDP_I_DATA_INITIATOR_REQUEST_FAILED = 9003,
|
|
NDP_I_DATA_RESPONDER_REQUEST_FAILED = 9004,
|
|
NDP_I_INVALID_SERVICE_INSTANCE_ID = 9005,
|
|
NDP_I_INVALID_NDP_INSTANCE_ID = 9006,
|
|
NDP_I_INVALID_RESPONSE_CODE = 9007,
|
|
NDP_I_INVALID_APP_INFO_LEN = 9008,
|
|
/* OTA failures and timeouts during negotiation */
|
|
NDP_I_MGMT_FRAME_REQUEST_FAILED = 9009,
|
|
NDP_I_MGMT_FRAME_RESPONSE_FAILED = 9010,
|
|
NDP_I_MGMT_FRAME_CONFIRM_FAILED = 9011,
|
|
NDP_I_END_FAILED = 9012,
|
|
NDP_I_MGMT_FRAME_END_REQUEST_FAILED = 9013,
|
|
NDP_I_MGMT_FRAME_SECURITY_INSTALL_FAILED = 9014,
|
|
|
|
/* 9500 onwards vendor specific error codes */
|
|
NDP_I_VENDOR_SPECIFIC_ERROR = 9500
|
|
} NanInternalStatusType;
|
|
|
|
/* This is the TLV used for range report */
|
|
typedef struct PACKED
|
|
{
|
|
u32 publish_id;
|
|
u32 event_type;
|
|
u32 range_measurement;
|
|
} NanFWRangeReportParams;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/*TLV Required:
|
|
MANDATORY
|
|
1. MAC_ADDRESS
|
|
2. NanFWRangeReportParams
|
|
OPTIONAL:
|
|
1. A_UINT32 event type
|
|
*/
|
|
u8 ptlv[1];
|
|
} NanFWRangeReportInd, *pNanFWRangeReportInd;
|
|
|
|
/** 2 word representation of MAC addr */
|
|
typedef struct {
|
|
/** upper 4 bytes of MAC address */
|
|
u32 mac_addr31to0;
|
|
/** lower 2 bytes of MAC address */
|
|
u32 mac_addr47to32;
|
|
} fw_mac_addr;
|
|
|
|
/* This is the TLV used to trigger ranging requests*/
|
|
typedef struct PACKED
|
|
{
|
|
fw_mac_addr range_mac_addr;
|
|
u32 range_id; //Match handle in match_ind, publish_id in result ind
|
|
u32 ranging_accept:1;
|
|
u32 ranging_reject:1;
|
|
u32 ranging_cancel:1;
|
|
u32 reserved:29;
|
|
} NanFWRangeReqMsg, *pNanFWRangeReqMsg;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
fw_mac_addr range_mac_addr;
|
|
u32 range_id;//This will publish_id in case of receiving publish.
|
|
} NanFWRangeReqRecvdMsg, *pNanFWRangeReqRecvdMsg;
|
|
|
|
typedef struct PACKED
|
|
{
|
|
NanMsgHeader fwHeader;
|
|
/*TLV Required
|
|
1. t_nan_range_req_recvd_msg
|
|
*/
|
|
u8 ptlv[1];
|
|
} NanFWRangeReqRecvdInd, *pNanFWRangeReqRecvdInd;
|
|
|
|
/* Function for NAN error translation
|
|
For NanResponse, NanPublishTerminatedInd, NanSubscribeTerminatedInd,
|
|
NanDisabledInd, NanTransmitFollowupInd:
|
|
function to translate firmware specific errors
|
|
to generic freamework error along with the error string
|
|
*/
|
|
void NanErrorTranslation(NanInternalStatusType firmwareErrorRecvd,
|
|
u32 valueRcvd,
|
|
void *pRsp,
|
|
bool is_ndp_rsp);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* __NAN_I_H__ */
|
|
|