diff --git a/os_if/linux/spectral/src/wlan_cfg80211_spectral.c b/os_if/linux/spectral/src/wlan_cfg80211_spectral.c index d317bf87cc..4c7404b9f9 100644 --- a/os_if/linux/spectral/src/wlan_cfg80211_spectral.c +++ b/os_if/linux/spectral/src/wlan_cfg80211_spectral.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018 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 @@ -549,7 +549,7 @@ int wlan_cfg80211_spectral_scan_get_cap(struct wiphy *wiphy, wlan_spectral_get_cap(pdev, &spectral_cap); - skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, 4 * sizeof(u32) + + skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, 5 * sizeof(u32) + NLA_HDRLEN + NLMSG_HDRLEN); if (!skb) { qdf_print(" reply skb alloc failed"); @@ -578,7 +578,14 @@ int wlan_cfg80211_spectral_scan_get_cap(struct wiphy *wiphy, skb, QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_ADVANCED_SPECTRAL)) goto fail; + + if (nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_HW_GEN, + spectral_cap.hw_gen)) + goto fail; + cfg80211_vendor_cmd_reply(skb); + return 0; fail: diff --git a/spectral/dispatcher/inc/wlan_spectral_public_structs.h b/spectral/dispatcher/inc/wlan_spectral_public_structs.h index 1ca5125b80..3217811bb6 100644 --- a/spectral/dispatcher/inc/wlan_spectral_public_structs.h +++ b/spectral/dispatcher/inc/wlan_spectral_public_structs.h @@ -102,7 +102,9 @@ #define SPECTRAL_SCAN_ACTIVE_DEFAULT (0) #define SPECTRAL_SCAN_ENABLE_DEFAULT (0) #define SPECTRAL_SCAN_COUNT_DEFAULT (0) -#define SPECTRAL_SCAN_PERIOD_DEFAULT (35) +#define SPECTRAL_SCAN_PERIOD_GEN_I_DEFAULT (35) +#define SPECTRAL_SCAN_PERIOD_GEN_II_DEFAULT (35) +#define SPECTRAL_SCAN_PERIOD_GEN_III_DEFAULT (224) #define SPECTRAL_SCAN_PRIORITY_DEFAULT (1) #define SPECTRAL_SCAN_FFT_SIZE_DEFAULT (7) #define SPECTRAL_SCAN_GC_ENA_DEFAULT (1) @@ -228,12 +230,14 @@ struct spectral_diag_stats { * @radar_cap: Radar detection capability * @spectral_cap: Spectral capability * @advncd_spectral_cap: Advanced spectral capability + * @hw_gen: Spectral hw generation */ struct spectral_caps { uint8_t phydiag_cap; uint8_t radar_cap; uint8_t spectral_cap; uint8_t advncd_spectral_cap; + uint32_t hw_gen; }; /** diff --git a/target_if/spectral/target_if_spectral.c b/target_if/spectral/target_if_spectral.c index cc29b3cefd..1c4dd06533 100644 --- a/target_if/spectral/target_if_spectral.c +++ b/target_if/spectral/target_if_spectral.c @@ -214,7 +214,12 @@ target_if_spectral_info_init_defaults(struct target_if_spectral *spectral) /* Parameters */ info->osps_cache.osc_params.ss_count = SPECTRAL_SCAN_COUNT_DEFAULT; - info->osps_cache.osc_params.ss_period = SPECTRAL_SCAN_PERIOD_DEFAULT; + if (spectral->spectral_gen == SPECTRAL_GEN3) + info->osps_cache.osc_params.ss_period = + SPECTRAL_SCAN_PERIOD_GEN_III_DEFAULT; + else + info->osps_cache.osc_params.ss_period = + SPECTRAL_SCAN_PERIOD_GEN_II_DEFAULT; info->osps_cache.osc_params.ss_spectral_pri = SPECTRAL_SCAN_PRIORITY_DEFAULT; @@ -1332,6 +1337,7 @@ target_if_init_spectral_capability(struct target_if_spectral *spectral) pcap->radar_cap = 1; pcap->spectral_cap = 1; pcap->advncd_spectral_cap = 1; + pcap->hw_gen = spectral->spectral_gen; } #ifdef QCA_SUPPORT_SPECTRAL_SIMULATION @@ -1797,7 +1803,10 @@ target_if_spectral_init_param_defaults(struct target_if_spectral *spectral) struct spectral_config *params = &spectral->params; params->ss_count = SPECTRAL_SCAN_COUNT_DEFAULT; - params->ss_period = SPECTRAL_SCAN_PERIOD_DEFAULT; + if (spectral->spectral_gen == SPECTRAL_GEN3) + params->ss_period = SPECTRAL_SCAN_PERIOD_GEN_III_DEFAULT; + else + params->ss_period = SPECTRAL_SCAN_PERIOD_GEN_II_DEFAULT; params->ss_spectral_pri = SPECTRAL_SCAN_PRIORITY_DEFAULT; params->ss_fft_size = SPECTRAL_SCAN_FFT_SIZE_DEFAULT; params->ss_gc_ena = SPECTRAL_SCAN_GC_ENA_DEFAULT; @@ -1983,8 +1992,6 @@ target_if_pdev_spectral_init(struct wlan_objmgr_pdev *pdev) qdf_spinlock_create(&spectral->noise_pwr_reports_lock); target_if_spectral_clear_stats(spectral); - /* Set the default values for spectral parameters */ - target_if_spectral_init_param_defaults(spectral); #ifdef CONFIG_WIN if (target_type == TARGET_TYPE_QCA8074) { spectral->fftbin_size_war = 1; @@ -2012,6 +2019,10 @@ target_if_pdev_spectral_init(struct wlan_objmgr_pdev *pdev) spectral->tlvhdr_size = sizeof(struct spectral_phyerr_tlv_gen2); } + /* Set the default values for spectral parameters */ + target_if_spectral_init_param_defaults(spectral); + /* Init spectral capability */ + target_if_init_spectral_capability(spectral); if (target_if_spectral_attach_simulation(spectral) < 0) return NULL;