/* SPDX-License-Identifier: GPL-2.0 */
|
/*
|
* Fundamental types and constants relating to WFA NAN
|
* (Neighbor Awareness Networking)
|
*
|
* Copyright (C) 1999-2019, Broadcom Corporation
|
*
|
* Unless you and Broadcom execute a separate written software license
|
* agreement governing use of this software, this software is licensed to you
|
* under the terms of the GNU General Public License version 2 (the "GPL"),
|
* available at http://www.broadcom.com/licenses/GPLv2.php, with the
|
* following added to such license:
|
*
|
* As a special exception, the copyright holders of this software give you
|
* permission to link this software with independent modules, and to copy and
|
* distribute the resulting executable under terms of your choice, provided that
|
* you also meet, for each linked independent module, the terms and conditions of
|
* the license of that module. An independent module is a module which is not
|
* derived from this software. The special exception does not apply to any
|
* modifications of the software.
|
*
|
* Notwithstanding the above, under no circumstances may you combine this
|
* software in any way with any other Broadcom software provided under a license
|
* other than the GPL, without Broadcom's express prior written consent.
|
*
|
* <<Broadcom-WL-IPTag/Open:>>
|
*
|
* $Id: nan.h 641251 2016-06-01 23:41:33Z $
|
*/
|
#ifndef _NAN_H_
|
#define _NAN_H_
|
|
#include <typedefs.h>
|
#include <proto/802.11.h>
|
|
|
/* This marks the start of a packed structure section. */
|
#include <packed_section_start.h>
|
|
/* WiFi NAN OUI values */
|
#define NAN_OUI WFA_OUI /* WiFi OUI */
|
/* For oui_type field identifying the type and version of the NAN IE. */
|
#define NAN_OUI_TYPE 0x13 /* Type/Version */
|
/* IEEE 802.11 vendor specific information element. (Same as P2P_IE_ID.) */
|
#define NAN_IE_ID 0xdd
|
|
/* Same as P2P_PUB_AF_CATEGORY and DOT11_ACTION_CAT_PUBLIC */
|
#define NAN_PUB_AF_CATEGORY 0x04
|
/* IEEE 802.11 Public Action Frame Vendor Specific. (Same as P2P_PUB_AF_ACTION.) */
|
#define NAN_PUB_AF_ACTION 0x09
|
/* Number of octents in hash of service name. (Same as P2P_WFDS_HASH_LEN.) */
|
#define NAN_SVC_HASH_LEN 6
|
/* Size of fixed length part of nan_pub_act_frame_t before attributes. */
|
#define NAN_PUB_ACT_FRAME_FIXED_LEN 6
|
/* Number of octents in master rank value. */
|
#define NAN_MASTER_RANK_LEN 8
|
/* NAN public action frame header size */
|
#define NAN_PUB_ACT_FRAME_HDR_SIZE (OFFSETOF(nan_pub_act_frame_t, data))
|
/* NAN network ID */
|
#define NAN_NETWORK_ID "\x51\x6F\x9A\x01\x00\x00"
|
/* Service Control Type length */
|
#define NAN_SVC_CONTROL_TYPE_LEN 2
|
/* Binding Bitmap length */
|
#define NAN_BINDING_BITMAP_LEN 2
|
/* Service Response Filter (SRF) control field masks */
|
#define NAN_SRF_BLOOM_MASK 0x01
|
#define NAN_SRF_INCLUDE_MASK 0x02
|
#define NAN_SRF_INDEX_MASK 0x0C
|
/* SRF Bloom Filter index shift */
|
#define NAN_SRF_BLOOM_SHIFT 2
|
#define NAN_SRF_INCLUDE_SHIFT 1
|
/* Mask for CRC32 output, used in hash function for NAN bloom filter */
|
#define NAN_BLOOM_CRC32_MASK 0xFFFF
|
|
/* Attribute TLV header size */
|
#define NAN_ATTR_ID_OFF 0
|
#define NAN_ATTR_LEN_OFF 1
|
#define NAN_ATTR_DATA_OFF 3
|
|
#define NAN_ATTR_ID_LEN 1 /* ID field length */
|
#define NAN_ATTR_LEN_LEN 2 /* Length field length */
|
#define NAN_ATTR_HDR_LEN 3 /* ID + 2-byte length field */
|
#define NAN_ENTRY_CTRL_LEN 1 /* Entry control field length from FAM attribute */
|
#define NAN_MAP_ID_LEN 1 /* MAP ID length to signify band */
|
#define NAN_OPERATING_CLASS_LEN 1 /* operating class field length from NAN FAM */
|
#define NAN_CHANNEL_NUM_LEN 1 /* channel number field length 1 byte */
|
|
#define NAN_MAP_ID_2G 2 /* NAN Further Avail Map ID for band 2.4G */
|
#define NAN_MAP_ID_5G 5 /* NAN Further Avail Map ID for band 5G */
|
#define NAN_MAP_NUM_IDS 2 /* Max number of NAN Further Avail Map IDs supported */
|
|
/* no. of peer devices supported TODO make it tunable */
|
#define NAN_DATA_PEER_DEV_SUPPORT 8
|
/* no. of instaces supported (ndp, mgmt) */
|
#define NAN_DATA_NDP_INST_SUPPORT 16
|
/* instaces supported (same as ndp) */
|
#define NAN_DATA_MGMT_INST_SUPPORT NAN_DATA_NDP_INST_SUPPORT
|
#define NAN_DATA_NDL_INST_SUPPORT NAN_DATA_PEER_DEV_SUPPORT
|
|
/*
|
* Period
|
* Indicate the repeat interval of the following bitmap.
|
* when set to 0, the indicated bitmap is not repeated.
|
* When set to non-zero, the repeat interval is:
|
* 1:128 TU, 2: 256 TU, 3: 512 TU, 4: 1024 TU, 5: 2048 TU, 6: 4096 TU, 7: 8192 TU
|
*/
|
#define NAN_DATA_MAX_AVAIL_INTRVL 7 /* no. of period intervals supported */
|
|
#define NAN_AVAIL_ENTRY_LEN_RES0 7 /* Avail entry len in FAM attribute for resolution 16TU */
|
#define NAN_AVAIL_ENTRY_LEN_RES1 5 /* Avail entry len in FAM attribute for resolution 32TU */
|
#define NAN_AVAIL_ENTRY_LEN_RES2 4 /* Avail entry len in FAM attribute for resolution 64TU */
|
|
/* NAN 2.0 NDP Setup */
|
#define NAN_DATA_NDP_SETUP 0 /* arbitrary value */
|
/* NAN 2.0 Mgmt Setup */
|
#define NAN_DATA_MGMT_SETUP 1 /* arbitrary value */
|
/* NAN 2.0 NDL Setup */
|
#define NAN_DATA_NDL_SETUP 2 /* arbitrary value */
|
|
/* Vendor-specific public action frame for NAN */
|
typedef BWL_PRE_PACKED_STRUCT struct nan_pub_act_frame_s {
|
/* NAN_PUB_AF_CATEGORY 0x04 */
|
uint8 category_id;
|
/* NAN_PUB_AF_ACTION 0x09 */
|
uint8 action_field;
|
/* NAN_OUI 0x50-6F-9A */
|
uint8 oui[DOT11_OUI_LEN];
|
/* NAN_OUI_TYPE 0x13 */
|
uint8 oui_type;
|
/* One or more NAN Attributes follow */
|
uint8 data[1];
|
} BWL_POST_PACKED_STRUCT nan_pub_act_frame_t;
|
|
/* NAN attributes as defined in the nan spec */
|
enum {
|
NAN_ATTR_MASTER_IND = 0,
|
NAN_ATTR_CLUSTER = 1,
|
NAN_ATTR_SVC_ID_LIST = 2,
|
NAN_ATTR_SVC_DESCRIPTOR = 3,
|
NAN_ATTR_CONN_CAP = 4,
|
NAN_ATTR_INFRA = 5,
|
NAN_ATTR_P2P = 6,
|
NAN_ATTR_IBSS = 7,
|
NAN_ATTR_MESH = 8,
|
NAN_ATTR_FURTHER_NAN_SD = 9,
|
NAN_ATTR_FURTHER_AVAIL = 10,
|
NAN_ATTR_COUNTRY_CODE = 11,
|
NAN_ATTR_RANGING = 12,
|
NAN_ATTR_CLUSTER_DISC = 13,
|
/* nan 2.0 */
|
NAN_ATTR_UNALIGN_SCHED = 14,
|
NAN_ATTR_RANGING_SETUP = 15,
|
NAN_ATTR_FTM_RANGE_REPORT = 16,
|
NAN_ATTR_SVC_DESC_EXTENSION = 17,
|
NAN_ATTR_NAN_DEV_CAP = 18,
|
NAN_ATTR_NAN_NDP = 19,
|
NAN_ATTR_NAN_NMSG = 20,
|
NAN_ATTR_NAN_AVAIL = 21,
|
NAN_ATTR_NAN_NDC = 22,
|
NAN_ATTR_NAN_NDL = 23,
|
NAN_ATTR_NAN_NDL_QOS = 24,
|
NAN_ATTR_MCAST_SCHED = 25,
|
NAN_ATTR_UNALIGNED_SCHED = 26, /* Note: This is duplicate in spec. */
|
NAN_ATTR_PAGING_UCAST = 27,
|
NAN_ATTR_PAGING_MCAST = 28,
|
NAN_ATTR_RANGING_INFO = 29,
|
NAN_ATTR_NAN_RANGING_SETUP = 30, /* Note: This is duplicate in spec. */
|
NAN_ATTR_NAN_FTM_RANGE_REPORT = 31, /* Note: This is duplicate in spec. */
|
NAN_ATTR_ELEMENT_CONTAINER = 32,
|
NAN_ATTR_WLAN_INFRA_EXT = 33,
|
NAN_ATTR_EXT_P2P_OPER = 34,
|
NAN_ATTR_EXT_IBSS = 35,
|
NAN_ATTR_EXT_MESH = 36,
|
|
NAN_ATTR_VENDOR_SPECIFIC = 221,
|
NAN_ATTR_NAN_MGMT = 222 /* NAN Mgmt Attr (TBD; not in spec yet) */
|
};
|
|
#define NAN_ALL_NAN_MGMT_FRAMES (NAN_FRM_MGMT_AF | \
|
NAN_FRM_NDP_AF | NAN_FRM_NDL_AF | \
|
NAN_FRM_DISC_BCN | NAN_FRM_SYNC_BCN | \
|
NAN_FRM_SVC_DISC)
|
|
enum wifi_nan_avail_resolution {
|
NAN_AVAIL_RES_16_TU = 0,
|
NAN_AVAIL_RES_32_TU = 1,
|
NAN_AVAIL_RES_64_TU = 2,
|
NAN_AVAIL_RES_INVALID = 255
|
};
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_ie_s {
|
uint8 id; /* IE ID: NAN_IE_ID 0xDD */
|
uint8 len; /* IE length */
|
uint8 oui[DOT11_OUI_LEN]; /* NAN_OUI 50:6F:9A */
|
uint8 oui_type; /* NAN_OUI_TYPE 0x13 */
|
uint8 attr[1]; /* var len attributes */
|
} BWL_POST_PACKED_STRUCT wifi_nan_ie_t;
|
|
#define NAN_IE_HDR_SIZE (OFFSETOF(wifi_nan_ie_t, attr))
|
|
/* master indication record */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_master_ind_attr_s {
|
uint8 id;
|
uint16 len;
|
uint8 master_preference;
|
uint8 random_factor;
|
} BWL_POST_PACKED_STRUCT wifi_nan_master_ind_attr_t;
|
|
/* cluster attr record */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_cluster_attr_s {
|
uint8 id;
|
uint16 len;
|
uint8 amr[NAN_MASTER_RANK_LEN];
|
uint8 hop_count;
|
/* Anchor Master Beacon Transmission Time */
|
uint32 ambtt;
|
} BWL_POST_PACKED_STRUCT wifi_nan_cluster_attr_t;
|
|
/* container for service ID records */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_svc_id_attr_s {
|
uint8 id;
|
uint16 len;
|
uint8 svcid[0]; /* 6*len of srvc IDs */
|
} BWL_POST_PACKED_STRUCT wifi_nan_svc_id_attr_t;
|
|
/* service_control bitmap for wifi_nan_svc_descriptor_attr_t below */
|
#define NAN_SC_PUBLISH 0x0
|
#define NAN_SC_SUBSCRIBE 0x1
|
#define NAN_SC_FOLLOWUP 0x2
|
/* Set to 1 if a Matching Filter field is included in descriptors. */
|
#define NAN_SC_MATCHING_FILTER_PRESENT 0x4
|
/* Set to 1 if a Service Response Filter field is included in descriptors. */
|
#define NAN_SC_SR_FILTER_PRESENT 0x8
|
/* Set to 1 if a Service Info field is included in descriptors. */
|
#define NAN_SC_SVC_INFO_PRESENT 0x10
|
/* range is close proximity only */
|
#define NAN_SC_RANGE_LIMITED 0x20
|
/* Set to 1 if binding bitamp is present in descriptors */
|
#define NAN_SC_BINDING_BITMAP_PRESENT 0x40
|
|
/* Service descriptor */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_svc_descriptor_attr_s {
|
/* Attribute ID - 0x03. */
|
uint8 id;
|
/* Length of the following fields in the attribute */
|
uint16 len;
|
/* Hash of the Service Name */
|
uint8 svc_hash[NAN_SVC_HASH_LEN];
|
/* Publish or subscribe instance id */
|
uint8 instance_id;
|
/* Requestor Instance ID */
|
uint8 requestor_id;
|
/* Service Control Bitmask. Also determines what data follows. */
|
uint8 svc_control;
|
/* Optional fields follow */
|
} BWL_POST_PACKED_STRUCT wifi_nan_svc_descriptor_attr_t;
|
|
/* IBSS attribute */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_ibss_attr_s {
|
/* Attribute ID - 0x07. */
|
uint8 id;
|
/* Length of the following fields in the attribute */
|
uint16 len;
|
/* BSSID of the ibss */
|
struct ether_addr bssid;
|
/*
|
map control:, bits:
|
[0-3]: Id for associated further avail map attribute
|
[4-5]: avail interval duration: 0:16ms; 1:32ms; 2:64ms; 3:reserved
|
[6] : repeat : 0 - applies to next DW, 1: 16 intervals max? wtf?
|
[7] : reserved
|
*/
|
uint8 map_ctrl;
|
/* avail. intervals bitmap, var len */
|
uint8 avail_bmp[1];
|
} BWL_POST_PACKED_STRUCT wifi_nan_ibss_attr_t;
|
|
/* Further Availability MAP attr */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_favail_attr_s {
|
/* Attribute ID - 0x0A. */
|
uint8 id;
|
/* Length of the following fields in the attribute */
|
uint16 len;
|
/* MAP id: val [0..15], values[16-255] reserved */
|
uint8 map_id;
|
/* availibility entry, var len */
|
uint8 avil_entry[1];
|
} BWL_POST_PACKED_STRUCT wifi_nan_favail_attr_t;
|
|
/* Further Availability MAP attr */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_avail_entry_s {
|
/*
|
entry control
|
[0-1]: avail interval duration: 0:16ms; 1:32ms; 2:64ms;
|
[2:7] reserved
|
*/
|
uint8 entry_ctrl;
|
/* operating class: freq band etc IEEE 802.11 */
|
uint8 opclass;
|
/* channel number */
|
uint8 chan;
|
/* avail bmp, var len */
|
uint8 avail_bmp[1];
|
} BWL_POST_PACKED_STRUCT wifi_nan_avail_entry_t;
|
|
/* Map control Field */
|
#define NAN_MAPCTRL_IDMASK 0x7
|
#define NAN_MAPCTRL_DURSHIFT 4
|
#define NAN_MAPCTRL_DURMASK 0x30
|
#define NAN_MAPCTRL_REPEAT 0x40
|
#define NAN_MAPCTRL_REPEATSHIFT 6
|
|
#define NAN_VENDOR_TYPE_RTT 0
|
#define NAN_VENDOR_TYPE_P2P 1
|
|
/* Vendor Specific Attribute */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_vendor_attr_s {
|
uint8 id; /* 0xDD */
|
uint16 len; /* IE length */
|
uint8 oui[DOT11_OUI_LEN]; /* 00-90-4C */
|
uint8 type; /* attribute type */
|
uint8 attr[1]; /* var len attributes */
|
} BWL_POST_PACKED_STRUCT wifi_nan_vendor_attr_t;
|
|
#define NAN_VENDOR_HDR_SIZE (OFFSETOF(wifi_nan_vendor_attr_t, attr))
|
|
/* p2p operation attribute */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_p2p_op_attr_s {
|
/* Attribute ID - 0x06. */
|
uint8 id;
|
/* Length of the following fields in the attribute */
|
uint16 len;
|
/* P2P device role */
|
uint8 dev_role;
|
/* BSSID of the ibss */
|
struct ether_addr p2p_dev_addr;
|
/*
|
map control:, bits:
|
[0-3]: Id for associated further avail map attribute
|
[4-5]: avail interval duration: 0:16ms; 1:32ms; 2:64ms; 3:reserved
|
[6] : repeat : 0 - applies to next DW, 1: 16 intervals max? wtf?
|
[7] : reserved
|
*/
|
uint8 map_ctrl;
|
/* avail. intervals bitmap */
|
uint8 avail_bmp[1];
|
} BWL_POST_PACKED_STRUCT wifi_nan_p2p_op_attr_t;
|
|
/* ranging attribute */
|
#define NAN_RANGING_MAP_CTRL_ID_SHIFT 0
|
#define NAN_RANGING_MAP_CTRL_ID_MASK 0x0F
|
#define NAN_RANGING_MAP_CTRL_DUR_SHIFT 4
|
#define NAN_RANGING_MAP_CTRL_DUR_MASK 0x30
|
#define NAN_RANGING_MAP_CTRL_REPEAT_SHIFT 6
|
#define NAN_RANGING_MAP_CTRL_REPEAT_MASK 0x40
|
#define NAN_RANGING_MAP_CTRL_REPEAT_DW(_ctrl) (((_ctrl) & \
|
NAN_RANGING_MAP_CTRL_DUR_MASK) ? 16 : 1)
|
#define NAN_RANGING_MAP_CTRL(_id, _dur, _repeat) (\
|
(((_id) << NAN_RANGING_MAP_CTRL_ID_SHIFT) & \
|
NAN_RANGING_MAP_CTRL_ID_MASK) | \
|
(((_dur) << NAN_RANGING_MAP_CTRL_DUR_SHIFT) & \
|
NAN_RANGING_MAP_CTRL_DUR_MASK) | \
|
(((_repeat) << NAN_RANGING_MAP_CTRL_REPEAT_SHIFT) & \
|
NAN_RANGING_MAP_CTRL_REPEAT_MASK))
|
|
enum {
|
NAN_RANGING_PROTO_FTM = 0
|
};
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_ranging_attr_s {
|
uint8 id; /* 0x0C */
|
uint16 len; /* length that follows */
|
struct ether_addr dev_addr; /* device mac address */
|
|
/*
|
map control:, bits:
|
[0-3]: Id for associated further avail map attribute
|
[4-5]: avail interval duration: 0:16ms; 1:32ms; 2:64ms; 3:reserved
|
[6] : repeat : 0 - applies to next DW, 1: 16 intervals max? wtf?
|
[7] : reserved
|
*/
|
uint8 map_ctrl;
|
|
uint8 protocol; /* FTM = 0 */
|
uint32 avail_bmp; /* avail interval bitmap */
|
} BWL_POST_PACKED_STRUCT wifi_nan_ranging_attr_t;
|
|
#define NAN_CONN_CAPABILITY_WFD 0x0001
|
#define NAN_CONN_CAPABILITY_WFDS 0x0002
|
#define NAN_CONN_CAPABILITY_TDLS 0x0004
|
#define NAN_CONN_CAPABILITY_INFRA 0x0008
|
#define NAN_CONN_CAPABILITY_IBSS 0x0010
|
#define NAN_CONN_CAPABILITY_MESH 0x0020
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_conn_cap_attr_s {
|
/* Attribute ID - 0x04. */
|
uint8 id;
|
/* Length of the following fields in the attribute */
|
uint16 len;
|
uint16 conn_cap_bmp; /* Connection capability bitmap */
|
} BWL_POST_PACKED_STRUCT wifi_nan_conn_cap_attr_t;
|
|
#define NAN_SLOT_RES_16TU 16
|
#define NAN_SLOT_RES_32TU 32
|
#define NAN_SLOT_RES_64TU 64
|
|
/* NAN 2.0 (section 5.7.18.2): NAN availability attribute */
|
|
/* NAN Availability Attribute */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_availability_attr_s {
|
uint8 id; /* TBD */
|
uint16 len; /* length that follows */
|
uint8 attr_cntrl[3]; /* attribute control */
|
uint8 avail_entry_list[1]; /* availability entry list */
|
} BWL_POST_PACKED_STRUCT wifi_nan_availability_attr_t;
|
|
/* Attribute Control field */
|
#define NAN_ATTR_CNTRL_MAP_ID_MASK 0x0F /* Map Id */
|
#define NAN_ATTR_CNTRL_RSVD_MASK 0xF0 /* Reserved */
|
#define NAN_ATTR_CNTRL_SEQ_ID_MASK 0xFF /* Seq Id */
|
|
/* Availability Entry format */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_avail_entry_attr_s {
|
uint16 len; /* Length */
|
uint32 entry_cntrl; /* Entry Control */
|
uint8 var[1]; /* Time Bitmap & Channel Entry List */
|
} BWL_POST_PACKED_STRUCT wifi_nan_avail_entry_attr_t;
|
|
/* Entry Control Field (section 5.7.18.2.2) */
|
|
/* Type of Availability */
|
#define NAN_ENTRY_CNTRL_TYPE_OF_AVAIL_MASK 0x07
|
#define NAN_ENTRY_CNTRL_TYPE_OF_AVAIL_SHIFT 0
|
/* Usage Preference */
|
#define NAN_ENTRY_CNTRL_USAGE_PREF_MASK 0x18
|
#define NAN_ENTRY_CNTRL_USAGE_PREF_SHIFT 3
|
/* Utilization */
|
#define NAN_ENTRY_CNTRL_UTIL_MASK 0x1E0
|
#define NAN_ENTRY_CNTRL_UTIL_SHIFT 5
|
/* Rx Nss */
|
#define NAN_ENTRY_CNTRL_RX_NSS_MASK 0x1E00
|
#define NAN_ENTRY_CNTRL_RX_NSS_SHIFT 9
|
/* Paged Resource block */
|
#define NAN_ENTRY_CNTRL_PAGED_RSC_BLK_MASK 0x2000
|
#define NAN_ENTRY_CNTRL_PAGED_RSC_BLK_SHIFT 13
|
/* Time Bitmap Present */
|
#define NAN_ENTRY_CNTRL_TIME_BMP_PRSNT_MASK 0x4000
|
#define NAN_ENTRY_CNTRL_TIME_BMP_PRSNT_SHIFT 14
|
/* Channel Entry Present */
|
#define NAN_ENTRY_CNTRL_CHAN_ENTRY_PRSNT_MASK 0x8000
|
#define NAN_ENTRY_CNTRL_CHAN_ENTRY_PRSNT_SHIFT 15
|
/* Reserved */
|
#define NAN_ENTRY_CNTRL_RESERVED_MASK 0xFF0000
|
#define NAN_ENTRY_CNTRL_RESERVED_SHIFT 16
|
|
/* Type of Availability: committed */
|
#define NAN_ENTRY_CNTRL_TYPE_COMM_AVAIL 0x1
|
/* Type of Availability: potential */
|
#define NAN_ENTRY_CNTRL_TYPE_POTEN_AVAIL 0x2
|
/* Type of Availability: conditional */
|
#define NAN_ENTRY_CNTRL_TYPE_COND_AVAIL 0x4
|
|
/* Type of Availability: committed */
|
#define NAN_ENTRY_CNTRL_TYPE_COMM_AVAIL_MASK 0x1
|
/* Type of Availability: potential */
|
#define NAN_ENTRY_CNTRL_TYPE_POTEN_AVAIL_MASK 0x2
|
/* Type of Availability: conditional */
|
#define NAN_ENTRY_CNTRL_TYPE_COND_AVAIL_MASK 0x4
|
|
|
/* Time Bitmap Control field (section 5.7.18.2.3) */
|
|
/* Reserved */
|
#define NAN_TIME_BMP_CNTRL_RSVD_MASK 0x01
|
#define NAN_TIME_BMP_CNTRL_RSVD_SHIFT 0
|
/* Bitmap Len */
|
#define NAN_TIME_BMP_CNTRL_BMP_LEN_MASK 0x7E
|
#define NAN_TIME_BMP_CNTRL_BMP_LEN_SHIFT 1
|
/* Bit Duration */
|
#define NAN_TIME_BMP_CNTRL_BIT_DUR_MASK 0x380
|
#define NAN_TIME_BMP_CNTRL_BIT_DUR_SHIFT 7
|
/* Bitmap Len */
|
#define NAN_TIME_BMP_CNTRL_PERIOD_MASK 0x1C00
|
#define NAN_TIME_BMP_CNTRL_PERIOD_SHIFT 10
|
/* Start Offset */
|
#define NAN_TIME_BMP_CNTRL_START_OFFSET_MASK 0x3FE000
|
#define NAN_TIME_BMP_CNTRL_START_OFFSET_SHIFT 13
|
/* Reserved */
|
#define NAN_TIME_BMP_CNTRL_RESERVED_MASK 0xC00000
|
#define NAN_TIME_BMP_CNTRL_RESERVED_SHIFT 22
|
|
/* Time Bitmap Control field: Bit Duration */
|
typedef enum
|
{
|
NAN_TIME_BMP_CTRL_BIT_DUR_DUR_16TU = 0,
|
NAN_TIME_BMP_CTRL_BIT_DUR_DUR_32TU = 1,
|
NAN_TIME_BMP_CTRL_BIT_DUR_DUR_48TU = 2,
|
NAN_TIME_BMP_CTRL_BIT_DUR_DUR_64TU = 3,
|
NAN_TIME_BMP_CTRL_BIT_DUR_DUR_80TU = 4,
|
NAN_TIME_BMP_CTRL_BIT_DUR_DUR_96TU = 5,
|
NAN_TIME_BMP_CTRL_BIT_DUR_DUR_112TU = 6,
|
NAN_TIME_BMP_CTRL_BIT_DUR_DUR_128TU = 7
|
} nan_time_bmp_ctrl_bit_dur_t;
|
|
/* Time Bitmap Control field: Period */
|
typedef enum
|
{
|
NAN_TIME_BMP_CTRL_PERIOD_128TU = 1,
|
NAN_TIME_BMP_CTRL_PERIOD_256TU,
|
NAN_TIME_BMP_CTRL_PERIOD_512TU,
|
NAN_TIME_BMP_CTRL_PERIOD_1024TU,
|
NAN_TIME_BMP_CTRL_PERIOD_2048U,
|
NAN_TIME_BMP_CTRL_PERIOD_4096U,
|
NAN_TIME_BMP_CTRL_PERIOD_8192U
|
} nan_time_bmp_ctrl_repeat_interval_t;
|
|
/* FAC Channel Entry (section 5.7.18.2.5) */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_fac_chan_entry_s {
|
uint8 oper_class; /* Operating Class */
|
uint16 chan_bitmap; /* Channel Bitmap */
|
uint8 primary_chan_bmp; /* Primary Channel Bitmap */
|
uint8 aux_chan; /* Auxiliary Channel */
|
} BWL_POST_PACKED_STRUCT wifi_nan_fac_chan_entry_t;
|
|
/* Channel Entries List field (section 5.7.18.2.4) */
|
|
/* Type */
|
#define NAN_CHAN_ENTRY_TYPE_MASK 0x01
|
#define NAN_CHAN_ENTRY_TYPE_SHIFT 0
|
/* Channel Entry Length Indication */
|
#define NAN_CHAN_ENTRY_LEN_IND_MASK 0x02
|
#define NAN_CHAN_ENTRY_LEN_IND_SHIFT 1
|
/* Reserved */
|
#define NAN_CHAN_ENTRY_RESERVED_MASK 0x0C
|
#define NAN_CHAN_ENTRY_RESERVED_SHIFT 2
|
/* Number of FAC Band or Channel Entries */
|
#define NAN_CHAN_ENTRY_NO_OF_CHAN_ENTRY_MASK 0xF0
|
#define NAN_CHAN_ENTRY_NO_OF_CHAN_ENTRY_SHIFT 4
|
|
#define NAN_CHAN_ENTRY_TYPE_BANDS 0
|
#define NAN_CHAN_ENTRY_TYPE_OPCLASS_CHANS 1
|
|
#define NAN_CHAN_ENTRY_BW_LT_80MHZ 0
|
#define NAN_CHAN_ENTRY_BW_EQ_160MHZ 1
|
|
/* Device Capability Attribute (section 5.7.17.4) */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_dev_cap_s {
|
uint8 id; /* TBD */
|
uint16 len; /* Length */
|
uint8 awake_dw_info; /* Awake DW Info */
|
uint8 bands_supported; /* Supported Bands */
|
uint8 op_mode; /* Operation Mode */
|
} BWL_POST_PACKED_STRUCT wifi_nan_dev_cap_t;
|
|
/* Awake DW Info field format */
|
|
/* 2.4GHz DW */
|
#define NAN_DEV_CAP_AWAKE_DW_2G_MASK 0x07
|
/* 5GHz DW */
|
#define NAN_DEV_CAP_AWAKE_DW_5G_MASK 0x38
|
/* Reserved */
|
#define NAN_DEV_CAP_AWAKE_DW_RSVD_MASK 0xC0
|
|
/* bit shift for dev cap */
|
#define NAN_DEV_CAP_AWAKE_DW_2G_SHIFT 0
|
#define NAN_DEV_CAP_AWAKE_DW_5G_SHIFT 3
|
|
|
/* Device Capability Attribute Format */
|
|
/* Operation Mode: HT */
|
#define NAN_DEV_CAP_HT_OPER_MODE_MASK 0x01
|
/* Operation Mode: VHT */
|
#define NAN_DEV_CAP_VHT_OPER_MODE_MASK 0x02
|
|
/* NAN2 Management Frame (section 5.6) */
|
|
/* Public action frame for NAN2 */
|
typedef BWL_PRE_PACKED_STRUCT struct nan2_pub_act_frame_s {
|
/* NAN_PUB_AF_CATEGORY 0x04 */
|
uint8 category_id;
|
/* NAN_PUB_AF_ACTION 0x09 */
|
uint8 action_field;
|
/* NAN_OUI 0x50-6F-9A */
|
uint8 oui[DOT11_OUI_LEN];
|
/* NAN_OUI_TYPE TBD */
|
uint8 oui_type;
|
/* NAN_OUI_SUB_TYPE TBD */
|
uint8 oui_sub_type;
|
/* NAN_PUB_AF_DIALOG_TOKEN */
|
uint8 dialog_token;
|
/* One or more NAN Attributes follow */
|
uint8 data[1];
|
} BWL_POST_PACKED_STRUCT nan2_pub_act_frame_t;
|
|
#define NAN2_PUB_ACT_FRM_SIZE (OFFSETOF(nan2_pub_act_frame_t, data))
|
|
/* NAN2 Management Frame Subtypes */
|
|
/* NAN2 Management */
|
#define NAN_MGMT_FRM_SUBTYPE_MGMT 0
|
/* NAN Ranging Report */
|
#define NAN_MGMT_FRM_SUBTYPE_RANGING_RPT 1
|
/* GAS Sechdule Request */
|
#define NAN_MGMT_FRM_SUBTYPE_GAS_SCHED_REQ 2
|
/* GAS Sechdule Response */
|
#define NAN_MGMT_FRM_SUBTYPE_GAS_SCHED_RESP 3
|
/* NAN Ranging Request */
|
#define NAN_MGMT_FRM_SUBTYPE_RANGING_REQ 4
|
/* NAN Ranging Response */
|
#define NAN_MGMT_FRM_SUBTYPE_RANGING_RESP 5
|
/* NDP Request */
|
#define NAN_MGMT_FRM_SUBTYPE_NDP_REQ 6
|
/* NDP Response */
|
#define NAN_MGMT_FRM_SUBTYPE_NDP_RESP 7
|
|
/* NDP End (internal implementation) */
|
#define NAN_MGMT_FRM_SUBTYPE_NDP_END 8
|
|
/* NDL Schedule request */
|
#define NAN_MGMT_FRM_SUBTYPE_NDL_UPDATE_REQ 9
|
/* NDL Schedule response */
|
#define NAN_MGMT_FRM_SUBTYPE_NDL_UPDATE_RESP 10
|
|
/* nan 2.0 qos */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_ndp_qos_s {
|
uint8 tid; /* traffic identifier */
|
uint16 pkt_size; /* service data pkt size */
|
uint8 data_rate; /* mean data rate */
|
uint8 svc_interval; /* max service interval */
|
} BWL_POST_PACKED_STRUCT wifi_nan_ndp_qos_t;
|
|
/* NDP Information Element (internal) */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_ndp_setup_s {
|
uint8 id; /* 221 */
|
uint8 len; /* Length */
|
uint8 oui[DOT11_OUI_LEN]; /* "\x00\x10\x18" BRCM OUI */
|
uint8 type; /* NAN_OUI_TYPE 0x13 */
|
uint8 subtype; /* NAN_DATA_NDP_SETUP */
|
uint8 msg_type; /* NDP Req, NDP Resp etc. */
|
uint8 pub_inst_id; /* publish instance id */
|
struct ether_addr peer_mac_addr; /* publisher mac addr (aka peer mgmt address) */
|
struct ether_addr data_if_addr; /* local data i/f address */
|
uint8 msg_status;
|
uint8 security;
|
wifi_nan_ndp_qos_t qos; /* qos info */
|
uint8 var[1]; /* NDP specific info */
|
} BWL_POST_PACKED_STRUCT wifi_nan_ndp_setup_t;
|
|
/* NDP Setup Status */
|
#define NAN_NDP_SETUP_STATUS_OK 1
|
#define NAN_NDP_SETUP_STATUS_FAIL 0
|
#define NAN_NDP_SETUP_STATUS_REJECT 2
|
|
/* NAN mgmt information element */
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_mgmt_setup_s {
|
uint8 id; /* 221 */
|
uint8 len; /* Length */
|
uint8 oui[DOT11_OUI_LEN]; /* "\x00\x10\x18" BRCM OUI */
|
uint8 type; /* NAN_OUI_TYPE 0x13 */
|
uint8 subtype; /* NAN_DATA_MGMT_SETUP */
|
uint8 msg_type; /* Mgmt Req, Mgmt Resp etc. */
|
uint8 msg_status;
|
} BWL_POST_PACKED_STRUCT wifi_nan_mgmt_setup_t;
|
|
/* NAN Mgmt Request */
|
#define NAN_MGMT_SETUP_MSG_REQ 1 /* don't use 0 */
|
/* NAN Mgmt Response */
|
#define NAN_MGMT_SETUP_MSG_RESP 2
|
|
/* NAN Mgmt Setup Status */
|
#define NAN_MGMT_SETUP_STATUS_OK 0
|
#define NAN_MGMT_SETUP_STATUS_FAIL 1
|
#define NAN_MGMT_SETUP_STATUS_REJECT 2
|
|
/* This marks the end of a packed structure section. */
|
#include <packed_section_end.h>
|
|
#endif /* _NAN_H_ */
|