diff options
Diffstat (limited to 'wl_cfgvendor.c')
-rw-r--r-- | wl_cfgvendor.c | 939 |
1 files changed, 866 insertions, 73 deletions
diff --git a/wl_cfgvendor.c b/wl_cfgvendor.c index 21cd379..5cb2a59 100644 --- a/wl_cfgvendor.c +++ b/wl_cfgvendor.c @@ -2059,7 +2059,7 @@ wl_cfgvendor_rtt_set_config(struct wiphy *wiphy, struct wireless_dev *wdev, err = -EINVAL; goto exit; } - WL_INFORM_MEM(("Target addr %s, Channel : %s for RTT \n", + WL_MEM(("Target addr %s, Channel : %s for RTT \n", bcm_ether_ntoa((const struct ether_addr *)&rtt_target->addr, eabuf), wf_chspec_ntoa(rtt_target->chanspec, chanbuf))); @@ -3713,7 +3713,7 @@ wl_cfgvendor_nan_parse_dp_sec_info_args(struct wiphy *wiphy, } break; case NAN_ATTRIBUTE_PUBLISH_ID: - cmd_data->pub_id = nla_get_u16(iter); + cmd_data->pub_id = nla_get_u32(iter); break; case NAN_ATTRIBUTE_NDP_ID: cmd_data->ndp_instance_id = nla_get_u32(iter); @@ -4089,11 +4089,11 @@ wl_cfgvendor_nan_parse_discover_args(struct wiphy *wiphy, /* Nan Publish/Subscribe request Attributes */ case NAN_ATTRIBUTE_PUBLISH_ID: - if (nla_len(iter) != sizeof(uint16)) { + if (nla_len(iter) != sizeof(uint32)) { ret = -EINVAL; goto exit; } - cmd_data->pub_id = nla_get_u16(iter); + cmd_data->pub_id = nla_get_u32(iter); cmd_data->local_id = cmd_data->pub_id; break; case NAN_ATTRIBUTE_MAC_ADDR: @@ -5360,7 +5360,7 @@ wl_cfgvendor_nan_dp_ind_event_data_filler(struct sk_buff *msg, nan_event_data_t *event_data) { int ret = BCME_OK; - ret = nla_put_u16(msg, NAN_ATTRIBUTE_PUBLISH_ID, + ret = nla_put_u32(msg, NAN_ATTRIBUTE_PUBLISH_ID, event_data->pub_id); if (unlikely(ret)) { WL_ERR(("Failed to put pub ID, ret=%d\n", ret)); @@ -5458,7 +5458,7 @@ wl_cfgvendor_nan_svc_terminate_event_filler(struct sk_buff *msg, goto fail; } } else { - ret = nla_put_u16(msg, NAN_ATTRIBUTE_PUBLISH_ID, + ret = nla_put_u32(msg, NAN_ATTRIBUTE_PUBLISH_ID, event_data->local_inst_id); if (unlikely(ret)) { WL_ERR(("Failed to put local inst id, ret=%d\n", ret)); @@ -5609,7 +5609,7 @@ wl_cfgvendor_nan_sub_match_event_filler(struct sk_buff *msg, WL_ERR(("Failed to put handle, ret=%d\n", ret)); goto fail; } - ret = nla_put_u16(msg, NAN_ATTRIBUTE_PUBLISH_ID, event_data->pub_id); + ret = nla_put_u32(msg, NAN_ATTRIBUTE_PUBLISH_ID, event_data->pub_id); if (unlikely(ret)) { WL_ERR(("Failed to put pub id, ret=%d\n", ret)); goto fail; @@ -5882,7 +5882,7 @@ wl_cfgvendor_send_nan_event(struct wiphy *wiphy, struct net_device *dev, switch (event_id) { case GOOGLE_NAN_EVENT_DE_EVENT: { - WL_INFORM_MEM(("[NAN] GOOGLE_NAN_DE_EVENT cluster id=" MACDBG "nmi= " MACDBG "\n", + WL_DBG(("[NAN] GOOGLE_NAN_DE_EVENT cluster id=" MACDBG "nmi= " MACDBG "\n", MAC2STRDBG(event_data->clus_id.octet), MAC2STRDBG(event_data->local_nmi.octet))); ret = wl_cfgvendor_nan_de_event_filler(msg, event_data); @@ -7542,6 +7542,12 @@ wl_cfgvendor_dbg_file_dump(struct wiphy *wiphy, buf->data_buf[0], NULL, (uint32)buf->len, DLD_BUF_TYPE_SPECIAL, &pos); break; +#ifdef DHD_SDTC_ETB_DUMP + case DUMP_BUF_ATTR_SDTC_ETB_DUMP: + ret = dhd_sdtc_etb_hal_file_dump(bcmcfg_to_prmry_ndev(cfg), + buf->data_buf[0], (uint32)buf->len); + break; +#endif /* DHD_SDTC_ETB_DUMP */ #ifdef DHD_SSSR_DUMP #ifdef DHD_SSSR_DUMP_BEFORE_SR case DUMP_BUF_ATTR_SSSR_C0_D11_BEFORE : @@ -8339,6 +8345,34 @@ static int wl_cfgvendor_nla_put_pktlogdump_data(struct sk_buff *skb, } #endif /* DHD_PKT_LOGGING */ +#ifdef DHD_SDTC_ETB_DUMP +static int wl_cfgvendor_nla_put_sdtc_etb_dump_data(struct sk_buff *skb, struct net_device *ndev) +{ + char memdump_path[MEMDUMP_PATH_LEN]; + int ret = BCME_OK; + + dhd_get_memdump_filename(ndev, memdump_path, MEMDUMP_PATH_LEN, "sdtc_etb_dump"); + ret = nla_put_string(skb, DUMP_FILENAME_ATTR_SDTC_ETB_DUMP, memdump_path); + if (unlikely(ret)) { + WL_ERR(("Failed to nla put stdc etb dump path, ret=%d\n", ret)); + goto exit; + } + /* should we give exact length sdtc dump FW has reported dump ? */ + ret = nla_put_u32(skb, DUMP_LEN_ATTR_SDTC_ETB_DUMP, DHD_SDTC_ETB_MEMPOOL_SIZE); + if (unlikely(ret)) { + WL_ERR(("Failed to nla put stdc etb length, ret=%d\n", ret)); + goto exit; + } + +exit: + return ret; +} +#else +static int wl_cfgvendor_nla_put_sdtc_etb_dump_data(struct sk_buff *skb, struct net_device *ndev) +{ + return BCME_OK; +} +#endif /* DHD_SDTC_ETB_DUMP */ static int wl_cfgvendor_nla_put_memdump_data(struct sk_buff *skb, struct net_device *ndev, const uint32 fw_len) { @@ -8377,6 +8411,9 @@ static int wl_cfgvendor_nla_put_dump_data(dhd_pub_t *dhd_pub, struct sk_buff *sk ((ret = wl_cfgvendor_nla_put_sssr_dump_data(skb, ndev)) < 0)) { goto done; } + if ((ret = wl_cfgvendor_nla_put_sdtc_etb_dump_data(skb, ndev)) < 0) { + goto done; + } #ifdef DHD_PKT_LOGGING if ((ret = wl_cfgvendor_nla_put_pktlogdump_data(skb, ndev, FALSE)) < 0) { goto done; @@ -8617,12 +8654,12 @@ static int wl_cfgvendor_dbg_get_rx_pkt_fates(struct wiphy *wiphy, #endif /* DBG_PKT_MON */ #ifdef KEEP_ALIVE +/* max size of IP packet for keep alive */ +#define MKEEP_ALIVE_IP_PKT_MAX 256 + static int wl_cfgvendor_start_mkeep_alive(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, int len) { - /* max size of IP packet for keep alive */ - const int MKEEP_ALIVE_IP_PKT_MAX = 256; - int ret = BCME_OK, rem, type; uint8 mkeep_alive_id = 0; uint8 *ip_pkt = NULL; @@ -8742,6 +8779,15 @@ static int wl_cfgvendor_stop_mkeep_alive(struct wiphy *wiphy, struct wireless_de #endif /* KEEP_ALIVE */ #if defined(APF) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) +const struct nla_policy apf_atrribute_policy[APF_ATTRIBUTE_MAX] = { + [APF_ATTRIBUTE_VERSION] = { .type = NLA_U32 }, + [APF_ATTRIBUTE_MAX_LEN] = { .type = NLA_U32 }, + [APF_ATTRIBUTE_PROGRAM] = { .type = NLA_BINARY }, + [APF_ATTRIBUTE_PROGRAM_LEN] = { .type = NLA_U32 }, +}; +#endif /* LINUX_VERSION >= 5.3 */ + static int wl_cfgvendor_apf_get_capabilities(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, int len) @@ -9355,6 +9401,482 @@ exit: } #endif /* WL_SAR_TX_POWER */ +#ifdef WL_CUSTOM_MAPPING_OF_DSCP +#define UNUSED_PRIO 0xffu +enum andr_user_ac { + BEST_EFFORT = 0, + BACKGROUND = 1, + VIDEO = 2, + VOICE = 3 +}; +const uint8 default_dscp_mapping_table[UP_TABLE_MAX] = +{ + PRIO_8021D_BE, UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO, /* 00 ~ 03 */ + UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO, /* 04 ~ 07 */ + PRIO_8021D_BK, UNUSED_PRIO, PRIO_8021D_BE, UNUSED_PRIO, /* 08 ~ 11 */ + PRIO_8021D_BE, UNUSED_PRIO, PRIO_8021D_BE, UNUSED_PRIO, /* 12 ~ 15 */ + PRIO_8021D_BE, UNUSED_PRIO, PRIO_8021D_EE, UNUSED_PRIO, /* 16 ~ 19 */ + PRIO_8021D_EE, UNUSED_PRIO, PRIO_8021D_EE, UNUSED_PRIO, /* 20 ~ 23 */ + PRIO_8021D_CL, UNUSED_PRIO, PRIO_8021D_CL, UNUSED_PRIO, /* 24 ~ 27 */ + PRIO_8021D_CL, UNUSED_PRIO, PRIO_8021D_CL, UNUSED_PRIO, /* 28 ~ 31 */ + PRIO_8021D_CL, UNUSED_PRIO, PRIO_8021D_CL, UNUSED_PRIO, /* 32 ~ 35 */ + PRIO_8021D_CL, UNUSED_PRIO, PRIO_8021D_CL, UNUSED_PRIO, /* 36 ~ 39 */ + PRIO_8021D_VI, UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO, /* 40 ~ 43 */ + PRIO_8021D_VO, UNUSED_PRIO, PRIO_8021D_VO, UNUSED_PRIO, /* 44 ~ 47 */ + PRIO_8021D_NC, UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO, /* 48 ~ 51 */ + UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO, /* 52 ~ 55 */ + PRIO_8021D_NC, UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO, /* 56 ~ 59 */ + UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO, UNUSED_PRIO /* 60 ~ 63 */ +}; + +static uint8 custom_dscp2priomap[UP_TABLE_MAX]; + +static int +wl_set_dscp_deafult_priority(uint8* table) +{ + int err = BCME_ERROR; + + err = memcpy_s(table, UP_TABLE_MAX, default_dscp_mapping_table, + sizeof(default_dscp_mapping_table)); + if (unlikely(err)) { + WL_ERR(("Fail to set the defalut dscp.\n")); + } + return err; +} + +static int +wl_cfgvendor_custom_mapping_of_dscp(struct wiphy *wiphy, + struct wireless_dev *wdev, const void *data, int len) +{ + struct bcm_cfg80211 *cfg; + int err = BCME_OK, rem, type; + const struct nlattr *iter; + uint32 dscp_start = 0; + uint32 dscp_end = 0; + uint32 access_category = 0; + uint32 priority = 0; + uint32 dscp; + int32 def_dscp_pri; + + cfg = wl_cfg80211_get_bcmcfg(); + if (!cfg || !cfg->wdev) { + err = BCME_NOTUP; + goto exit; + } + if (!cfg->up_table) { + cfg->up_table = (uint8 *) custom_dscp2priomap; + } + + nla_for_each_attr(iter, data, len, rem) { + type = nla_type(iter); + if (type == CUSTOM_SETTING_ATTRIBUTE_DSCP_START) { + dscp_start = nla_get_u32(iter); + WL_INFORM(("got to dscp_stat value [%d]\n", dscp_start)); + if (dscp_start >= UP_TABLE_MAX) { + err = -EINVAL; + goto exit; + } + } else if (type == CUSTOM_SETTING_ATTRIBUTE_DSCP_END) { + dscp_end = nla_get_u32(iter); + WL_INFORM(("got to dscp_end value [%d]\n", dscp_end)); + if (dscp_end >= UP_TABLE_MAX) { + err = -EINVAL; + goto exit; + } + } else if (type == CUSTOM_SETTING_ATTRIBUTE_ACCESS_CATEGORY) { + access_category = nla_get_u32(iter); + WL_INFORM(("got to access_category value [%d]\n", access_category)); + switch (access_category) { + case BEST_EFFORT: + priority = PRIO_8021D_BE; + break; + case BACKGROUND: + priority = PRIO_8021D_BK; + break; + case VIDEO: + priority = PRIO_8021D_VI; + break; + case VOICE: + priority = PRIO_8021D_VO; + break; + default: + err = -EINVAL; + goto exit; + break; + } + } else { + WL_ERR(("Unknown attr type: %d\n", type)); + err = -EINVAL; + goto exit; + } + } + + if (dscp_end < dscp_start) { + WL_ERR(("dscp_end is lower than dscp_start.\n")); + return -EINVAL; + } + + /* Verify to set DSCP of user priority. */ + for (dscp = dscp_start; dscp <= dscp_end; dscp++) { + def_dscp_pri = default_dscp_mapping_table[dscp]; + if ((def_dscp_pri != 0xff) && (def_dscp_pri != priority)) { + err = -EINVAL; + WL_ERR(("Request priority is %d from %d to %d.\n", + priority, dscp_start, dscp_end)); + WL_ERR(("But conflict with defalut priority of DSCP %d and priority %d.\n", + dscp, def_dscp_pri)); + goto exit; + } + } + + /* Set the custom DSCP of user priority. */ + err = memset_s(cfg->up_table + dscp_start, UP_TABLE_MAX - dscp_start, priority, + dscp_end - dscp_start + 1); + if (unlikely(err)) { + WL_ERR(("Fail to set table\n")); + } + +exit: + return err; + +} + +static int +wl_cfgvendor_custom_mapping_of_dscp_reset(struct wiphy *wiphy, + struct wireless_dev *wdev, const void *data, int len) +{ + struct bcm_cfg80211 *cfg; + + cfg = wl_cfg80211_get_bcmcfg(); + if (!cfg || !cfg->wdev) { + return BCME_NOTUP; + } + + if (!cfg->up_table) { + WL_INFORM(("Custom table not set yet.\n")); + return BCME_NOTREADY; + } + + return wl_set_dscp_deafult_priority(cfg->up_table); +} +#endif /* WL_CUSTOM_MAPPING_OF_DSCP */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) +const struct nla_policy andr_wifi_attr_policy[ANDR_WIFI_ATTRIBUTE_MAX] = { + [ANDR_WIFI_ATTRIBUTE_NUM_FEATURE_SET] = { .type = NLA_U32 }, + [ANDR_WIFI_ATTRIBUTE_FEATURE_SET] = { .type = NLA_U32 }, + [ANDR_WIFI_ATTRIBUTE_RANDOM_MAC_OUI] = { .type = NLA_NUL_STRING, .len = 3 }, + [ANDR_WIFI_ATTRIBUTE_NODFS_SET] = { .type = NLA_U32 }, + [ANDR_WIFI_ATTRIBUTE_COUNTRY] = { .type = NLA_NUL_STRING, .len = 3 }, + [ANDR_WIFI_ATTRIBUTE_ND_OFFLOAD_VALUE] = { .type = NLA_U8 }, + [ANDR_WIFI_ATTRIBUTE_TCPACK_SUP_VALUE] = { .type = NLA_U32 }, + [ANDR_WIFI_ATTRIBUTE_LATENCY_MODE] = { .type = NLA_U32 }, + /* Dont see ANDR_WIFI_ATTRIBUTE_RANDOM_MAC being used currently */ + [ANDR_WIFI_ATTRIBUTE_RANDOM_MAC] = { .type = NLA_U32 }, + [ANDR_WIFI_ATTRIBUTE_TX_POWER_SCENARIO] = { .type = NLA_S8 }, + [ANDR_WIFI_ATTRIBUTE_THERMAL_MITIGATION] = { .type = NLA_S8 }, + [ANDR_WIFI_ATTRIBUTE_THERMAL_COMPLETION_WINDOW] = { .type = NLA_U32 }, +}; + +const struct nla_policy dump_buf_policy[DUMP_BUF_ATTR_MAX] = { + [DUMP_BUF_ATTR_MEMDUMP] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SSSR_C0_D11_BEFORE] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SSSR_C0_D11_AFTER] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SSSR_C1_D11_BEFORE] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SSSR_C1_D11_AFTER] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SSSR_C2_D11_BEFORE] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SSSR_C2_D11_AFTER] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SSSR_DIG_BEFORE] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SSSR_DIG_AFTER] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_TIMESTAMP] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_GENERAL_LOG] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_ECNTRS] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SPECIAL_LOG] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_DHD_DUMP] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_EXT_TRAP] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_HEALTH_CHK] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_PRESERVE_LOG] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_COOKIE] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_FLOWRING_DUMP] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_PKTLOG] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_PKTLOG_DEBUG] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_STATUS_LOG] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_AXI_ERROR] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_RTT_LOG] = { .type = NLA_BINARY }, + [DUMP_BUF_ATTR_SDTC_ETB_DUMP] = { .type = NLA_BINARY }, +}; + +const struct nla_policy andr_dbg_policy[DEBUG_ATTRIBUTE_MAX] = { + [DEBUG_ATTRIBUTE_GET_DRIVER] = { .type = NLA_BINARY }, + [DEBUG_ATTRIBUTE_GET_FW] = { .type = NLA_BINARY }, + [DEBUG_ATTRIBUTE_RING_ID] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_RING_NAME] = { .type = NLA_NUL_STRING }, + [DEBUG_ATTRIBUTE_RING_FLAGS] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_LOG_LEVEL] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_LOG_TIME_INTVAL] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_LOG_MIN_DATA_SIZE] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_FW_DUMP_LEN] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_FW_DUMP_DATA] = { .type = NLA_U64 }, + [DEBUG_ATTRIBUTE_FW_ERR_CODE] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_RING_DATA] = { .type = NLA_BINARY }, + [DEBUG_ATTRIBUTE_RING_STATUS] = { .type = NLA_BINARY }, + [DEBUG_ATTRIBUTE_RING_NUM] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_DRIVER_DUMP_LEN] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_DRIVER_DUMP_DATA] = { .type = NLA_BINARY }, + [DEBUG_ATTRIBUTE_PKT_FATE_NUM] = { .type = NLA_U32 }, + [DEBUG_ATTRIBUTE_PKT_FATE_DATA] = { .type = NLA_U64 }, + [DEBUG_ATTRIBUTE_HANG_REASON] = { .type = NLA_BINARY }, +}; + +const struct nla_policy brcm_drv_attr_policy[BRCM_ATTR_DRIVER_MAX] = { + [BRCM_ATTR_DRIVER_CMD] = { .type = NLA_NUL_STRING }, + [BRCM_ATTR_DRIVER_KEY_PMK] = { .type = NLA_BINARY, .len = WSEC_MAX_PASSPHRASE_LEN }, + [BRCM_ATTR_DRIVER_FEATURE_FLAGS] = { .type = NLA_BINARY, .len = + ((BRCM_WLAN_VENDOR_FEATURES_MAX / 8) + 1) }, + [BRCM_ATTR_DRIVER_RAND_MAC] = { .type = NLA_BINARY, .len = ETHER_ADDR_LEN }, + [BRCM_ATTR_SAE_PWE] = { .type = NLA_U32 }, +}; + +const struct nla_policy rtt_attr_policy[RTT_ATTRIBUTE_MAX] = { + [RTT_ATTRIBUTE_TARGET_CNT] = { .type = NLA_U8 }, + [RTT_ATTRIBUTE_TARGET_INFO] = { .type = NLA_NESTED }, + [RTT_ATTRIBUTE_TARGET_MAC] = { .type = NLA_BINARY, .len = ETHER_ADDR_LEN }, + [RTT_ATTRIBUTE_TARGET_TYPE] = { .type = NLA_U8 }, + [RTT_ATTRIBUTE_TARGET_PEER] = { .type = NLA_U8 }, + [RTT_ATTRIBUTE_TARGET_CHAN] = { .type = NLA_BINARY }, + [RTT_ATTRIBUTE_TARGET_PERIOD] = { .type = NLA_U32 }, + [RTT_ATTRIBUTE_TARGET_NUM_BURST] = { .type = NLA_U32 }, + [RTT_ATTRIBUTE_TARGET_NUM_FTM_BURST] = { .type = NLA_U32 }, + [RTT_ATTRIBUTE_TARGET_NUM_RETRY_FTM] = { .type = NLA_U32 }, + [RTT_ATTRIBUTE_TARGET_NUM_RETRY_FTMR] = { .type = NLA_U32 }, + [RTT_ATTRIBUTE_TARGET_LCI] = { .type = NLA_U8 }, + [RTT_ATTRIBUTE_TARGET_LCR] = { .type = NLA_U8 }, + [RTT_ATTRIBUTE_TARGET_BURST_DURATION] = { .type = NLA_U32 }, + [RTT_ATTRIBUTE_TARGET_PREAMBLE] = { .type = NLA_U8 }, + [RTT_ATTRIBUTE_TARGET_BW] = { .type = NLA_U8 }, + [RTT_ATTRIBUTE_RESULTS_COMPLETE] = { .type = NLA_U32 }, + [RTT_ATTRIBUTE_RESULTS_PER_TARGET] = { .type = NLA_NESTED }, + [RTT_ATTRIBUTE_RESULT_CNT] = { .type = NLA_U32 }, + [RTT_ATTRIBUTE_RESULT] = { .type = NLA_BINARY, .len = sizeof(rtt_result_t) }, + [RTT_ATTRIBUTE_RESULT_DETAIL] = { .type = NLA_BINARY, + .len = sizeof(struct rtt_result_detail) }, +}; + +#ifdef RSSI_MONITOR_SUPPORT +const struct nla_policy rssi_monitor_attr_policy[RSSI_MONITOR_ATTRIBUTE_MAX] = { + [RSSI_MONITOR_ATTRIBUTE_MAX_RSSI] = { .type = NLA_U32 }, + [RSSI_MONITOR_ATTRIBUTE_MIN_RSSI] = { .type = NLA_U32 }, + [RSSI_MONITOR_ATTRIBUTE_START] = { .type = NLA_U32 } +}; +#endif /* RSSI_MONITOR_SUPPORT */ + +#ifdef KEEP_ALIVE +const struct nla_policy mkeep_alive_attr_policy[MKEEP_ALIVE_ATTRIBUTE_MAX] = { + [MKEEP_ALIVE_ATTRIBUTE_ID] = { .type = NLA_U8 }, + [MKEEP_ALIVE_ATTRIBUTE_IP_PKT] = { .type = NLA_BINARY, .len = MKEEP_ALIVE_IP_PKT_MAX }, + [MKEEP_ALIVE_ATTRIBUTE_IP_PKT_LEN] = { .type = NLA_U16 }, + [MKEEP_ALIVE_ATTRIBUTE_SRC_MAC_ADDR] = { .type = NLA_BINARY, .len = ETHER_ADDR_LEN }, + [MKEEP_ALIVE_ATTRIBUTE_DST_MAC_ADDR] = { .type = NLA_BINARY, .len = ETHER_ADDR_LEN }, + [MKEEP_ALIVE_ATTRIBUTE_PERIOD_MSEC] = { .type = NLA_U32 }, + [MKEEP_ALIVE_ATTRIBUTE_ETHER_TYPE] = { .type = NLA_U16 } +}; +#endif /* KEEP_ALIVE */ +#ifdef WL_NAN +const struct nla_policy nan_attr_policy[NAN_ATTRIBUTE_MAX] = { + [NAN_ATTRIBUTE_2G_SUPPORT] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_5G_SUPPORT] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_CLUSTER_LOW] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_CLUSTER_HIGH] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_SID_BEACON] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SUB_SID_BEACON] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SYNC_DISC_2G_BEACON] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SYNC_DISC_5G_BEACON] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SDF_2G_SUPPORT] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SDF_5G_SUPPORT] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_HOP_COUNT_LIMIT] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RANDOM_TIME] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_MASTER_PREF] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_OUI] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_WARMUP_TIME] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_CHANNEL] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_24G_CHANNEL] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_5G_CHANNEL] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_CONF_CLUSTER_VAL] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_DWELL_TIME] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SCAN_PERIOD] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_DWELL_TIME_5G] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SCAN_PERIOD_5G] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_AVAIL_BIT_MAP] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_ENTRY_CONTROL] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RSSI_CLOSE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RSSI_MIDDLE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RSSI_PROXIMITY] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RSSI_CLOSE_5G] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RSSI_MIDDLE_5G] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RSSI_PROXIMITY_5G] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RSSI_WINDOW_SIZE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_CIPHER_SUITE_TYPE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SCID_LEN] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_SCID] = { .type = NLA_BINARY, .len = MAX_SCID_LEN }, + [NAN_ATTRIBUTE_2G_AWAKE_DW] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_5G_AWAKE_DW] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_DISC_IND_CFG] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_MAC_ADDR] = { .type = NLA_BINARY, .len = ETHER_ADDR_LEN }, + [NAN_ATTRIBUTE_RANDOMIZATION_INTERVAL] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_CMD_USE_NDPE] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_ENABLE_MERGE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_DISCOVERY_BEACON_INTERVAL] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_NSS] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_ENABLE_RANGING] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_DW_EARLY_TERM] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_TRANSAC_ID] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_PUBLISH_ID] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_SERVICE_SPECIFIC_INFO_LEN] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_SERVICE_SPECIFIC_INFO] = { .type = NLA_BINARY, .len = + NAN_MAX_SERVICE_SPECIFIC_INFO_LEN }, + [NAN_ATTRIBUTE_SUBSCRIBE_ID] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_SUBSCRIBE_TYPE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_PUBLISH_COUNT] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_PUBLISH_TYPE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_PERIOD] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_TTL] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_SERVICE_NAME_LEN] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_SERVICE_NAME] = { .type = NLA_BINARY, .len = WL_NAN_SVC_HASH_LEN }, + [NAN_ATTRIBUTE_PEER_ID] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_INST_ID] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_SUBSCRIBE_COUNT] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SSIREQUIREDFORMATCHINDICATION] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SUBSCRIBE_MATCH] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_PUBLISH_MATCH] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SERVICERESPONSEFILTER] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SERVICERESPONSEINCLUDE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_USESERVICERESPONSEFILTER] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RX_MATCH_FILTER_LEN] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_RX_MATCH_FILTER] = { .type = NLA_BINARY, .len = MAX_MATCH_FILTER_LEN }, + [NAN_ATTRIBUTE_TX_MATCH_FILTER_LEN] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_TX_MATCH_FILTER] = { .type = NLA_BINARY, .len = MAX_MATCH_FILTER_LEN }, + [NAN_ATTRIBUTE_MAC_ADDR_LIST_NUM_ENTRIES] = { .type = NLA_U16, .len = sizeof(uint16) }, + [NAN_ATTRIBUTE_MAC_ADDR_LIST] = { .type = NLA_BINARY, .len = + (NAN_SRF_MAX_MAC*ETHER_ADDR_LEN) }, + [NAN_ATTRIBUTE_TX_TYPE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SDE_CONTROL_CONFIG_DP] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SDE_CONTROL_RANGE_SUPPORT] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SDE_CONTROL_DP_TYPE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SDE_CONTROL_SECURITY] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RECV_IND_CFG] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_KEY_TYPE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_KEY_LEN] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_KEY_DATA] = { .type = NLA_BINARY, .len = NAN_MAX_PMK_LEN }, + [NAN_ATTRIBUTE_RSSI_THRESHOLD_FLAG] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_SDEA_SERVICE_SPECIFIC_INFO_LEN] = { .type = NLA_U16, .len = + sizeof(uint16) }, + [NAN_ATTRIBUTE_SDEA_SERVICE_SPECIFIC_INFO] = { .type = NLA_BINARY, .len = + MAX_SDEA_SVC_INFO_LEN }, + [NAN_ATTRIBUTE_SECURITY] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RANGING_INTERVAL] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_RANGING_INGRESS_LIMIT] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_RANGING_EGRESS_LIMIT] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_RANGING_INDICATION] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_SVC_RESPONDER_POLICY] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_NDP_ID] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_IFACE] = { .type = NLA_BINARY, .len = IFNAMSIZ+1 }, + [NAN_ATTRIBUTE_QOS] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_RSP_CODE] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_INST_COUNT] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_PEER_DISC_MAC_ADDR] = { .type = NLA_BINARY, .len = ETHER_ADDR_LEN }, + [NAN_ATTRIBUTE_PEER_NDI_MAC_ADDR] = { .type = NLA_BINARY, .len = ETHER_ADDR_LEN }, + [NAN_ATTRIBUTE_IF_ADDR] = { .type = NLA_BINARY, .len = ETHER_ADDR_LEN }, + [NAN_ATTRIBUTE_ENTRY_CONTROL] = { .type = NLA_U8, .len = sizeof(uint8) }, + [NAN_ATTRIBUTE_AVAIL_BIT_MAP] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_CHANNEL] = { .type = NLA_U32, .len = sizeof(uint32) }, + [NAN_ATTRIBUTE_NO_CONFIG_AVAIL] = { .type = NLA_U8, .len = sizeof(uint8) }, +}; +#endif /* WL_NAN */ + +const struct nla_policy gscan_attr_policy[GSCAN_ATTRIBUTE_MAX] = { + [GSCAN_ATTRIBUTE_BAND] = { .type = NLA_U32 }, + [GSCAN_ATTRIBUTE_NUM_CHANNELS] = { .type = NLA_U32 }, + [GSCAN_ATTRIBUTE_CHANNEL_LIST] = { .type = NLA_BINARY }, + [GSCAN_ATTRIBUTE_WHITELIST_SSID] = { .type = NLA_BINARY, .len = IEEE80211_MAX_SSID_LEN }, + [GSCAN_ATTRIBUTE_NUM_WL_SSID] = { .type = NLA_U32 }, + [GSCAN_ATTRIBUTE_WL_SSID_LEN] = { .type = NLA_U32 }, + [GSCAN_ATTRIBUTE_WL_SSID_FLUSH] = { .type = NLA_U32 }, + [GSCAN_ATTRIBUTE_WHITELIST_SSID_ELEM] = { .type = NLA_NESTED }, + /* length is sizeof(wl_ssid_whitelist_t) * MAX_SSID_WHITELIST_NUM */ + [GSCAN_ATTRIBUTE_NUM_BSSID] = { .type = NLA_U32 }, + [GSCAN_ATTRIBUTE_BSSID_PREF_LIST] = { .type = NLA_NESTED }, + /* length is sizeof(wl_bssid_pref_list_t) * MAX_BSSID_PREF_LIST_NUM */ + [GSCAN_ATTRIBUTE_BSSID_PREF_FLUSH] = { .type = NLA_U32 }, + [GSCAN_ATTRIBUTE_BSSID_PREF] = { .type = NLA_BINARY, .len = ETH_ALEN }, + [GSCAN_ATTRIBUTE_RSSI_MODIFIER] = { .type = NLA_U32 }, + [GSCAN_ATTRIBUTE_BSSID_BLACKLIST_FLUSH] = { .type = NLA_U32 }, + [GSCAN_ATTRIBUTE_BLACKLIST_BSSID] = { .type = NLA_BINARY, .len = ETH_ALEN }, + [GSCAN_ATTRIBUTE_ROAM_STATE_SET] = { .type = NLA_U32 }, +}; + +const struct nla_policy wake_stat_attr_policy[WAKE_STAT_ATTRIBUTE_MAX] = { + [WAKE_STAT_ATTRIBUTE_TOTAL_CMD_EVENT] = { .type = NLA_U32 }, +#ifdef CUSTOM_WAKE_REASON_STATS + [WAKE_STAT_ATTRIBUTE_CMD_EVENT_WAKE] = { .type = NLA_BINARY, + .len = (MAX_WAKE_REASON_STATS * sizeof(int))}, +#else + [WAKE_STAT_ATTRIBUTE_CMD_EVENT_WAKE] = { .type = NLA_BINARY, + .len = (WLC_E_LAST * sizeof(uint))}, +#endif /* CUSTOM_WAKE_REASON_STATS */ + [WAKE_STAT_ATTRIBUTE_CMD_EVENT_COUNT] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_CMD_EVENT_COUNT_USED] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_TOTAL_DRIVER_FW] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_DRIVER_FW_WAKE] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_DRIVER_FW_COUNT] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_DRIVER_FW_COUNT_USED] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_TOTAL_RX_DATA_WAKE] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_RX_UNICAST_COUNT] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_RX_MULTICAST_COUNT] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_RX_BROADCAST_COUNT] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_RX_ICMP_PKT] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_RX_ICMP6_PKT] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_RX_ICMP6_RA] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_RX_ICMP6_NA] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_RX_ICMP6_NS] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_IPV4_RX_MULTICAST_ADD_CNT] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_IPV6_RX_MULTICAST_ADD_CNT] = { .type = NLA_U32 }, + [WAKE_STAT_ATTRIBUTE_OTHER_RX_MULTICAST_ADD_CNT] = { .type = NLA_U32 }, +}; + +#ifdef WL_SOFTAP_ACS +const struct nla_policy acs_attr_policy[BRCM_VENDOR_ATTR_ACS_LAST] = { + [BRCM_VENDOR_ATTR_ACS_CHANNEL_INVALID] = { .type = NLA_U8 }, + [BRCM_VENDOR_ATTR_ACS_PRIMARY_FREQ] = { .type = NLA_U32 }, + [BRCM_VENDOR_ATTR_ACS_SECONDARY_FREQ] = { .type = NLA_U32 }, + [BRCM_VENDOR_ATTR_ACS_VHT_SEG0_CENTER_CHANNEL] = { .type = NLA_U8 }, + [BRCM_VENDOR_ATTR_ACS_VHT_SEG1_CENTER_CHANNEL] = { .type = NLA_U8 }, + [BRCM_VENDOR_ATTR_ACS_HW_MODE] = { .type = NLA_U8 }, + [BRCM_VENDOR_ATTR_ACS_HT_ENABLED] = { .type = NLA_U8 }, + [BRCM_VENDOR_ATTR_ACS_HT40_ENABLED] = { .type = NLA_U8 }, + [BRCM_VENDOR_ATTR_ACS_VHT_ENABLED] = { .type = NLA_U8 }, + [BRCM_VENDOR_ATTR_ACS_CHWIDTH] = { .type = NLA_U16 }, + [BRCM_VENDOR_ATTR_ACS_CH_LIST] = { .type = NLA_BINARY }, + [BRCM_VENDOR_ATTR_ACS_FREQ_LIST] = { .type = NLA_BINARY }, +}; +#endif /* WL_SOFTAP_ACS */ + +const struct nla_policy hal_start_attr_policy[SET_HAL_START_ATTRIBUTE_MAX] = { + [0] = { .strict_start_type = 0 }, + [SET_HAL_START_ATTRIBUTE_DEINIT] = { .type = NLA_UNSPEC }, + [SET_HAL_START_ATTRIBUTE_PRE_INIT] = { .type = NLA_NUL_STRING }, + [SET_HAL_START_ATTRIBUTE_EVENT_SOCK_PID] = { .type = NLA_U32 }, +}; + +#ifdef WL_CUSTOM_MAPPING_OF_DSCP +const struct nla_policy custom_setting_attr_policy[CUSTOM_SETTING_ATTRIBUTE_MAX] = { + [CUSTOM_SETTING_ATTRIBUTE_DSCP_START] = { .type = NLA_U32 }, + [CUSTOM_SETTING_ATTRIBUTE_DSCP_END] = { .type = NLA_U32 }, + [CUSTOM_SETTING_ATTRIBUTE_ACCESS_CATEGORY] = { .type = NLA_U32 }, +}; +#endif /* WL_CUSTOM_MAPPING_OF_DSCP */ + +#endif /* LINUX_VERSION >= 5.3 */ + static struct wiphy_vendor_command wl_vendor_cmds [] = { { { @@ -9362,7 +9884,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = BRCM_VENDOR_SCMD_PRIV_STR }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_priv_string_handler + .doit = wl_cfgvendor_priv_string_handler, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = brcm_drv_attr_policy, + .maxattr = BRCM_ATTR_DRIVER_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #ifdef BCM_PRIV_CMD_SUPPORT { @@ -9371,7 +9897,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = BRCM_VENDOR_SCMD_BCM_STR }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_priv_bcm_handler + .doit = wl_cfgvendor_priv_bcm_handler, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = brcm_drv_attr_policy, + .maxattr = BRCM_ATTR_DRIVER_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* BCM_PRIV_CMD_SUPPORT */ #if defined(WL_SAE) || defined(WL_CLIENT_SAE) @@ -9390,7 +9920,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = BRCM_VENDOR_SCMD_SET_CONNECT_PARAMS }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_connect_params_handler + .doit = wl_cfgvendor_connect_params_handler, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = brcm_drv_attr_policy, + .maxattr = BRCM_ATTR_DRIVER_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9398,7 +9932,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = BRCM_VENDOR_SCMD_SET_START_AP_PARAMS }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_start_ap_params_handler + .doit = wl_cfgvendor_start_ap_params_handler, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = brcm_drv_attr_policy, + .maxattr = BRCM_ATTR_DRIVER_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #ifdef GSCAN_SUPPORT { @@ -9465,7 +10003,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = GSCAN_SUBCMD_GET_CHANNEL_LIST }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_gscan_get_channel_list + .doit = wl_cfgvendor_gscan_get_channel_list, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = gscan_attr_policy, + .maxattr = GSCAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* GSCAN_SUPPORT || DHD_GET_VALID_CHANNELS */ #ifdef RTT_SUPPORT @@ -9475,7 +10017,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = RTT_SUBCMD_SET_CONFIG }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_rtt_set_config + .doit = wl_cfgvendor_rtt_set_config, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = rtt_attr_policy, + .maxattr = RTT_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9483,7 +10029,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = RTT_SUBCMD_CANCEL_CONFIG }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_rtt_cancel_config + .doit = wl_cfgvendor_rtt_cancel_config, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = rtt_attr_policy, + .maxattr = RTT_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9491,7 +10041,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = RTT_SUBCMD_GETCAPABILITY }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_rtt_get_capability + .doit = wl_cfgvendor_rtt_get_capability, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = rtt_attr_policy, + .maxattr = RTT_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9499,7 +10053,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = RTT_SUBCMD_GETAVAILCHANNEL }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_rtt_get_responder_info + .doit = wl_cfgvendor_rtt_get_responder_info, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = rtt_attr_policy, + .maxattr = RTT_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9507,7 +10065,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = RTT_SUBCMD_SET_RESPONDER }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_rtt_set_responder + .doit = wl_cfgvendor_rtt_set_responder, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = rtt_attr_policy, + .maxattr = RTT_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9515,7 +10077,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = RTT_SUBCMD_CANCEL_RESPONDER }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_rtt_cancel_responder + .doit = wl_cfgvendor_rtt_cancel_responder, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = rtt_attr_policy, + .maxattr = RTT_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* RTT_SUPPORT */ { @@ -9524,7 +10090,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = ANDR_WIFI_SUBCMD_GET_FEATURE_SET }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_get_feature_set + .doit = wl_cfgvendor_get_feature_set, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_wifi_attr_policy, + .maxattr = ANDR_WIFI_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9532,7 +10102,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = ANDR_WIFI_SUBCMD_GET_FEATURE_SET_MATRIX }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_get_feature_set_matrix + .doit = wl_cfgvendor_get_feature_set_matrix, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_wifi_attr_policy, + .maxattr = ANDR_WIFI_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9540,7 +10114,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = ANDR_WIFI_RANDOM_MAC_OUI }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_rand_mac_oui + .doit = wl_cfgvendor_set_rand_mac_oui, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_wifi_attr_policy, + .maxattr = ANDR_WIFI_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #ifdef CUSTOM_FORCE_NODFS_FLAG { @@ -9549,7 +10127,12 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = ANDR_WIFI_NODFS_CHANNELS }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_nodfs_flag + .doit = wl_cfgvendor_set_nodfs_flag, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_wifi_attr_policy, + .maxattr = ANDR_WIFI_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ + }, #endif /* CUSTOM_FORCE_NODFS_FLAG */ { @@ -9558,7 +10141,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = ANDR_WIFI_SET_COUNTRY }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_country + .doit = wl_cfgvendor_set_country, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_wifi_attr_policy, + .maxattr = ANDR_WIFI_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #ifdef LINKSTAT_SUPPORT { @@ -9616,7 +10203,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_SUBCMD_SET_SSID_WHITELIST }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_ssid_whitelist + .doit = wl_cfgvendor_set_ssid_whitelist, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = gscan_attr_policy, + .maxattr = GSCAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { @@ -9625,7 +10216,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_SUBCMD_SET_BSSID_BLACKLIST }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_bssid_blacklist + .doit = wl_cfgvendor_set_bssid_blacklist, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = gscan_attr_policy, + .maxattr = GSCAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* GSCAN_SUPPORT || ROAMEXP_SUPPORT */ #ifdef ROAMEXP_SUPPORT @@ -9635,7 +10230,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_SUBCMD_FW_ROAM_POLICY }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_fw_roaming_state + .doit = wl_cfgvendor_set_fw_roaming_state, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = gscan_attr_policy, + .maxattr = GSCAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9652,7 +10251,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_GET_VER }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_dbg_get_version + .doit = wl_cfgvendor_dbg_get_version, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_dbg_policy, + .maxattr = DEBUG_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #ifdef DHD_LOG_DUMP { @@ -9661,7 +10264,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_GET_FILE_DUMP_BUF }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_dbg_file_dump + .doit = wl_cfgvendor_dbg_file_dump, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = dump_buf_policy, + .maxattr = DUMP_BUF_ATTR_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* DHD_LOG_DUMP */ @@ -9680,7 +10287,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_GET_MEM_DUMP }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_dbg_get_mem_dump + .doit = wl_cfgvendor_dbg_get_mem_dump, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_dbg_policy, + .maxattr = DEBUG_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9688,7 +10299,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_START_LOGGING }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_dbg_start_logging + .doit = wl_cfgvendor_dbg_start_logging, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_dbg_policy, + .maxattr = DEBUG_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9704,7 +10319,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_GET_RING_STATUS }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_dbg_get_ring_status + .doit = wl_cfgvendor_dbg_get_ring_status, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_dbg_policy, + .maxattr = DEBUG_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9712,7 +10331,12 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_GET_RING_DATA }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_dbg_get_ring_data + .doit = wl_cfgvendor_dbg_get_ring_data, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_dbg_policy, + .maxattr = DEBUG_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ + }, #endif /* DEBUGABILITY */ { @@ -9738,7 +10362,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_GET_TX_PKT_FATES }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_dbg_get_tx_pkt_fates + .doit = wl_cfgvendor_dbg_get_tx_pkt_fates, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_dbg_policy, + .maxattr = DEBUG_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9746,7 +10374,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_GET_RX_PKT_FATES }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_dbg_get_rx_pkt_fates + .doit = wl_cfgvendor_dbg_get_rx_pkt_fates, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_dbg_policy, + .maxattr = DEBUG_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* DBG_PKT_MON */ #ifdef KEEP_ALIVE @@ -9756,7 +10388,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_OFFLOAD_SUBCMD_START_MKEEP_ALIVE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_start_mkeep_alive + .doit = wl_cfgvendor_start_mkeep_alive, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = mkeep_alive_attr_policy, + .maxattr = MKEEP_ALIVE_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9764,7 +10400,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_OFFLOAD_SUBCMD_STOP_MKEEP_ALIVE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_stop_mkeep_alive + .doit = wl_cfgvendor_stop_mkeep_alive, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = mkeep_alive_attr_policy, + .maxattr = MKEEP_ALIVE_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* KEEP_ALIVE */ #ifdef WL_NAN @@ -9774,7 +10414,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_ENABLE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_start_handler + .doit = wl_cfgvendor_nan_start_handler, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9782,7 +10426,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_DISABLE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_stop_handler + .doit = wl_cfgvendor_nan_stop_handler, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9790,7 +10438,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_CONFIG }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_config_handler + .doit = wl_cfgvendor_nan_config_handler, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9798,7 +10450,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_REQUEST_PUBLISH }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_req_publish + .doit = wl_cfgvendor_nan_req_publish, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9806,7 +10462,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_REQUEST_SUBSCRIBE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_req_subscribe + .doit = wl_cfgvendor_nan_req_subscribe, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9814,7 +10474,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_CANCEL_PUBLISH }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_cancel_publish + .doit = wl_cfgvendor_nan_cancel_publish, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9822,7 +10486,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_CANCEL_SUBSCRIBE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_cancel_subscribe + .doit = wl_cfgvendor_nan_cancel_subscribe, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9830,7 +10498,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_TRANSMIT }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_transmit + .doit = wl_cfgvendor_nan_transmit, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9847,7 +10519,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_DATA_PATH_IFACE_CREATE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_data_path_iface_create + .doit = wl_cfgvendor_nan_data_path_iface_create, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9855,7 +10531,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_DATA_PATH_IFACE_DELETE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_data_path_iface_delete + .doit = wl_cfgvendor_nan_data_path_iface_delete, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9863,7 +10543,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_DATA_PATH_REQUEST }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_data_path_request + .doit = wl_cfgvendor_nan_data_path_request, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9871,7 +10555,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_DATA_PATH_RESPONSE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_data_path_response + .doit = wl_cfgvendor_nan_data_path_response, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9879,7 +10567,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_DATA_PATH_END }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_data_path_end + .doit = wl_cfgvendor_nan_data_path_end, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #ifdef WL_NAN_DISC_CACHE { @@ -9888,7 +10580,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_DATA_PATH_SEC_INFO }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_data_path_sec_info + .doit = wl_cfgvendor_nan_data_path_sec_info, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* WL_NAN_DISC_CACHE */ { @@ -9905,7 +10601,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = NAN_WIFI_SUBCMD_ENABLE_MERGE }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_nan_enable_merge + .doit = wl_cfgvendor_nan_enable_merge, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = nan_attr_policy, + .maxattr = NAN_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* WL_NAN */ #if defined(APF) @@ -9915,16 +10615,23 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = APF_SUBCMD_GET_CAPABILITIES }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_apf_get_capabilities + .doit = wl_cfgvendor_apf_get_capabilities, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = apf_atrribute_policy, + .maxattr = APF_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, - { { .vendor_id = OUI_GOOGLE, .subcmd = APF_SUBCMD_SET_FILTER }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_apf_set_filter + .doit = wl_cfgvendor_apf_set_filter, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = apf_atrribute_policy, + .maxattr = APF_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -9932,7 +10639,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = APF_SUBCMD_READ_FILTER_DATA }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_apf_read_filter_data + .doit = wl_cfgvendor_apf_read_filter_data, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = apf_atrribute_policy, + .maxattr = APF_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* APF */ #ifdef NDO_CONFIG_SUPPORT @@ -9942,7 +10653,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_SUBCMD_CONFIG_ND_OFFLOAD }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_configure_nd_offload + .doit = wl_cfgvendor_configure_nd_offload, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_wifi_attr_policy, + .maxattr = ANDR_WIFI_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* NDO_CONFIG_SUPPORT */ #ifdef RSSI_MONITOR_SUPPORT @@ -9952,7 +10667,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_SUBCMD_SET_RSSI_MONITOR }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_rssi_monitor + .doit = wl_cfgvendor_set_rssi_monitor, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = rssi_monitor_attr_policy, + .maxattr = RSSI_MONITOR_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* RSSI_MONITOR_SUPPORT */ #ifdef DHD_WAKE_STATUS @@ -9962,7 +10681,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_GET_WAKE_REASON_STATS }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_get_wake_reason_stats + .doit = wl_cfgvendor_get_wake_reason_stats, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = wake_stat_attr_policy, + .maxattr = WAKE_STAT_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* DHD_WAKE_STATUS */ #ifdef DHDTCPACK_SUPPRESS @@ -9972,7 +10695,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_SUBCMD_CONFIG_TCPACK_SUP }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_tcpack_sup_mode + .doit = wl_cfgvendor_set_tcpack_sup_mode, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_wifi_attr_policy, + .maxattr = ANDR_WIFI_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* DHDTCPACK_SUPPRESS */ #if !defined(BCMSUP_4WAY_HANDSHAKE) || (LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)) @@ -9982,7 +10709,12 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = BRCM_VENDOR_SCMD_SET_PMK }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_pmk + .doit = wl_cfgvendor_set_pmk, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = brcm_drv_attr_policy, + .maxattr = BRCM_ATTR_DRIVER_MAX +#endif /* LINUX_VERSION >= 5.3 */ + }, #endif /* !BCMSUP_4WAY_HANDSHAKE || LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) */ { @@ -9991,7 +10723,12 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = BRCM_VENDOR_SCMD_GET_FEATURES }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_get_driver_feature + .doit = wl_cfgvendor_get_driver_feature, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = brcm_drv_attr_policy, + .maxattr = BRCM_ATTR_DRIVER_MAX +#endif /* LINUX_VERSION >= 5.3 */ + }, #if defined(WL_CFG80211) && defined(DHD_FILE_DUMP_EVENT) { @@ -10010,7 +10747,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_SET_HAL_START }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_hal_started + .doit = wl_cfgvendor_set_hal_started, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = hal_start_attr_policy, + .maxattr = SET_HAL_START_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, { { @@ -10026,7 +10767,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = DEBUG_SET_HAL_PID }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_set_hal_pid + .doit = wl_cfgvendor_set_hal_pid, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = hal_start_attr_policy, + .maxattr = SET_HAL_START_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* WL_CFG80211 */ #ifdef WL_P2P_RAND @@ -10036,7 +10781,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = BRCM_VENDOR_SCMD_SET_MAC }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV, - .doit = wl_cfgvendor_set_p2p_rand_mac + .doit = wl_cfgvendor_set_p2p_rand_mac, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = brcm_drv_attr_policy, + .maxattr = BRCM_ATTR_DRIVER_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* WL_P2P_RAND */ #ifdef WL_THERMAL_MITIGATION @@ -10046,7 +10795,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_SUBCMD_THERMAL_MITIGATION }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgvendor_thermal_mitigation + .doit = wl_cfgvendor_thermal_mitigation, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_wifi_attr_policy, + .maxattr = ANDR_WIFI_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* WL_THERMAL_MITIGATION */ #ifdef WL_SAR_TX_POWER @@ -10056,7 +10809,11 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = WIFI_SUBCMD_TX_POWER_SCENARIO }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV, - .doit = wl_cfgvendor_tx_power_scenario + .doit = wl_cfgvendor_tx_power_scenario, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = andr_wifi_attr_policy, + .maxattr = ANDR_WIFI_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* WL_SAR_TX_POWER */ #ifdef WL_SOFTAP_ACS @@ -10066,9 +10823,39 @@ static struct wiphy_vendor_command wl_vendor_cmds [] = { .subcmd = BRCM_VENDOR_SCMD_ACS }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wl_cfgscan_acs + .doit = wl_cfgscan_acs, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = acs_attr_policy, + .maxattr = BRCM_VENDOR_ATTR_ACS_LAST +#endif /* LINUX_VERSION >= 5.3 */ }, #endif /* WL_SOFTAP_ACS */ +#ifdef WL_CUSTOM_MAPPING_OF_DSCP + { + { + .vendor_id = OUI_GOOGLE, + .subcmd = WIFI_SUBCMD_CUSTOM_MAPPING_OF_DSCP + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV, + .doit = wl_cfgvendor_custom_mapping_of_dscp, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = custom_setting_attr_policy, + .maxattr = CUSTOM_SETTING_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ + }, + { + { + .vendor_id = OUI_GOOGLE, + .subcmd = WIFI_SUBCMD_CUSTOM_MAPPING_OF_DSCP_RESET + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV, + .doit = wl_cfgvendor_custom_mapping_of_dscp_reset, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + .policy = custom_setting_attr_policy, + .maxattr = CUSTOM_SETTING_ATTRIBUTE_MAX +#endif /* LINUX_VERSION >= 5.3 */ + }, +#endif /* WL_CUSTOM_MAPPING_OF_DSCP */ }; static const struct nl80211_vendor_cmd_info wl_vendor_events [] = { @@ -10114,7 +10901,8 @@ static const struct nl80211_vendor_cmd_info wl_vendor_events [] = { { OUI_BRCM, BRCM_VENDOR_EVENT_WIPS}, { OUI_GOOGLE, NAN_ASYNC_RESPONSE_DISABLED}, { OUI_BRCM, BRCM_VENDOR_EVENT_RCC_INFO}, - { OUI_BRCM, BRCM_VENDOR_EVENT_ACS} + { OUI_BRCM, BRCM_VENDOR_EVENT_ACS}, + { OUI_BRCM, BRCM_VENDOR_EVENT_TWT} }; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) @@ -10126,7 +10914,9 @@ wl_cfgvendor_apply_cmd_policy(struct wiphy *wiphy) WL_INFORM(("Apply CMD_RAW_DATA policy\n")); for (i = 0; i < n_cmds; i++) { - wl_vendor_cmds[i].policy = VENDOR_CMD_RAW_DATA; + if (wl_vendor_cmds[i].policy == NULL) { + wl_vendor_cmds[i].policy = VENDOR_CMD_RAW_DATA; + } } } #endif /* LINUX VER >= 5.3 */ @@ -10158,6 +10948,9 @@ int wl_cfgvendor_attach(struct wiphy *wiphy, dhd_pub_t *dhd) #ifdef DHD_LOG_DUMP dhd_os_dbg_register_urgent_notifier(dhd, wl_cfgvendor_dbg_send_file_dump_evt); #endif /* DHD_LOG_DUMP */ +#ifdef WL_CUSTOM_MAPPING_OF_DSCP + (void)wl_set_dscp_deafult_priority(custom_dscp2priomap); +#endif return 0; } |