diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 4338b11f416f..b56b1477a221 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -10250,7 +10250,7 @@ static int wlan_hdd_cfg80211_set_probable_oper_channel(struct wiphy *wiphy, static const struct nla_policy -qca_wlan_vendor_attr_policy[QCA_WLAN_VENDOR_ATTR_MAX+1] = { +wlan_hdd_get_link_properties_policy[QCA_WLAN_VENDOR_ATTR_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_MAC_ADDR] = { .type = NLA_BINARY, .len = QDF_MAC_ADDR_SIZE }, }; @@ -10296,7 +10296,8 @@ static int __wlan_hdd_cfg80211_get_link_properties(struct wiphy *wiphy, return -EINVAL; if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, - data_len, qca_wlan_vendor_attr_policy)) { + data_len, + wlan_hdd_get_link_properties_policy)) { hdd_err("Invalid attribute"); return -EINVAL; } @@ -14643,78 +14644,17 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { }, /* OCB commands */ - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_SET_CONFIG, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_ocb_set_config - }, - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_SET_UTC_TIME, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_ocb_set_utc_time - }, - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = - QCA_NL80211_VENDOR_SUBCMD_OCB_START_TIMING_ADVERT, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_ocb_start_timing_advert - }, - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_STOP_TIMING_ADVERT, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_ocb_stop_timing_advert - }, - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_GET_TSF_TIMER, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_ocb_get_tsf_timer - }, - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_GET_STATS, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_dcc_get_stats - }, - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_CLEAR_STATS, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_dcc_clear_stats - }, - { - .info.vendor_id = QCA_NL80211_VENDOR_ID, - .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_UPDATE_NDL, - .flags = WIPHY_VENDOR_CMD_NEED_WDEV | - WIPHY_VENDOR_CMD_NEED_NETDEV | - WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_dcc_update_ndl - }, + FEATURE_OCB_VENDOR_COMMANDS + { .info.vendor_id = QCA_NL80211_VENDOR_ID, .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, - .doit = wlan_hdd_cfg80211_get_link_properties + .doit = wlan_hdd_cfg80211_get_link_properties, + vendor_command_policy(wlan_hdd_get_link_properties_policy, + QCA_WLAN_VENDOR_ATTR_MAX) }, FEATURE_OTA_TEST_VENDOR_COMMANDS @@ -14786,7 +14726,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_wakelock_stats + .doit = wlan_hdd_cfg80211_get_wakelock_stats, + vendor_command_policy(VENDOR_CMD_RAW_DATA, 0) }, { .info.vendor_id = QCA_NL80211_VENDOR_ID, diff --git a/core/hdd/src/wlan_hdd_ocb.c b/core/hdd/src/wlan_hdd_ocb.c index 4302abb9fc96..545cc47a16c5 100644 --- a/core/hdd/src/wlan_hdd_ocb.c +++ b/core/hdd/src/wlan_hdd_ocb.c @@ -594,7 +594,7 @@ int iw_set_dot11p_channel_sched(struct net_device *dev, } #endif /* WLAN_WEXT_SUPPORT_ENABLE */ -static const struct nla_policy qca_wlan_vendor_ocb_set_config_policy[ +const struct nla_policy qca_wlan_vendor_ocb_set_config_policy[ QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_CHANNEL_COUNT] = { .type = NLA_U32 @@ -619,7 +619,7 @@ static const struct nla_policy qca_wlan_vendor_ocb_set_config_policy[ }, }; -static const struct nla_policy qca_wlan_vendor_ocb_set_utc_time_policy[ +const struct nla_policy qca_wlan_vendor_ocb_set_utc_time_policy[ QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_VALUE] = { .type = NLA_BINARY, .len = SIZE_UTC_TIME @@ -629,7 +629,7 @@ static const struct nla_policy qca_wlan_vendor_ocb_set_utc_time_policy[ }, }; -static const struct nla_policy qca_wlan_vendor_ocb_start_timing_advert_policy[ +const struct nla_policy qca_wlan_vendor_ocb_start_timing_advert_policy[ QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_CHANNEL_FREQ] = { .type = NLA_U32 @@ -639,7 +639,7 @@ static const struct nla_policy qca_wlan_vendor_ocb_start_timing_advert_policy[ }, }; -static const struct nla_policy qca_wlan_vendor_ocb_stop_timing_advert_policy[ +const struct nla_policy qca_wlan_vendor_ocb_stop_timing_advert_policy[ QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_CHANNEL_FREQ] = { .type = NLA_U32 @@ -655,7 +655,7 @@ static const struct nla_policy qca_wlan_vendor_ocb_get_tsf_timer_resp[] = { }, }; -static const struct nla_policy qca_wlan_vendor_dcc_get_stats[] = { +const struct nla_policy qca_wlan_vendor_dcc_get_stats[] = { [QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_CHANNEL_COUNT] = { .type = NLA_U32 }, @@ -673,13 +673,13 @@ static const struct nla_policy qca_wlan_vendor_dcc_get_stats_resp[] = { }, }; -static const struct nla_policy qca_wlan_vendor_dcc_clear_stats[] = { +const struct nla_policy qca_wlan_vendor_dcc_clear_stats[] = { [QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_BITMAP] = { .type = NLA_U32 }, }; -static const struct nla_policy qca_wlan_vendor_dcc_update_ndl[ +const struct nla_policy qca_wlan_vendor_dcc_update_ndl[ QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_CHANNEL_COUNT] = { .type = NLA_U32 diff --git a/core/hdd/src/wlan_hdd_ocb.h b/core/hdd/src/wlan_hdd_ocb.h index 1bd92c9bc098..d71ac85aea19 100644 --- a/core/hdd/src/wlan_hdd_ocb.h +++ b/core/hdd/src/wlan_hdd_ocb.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2019 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 @@ -238,7 +238,116 @@ struct hdd_context; int iw_set_dot11p_channel_sched(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); + +extern const struct nla_policy qca_wlan_vendor_ocb_set_config_policy[ + QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX + 1]; +extern const struct nla_policy qca_wlan_vendor_ocb_set_utc_time_policy[ + QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX + 1]; +extern const struct nla_policy qca_wlan_vendor_ocb_start_timing_advert_policy[ + QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX + 1]; +extern const struct nla_policy qca_wlan_vendor_ocb_stop_timing_advert_policy[ + QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX + 1]; +extern const struct nla_policy qca_wlan_vendor_dcc_get_stats[ + QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_MAX + 1]; +extern const struct nla_policy qca_wlan_vendor_dcc_clear_stats[ + QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_MAX + 1]; +extern const struct nla_policy qca_wlan_vendor_dcc_update_ndl[ + QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX + 1]; + +#define FEATURE_OCB_VENDOR_COMMANDS \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_SET_CONFIG, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_ocb_set_config, \ + vendor_command_policy(qca_wlan_vendor_ocb_set_config_policy, \ + QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX) \ +}, \ + \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_SET_UTC_TIME, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_ocb_set_utc_time, \ + vendor_command_policy(qca_wlan_vendor_ocb_set_utc_time_policy, \ + QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX) \ +}, \ + \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = \ + QCA_NL80211_VENDOR_SUBCMD_OCB_START_TIMING_ADVERT, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_ocb_start_timing_advert, \ + vendor_command_policy( \ + qca_wlan_vendor_ocb_start_timing_advert_policy, \ + QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX) \ +}, \ + \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_STOP_TIMING_ADVERT, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_ocb_stop_timing_advert, \ + vendor_command_policy( \ + qca_wlan_vendor_ocb_stop_timing_advert_policy, \ + QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX) \ +}, \ + \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_GET_TSF_TIMER, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_ocb_get_tsf_timer, \ + vendor_command_policy(VENDOR_CMD_RAW_DATA, 0) \ +}, \ + \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_GET_STATS, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_dcc_get_stats, \ + vendor_command_policy(qca_wlan_vendor_dcc_get_stats, \ + QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_MAX) \ +}, \ + \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_CLEAR_STATS, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_dcc_clear_stats, \ + vendor_command_policy(qca_wlan_vendor_dcc_clear_stats, \ + QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_MAX) \ +}, \ + \ +{ \ + .info.vendor_id = QCA_NL80211_VENDOR_ID, \ + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_UPDATE_NDL, \ + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | \ + WIPHY_VENDOR_CMD_NEED_NETDEV | \ + WIPHY_VENDOR_CMD_NEED_RUNNING, \ + .doit = wlan_hdd_cfg80211_dcc_update_ndl, \ + vendor_command_policy(qca_wlan_vendor_dcc_update_ndl, \ + QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX) \ +}, + #else +#define FEATURE_OCB_VENDOR_COMMANDS + static inline int iw_set_dot11p_channel_sched(struct net_device *dev, struct iw_request_info *info, @@ -247,6 +356,8 @@ int iw_set_dot11p_channel_sched(struct net_device *dev, return 0; } #endif +#else +#define FEATURE_OCB_VENDOR_COMMANDS #endif #ifdef WLAN_FEATURE_DSRC