From 2c0cc5f4bc534765aff4a27b2160b302d30006a1 Mon Sep 17 00:00:00 2001 From: Sourav Mohapatra Date: Thu, 13 Feb 2020 15:22:34 +0530 Subject: [PATCH] qcacld-3.0: Add policy attribute to hdd_wiphy_vendor_commands According to new changes in kernel 5.4 version onwards, driver has to provide the policy for a NL command to ve verified against while registering wiphy to the kernel. To accommodate these changes, add policy for all the following vendor commands that are being registered in the driver QCA_NL80211_VENDOR_SUBCMD_GET_SUPPORTED_FEATURES QCA_NL80211_VENDOR_SUBCMD_GET_FEATURES QCA_NL80211_VENDOR_SUBCMD_GET_LOGGER_FEATURE_SET QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_INFO QCA_NL80211_VENDOR_SUBCMD_GET_BUS_SIZE QCA_NL80211_VENDOR_SUBCMD_NO_DFS_FLAG QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET QCA_NL80211_VENDOR_SUBCMD_SET_WIFI_CONFIGURATION QCA_NL80211_VENDOR_SUBCMD_NAN_EXT QCA_NL80211_VENDOR_SUBCMD_NDP QCA_NL80211_VENDOR_SUBCMD_SCANNING_MAC_OUI QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_START QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET QCA_NL80211_VENDOR_SUBCMD_ROAM QCA_NL80211_VENDOR_SUBCMD_PACKET_FILTER QCA_NL80211_VENDOR_SUBCMD_ND_OFFLOAD QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_SET_KEY QCA_NL80211_VENDOR_SUBCMD_GET_RING_DATA QCA_NL80211_VENDOR_SUBCMD_TRIGGER_SCAN Change-Id: I714c8b21a95144f7ed8ff4c6e038782e469edf3d CRs-Fixed: 2621308 --- core/hdd/inc/wlan_hdd_apf.h | 21 +++- core/hdd/inc/wlan_hdd_nan.h | 10 +- core/hdd/src/wlan_hdd_apf.c | 3 +- core/hdd/src/wlan_hdd_cfg80211.c | 172 ++++++++++++-------------- core/hdd/src/wlan_hdd_cfg80211.h | 36 ++++++ core/hdd/src/wlan_hdd_scan.c | 6 +- core/hdd/src/wlan_hdd_scan.h | 16 +++ core/hdd/src/wlan_hdd_stats.c | 18 ++- core/hdd/src/wlan_hdd_stats.h | 36 ++++++ core/hdd/src/wlan_hdd_subnet_detect.c | 12 +- core/hdd/src/wlan_hdd_subnet_detect.h | 18 ++- os_if/nan/inc/os_if_nan.h | 11 +- os_if/nan/src/os_if_nan.c | 8 +- 13 files changed, 245 insertions(+), 122 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_apf.h b/core/hdd/inc/wlan_hdd_apf.h index 377552106e95..fa8873bcb67e 100644 --- a/core/hdd/inc/wlan_hdd_apf.h +++ b/core/hdd/inc/wlan_hdd_apf.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -37,6 +37,7 @@ #include "sir_api.h" #include "wlan_hdd_main.h" #include "wmi_unified_param.h" +#include "qca_vendor.h" #define APF_CONTEXT_MAGIC 0x4575354 @@ -45,6 +46,22 @@ /* APF commands wait times in msec */ #define WLAN_WAIT_TIME_APF_READ_MEM 10000 +/* QCA_NL80211_VENDOR_PACKET_FILTER policy */ +extern const struct nla_policy wlan_hdd_apf_offload_policy[ + QCA_WLAN_VENDOR_ATTR_PACKET_FILTER_MAX + 1]; + +#define FEATURE_APF_OFFLOAD_VENDOR_COMMANDS \ + { \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_PACKET_FILTER, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_apf_offload, \ + vendor_command_policy(wlan_hdd_apf_offload_policy, \ + QCA_WLAN_VENDOR_ATTR_PACKET_FILTER_MAX) \ + }, + /** * wlan_hdd_cfg80211_apf_offload() - SSR Wrapper to APF Offload * @wiphy: wiphy structure pointer @@ -90,6 +107,8 @@ void hdd_get_apf_capabilities_cb(void *hdd_context, struct sir_apf_get_offload *data); #else /* FEATURE_WLAN_APF */ +#define FEATURE_APF_OFFLOAD_VENDOR_COMMANDS + static inline void hdd_apf_context_init(struct hdd_adapter *adapter) { } diff --git a/core/hdd/inc/wlan_hdd_nan.h b/core/hdd/inc/wlan_hdd_nan.h index e49e15f1cb56..d83b6c822c10 100644 --- a/core/hdd/inc/wlan_hdd_nan.h +++ b/core/hdd/inc/wlan_hdd_nan.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2020 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -82,7 +82,9 @@ int wlan_hdd_cfg80211_nan_ext_request(struct wiphy *wiphy, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ WIPHY_VENDOR_CMD_NEED_NETDEV | \ WIPHY_VENDOR_CMD_NEED_RUNNING, \ - .doit = wlan_hdd_cfg80211_nan_ext_request \ + .doit = wlan_hdd_cfg80211_nan_ext_request, \ + vendor_command_policy(nan_attr_policy, \ + QCA_WLAN_VENDOR_ATTR_NAN_PARAMS_MAX) \ }, \ { \ .info.vendor_id = QCA_NL80211_VENDOR_ID, \ @@ -90,7 +92,9 @@ int wlan_hdd_cfg80211_nan_ext_request(struct wiphy *wiphy, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ WIPHY_VENDOR_CMD_NEED_NETDEV | \ WIPHY_VENDOR_CMD_NEED_RUNNING, \ - .doit = wlan_hdd_cfg80211_process_ndp_cmd \ + .doit = wlan_hdd_cfg80211_process_ndp_cmd, \ + vendor_command_policy(vendor_attr_policy, \ + QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX) \ }, #else /* WLAN_FEATURE_NAN */ #define FEATURE_NAN_VENDOR_COMMANDS diff --git a/core/hdd/src/wlan_hdd_apf.c b/core/hdd/src/wlan_hdd_apf.c index 15302a184e92..ffc3259ba752 100644 --- a/core/hdd/src/wlan_hdd_apf.c +++ b/core/hdd/src/wlan_hdd_apf.c @@ -50,8 +50,7 @@ #define APF_MAX \ QCA_WLAN_VENDOR_ATTR_PACKET_FILTER_MAX -static const struct nla_policy -wlan_hdd_apf_offload_policy[APF_MAX + 1] = { +const struct nla_policy wlan_hdd_apf_offload_policy[APF_MAX + 1] = { [APF_SUBCMD] = {.type = NLA_U32}, [APF_VERSION] = {.type = NLA_U32}, [APF_FILTER_ID] = {.type = NLA_U32}, diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index d50ca20db399..5cd4ab38e2b6 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -147,6 +147,8 @@ #include "wlan_hdd_thermal.h" #include #include "wlan_hdd_btc_chain_mode.h" +#include "os_if_nan.h" +#include "wlan_hdd_apf.h" #define g_mode_rates_size (12) #define a_mode_rates_size (8) @@ -4040,9 +4042,8 @@ wlan_hdd_cfg80211_get_features(struct wiphy *wiphy, #define PARAM_CAND_SEL_SCORE_RSSI \ QCA_ATTR_ROAM_CAND_SEL_CRITERIA_SCORE_RSSI - -static const struct nla_policy -wlan_hdd_set_roam_param_policy[MAX_ROAMING_PARAM + 1] = { +const struct nla_policy wlan_hdd_set_roam_param_policy[ + MAX_ROAMING_PARAM + 1] = { [QCA_WLAN_VENDOR_ATTR_ROAMING_SUBCMD] = {.type = NLA_U32}, [QCA_WLAN_VENDOR_ATTR_ROAMING_REQ_ID] = {.type = NLA_U32}, [PARAM_NUM_NW] = {.type = NLA_U32}, @@ -5417,7 +5418,7 @@ fail: } #undef PWR_SAVE_FAIL_CMD_INDEX -static const struct nla_policy +const struct nla_policy wlan_hdd_set_no_dfs_flag_config_policy[QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX +1] = { [QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG] = {.type = NLA_U32 }, @@ -5927,11 +5928,14 @@ static int wlan_hdd_cfg80211_keymgmt_set_key(struct wiphy *wiphy, } #endif -static const struct nla_policy qca_wlan_vendor_get_wifi_info_policy[ - QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX + 1] = { - [QCA_WLAN_VENDOR_ATTR_WIFI_INFO_DRIVER_VERSION] = {.type = NLA_U8 }, - [QCA_WLAN_VENDOR_ATTR_WIFI_INFO_FIRMWARE_VERSION] = {.type = NLA_U8 }, - [QCA_WLAN_VENDOR_ATTR_WIFI_INFO_RADIO_INDEX] = {.type = NLA_U32 }, +const struct nla_policy qca_wlan_vendor_get_wifi_info_policy[ + QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX + 1] = { + [QCA_WLAN_VENDOR_ATTR_WIFI_INFO_DRIVER_VERSION] = { + .type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_WIFI_INFO_FIRMWARE_VERSION] = { + .type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_WIFI_INFO_RADIO_INDEX] = { + .type = NLA_U32 }, }; /** @@ -6531,9 +6535,8 @@ nla_put_failure: QCA_WLAN_VENDOR_ATTR_CONFIG_RX_BLOCKSIZE_PEER_MAC #define RX_BLOCKSIZE_WINLIMIT \ QCA_WLAN_VENDOR_ATTR_CONFIG_RX_BLOCKSIZE_WINLIMIT -static const struct nla_policy -wlan_hdd_wifi_config_policy[QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1] = { - +const struct nla_policy wlan_hdd_wifi_config_policy[ + QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_CONFIG_MODULATED_DTIM] = {.type = NLA_U32 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_IGNORE_ASSOC_DISALLOWED] = { .type = NLA_U8 }, @@ -6578,9 +6581,11 @@ wlan_hdd_wifi_config_policy[QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_CONFIG_ANT_DIV_ENA] = {.type = NLA_U32 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_ANT_DIV_CHAIN] = {.type = NLA_U32 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_ANT_DIV_SELFTEST] = {.type = NLA_U32 }, - [QCA_WLAN_VENDOR_ATTR_CONFIG_ANT_DIV_SELFTEST_INTVL] = {.type = NLA_U32 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_ANT_DIV_SELFTEST_INTVL] = { + .type = NLA_U32 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_LATENCY_LEVEL] = {.type = NLA_U16 }, - [QCA_WLAN_VENDOR_ATTR_CONFIG_TOTAL_BEACON_MISS_COUNT] = {.type = NLA_U8}, + [QCA_WLAN_VENDOR_ATTR_CONFIG_TOTAL_BEACON_MISS_COUNT] = { + .type = NLA_U8}, [QCA_WLAN_VENDOR_ATTR_CONFIG_SCAN_ENABLE] = {.type = NLA_U8 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_RSN_IE] = {.type = NLA_U8}, [QCA_WLAN_VENDOR_ATTR_CONFIG_GTX] = {.type = NLA_U8}, @@ -9067,10 +9072,8 @@ static int wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy, return errno; } -static const struct -nla_policy -qca_wlan_vendor_wifi_logger_start_policy -[QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_START_MAX + 1] = { +const struct nla_policy qca_wlan_vendor_wifi_logger_start_policy[ + QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_START_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_RING_ID] = {.type = NLA_U32 }, [QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_VERBOSE_LEVEL] @@ -9227,10 +9230,8 @@ static int wlan_hdd_cfg80211_wifi_logger_start(struct wiphy *wiphy, return errno; } -static const struct -nla_policy -qca_wlan_vendor_wifi_logger_get_ring_data_policy -[QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_GET_RING_DATA_MAX + 1] = { +const struct nla_policy qca_wlan_vendor_wifi_logger_get_ring_data_policy[ + QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_GET_RING_DATA_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_GET_RING_DATA_ID] = {.type = NLA_U32 }, }; @@ -9765,8 +9766,8 @@ static int wlan_hdd_cfg80211_offloaded_packets(struct wiphy *wiphy, #endif #ifdef WLAN_NS_OFFLOAD -static const struct nla_policy -ns_offload_set_policy[QCA_WLAN_VENDOR_ATTR_ND_OFFLOAD_MAX + 1] = { +const struct nla_policy ns_offload_set_policy[ + QCA_WLAN_VENDOR_ATTR_ND_OFFLOAD_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_ND_OFFLOAD_FLAG] = {.type = NLA_U8}, }; @@ -9875,8 +9876,8 @@ struct weighed_pcl { u32 flag; }; -static const struct nla_policy get_preferred_freq_list_policy - [QCA_WLAN_VENDOR_ATTR_GET_PREFERRED_FREQ_LIST_MAX + 1] = { +const struct nla_policy get_preferred_freq_list_policy[ + QCA_WLAN_VENDOR_ATTR_GET_PREFERRED_FREQ_LIST_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_GET_PREFERRED_FREQ_LIST_IFACE_TYPE] = { .type = NLA_U32}, }; @@ -10136,8 +10137,8 @@ static int wlan_hdd_cfg80211_get_preferred_freq_list(struct wiphy *wiphy, return errno; } -static const struct nla_policy set_probable_oper_channel_policy - [QCA_WLAN_VENDOR_ATTR_PROBABLE_OPER_CHANNEL_MAX + 1] = { +const struct nla_policy set_probable_oper_channel_policy[ + QCA_WLAN_VENDOR_ATTR_PROBABLE_OPER_CHANNEL_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_PROBABLE_OPER_CHANNEL_IFACE_TYPE] = { .type = NLA_U32}, [QCA_WLAN_VENDOR_ATTR_PROBABLE_OPER_CHANNEL_FREQ] = { @@ -14399,6 +14400,9 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { }, #endif FEATURE_EXTSCAN_VENDOR_COMMANDS + + FEATURE_LL_STATS_VENDOR_COMMANDS + #ifdef WLAN_FEATURE_LINK_LAYER_STATS { .info.vendor_id = QCA_NL80211_VENDOR_ID, @@ -14408,21 +14412,6 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .doit = wlan_hdd_cfg80211_ll_stats_clear }, - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_ll_stats_set - }, - - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_ll_stats_get - }, #endif /* WLAN_FEATURE_LINK_LAYER_STATS */ { @@ -14439,7 +14428,8 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_set_scanning_mac_oui + .doit = wlan_hdd_cfg80211_set_scanning_mac_oui, + vendor_command_policy(VENDOR_CMD_RAW_DATA, 0) }, FEATURE_CONCURRENCY_MATRIX_VENDOR_COMMANDS @@ -14450,7 +14440,9 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_disable_dfs_chan_scan + .doit = wlan_hdd_cfg80211_disable_dfs_chan_scan, + vendor_command_policy(wlan_hdd_set_no_dfs_flag_config_policy, + QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX) }, { .info.vendor_id = QCA_NL80211_VENDOR_ID, @@ -14477,7 +14469,8 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GET_FEATURES, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wlan_hdd_cfg80211_get_features + .doit = wlan_hdd_cfg80211_get_features, + vendor_command_policy(VENDOR_CMD_RAW_DATA, 0) }, #ifdef WLAN_FEATURE_ROAM_OFFLOAD { @@ -14486,7 +14479,8 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_keymgmt_set_key + .doit = wlan_hdd_cfg80211_keymgmt_set_key, + vendor_command_policy(VENDOR_CMD_RAW_DATA, 0) }, #endif { @@ -14494,7 +14488,9 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_INFO, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wlan_hdd_cfg80211_get_wifi_info + .doit = wlan_hdd_cfg80211_get_wifi_info, + vendor_command_policy(qca_wlan_vendor_get_wifi_info_policy, + QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX) }, { .info.vendor_id = QCA_NL80211_VENDOR_ID, @@ -14502,7 +14498,9 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_wifi_configuration_set + .doit = wlan_hdd_cfg80211_wifi_configuration_set, + vendor_command_policy(wlan_hdd_wifi_config_policy, + QCA_WLAN_VENDOR_ATTR_CONFIG_MAX) }, { .info.vendor_id = QCA_NL80211_VENDOR_ID, @@ -14521,7 +14519,9 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_set_ext_roam_params + .doit = wlan_hdd_cfg80211_set_ext_roam_params, + vendor_command_policy(wlan_hdd_set_roam_param_policy, + QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX) }, { .info.vendor_id = QCA_NL80211_VENDOR_ID, @@ -14529,13 +14529,19 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_wifi_logger_start + .doit = wlan_hdd_cfg80211_wifi_logger_start, + vendor_command_policy( + qca_wlan_vendor_wifi_logger_start_policy, + QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_START_MAX) }, { .info.vendor_id = QCA_NL80211_VENDOR_ID, .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GET_RING_DATA, .flags = WIPHY_VENDOR_CMD_NEED_WDEV, - .doit = wlan_hdd_cfg80211_wifi_logger_get_ring_data + .doit = wlan_hdd_cfg80211_wifi_logger_get_ring_data, + vendor_command_policy( + qca_wlan_vendor_wifi_logger_get_ring_data_policy, + QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_GET_RING_DATA_MAX) }, { .info.vendor_id = QCA_NL80211_VENDOR_ID, @@ -14544,7 +14550,10 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_get_preferred_freq_list + .doit = wlan_hdd_cfg80211_get_preferred_freq_list, + vendor_command_policy( + get_preferred_freq_list_policy, + QCA_WLAN_VENDOR_ATTR_GET_PREFERRED_FREQ_LIST_MAX) }, { .info.vendor_id = QCA_NL80211_VENDOR_ID, @@ -14553,7 +14562,10 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_set_probable_oper_channel + .doit = wlan_hdd_cfg80211_set_probable_oper_channel, + vendor_command_policy( + set_probable_oper_channel_policy, + QCA_WLAN_VENDOR_ATTR_PROBABLE_OPER_CHANNEL_MAX) }, #ifdef WLAN_FEATURE_TSF { @@ -14596,7 +14608,9 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_set_ns_offload + .doit = wlan_hdd_cfg80211_set_ns_offload, + vendor_command_policy(ns_offload_set_policy, + QCA_WLAN_VENDOR_ATTR_ND_OFFLOAD_MAX) }, #endif /* WLAN_NS_OFFLOAD */ { @@ -14604,26 +14618,14 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GET_LOGGER_FEATURE_SET, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, - .doit = wlan_hdd_cfg80211_get_logger_supp_feature - }, - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_TRIGGER_SCAN, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_vendor_scan + .doit = wlan_hdd_cfg80211_get_logger_supp_feature, + vendor_command_policy(VENDOR_CMD_RAW_DATA, 0) }, + FEATURE_TRIGGER_SCAN_VENDOR_COMMANDS + /* Vendor abort scan */ - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_ABORT_SCAN, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_vendor_abort_scan - }, + FEATURE_ABORT_SCAN_VENDOR_COMMANDS /* OCB commands */ FEATURE_OCB_VENDOR_COMMANDS @@ -14641,29 +14643,12 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { FEATURE_OTA_TEST_VENDOR_COMMANDS -#ifdef FEATURE_LFR_SUBNET_DETECTION - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_set_gateway_params - }, -#endif /* FEATURE_LFR_SUBNET_DETECTION */ + FEATURE_LFR_SUBNET_DETECT_VENDOR_COMMANDS FEATURE_TX_POWER_VENDOR_COMMANDS -#ifdef FEATURE_WLAN_APF - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_PACKET_FILTER, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_apf_offload - }, -#endif /* FEATURE_WLAN_APF */ + FEATURE_APF_OFFLOAD_VENDOR_COMMANDS + { .info.vendor_id = QCA_NL80211_VENDOR_ID, .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_ACS_POLICY, @@ -14717,7 +14702,8 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_get_bus_size + .doit = wlan_hdd_cfg80211_get_bus_size, + vendor_command_policy(VENDOR_CMD_RAW_DATA, 0) }, { .info.vendor_id = QCA_NL80211_VENDOR_ID, diff --git a/core/hdd/src/wlan_hdd_cfg80211.h b/core/hdd/src/wlan_hdd_cfg80211.h index 9f8dcc6460b6..e618fc18279b 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.h +++ b/core/hdd/src/wlan_hdd_cfg80211.h @@ -32,6 +32,42 @@ struct hdd_context; +/* QCA_NL80211_VENDOR_SUBCMD_ROAM policy */ +extern const struct nla_policy wlan_hdd_set_roam_param_policy[ + QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_INFO policy */ +extern const struct nla_policy qca_wlan_vendor_get_wifi_info_policy[ + QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_SET_WIFI_CONFIGURATION policy */ +extern const struct nla_policy wlan_hdd_wifi_config_policy[ + QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_START policy */ +extern const struct nla_policy qca_wlan_vendor_wifi_logger_start_policy[ + QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_START_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_ND_OFFLOAD policy */ +extern const struct nla_policy ns_offload_set_policy[ + QCA_WLAN_VENDOR_ATTR_ND_OFFLOAD_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_GET_PREFERRED_FREQ_LIST policy */ +extern const struct nla_policy get_preferred_freq_list_policy[ + QCA_WLAN_VENDOR_ATTR_GET_PREFERRED_FREQ_LIST_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_SET_PROBABLE_OPER_CHANNEL policy */ +extern const struct nla_policy set_probable_oper_channel_policy[ + QCA_WLAN_VENDOR_ATTR_PROBABLE_OPER_CHANNEL_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_NO_DFS_FLAG policy */ +extern const struct nla_policy wlan_hdd_set_no_dfs_flag_config_policy[ + QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_GET_RING_DATA policy */ +extern const struct nla_policy qca_wlan_vendor_wifi_logger_get_ring_data_policy[ + QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_GET_RING_DATA_MAX + 1]; + /* value for initial part of frames and number of bytes to be compared */ #define GAS_INITIAL_REQ "\x04\x0a" #define GAS_INITIAL_REQ_SIZE 2 diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index 1b427fdcc443..a613b146764c 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -925,7 +925,7 @@ static int wlan_hdd_vendor_scan_random_attr(struct wiphy *wiphy, } #endif -static const +const struct nla_policy scan_policy[QCA_WLAN_VENDOR_ATTR_SCAN_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_SCAN_FLAGS] = {.type = NLA_U32}, [QCA_WLAN_VENDOR_ATTR_SCAN_TX_NO_CCK_RATE] = {.type = NLA_FLAG}, @@ -936,6 +936,10 @@ struct nla_policy scan_policy[QCA_WLAN_VENDOR_ATTR_SCAN_MAX + 1] = { .len = QDF_MAC_ADDR_SIZE}, [QCA_WLAN_VENDOR_ATTR_SCAN_MAC_MASK] = {.type = NLA_UNSPEC, .len = QDF_MAC_ADDR_SIZE}, + [QCA_WLAN_VENDOR_ATTR_SCAN_FREQUENCIES] = {.type = NLA_NESTED}, + [QCA_WLAN_VENDOR_ATTR_SCAN_SSIDS] = {.type = NLA_NESTED}, + [QCA_WLAN_VENDOR_ATTR_SCAN_SUPP_RATES] = {.type = NLA_NESTED}, + [QCA_WLAN_VENDOR_ATTR_SCAN_BSSID] = {.type = NLA_BINARY}, }; /** diff --git a/core/hdd/src/wlan_hdd_scan.h b/core/hdd/src/wlan_hdd_scan.h index 21a9cb11d29b..d8e068089f57 100644 --- a/core/hdd/src/wlan_hdd_scan.h +++ b/core/hdd/src/wlan_hdd_scan.h @@ -29,6 +29,22 @@ #include "wlan_hdd_main.h" #include "csr_inside_api.h" #include +#include "qca_vendor.h" + +extern const struct nla_policy scan_policy[ + QCA_WLAN_VENDOR_ATTR_SCAN_MAX + 1]; + +#define FEATURE_TRIGGER_SCAN_VENDOR_COMMANDS \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_TRIGGER_SCAN, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_vendor_scan, \ + vendor_command_policy(scan_policy, \ + QCA_WLAN_VENDOR_ATTR_SCAN_MAX) \ +}, #define EXTSCAN_PARAM_MAX QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX diff --git a/core/hdd/src/wlan_hdd_stats.c b/core/hdd/src/wlan_hdd_stats.c index aa7ca1d2b09b..8576fa51a2bd 100644 --- a/core/hdd/src/wlan_hdd_stats.c +++ b/core/hdd/src/wlan_hdd_stats.c @@ -1201,13 +1201,12 @@ void hdd_lost_link_info_cb(hdd_handle_t hdd_handle, hdd_debug("rssi on disconnect %d", adapter->rssi_on_disconnect); } -const struct -nla_policy - qca_wlan_vendor_ll_set_policy[QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_MAX + 1] = { - [QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_CONFIG_MPDU_SIZE_THRESHOLD] = { - .type = NLA_U32}, - [QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_CONFIG_AGGRESSIVE_STATS_GATHERING] = { - .type = NLA_U32}, +const struct nla_policy qca_wlan_vendor_ll_set_policy[ + QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_MAX + 1] = { + [QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_CONFIG_MPDU_SIZE_THRESHOLD] + = { .type = NLA_U32 }, + [QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_CONFIG_AGGRESSIVE_STATS_GATHERING] + = { .type = NLA_U32 }, }; /** @@ -1329,9 +1328,8 @@ int wlan_hdd_cfg80211_ll_stats_set(struct wiphy *wiphy, return errno; } -const struct -nla_policy - qca_wlan_vendor_ll_get_policy[QCA_WLAN_VENDOR_ATTR_LL_STATS_GET_MAX + 1] = { +const struct nla_policy qca_wlan_vendor_ll_get_policy[ + QCA_WLAN_VENDOR_ATTR_LL_STATS_GET_MAX + 1] = { /* Unsigned 32bit value provided by the caller issuing the GET stats * command. When reporting * the stats results, the driver uses the same value to indicate diff --git a/core/hdd/src/wlan_hdd_stats.h b/core/hdd/src/wlan_hdd_stats.h index cca299f7b016..764522ec2c3b 100644 --- a/core/hdd/src/wlan_hdd_stats.h +++ b/core/hdd/src/wlan_hdd_stats.h @@ -41,6 +41,42 @@ extern const struct nla_policy qca_wlan_vendor_ll_ext_policy[ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_MAX + 1]; + +#ifdef WLAN_FEATURE_LINK_LAYER_STATS +/* QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET */ +extern const struct nla_policy qca_wlan_vendor_ll_set_policy[ + QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_NDP */ +extern const struct nla_policy qca_wlan_vendor_ll_get_policy[ + QCA_WLAN_VENDOR_ATTR_LL_STATS_GET_MAX + 1]; + +#define FEATURE_LL_STATS_VENDOR_COMMANDS \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_ll_stats_set, \ + vendor_command_policy(qca_wlan_vendor_ll_set_policy, \ + QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_MAX) \ +}, \ + \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_ll_stats_get, \ + vendor_command_policy(qca_wlan_vendor_ll_get_policy, \ + QCA_WLAN_VENDOR_ATTR_LL_STATS_GET_MAX) \ +}, +#else +#define FEATURE_LL_STATS_VENDOR_COMMANDS +#endif + /** * struct index_vht_data_rate_type - vht data rate type * @beacon_rate_index: Beacon rate index diff --git a/core/hdd/src/wlan_hdd_subnet_detect.c b/core/hdd/src/wlan_hdd_subnet_detect.c index 995c36114217..98511c9e1d04 100644 --- a/core/hdd/src/wlan_hdd_subnet_detect.c +++ b/core/hdd/src/wlan_hdd_subnet_detect.c @@ -41,17 +41,17 @@ #define PARAM_IPV4_ADDR QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_IPV4_ADDR #define PARAM_IPV6_ADDR QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_IPV6_ADDR -static const struct nla_policy - policy[QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_MAX + 1] = { - [PARAM_MAC_ADDR] = { +const struct nla_policy subnet_detect_policy[ + QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_MAX + 1] = { + [QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_GW_MAC_ADDR] = { .type = NLA_UNSPEC, .len = QDF_MAC_ADDR_SIZE }, - [PARAM_IPV4_ADDR] = { + [QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_IPV4_ADDR] = { .type = NLA_UNSPEC, .len = QDF_IPV4_ADDR_SIZE }, - [PARAM_IPV6_ADDR] = { + [QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_IPV6_ADDR] = { .type = NLA_UNSPEC, .len = QDF_IPV6_ADDR_SIZE } @@ -114,7 +114,7 @@ static int __wlan_hdd_cfg80211_set_gateway_params(struct wiphy *wiphy, */ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_MAX, - data, data_len, policy)) { + data, data_len, subnet_detect_policy)) { hdd_err("Invalid ATTR list"); return -EINVAL; } diff --git a/core/hdd/src/wlan_hdd_subnet_detect.h b/core/hdd/src/wlan_hdd_subnet_detect.h index 2d832009bdc1..5605ca5c8baf 100644 --- a/core/hdd/src/wlan_hdd_subnet_detect.h +++ b/core/hdd/src/wlan_hdd_subnet_detect.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2015,2020 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -29,6 +29,22 @@ struct wiphy; struct wireless_dev; +/* QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG policy */ +extern const struct nla_policy subnet_detect_policy[ + QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_MAX + 1]; + +#define FEATURE_LFR_SUBNET_DETECT_VENDOR_COMMANDS \ + { \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_set_gateway_params, \ + vendor_command_policy(subnet_detect_policy, \ + QCA_WLAN_VENDOR_ATTR_GW_PARAM_CONFIG_MAX)\ + }, + int wlan_hdd_cfg80211_set_gateway_params(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, int data_len); #endif /* FEATURE_LFR_SUBNET_DETECTION */ diff --git a/os_if/nan/inc/os_if_nan.h b/os_if/nan/inc/os_if_nan.h index 8d2c83ebcbe9..442ec270480d 100644 --- a/os_if/nan/inc/os_if_nan.h +++ b/os_if/nan/inc/os_if_nan.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -27,6 +27,15 @@ #ifdef WLAN_FEATURE_NAN #include "nan_public_structs.h" #include "nan_ucfg_api.h" +#include "qca_vendor.h" + +/* QCA_NL80211_VENDOR_SUBCMD_NAN_EXT policy */ +extern const struct nla_policy nan_attr_policy[ + QCA_WLAN_VENDOR_ATTR_NAN_PARAMS_MAX + 1]; + +/* QCA_NL80211_VENDOR_SUBCMD_NDP policy */ +extern const struct nla_policy vendor_attr_policy[ + QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX + 1]; /** * struct ndi_find_vdev_filter - find vdev filter object. this can be extended diff --git a/os_if/nan/src/os_if_nan.c b/os_if/nan/src/os_if_nan.c index c3d5bcfc666a..8eb165a3c2ad 100644 --- a/os_if/nan/src/os_if_nan.c +++ b/os_if/nan/src/os_if_nan.c @@ -40,8 +40,8 @@ #define NAN_CMD_MAX_SIZE 2048 /* NLA policy */ -static const struct nla_policy -nan_attr_policy[QCA_WLAN_VENDOR_ATTR_NAN_PARAMS_MAX + 1] = { +const struct nla_policy nan_attr_policy[ + QCA_WLAN_VENDOR_ATTR_NAN_PARAMS_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_NAN_CMD_DATA] = { .type = NLA_BINARY, .len = NAN_CMD_MAX_SIZE @@ -61,8 +61,8 @@ nan_attr_policy[QCA_WLAN_VENDOR_ATTR_NAN_PARAMS_MAX + 1] = { }; /* NLA policy */ -static const struct nla_policy -vendor_attr_policy[QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX + 1] = { +const struct nla_policy vendor_attr_policy[ + QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD] = { .type = NLA_U32, .len = sizeof(uint32_t)