/******************************************************************************
|
*
|
* Copyright(c) 2019 Realtek Corporation.
|
*
|
* This program is free software; you can redistribute it and/or modify it
|
* under the terms of version 2 of the GNU General Public License as
|
* published by the Free Software Foundation.
|
*
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* more details.
|
*
|
*****************************************************************************/
|
#ifndef _PHL_IE_H_
|
#define _PHL_IE_H_
|
|
#define MAX_ELE_SZ 768
|
|
#define MAX_ELE_LEN 255
|
|
/* Element ID */
|
enum wlan_eid {
|
EID_SSID = 0,
|
EID_SUPP_RATES = 1,
|
EID_FH_PARAMS = 2, /* reserved now */
|
EID_DS_PARAMS = 3,
|
EID_CF_PARAMS = 4,
|
EID_TIM = 5,
|
EID_IBSS_PARAMS = 6,
|
EID_COUNTRY = 7,
|
/* 8, 9 reserved */
|
EID_REQUEST = 10,
|
EID_QBSS_LOAD = 11,
|
EID_EDCA_PARAM_SET = 12,
|
EID_TSPEC = 13,
|
EID_TCLAS = 14,
|
EID_SCHEDULE = 15,
|
EID_CHALLENGE = 16,
|
/* 17-31 reserved for challenge text extension */
|
EID_PWR_CONSTRAINT = 32,
|
EID_PWR_CAPABILITY = 33,
|
EID_TPC_REQUEST = 34,
|
EID_TPC_REPORT = 35,
|
EID_SUPPORTED_CHANNELS = 36,
|
EID_CHANNEL_SWITCH = 37,
|
EID_MEASURE_REQUEST = 38,
|
EID_MEASURE_REPORT = 39,
|
EID_QUIET = 40,
|
EID_IBSS_DFS = 41,
|
EID_ERP_INFO = 42,
|
EID_TS_DELAY = 43,
|
EID_TCLAS_PROCESSING = 44,
|
EID_HT_CAPABILITY = 45,
|
EID_QOS_CAPA = 46,
|
/* 47 reserved for Broadcom */
|
EID_RSN = 48,
|
EID_802_15_COEX = 49,
|
EID_EXT_SUPP_RATES = 50,
|
EID_AP_CHAN_REPORT = 51,
|
EID_NEIGHBOR_REPORT = 52,
|
EID_RCPI = 53,
|
EID_MOBILITY_DOMAIN = 54,
|
EID_FAST_BSS_TRANSITION = 55,
|
EID_TIMEOUT_INTERVAL = 56,
|
EID_RIC_DATA = 57,
|
EID_DSE_REGISTERED_LOCATION = 58,
|
EID_SUPPORTED_REGULATORY_CLASSES = 59,
|
EID_EXT_CHANSWITCH_ANN = 60,
|
EID_HT_OPERATION = 61,
|
EID_SECONDARY_CHANNEL_OFFSET = 62,
|
EID_BSS_AVG_ACCESS_DELAY = 63,
|
EID_ANTENNA_INFO = 64,
|
EID_RSNI = 65,
|
EID_MEASUREMENT_PILOT_TX_INFO = 66,
|
EID_BSS_AVAILABLE_CAPACITY = 67,
|
EID_BSS_AC_ACCESS_DELAY = 68,
|
EID_TIME_ADVERTISEMENT = 69,
|
EID_RRM_ENABLED_CAPABILITIES = 70,
|
EID_MULTIPLE_BSSID = 71,
|
EID_BSS_COEX_2040 = 72,
|
EID_BSS_INTOLERANT_CHL_REPORT = 73,
|
EID_OVERLAP_BSS_SCAN_PARAM = 74,
|
EID_RIC_DESCRIPTOR = 75,
|
EID_MMIE = 76,
|
EID_ASSOC_COMEBACK_TIME = 77,
|
EID_EVENT_REQUEST = 78,
|
EID_EVENT_REPORT = 79,
|
EID_DIAGNOSTIC_REQUEST = 80,
|
EID_DIAGNOSTIC_REPORT = 81,
|
EID_LOCATION_PARAMS = 82,
|
EID_NON_TX_BSSID_CAP = 83,
|
EID_SSID_LIST = 84,
|
EID_MULTI_BSSID_IDX = 85,
|
EID_FMS_DESCRIPTOR = 86,
|
EID_FMS_REQUEST = 87,
|
EID_FMS_RESPONSE = 88,
|
EID_QOS_TRAFFIC_CAPA = 89,
|
EID_BSS_MAX_IDLE_PERIOD = 90,
|
EID_TSF_REQUEST = 91,
|
EID_TSF_RESPOSNE = 92,
|
EID_WNM_SLEEP_MODE = 93,
|
EID_TIM_BCAST_REQ = 94,
|
EID_TIM_BCAST_RESP = 95,
|
EID_COLL_IF_REPORT = 96,
|
EID_CHANNEL_USAGE = 97,
|
EID_TIME_ZONE = 98,
|
EID_DMS_REQUEST = 99,
|
EID_DMS_RESPONSE = 100,
|
EID_LINK_ID = 101,
|
EID_WAKEUP_SCHEDUL = 102,
|
/* 103 reserved */
|
EID_CHAN_SWITCH_TIMING = 104,
|
EID_PTI_CONTROL = 105,
|
EID_PU_BUFFER_STATUS = 106,
|
EID_INTERWORKING = 107,
|
EID_ADVERTISEMENT_PROTOCOL = 108,
|
EID_EXPEDITED_BW_REQ = 109,
|
EID_QOS_MAP_SET = 110,
|
EID_ROAMING_CONSORTIUM = 111,
|
EID_EMERGENCY_ALERT = 112,
|
EID_MESH_CONFIG = 113,
|
EID_MESH_ID = 114,
|
EID_LINK_METRIC_REPORT = 115,
|
EID_CONGESTION_NOTIFICATION = 116,
|
EID_PEER_MGMT = 117,
|
EID_CHAN_SWITCH_PARAM = 118,
|
EID_MESH_AWAKE_WINDOW = 119,
|
EID_BEACON_TIMING = 120,
|
EID_MCCAOP_SETUP_REQ = 121,
|
EID_MCCAOP_SETUP_RESP = 122,
|
EID_MCCAOP_ADVERT = 123,
|
EID_MCCAOP_TEARDOWN = 124,
|
EID_GANN = 125,
|
EID_RANN = 126,
|
EID_EXT_CAPABILITY = 127,
|
/* 128, 129 reserved for Agere */
|
EID_PREQ = 130,
|
EID_PREP = 131,
|
EID_PERR = 132,
|
/* 133-136 reserved for Cisco */
|
EID_PXU = 137,
|
EID_PXUC = 138,
|
EID_AUTH_MESH_PEER_EXCH = 139,
|
EID_MIC = 140,
|
EID_DESTINATION_URI = 141,
|
EID_UAPSD_COEX = 142,
|
EID_WAKEUP_SCHEDULE = 143,
|
EID_EXT_SCHEDULE = 144,
|
EID_STA_AVAILABILITY = 145,
|
EID_DMG_TSPEC = 146,
|
EID_DMG_AT = 147,
|
EID_DMG_CAP = 148,
|
/* 149 reserved for Cisco */
|
EID_CISCO_VENDOR_SPECIFIC = 150,
|
EID_DMG_OPERATION = 151,
|
EID_DMG_BSS_PARAM_CHANGE = 152,
|
EID_DMG_BEAM_REFINEMENT = 153,
|
EID_CHANNEL_MEASURE_FEEDBACK = 154,
|
/* 155-156 reserved for Cisco */
|
EID_AWAKE_WINDOW = 157,
|
EID_MULTI_BAND = 158,
|
EID_ADDBA_EXT = 159,
|
EID_NEXT_PCP_LIST = 160,
|
EID_PCP_HANDOVER = 161,
|
EID_DMG_LINK_MARGIN = 162,
|
EID_SWITCHING_STREAM = 163,
|
EID_SESSION_TRANSITION = 164,
|
EID_DYN_TONE_PAIRING_REPORT = 165,
|
EID_CLUSTER_REPORT = 166,
|
EID_RELAY_CAP = 167,
|
EID_RELAY_XFER_PARAM_SET = 168,
|
EID_BEAM_LINK_MAINT = 169,
|
EID_MULTIPLE_MAC_ADDR = 170,
|
EID_U_PID = 171,
|
EID_DMG_LINK_ADAPT_ACK = 172,
|
/* 173 reserved for Symbol */
|
EID_MCCAOP_ADV_OVERVIEW = 174,
|
EID_QUIET_PERIOD_REQ = 175,
|
/* 176 reserved for Symbol */
|
EID_QUIET_PERIOD_RESP = 177,
|
/* 178-179 reserved for Symbol */
|
/* 180 reserved for ISO/IEC 20011 */
|
EID_EPAC_POLICY = 182,
|
EID_CLISTER_TIME_OFF = 183,
|
EID_INTER_AC_PRIO = 184,
|
EID_SCS_DESCRIPTOR = 185,
|
EID_QLOAD_REPORT = 186,
|
EID_HCCA_TXOP_UPDATE_COUNT = 187,
|
EID_HL_STREAM_ID = 188,
|
EID_GCR_GROUP_ADDR = 189,
|
EID_ANTENNA_SECTOR_ID_PATTERN = 190,
|
EID_VHT_CAPABILITY = 191,
|
EID_VHT_OPERATION = 192,
|
EID_EXTENDED_BSS_LOAD = 193,
|
EID_WIDE_BW_CHANNEL_SWITCH = 194,
|
EID_TX_POWER_ENVELOPE = 195,
|
EID_CHANNEL_SWITCH_WRAPPER = 196,
|
EID_AID = 197,
|
EID_QUIET_CHANNEL = 198,
|
EID_OPMODE_NOTIF = 199,
|
EID_REDUCED_NEIGHBOR_REPORT = 201,
|
EID_AID_REQUEST = 210,
|
EID_AID_RESPONSE = 211,
|
EID_S1G_BCN_COMPAT = 213,
|
EID_S1G_SHORT_BCN_INTERVAL = 214,
|
EID_S1G_TWT = 216,
|
EID_S1G_CAPABILITIES = 217,
|
EID_VENDOR_SPECIFIC = 221,
|
EID_QOS_PARAMETER = 222,
|
EID_S1G_OPERATION = 232,
|
EID_CAG_NUMBER = 237,
|
EID_AP_CSN = 239,
|
EID_FILS_INDICATION = 240,
|
EID_DILS = 241,
|
EID_FRAGMENT = 242,
|
EID_RSN_EXTENSION = 244,
|
EID_EXTENSION = 255
|
};
|
|
/* Element ID Extension */
|
enum wlan_eid_ext {
|
EID_EXT_ASSOC_DELAY_INFO = 1,
|
EID_EXT_FILS_REQ_PARAMS = 2,
|
EID_EXT_FILS_KEY_CONFIRM = 3,
|
EID_EXT_FILS_SESSION = 4,
|
EID_EXT_FILS_HLP_CONTAINER = 5,
|
EID_EXT_FILS_IP_ADDR_ASSIGN = 6,
|
EID_EXT_KEY_DELIVERY = 7,
|
EID_EXT_FILS_WRAPPED_DATA = 8,
|
EID_EXT_FILS_PUBLIC_KEY = 12,
|
EID_EXT_FILS_NONCE = 13,
|
EID_EXT_FUTURE_CHAN_GUIDANCE = 14,
|
EID_EXT_CDMG_EXTEND_SCHEDULE = 19,
|
EID_EXT_SSW_REPORT = 20,
|
EID_EXT_SPSH_REPORT = 25,
|
EID_EXT_HE_CAPABILITY = 35,
|
EID_EXT_HE_OPERATION = 36,
|
EID_EXT_UORA = 37,
|
EID_EXT_MU_EDCA_PARAM_SET = 38,
|
EID_EXT_SPATIAL_REUSE_PARAM_SET = 39,
|
EID_EXT_GAS_EXTENSION = 40,
|
EID_EXT_NDP_FEEDBACK_REPORT_PARAM_SET = 41,
|
EID_EXT_BSS_COLOR_CHG_ANN = 42,
|
EID_EXT_QUIET_TIME_PERIOD_SETUP = 43,
|
EID_EXT_ESS_REPORT = 45,
|
EID_EXT_OPS = 46,
|
EID_EXT_HE_BSS_LOAD = 47,
|
EID_EXT_MAX_CHANNEL_SWITCH_TIME = 52,
|
EID_EXT_MULTIPLE_BSSID_CONFIGURATION = 55,
|
EID_EXT_NON_INHERITANCE = 56,
|
EID_EXT_KNOWN_BSSID = 57,
|
EID_EXT_SHORT_SSID_LIST = 58,
|
EID_EXT_HE_6GHZ_CAPABILITY = 59,
|
EID_EXT_UL_MU_POWER_CAPABILITY = 60,
|
EID_EXT_EHT_OPERATION = 106,
|
EID_EXT_MULTI_LINK = 107,
|
EID_EXT_EHT_CAPABILITY = 108,
|
EID_EXT_TID_TO_LINK_MAPPING = 109,
|
EID_EXT_MULTI_LINK_TRAFFIC = 110,
|
};
|
|
/* Subelement ID for ML */
|
#define WLAN_SUBEID_PER_STA_PROFILE 0
|
|
/*****************************************************************************
|
* Multi-Link (ML) Element
|
*****************************************************************************/
|
|
#define STA_CTRL_LEN 2
|
#define MAX_STA_INFO_LEN 13
|
|
enum ml_ele_type {
|
BASIC_ML = 0,
|
PROBE_REQUEST_ML = 1,
|
RESERVED
|
};
|
|
struct mld_cap {
|
u16 max_num_sl:4;
|
u16 srs_support:1;
|
u16 tid_to_link_nego_support:2;
|
u16 freq_sep_for_str:5;
|
u16 aar_support:1;
|
u16 rsvd:3;
|
};
|
|
struct basic_ml {
|
bool link_id_info_present;
|
bool bss_param_chg_cnt_present;
|
bool msd_info_present;
|
bool eml_cap_present;
|
bool mld_cap_present;
|
u8 *mld_address;
|
u8 link_id;
|
u8 bss_param_chg_cnt;
|
/* TODO: msd info */
|
/* TODO: eml cap */
|
struct mld_cap mld_cap;
|
};
|
|
struct probe_req_ml {
|
bool mld_id_present;
|
u8 mld_id;
|
};
|
|
struct rtw_phl_per_sta_profile_element {
|
/* sta ctrl */
|
u8 link_id;
|
bool complete_profile;
|
bool mac_addr_present;
|
bool bcn_interval_present;
|
bool dtim_info_present;
|
bool nstr_link_pair_present;
|
u8 nstr_bitmap_size;
|
/* sta info */
|
u8 mac_addr[MAC_ALEN];
|
u16 bcn_interval;
|
u8 dtim_cnt;
|
u8 dtim_period;
|
u16 nstr_indication_bitmap;
|
/* sta profile */
|
u8 *sta_profile;
|
u8 sta_profile_len;
|
u8 *sta_profile_frag;
|
u8 sta_profile_frag_len;
|
};
|
|
struct rtw_phl_ml_element {
|
enum ml_ele_type type;
|
union {
|
struct basic_ml basic_ml;
|
struct probe_req_ml probe_req_ml;
|
} common_info;
|
struct rtw_phl_per_sta_profile_element profile[MAX_MLD_LINK_NUM];
|
u8 profile_num;
|
};
|
|
/*****************************************************************************
|
* Reduced Neighbor Report Element
|
*****************************************************************************/
|
#define MAX_TBTT_INFO_NUM 3
|
#define MAX_NEIGHBOR_AP_NUM 3
|
|
struct rtw_phl_tbtt_info {
|
u8 offset;
|
u8 bssid[MAC_ALEN];
|
u8 short_ssid[4];
|
struct bss_param_t {
|
u8 oct_recomm:1,
|
same_ssid:1,
|
multi_bssid:1,
|
transmitted_bssid:1,
|
mem_24G_5G_colated_ap:1,
|
unsolicited_probe_resp_act:1,
|
colated_ap:1,
|
resv:1;
|
} bss_param;
|
u8 max_tx_pwr;
|
struct mld_param_t {
|
u8 mld_id;
|
u8 link_id;
|
u8 bss_params_chg_cnt;
|
} mld_param;
|
};
|
|
struct tbtt_info_header {
|
u8 type;
|
u8 cnt;
|
u8 len;
|
bool filtered_nb_ap;
|
/* self-defined variable*/
|
u8 is_legal;
|
u8 bssid_is_present:1,
|
short_ssid_is_present:1,
|
bss_param_is_present:1,
|
max_tx_pwr_is_present:1,
|
mld_param_is_present:1;
|
};
|
|
struct rtw_phl_neighbor_ap {
|
struct tbtt_info_header tbtt_info_hdr;
|
u8 op_class;
|
u8 ch;
|
struct rtw_phl_tbtt_info tbtt_infos[MAX_TBTT_INFO_NUM];
|
/* self-defined variable*/
|
struct rtw_chan_def chan_def;
|
};
|
|
struct rtw_phl_rnb_rpt_element {
|
struct rtw_phl_neighbor_ap nb_aps[MAX_NEIGHBOR_AP_NUM];
|
u8 nb_ap_num;
|
};
|
|
/******************************************************************************
|
* WLAN Element APIs
|
*****************************************************************************/
|
/*
|
rtw_phl_build_ml_ie(): API for building ML element
|
@ info: information that needs to build a ML element
|
@ pbuf: buffer for the element
|
@ return: length of the element
|
*/
|
u8 rtw_phl_build_ml_ie(struct rtw_phl_com_t *phl_com,
|
struct rtw_phl_ml_ie_info *info,
|
u8 *pbuf);
|
|
/*
|
rtw_phl_build_per_sta_profile(): API for building Per-STA Profile
|
@ info: the information that needs to build a Per-STA Profile
|
@ pbuf: the buffer for the Per-STA Profile
|
@ return: the length of the element
|
*/
|
u8 rtw_phl_build_per_sta_profile(struct rtw_phl_com_t *phl_com,
|
struct rtw_phl_per_sta_profile_info *info,
|
u8 *pbuf);
|
|
/*
|
rtw_phl_parse_tid2link(): Parse Tid-To-Link Mapping element
|
@ ele_pos: start of tid-to-link mapping element
|
@ ele_len: length of tid-to-link mapping element
|
*/
|
void rtw_phl_parse_tid2link(struct rtw_phl_stainfo_t *sta,
|
u8 *ele_start,
|
u16 ele_len);
|
|
void rtw_phl_tid2link_not_present(struct rtw_phl_stainfo_t *sta, u8 nego);
|
|
u8 rtw_phl_build_tid2link(struct rtw_wifi_role_link_t *rlink,
|
u8 *ele_start);
|
|
void
|
rtw_phl_parse_ml_ie(struct rtw_phl_com_t *phl_com,
|
u8 *ele_pos,
|
u16 ele_len,
|
struct rtw_phl_ml_element *ml_ele
|
);
|
|
u16
|
rtw_phl_get_ie(u8 *ie_start,
|
u16 ies_len,
|
u8 target_id,
|
u8 target_ext_id,
|
u8 **out_ele
|
);
|
|
bool
|
rtw_phl_is_ie_fragmentable(u32 eid,
|
u32 eid_ext
|
);
|
|
u8 rtw_phl_build_reduced_nb_rpt(struct rtw_wifi_role_t *wrole,
|
struct rtw_wifi_role_link_t *rlink,
|
u8 *pbuf);
|
|
/*
|
rtw_phl_parse_reduced_nb_rpt(): Parse Reduced Neighbor Report element
|
@ ele_start: start of reduced neighbor report element
|
@ ele_len: length of reduced neighbor report element
|
@ rnr: the reduced neighbor report structure
|
*/
|
void
|
rtw_phl_parse_reduced_nb_rpt(struct rtw_phl_com_t *phl_com,
|
u8 *ele_start,
|
u16 ele_len,
|
struct rtw_phl_rnb_rpt_element *reduced_nb_rpt);
|
|
/************************************************************
|
* SET ML Control field: _pStart = start of ML Control field
|
************************************************************/
|
/* Basic ML */
|
#define SET_ML_ELE_ML_CTRL_TYPE(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 0, 3, _val)
|
#define SET_ML_ELE_ML_CTRL_LINK_ID_INFO_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 4, 1, _val)
|
#define SET_ML_ELE_ML_CTRL_BSS_PARAMS_CHG_CNT_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 5, 1, _val)
|
#define SET_ML_ELE_ML_CTRL_MEDIUM_SYNC_DELAY_INFO_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 6, 1, _val)
|
#define SET_ML_ELE_ML_CTRL_EML_CAP_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 7, 1, _val)
|
#define SET_ML_ELE_ML_CTRL_MLD_CAP_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 8, 1, _val)
|
/* Probe Request ML */
|
#define SET_ML_ELE_ML_CTRL_MLD_ID_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 4, 1, _val)
|
|
/************************************************************
|
GET ML Control field: _pStart = start of ML Control field
|
************************************************************/
|
/* Basic ML */
|
#define GET_ML_ELE_ML_CTRL_TYPE(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 0, 3)
|
#define GET_ML_ELE_ML_CTRL_LINK_ID_INFO_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 4, 1)
|
#define GET_ML_ELE_ML_CTRL_BSS_PARAMS_CHG_CNT_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 5, 1)
|
#define GET_ML_ELE_ML_CTRL_MEDIUM_SYNC_DELAY_INFO_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 6, 1)
|
#define GET_ML_ELE_ML_CTRL_EML_CAP_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 7, 1)
|
#define GET_ML_ELE_ML_CTRL_MLD_CAP_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 8, 1)
|
/* Probe Request ML */
|
#define GET_ML_ELE_ML_CTRL_MLD_ID_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 4, 1)
|
|
/************************************************************
|
SET Common Info field: _pStart = start of each subfield
|
************************************************************/
|
/* Basic ML */
|
#define SET_ML_ELE_COMMON_INFO_LINK_ID(_pStart, _val) \
|
SET_BITS_TO_LE_1BYTE(_pStart, 0, 4, _val)
|
#define SET_ML_ELE_COMMON_INFO_BSS_PARAMS_CHG_CNT(_pStart, _val) \
|
SET_BITS_TO_LE_1BYTE(_pStart, 0, 8, _val)
|
/* Probe Request ML */
|
#define SET_ML_ELE_COMMON_INFO_MLD_ID(_pStart, _val) \
|
SET_BITS_TO_LE_1BYTE(_pStart, 0, 8, _val)
|
|
/************************************************************
|
GET MLD Capabilities subfield: _pStart = start of MLD Capabilities subfield
|
************************************************************/
|
#define GET_MLD_CAP_MAX_NUM_OF_SL(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 0, 4)
|
#define GET_MLD_CAP_SRS_SUPPORT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 4, 1)
|
#define GET_MLD_CAP_TID_TO_LINK_NEGO_SUPPORT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 5, 2)
|
#define GET_MLD_CAP_FREQ_SEP_FOR_STR(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 7, 5)
|
#define GET_MLD_CAP_AAR_SUPPORT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 12, 1)
|
|
/************************************************************
|
SET MLD Capabilities subfield: _pStart = start of MLD Capabilities subfield
|
************************************************************/
|
#define SET_MLD_CAP_MAX_NUM_OF_SL(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 0, 4, _val)
|
#define SET_MLD_CAP_SRS_SUPPORT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 4, 1, _val)
|
#define SET_MLD_CAP_TID_TO_LINK_NEGO_SUPPORT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 5, 2, _val)
|
#define SET_MLD_CAP_FREQ_SEP_FOR_STR(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 7, 5, _val)
|
#define SET_MLD_CAP_AAR_SUPPORT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 12, 1, _val)
|
|
/************************************************************
|
SET STA Control: _pStart = start of STA Control field
|
************************************************************/
|
#define SET_STA_CTRL_LINK_ID(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 0, 4, _val)
|
#define SET_STA_CTRL_COMPLETE_PROFILE(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 4, 1, _val)
|
#define SET_STA_CTRL_MAC_ADDR_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 5, 1, _val)
|
#define SET_STA_CTRL_BEACON_INTEREVAL_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 6, 1, _val)
|
#define SET_STA_CTRL_DTIM_INFO_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 7, 1, _val)
|
#define SET_STA_CTRL_NSTR_LINK_PAIR_PRESENT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 8, 1, _val)
|
#define SET_STA_CTRL_NSTR_BITMAP_SIZE(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 9, 1, _val)
|
|
/************************************************************
|
GET STA Control: _pStart = start of STA Control field
|
************************************************************/
|
#define GET_STA_CTRL_LINK_ID(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 0, 4)
|
#define GET_STA_CTRL_COMPLETE_PROFILE(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 4, 1)
|
#define GET_STA_CTRL_MAC_ADDR_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 5, 1)
|
#define GET_STA_CTRL_BEACON_INTEREVAL_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 6, 1)
|
#define GET_STA_CTRL_DTIM_INFO_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 7, 1)
|
#define GET_STA_CTRL_NSTR_LINK_PAIR_PRESENT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 8, 1)
|
#define GET_STA_CTRL_NSTR_BITMAP_SIZE(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 9, 1)
|
|
|
|
/************************************************************
|
SET TID-To-Link Mapping element: _pStart = start of tid2link control field
|
************************************************************/
|
#define SET_TID2LINK_CTRL_DIRECT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 0, 2, _val)
|
#define SET_TID2LINK_CTRL_DEFAULT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 2, 1, _val)
|
#define SET_TID2LINK_CTRL_INDIC(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 8, 8, _val)
|
|
/* SET Link Mapping of TID n field: _pStart = start of Link Mapping of TID field */
|
#define SET_LINK_MAPPING_TID(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 0, 16, _val)
|
|
/************************************************************
|
GET TID-To-Link Mapping element: _pStart = start of tid2link control field
|
************************************************************/
|
#define GET_TID2LINK_CTRL_DIRECT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 0, 2)
|
#define GET_TID2LINK_CTRL_DEFAULT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 2, 1)
|
#define GET_TID2LINK_CTRL_INDIC(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 8, 8)
|
|
/* GET Link Mapping of TID n field: _pStart = start of Link Mapping of TID field */
|
#define GET_LINK_MAPPING_TID(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 0, 16)
|
|
|
/************************************************************
|
Reduced Neighbor Report
|
SET TBTT Info Header subfield: _pStart = start of TBTT Info Header subfield
|
************************************************************/
|
#define SET_TBTT_INFO_FIELD_TYPE(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 0, 2, _val)
|
#define SET_FILTED_NB_AP(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 2, 1, _val)
|
#define SET_TBTT_INFO_CNT(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 4, 4, _val)
|
#define SET_TBTT_INFO_LEN(_pStart, _val) \
|
SET_BITS_TO_LE_2BYTE(_pStart, 8, 8, _val)
|
|
/************************************************************
|
Reduced Neighbor Report
|
SET MLD Parameters: _pStart = start of MLD Parameters subfield
|
************************************************************/
|
#define SET_MLD_PARAMS_MLD_ID(_pStart, _val) \
|
SET_BITS_TO_LE_4BYTE(_pStart, 0, 8, _val)
|
#define SET_MLD_PARAMS_LINK_ID(_pStart, _val) \
|
SET_BITS_TO_LE_4BYTE(_pStart, 8, 4, _val)
|
#define SET_MLD_PARAMS_BSS_PARAMS_CHG_CNT(_pStart, _val) \
|
SET_BITS_TO_LE_4BYTE(_pStart, 12, 8, _val)
|
|
/************************************************************
|
Reduced Neighbor Report
|
GET TBTT Info Header subfield: _pStart = start of TBTT Info Header subfield
|
************************************************************/
|
#define GET_TBTT_INFO_FIELD_TYPE(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 0, 2)
|
#define GET_FILTED_NB_AP(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 2, 1)
|
#define GET_TBTT_INFO_CNT(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 4, 4)
|
#define GET_TBTT_INFO_LEN(_pStart) \
|
LE_BITS_TO_2BYTE(_pStart, 8, 8)
|
|
/************************************************************
|
Reduced Neighbor Report
|
GET TBTT Info BSS Parameters subfield: _pStart = start of TBTT BSS Parameters subfield
|
************************************************************/
|
#define GET_BSS_PARAMS_OCT_RECOMM(_pEleStart) \
|
LE_BITS_TO_1BYTE(_pEleStart, 0, 1)
|
#define GET_BSS_PARAMS_SAME_SSID(_pEleStart) \
|
LE_BITS_TO_1BYTE(_pEleStart, 1, 1)
|
#define GET_BSS_PARAMS_MULTI_BSSID(_pEleStart) \
|
LE_BITS_TO_1BYTE(_pEleStart, 2, 1)
|
#define GET_BSS_PARAMS_TRANSMITTED_BSSID(_pEleStart) \
|
LE_BITS_TO_1BYTE(_pEleStart, 3, 1)
|
#define GET_BSS_PARAMS_MEM_24G_5G_COLOCATED_AP(_pEleStart) \
|
LE_BITS_TO_1BYTE(_pEleStart, 4, 1)
|
#define GET_BSS_PARAMS_UNSOLICITED_PROBE_RESP_ACTIVE(_pEleStart) \
|
LE_BITS_TO_1BYTE(_pEleStart, 5, 1)
|
#define GET_BSS_PARAMS_COLOACTED_AP(_pEleStart) \
|
LE_BITS_TO_1BYTE(_pEleStart, 6, 1)
|
|
/************************************************************
|
Reduced Neighbor Report
|
GET MLD Parameters: _pStart = start of MLD Parameters subfield
|
************************************************************/
|
#define GET_MLD_PARAMS_MLD_ID(_pStart) \
|
LE_BITS_TO_4BYTE(_pStart, 0, 8)
|
#define GET_MLD_PARAMS_LINK_ID(_pStart) \
|
LE_BITS_TO_4BYTE(_pStart, 8, 4)
|
#define GET_MLD_PARAMS_BSS_PARAMS_CHG_CNT(_pStart) \
|
LE_BITS_TO_4BYTE(_pStart, 12, 8)
|
|
#endif /*_PHL_STA_H_*/
|