diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 73822aa7b9ac..fd04a684b41d 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -12111,6 +12111,875 @@ enum hdd_external_acs_freq_band { #define CFG_IS_BSSID_HINT_PRIORITY_MIN (0) #define CFG_IS_BSSID_HINT_PRIORITY_MAX (1) +/* + * + * rssi_weightage - RSSI Weightage to calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 20 + * + * This ini is used to increase/decrease RSSI weightage in best candidate + * selection. AP with better RSSI will get more weightage. + * + * Related: None + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_RSSI_WEIGHTAGE_NAME "rssi_weightage" +#define CFG_RSSI_WEIGHTAGE_DEFAULT (20) +#define CFG_RSSI_WEIGHTAGE_MIN (0) +#define CFG_RSSI_WEIGHTAGE_MAX (100) + +/* + * + * ht_caps_weightage - HT caps weightage to calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 2 + * + * This ini is used to increase/decrease HT caps weightage in best candidate + * selection. If AP supports HT caps, AP will get additional Weightage with + * this param. Weightage will be given only if dot11mode is HT capable. + * + * Related: None + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_HT_CAPABILITY_WEIGHTAGE_NAME "ht_caps_weightage" +#define CFG_HT_CAPABILITY_WEIGHTAGE_DEFAULT (2) +#define CFG_HT_CAPABILITY_WEIGHTAGE_MIN (0) +#define CFG_HT_CAPABILITY_WEIGHTAGE_MAX (100) + +/* + * + * vht_caps_weightage - VHT caps Weightage to calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 1 + * + * This ini is used to increase/decrease VHT caps weightage in best candidate + * selection. If AP supports VHT caps, AP will get additional weightage with + * this param. Weightage will be given only if dot11mode is VHT capable. + * + * Related: None + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_VHT_CAPABILITY_WEIGHTAGE_NAME "vht_caps_weightage" +#define CFG_VHT_CAPABILITY_WEIGHTAGE_DEFAULT (1) +#define CFG_VHT_CAPABILITY_WEIGHTAGE_MIN (0) +#define CFG_VHT_CAPABILITY_WEIGHTAGE_MAX (100) + +/* + * + * he_caps_weightage - HE caps Weightage to calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 1 + * + * This ini is used to increase/decrease HE caps weightage in best candidate + * selection. If AP supports HE caps, AP will get additional weightage with + * this param. Weightage will be given only if dot11mode is HE capable. + * + * Related: None + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_HE_CAPABILITY_WEIGHTAGE_NAME "he_caps_weightage" +#define CFG_HE_CAPABILITY_WEIGHTAGE_DEFAULT (2) +#define CFG_HE_CAPABILITY_WEIGHTAGE_MIN (0) +#define CFG_HE_CAPABILITY_WEIGHTAGE_MAX (100) + +/* + * + * chan_width_weightage - Channel Width Weightage to calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 17 + * + * This ini is used to increase/decrease Channel Width weightage in best + * candidate selection. AP with Higher channel width will get higher weightage + * + * Related: bandwidth_weight_per_index + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_CHAN_WIDTH_WEIGHTAGE_NAME "chan_width_weightage" +#define CFG_CHAN_WIDTH_WEIGHTAGE_DEFAULT (17) +#define CFG_CHAN_WIDTH_WEIGHTAGE_MIN (0) +#define CFG_CHAN_WIDTH_WEIGHTAGE_MAX (100) + +/* + * + * chan_band_weightage - Channel Band perferance to 5GHZ to + * calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 2 + * + * This ini is used to increase/decrease Channel Band Preference weightage + * in best candidate selection. 5GHZ AP get this additional boost compare to + * 2GHZ AP before rssi_pref_5g_rssi_thresh and 2.4Ghz get weightage after + * rssi_pref_5g_rssi_thresh. + * + * Related: rssi_pref_5g_rssi_thresh, band_weight_per_index + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_CHAN_BAND_WEIGHTAGE_NAME "chan_band_weightage" +#define CFG_CHAN_BAND_WEIGHTAGE_DEFAULT (2) +#define CFG_CHAN_BAND_WEIGHTAGE_MIN (0) +#define CFG_CHAN_BAND_WEIGHTAGE_MAX (100) + +/* + * + * nss_weightage - NSS Weightage to calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 16 + * + * This ini is used to increase/decrease NSS weightage in best candidate + * selection. If there are two AP, one AP supports 2x2 and another one supports + * 1x1 and station supports 2X2, first A will get this additional weightage + * depending on self-capability. + * + * Related: nss_weight_per_index + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_NSS_WEIGHTAGE_NAME "nss_weightage" +#define CFG_NSS_WEIGHTAGE_DEFAULT (16) +#define CFG_NSS_WEIGHTAGE_MIN (0) +#define CFG_NSS_WEIGHTAGE_MAX (100) + +/* + * + * beamforming_cap_weightage - Beam Forming Weightage to + * calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 2 + * + * This ini is used to increase/decrease Beam forming Weightage if some AP + * support Beam forming or not. If AP supports Beam forming, that AP will get + * additional boost of this weightage. + * + * Related: None + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_BEAMFORMING_CAP_WEIGHTAGE_NAME "beamforming_cap_weightage" +#define CFG_BEAMFORMING_CAP_WEIGHTAGE_DEFAULT (2) +#define CFG_BEAMFORMING_CAP_WEIGHTAGE_MIN (0) +#define CFG_BEAMFORMING_CAP_WEIGHTAGE_MAX (100) + +/* + * + * pcl_weightage - PCL Weightage to calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 10 + * + * This ini is used to increase/decrease PCL weightage in best candidate + * selection. If some APs are in PCL list, those AP will get addition + * weightage. + * + * Related: None + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_PCL_WEIGHT_WEIGHTAGE_NAME "pcl_weightage" +#define CFG_PCL_WEIGHT_DEFAULT (10) +#define CFG_PCL_WEIGHT_MIN (0) +#define CFG_PCL_WEIGHT_MAX (100) + +/* + * + * channel_congestion_weightage - channel Congestion Weightage to + * calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 5 + * + * This ini is used to increase/decrease channel congestion weightage in + * candidate selection. Congestion is measured with the help of ESP/QBSS load. + * + * Related: num_esp_qbss_slots + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_CHANNEL_CONGESTION_WEIGHTAGE_NAME "channel_congestion_weightage" +#define CFG_CHANNEL_CONGESTION_WEIGHTAGE_DEFAULT (5) +#define CFG_CHANNEL_CONGESTION_WEIGHTAGE_MIN (0) +#define CFG_CHANNEL_CONGESTION_WEIGHTAGE_MAX (100) + +/* + * + * oce_wan_weightage - OCE WAN DL capacity Weightage to calculate best candidate + * @Min: 0 + * @Max: 100 + * @Default: 0 + * + * This ini is used to increase/decrease OCE WAN caps weightage in best + * candidate selection. If AP have OCE WAN information, give weightage depending + * on the downaload available capacity. + * + * Related: num_oce_wan_slots + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_OCE_WAN_WEIGHTAGE_NAME "oce_wan_weightage" +#define CFG_OCE_WAN_WEIGHTAGE_DEFAULT (0) +#define CFG_OCE_WAN_WEIGHTAGE_MIN (0) +#define CFG_OCE_WAN_WEIGHTAGE_MAX (100) + +/* + * + * best_rssi_threshold - Best Rssi for score calculation + * @Min: 0 + * @Max: 96 + * @Default: 55 + * + * This ini tells limit for best RSSI. RSSI better than this limit are + * considered as best RSSI. The best RSSI is given full rssi_weightage. + * + * Related: rssi_weightage + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_BEST_RSSI_THRESHOLD_NAME "best_rssi_threshold" +#define CFG_BEST_RSSI_THRESHOLD_DEFAULT (55) +#define CFG_BEST_RSSI_THRESHOLD_MIN (0) +#define CFG_BEST_RSSI_THRESHOLD_MAX (96) + +/* + * + * good_rssi_threshold - Good Rssi for score calculation + * @Min: 0 + * @Max: 96 + * @Default: 70 + * + * This ini tells limit for good RSSI. RSSI better than this limit and less + * than best_rssi_threshold is considered as good RSSI. + * + * Related: rssi_weightage, best_rssi_threshold + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_GOOD_RSSI_THRESHOLD_NAME "good_rssi_threshold" +#define CFG_GOOD_RSSI_THRESHOLD_DEFAULT (70) +#define CFG_GOOD_RSSI_THRESHOLD_MIN (0) +#define CFG_GOOD_RSSI_THRESHOLD_MAX (96) + +/* + * + * bad_rssi_threshold - Bad Rssi for score calculation + * @Min: 0 + * @Max: 96 + * @Default: 80 + * + * This ini tells limit for Bad RSSI. RSSI greater then bad_rssi_threshold + * is considered as bad RSSI. + * + * Related: rssi_weightage, good_rssi_threshold + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_BAD_RSSI_THRESHOLD_NAME "bad_rssi_threshold" +#define CFG_BAD_RSSI_THRESHOLD_DEFAULT (80) +#define CFG_BAD_RSSI_THRESHOLD_MIN (0) +#define CFG_BAD_RSSI_THRESHOLD_MAX (96) + +/* + * + * good_rssi_pcnt - Percent Score to Good RSSI out of total RSSI score. + * @Min: 0 + * @Max: 100 + * @Default: 80 + * + * This ini tells about how much percent should be given to good RSSI(RSSI + * between best_rssi_threshold and good_rssi_threshold) out of RSSI weightage. + * + * Related: rssi_weightage, best_rssi_threshold, good_rssi_threshold + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_GOOD_RSSI_PCNT_NAME "good_rssi_pcnt" +#define CFG_GOOD_RSSI_PCNT_DEFAULT (80) +#define CFG_GOOD_RSSI_PCNT_MIN (0) +#define CFG_GOOD_RSSI_PCNT_MAX (100) + +/* + * + * bad_rssi_pcnt - Percent Score to BAD RSSI out of total RSSI score. + * @Min: 0 + * @Max: 100 + * @Default: 25 + * + * This ini tells about how much percent should be given to bad RSSI (RSSI + * between good_rssi_threshold and bad_rssi_threshold) out of RSSI weightage. + * + * Related: rssi_weightage, good_rssi_threshold, bad_rssi_threshold + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_BAD_RSSI_PCNT_NAME "bad_rssi_pcnt" +#define CFG_BAD_RSSI_PCNT_DEFAULT (25) +#define CFG_BAD_RSSI_PCNT_MIN (0) +#define CFG_BAD_RSSI_PCNT_MAX (100) + +/* + * + * good_rssi_bucket_size - Bucket size between best and good RSSI to score. + * @Min: 1 + * @Max: 10 + * @Default: 5 + * + * This ini tells about bucket size for scoring between best and good RSSI. + * Below Best RSSI, 100% score will be given. Between best and good RSSI, RSSI + * is divided in buckets and score will be assigned bucket wise starting from + * good_rssi_pcnt. + * + * Related: rssi_weightage, good_rssi_pcnt + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_GOOD_RSSI_BUCKET_SIZE_NAME "good_rssi_bucket_size" +#define CFG_GOOD_RSSI_BUCKET_SIZE_DEFAULT (5) +#define CFG_GOOD_RSSI_BUCKET_SIZE_MIN (1) +#define CFG_GOOD_RSSI_BUCKET_SIZE_MAX (10) + +/* + * + * bad_rssi_bucket_size - Bucket size between good and bad RSSI to score. + * @Min: 1 + * @Max: 10 + * @Default: 5 + * + * This ini tells about bucket size for scoring between good and bad RSSI. + * Between good and bad RSSI, RSSI is divided in buckets and score will be + * assigned bucket wise starting from bad_rssi_pcnt. + * + * Related: rssi_weightage, bad_rssi_pcnt + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_BAD_RSSI_BUCKET_SIZE_NAME "bad_rssi_bucket_size" +#define CFG_BAD_RSSI_BUCKET_SIZE_DEFAULT (5) +#define CFG_BAD_RSSI_BUCKET_SIZE_MIN (1) +#define CFG_BAD_RSSI_BUCKET_SIZE_MAX (10) + +/* + * + * rssi_pref_5g_rssi_thresh - A RSSI threshold above which 5 GHz is not favored + * @Min: 0 + * @Max: 96 + * @Default: 76 + * + * 5G AP are given chan_band_weightage. This ini tells about RSSI threshold + * above which 5GHZ is not favored. + * + * Related: chan_band_weightage + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_RSSI_PERF_5G_THRESHOLD_NAME "rssi_pref_5g_rssi_thresh" +#define CFG_RSSI_PERF_5G_THRESHOLD_DEFAULT (76) +#define CFG_RSSI_PERF_5G_THRESHOLD_MIN (0) +#define CFG_RSSI_PERF_5G_THRESHOLD_MAX (96) + +/* + * + * bandwidth_weight_per_index - percentage as per bandwidth + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x6432190C + * + * This INI give percentage value of chan_width_weightage to be used as per + * peer bandwidth. Self BW is also considered while calculating score. Eg if + * self BW is 20 MHZ 10% will be given for all AP irrespective of the AP + * capability. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): 20 MHz - Def 12% + * 1 Index (BITS 8-15): 40 MHz - Def 25% + * 2 Index (BITS 16-23): 80 MHz - Def 50% + * 3 Index (BITS 24-31): 160 MHz - Def 100% + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: chan_width_weightage + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_BAND_WIDTH_WEIGHT_PER_INDEX_NAME "bandwidth_weight_per_index" +#define CFG_BAND_WIDTH_WEIGHT_PER_INDEX_DEFAULT (0x6432190C) +#define CFG_BAND_WIDTH_WEIGHT_PER_INDEX_MIN (0x00000000) +#define CFG_BAND_WIDTH_WEIGHT_PER_INDEX_MAX (0x64646464) + +/* + * + * nss_weight_per_index - percentage as per NSS + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x6432190C + * + * This INI give percentage value of nss_weightage to be used as per peer NSS. + * Self NSS capability is also considered. Eg if self NSS is 1x1 10% will be + * given for all AP irrespective of the AP capability. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): 1X1- Def 12% + * 1 Index (BITS 8-15): 2X2- Def 25% + * 2 Index (BITS 16-23): 3X3- Def 50% + * 3 Index (BITS 24-31): 4X4- Def 100% + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: nss_weightage + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_NSS_WEIGHT_PER_INDEX_NAME "nss_weight_per_index" +#define CFG_NSS_WEIGHT_PER_INDEX_DEFAULT (0x6432190C) +#define CFG_NSS_WEIGHT_PER_INDEX_MIN (0x00000000) +#define CFG_NSS_WEIGHT_PER_INDEX_MAX (0x64646464) + +/* + * + * band_weight_per_index - percentage as per band + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x0000644B + * + * This INI give percentage value of chan_band_weightage to be used as per band. + * If RSSI is greater than rssi_pref_5g_rssi_thresh preference is given for 5Ghz + * else, it's given for 2.4Ghz. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): 2.4GHz - Def 10% + * 1 Index (BITS 8-15): 5GHz - Def 20% + * 2 Index (BITS 16-23): Reserved + * 3 Index (BITS 24-31): Reserved + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: chan_band_weightage, rssi_pref_5g_rssi_thresh + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_BAND_WEIGHT_PER_INDEX_NAME "band_weight_per_index" +#define CFG_BAND_WEIGHT_PER_INDEX_DEFAULT (0x0000644B) +#define CFG_BAND_WEIGHT_PER_INDEX_MIN (0x00000000) +#define CFG_BAND_WEIGHT_PER_INDEX_MAX (0x64646464) + +/* + * + * num_esp_qbss_slots - number of slots in which the esp/qbss load will + * be divided + * + * @Min: 1 + * @Max: 15 + * @Default: 4 + * + * Number of slots in which the esp/qbss load will be divided. Max 15. index 0 + * is used for 'not_present. Num_slot will equally divide 100. e.g, if + * num_slot = 4 slot 1 = 0-25% load, slot 2 = 26-50% load, slot 3 = 51-75% load, + * slot 4 = 76-100% load. Remaining unused index can be 0. + * + * Usage: External + * + * + */ +#define CFG_ESP_QBSS_SLOTS_NAME "num_esp_qbss_slots" +#define CFG_ESP_QBSS_SLOTS_DEFAULT (4) +#define CFG_ESP_QBSS_SLOTS_MIN (1) +#define CFG_ESP_QBSS_SLOTS_MAX (15) + +/* + * + * esp_qbss_score_idx3_to_0 - percentage for esp/qbss load for slots 0-3 + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x19326432 + * + * This INI give percentage value of channel_congestion_weightage to be used as + * index in which the load value falls. Index 0 is for percentage when ESP/QBSS + * is not present. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): when ESP/QBSS is not present + * 1 Index (BITS 8-15): SLOT_1 + * 2 Index (BITS 16-23): SLOT_2 + * 3 Index (BITS 24-31): SLOT_3 + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: channel_congestion_weightage, num_esp_qbss_slots + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_ESP_QBSS_SCORE_IDX3_TO_0_NAME "esp_qbss_score_idx3_to_0" +#define CFG_ESP_QBSS_SCORE_IDX3_TO_0_DEFAULT (0x19326432) +#define CFG_ESP_QBSS_SCORE_IDX3_TO_0_MIN (0x00000000) +#define CFG_ESP_QBSS_SCORE_IDX3_TO_0_MAX (0x64646464) + +/* + * + * esp_qbss_score_idx7_to_4 - percentage for esp/qbss load for slots 4-7 + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x00000019 + * + * This INI give percentage value of channel_congestion_weightage to be used as + * index in which the load value falls. Used only if num_esp_qbss_slots is + * greater than 3. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): SLOT_4 + * 1 Index (BITS 8-15): SLOT_5 + * 2 Index (BITS 16-23): SLOT_6 + * 3 Index (BITS 24-31): SLOT_7 + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: channel_congestion_weightage, num_esp_qbss_slots + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_ESP_QBSS_SCORE_IDX7_TO_4_NAME "esp_qbss_score_idx7_to_4" +#define CFG_ESP_QBSS_SCORE_IDX7_TO_4_DEFAULT (0x00000019) +#define CFG_ESP_QBSS_SCORE_IDX7_TO_4_MIN (0x00000000) +#define CFG_ESP_QBSS_SCORE_IDX7_TO_4_MAX (0x64646464) + + +/* + * + * esp_qbss_score_idx11_to_8 - percentage for esp/qbss load for slots 8-11 + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x00000000 + * + * This INI give percentage value of channel_congestion_weightage to be used as + * index in which the load value falls. Used only if num_esp_qbss_slots is + * greater than 7. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): SLOT_8 + * 1 Index (BITS 8-15): SLOT_9 + * 2 Index (BITS 16-23): SLOT_10 + * 3 Index (BITS 24-31): SLOT_11 + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: channel_congestion_weightage, num_esp_qbss_slots + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_ESP_QBSS_SCORE_IDX11_TO_8_NAME "esp_qbss_score_idx11_to_8" +#define CFG_ESP_QBSS_SCORE_IDX11_TO_8_DEFAULT (0x00000000) +#define CFG_ESP_QBSS_SCORE_IDX11_TO_8_MIN (0x00000000) +#define CFG_ESP_QBSS_SCORE_IDX11_TO_8_MAX (0x64646464) + + +/* + * + * esp_qbss_score_idx15_to_12 - percentage for esp/qbss load for slots 12-15 + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x00000000 + * + * This INI give percentage value of channel_congestion_weightage to be used as + * index in which the load value falls. Used only if num_esp_qbss_slots is + * greater than 11. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): SLOT_12 + * 1 Index (BITS 8-15): SLOT_13 + * 2 Index (BITS 16-23): SLOT_14 + * 3 Index (BITS 24-31): SLOT_15 + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: channel_congestion_weightage, num_esp_qbss_slots + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_ESP_QBSS_SCORE_IDX15_TO_12_NAME "esp_qbss_score_idx15_to_12" +#define CFG_ESP_QBSS_SCORE_IDX15_TO_12_DEFAULT (0x00000000) +#define CFG_ESP_QBSS_SCORE_IDX15_TO_12_MIN (0x00000000) +#define CFG_ESP_QBSS_SCORE_IDX15_TO_12_MAX (0x64646464) + +/* + * + * num_oce_wan_slots - number of slots in which the oce wan metrics will + * be divided + * + * @Min: 1 + * @Max: 15 + * @Default: 8 + * + * Number of slots in which the oce wan metrics will be divided. Max 15. index 0 + * is used for not_present. Num_slot will equally divide 100. e.g, if + * num_slot = 4 slot 1 = 0-3 DL CAP, slot 2 = 4-7 DL CAP, slot 3 = 8-11 DL CAP, + * slot 4 = 12-15 DL CAP. Remaining unused index can be 0. + * + * Related: oce_wan_weightage + * + * Usage: External + * + * + */ +#define CFG_OCE_WAN_SLOTS_NAME "num_oce_wan_slots" +#define CFG_OCE_WAN_SLOTS_DEFAULT (8) +#define CFG_OCE_WAN_SLOTS_MIN (1) +#define CFG_OCE_WAN_SLOTS_MAX (15) + +/* + * + * oce_wan_score_idx3_to_0 - percentage for OCE WAN metrics score for slots 0-3 + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x00000000 + * + * This INI give percentage value of OCE WAN metrics DL CAP, to be used as + * index in which the DL CAP value falls. Index 0 is for percentage when + * OCE WAN metrics DL CAP is not present. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): when OCE WAN metrics DL CAP is not present + * 1 Index (BITS 8-15): SLOT_1 + * 2 Index (BITS 16-23): SLOT_2 + * 3 Index (BITS 24-31): SLOT_3 + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: num_oce_wan_slots, oce_wan_weightage + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_OCE_WAN_SCORE_IDX3_TO_0_NAME "oce_wan_score_idx3_to_0" +#define CFG_OCE_WAN_SCORE_IDX3_TO_0_DEFAULT (0x00000000) +#define CFG_OCE_WAN_SCORE_IDX3_TO_0_MIN (0x00000000) +#define CFG_OCE_WAN_SCORE_IDX3_TO_0_MAX (0x64646464) + +/* + * + * oce_wan_score_idx7_to_4 - percentage for OCE WAN metrics score for slots 4-7 + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x64640000 + * + * This INI give percentage value of OCE WAN metrics DL CAP, to be used as + * index in which the DL CAP value falls. Used only if num_oce_wan_slots is + * greater than 3. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): SLOT_4 + * 1 Index (BITS 8-15): SLOT_5 + * 2 Index (BITS 16-23): SLOT_6 + * 3 Index (BITS 24-31): SLOT_7 + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: num_oce_wan_slots, oce_wan_weightage + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_OCE_WAN_SCORE_IDX7_TO_4_NAME "oce_wan_score_idx7_to_4" +#define CFG_OCE_WAN_SCORE_IDX7_TO_4_DEFAULT (0x64640000) +#define CFG_OCE_WAN_SCORE_IDX7_TO_4_MIN (0x00000000) +#define CFG_OCE_WAN_SCORE_IDX7_TO_4_MAX (0x64646464) + +/* + * + * oce_wan_score_idx11_to_8 - percentage for OCE WAN metrics score for slot 8-11 + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x00000064 + * + * This INI give percentage value of OCE WAN metrics DL CAP, to be used as + * index in which the DL CAP value falls. Used only if num_oce_wan_slots is + * greater than 7. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): SLOT_8 + * 1 Index (BITS 8-15): SLOT_9 + * 2 Index (BITS 16-23): SLOT_10 + * 3 Index (BITS 24-31): SLOT_11 + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: num_oce_wan_slots, oce_wan_weightage + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_OCE_WAN_SCORE_IDX11_TO_8_NAME "oce_wan_score_idx11_to_8" +#define CFG_OCE_WAN_SCORE_IDX11_TO_8_DEFAULT (0x00000064) +#define CFG_OCE_WAN_SCORE_IDX11_TO_8_MIN (0x00000000) +#define CFG_OCE_WAN_SCORE_IDX11_TO_8_MAX (0x64646464) + +/* + * + * oce_wan_score_idx15_to_12 - % for OCE WAN metrics score for slot 12-15 + * @Min: 0x00000000 + * @Max: 0x64646464 + * @Default: 0x00000000 + * + * This INI give percentage value of OCE WAN metrics DL CAP, to be used as + * index in which the DL CAP value falls. Used only if num_oce_wan_slots is + * greater than 11. + * + * Indexes are defined in this way. + * 0 Index (BITS 0-7): SLOT_12 + * 1 Index (BITS 8-15): SLOT_13 + * 2 Index (BITS 16-23): SLOT_14 + * 3 Index (BITS 24-31): SLOT_15 + * These percentage values are stored in HEX. For any index max value, can be 64 + * + * Related: num_oce_wan_slots, oce_wan_weightage + * + * Supported Feature: STA Candidate selection + * + * Usage: External + * + * + */ +#define CFG_OCE_WAN_SCORE_IDX15_TO_12_NAME "oce_wan_score_idx15_to_12" +#define CFG_OCE_WAN_SCORE_IDX15_TO_12_DEFAULT (0x00000000) +#define CFG_OCE_WAN_SCORE_IDX15_TO_12_MIN (0x00000000) +#define CFG_OCE_WAN_SCORE_IDX15_TO_12_MAX (0x64646464) + +/* + * + * enable_scoring_for_roam - enable/disable scoring logic in FW for candidate + * selection during roaming + * + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable scoring logic in FW for candidate + * selection during roaming. + * + * Supported Feature: STA Candidate selection by FW during roaming based on + * scoring logic. + * + * Usage: External + * + * + */ +#define CFG_ENABLE_SCORING_FOR_ROAM_NAME "enable_scoring_for_roam" +#define CFG_ENABLE_SCORING_FOR_ROAM_DEFAULT (0) +#define CFG_ENABLE_SCORING_FOR_ROAM_MIN (0) +#define CFG_ENABLE_SCORING_FOR_ROAM_MAX (1) + /* * * gChanSwitchHostapdRateEnabled - Enable/disable hostapd rate when doing SAP @@ -12235,6 +13104,7 @@ enum hdd_external_acs_freq_band { #define CFG_MBO_CAND_RSSI_BTC_THRESHOLD_MIN (-120) #define CFG_MBO_CAND_RSSI_BTC_THRESHOLD_MAX (0) + /* * Type declarations */ @@ -13052,6 +13922,39 @@ struct hdd_config { uint32_t scan_11d_interval; bool chan_switch_hostapd_rate_enabled; bool is_bssid_hint_priority; + uint8_t rssi_weightage; + uint8_t ht_caps_weightage; + uint8_t vht_caps_weightage; + uint8_t he_caps_weightage; + uint8_t chan_width_weightage; + uint8_t chan_band_weightage; + uint8_t nss_weightage; + uint8_t beamforming_cap_weightage; + uint8_t pcl_weightage; + uint8_t channel_congestion_weightage; + uint8_t oce_wan_weightage; + uint32_t bandwidth_weight_per_index; + uint32_t nss_weight_per_index; + uint32_t band_weight_per_index; + uint32_t best_rssi_threshold; + uint32_t good_rssi_threshold; + uint32_t bad_rssi_threshold; + uint32_t good_rssi_pcnt; + uint32_t bad_rssi_pcnt; + uint32_t good_rssi_bucket_size; + uint32_t bad_rssi_bucket_size; + uint32_t rssi_pref_5g_rssi_thresh; + uint8_t num_esp_qbss_slots; + uint32_t esp_qbss_score_slots3_to_0; + uint32_t esp_qbss_score_slots7_to_4; + uint32_t esp_qbss_score_slots11_to_8; + uint32_t esp_qbss_score_slots15_to_12; + uint8_t num_oce_wan_slots; + uint32_t oce_wan_score_slots3_to_0; + uint32_t oce_wan_score_slots7_to_4; + uint32_t oce_wan_score_slots11_to_8; + uint32_t oce_wan_score_slots15_to_12; + bool enable_scoring_for_roam; bool is_fils_enabled; /* mbo related thresholds */ int8_t mbo_candidate_rssi_thres; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index c7bf5f2cf2b4..fd6f2a0ce77c 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -4893,6 +4893,238 @@ struct reg_table_entry g_registry_table[] = { CFG_IS_BSSID_HINT_PRIORITY_MIN, CFG_IS_BSSID_HINT_PRIORITY_MAX), + REG_VARIABLE(CFG_RSSI_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, rssi_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_RSSI_WEIGHTAGE_DEFAULT, + CFG_RSSI_WEIGHTAGE_MIN, + CFG_RSSI_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_HT_CAPABILITY_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, ht_caps_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_HT_CAPABILITY_WEIGHTAGE_DEFAULT, + CFG_HT_CAPABILITY_WEIGHTAGE_MIN, + CFG_HT_CAPABILITY_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_VHT_CAPABILITY_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, vht_caps_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_VHT_CAPABILITY_WEIGHTAGE_DEFAULT, + CFG_VHT_CAPABILITY_WEIGHTAGE_MIN, + CFG_VHT_CAPABILITY_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_HE_CAPABILITY_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, he_caps_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_HE_CAPABILITY_WEIGHTAGE_DEFAULT, + CFG_HE_CAPABILITY_WEIGHTAGE_MIN, + CFG_HE_CAPABILITY_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_CHAN_WIDTH_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, chan_width_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_CHAN_WIDTH_WEIGHTAGE_DEFAULT, + CFG_CHAN_WIDTH_WEIGHTAGE_MIN, + CFG_CHAN_WIDTH_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_CHAN_BAND_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, chan_band_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_CHAN_BAND_WEIGHTAGE_DEFAULT, + CFG_CHAN_BAND_WEIGHTAGE_MIN, + CFG_CHAN_BAND_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_NSS_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, nss_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_NSS_WEIGHTAGE_DEFAULT, + CFG_NSS_WEIGHTAGE_MIN, + CFG_NSS_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_BEAMFORMING_CAP_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, beamforming_cap_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_BEAMFORMING_CAP_WEIGHTAGE_DEFAULT, + CFG_BEAMFORMING_CAP_WEIGHTAGE_MIN, + CFG_BEAMFORMING_CAP_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_PCL_WEIGHT_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, pcl_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_PCL_WEIGHT_DEFAULT, + CFG_PCL_WEIGHT_MIN, + CFG_PCL_WEIGHT_MAX), + + REG_VARIABLE(CFG_CHANNEL_CONGESTION_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, channel_congestion_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_CHANNEL_CONGESTION_WEIGHTAGE_DEFAULT, + CFG_CHANNEL_CONGESTION_WEIGHTAGE_MIN, + CFG_CHANNEL_CONGESTION_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_OCE_WAN_WEIGHTAGE_NAME, WLAN_PARAM_Integer, + struct hdd_config, oce_wan_weightage, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_WAN_WEIGHTAGE_DEFAULT, + CFG_OCE_WAN_WEIGHTAGE_MIN, + CFG_OCE_WAN_WEIGHTAGE_MAX), + + REG_VARIABLE(CFG_BEST_RSSI_THRESHOLD_NAME, WLAN_PARAM_Integer, + struct hdd_config, best_rssi_threshold, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_BEST_RSSI_THRESHOLD_DEFAULT, + CFG_BEST_RSSI_THRESHOLD_MIN, + CFG_BEST_RSSI_THRESHOLD_MAX), + + REG_VARIABLE(CFG_GOOD_RSSI_THRESHOLD_NAME, WLAN_PARAM_Integer, + struct hdd_config, good_rssi_threshold, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_GOOD_RSSI_THRESHOLD_DEFAULT, + CFG_GOOD_RSSI_THRESHOLD_MIN, + CFG_GOOD_RSSI_THRESHOLD_MAX), + + REG_VARIABLE(CFG_BAD_RSSI_THRESHOLD_NAME, WLAN_PARAM_Integer, + struct hdd_config, bad_rssi_threshold, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_BAD_RSSI_THRESHOLD_DEFAULT, + CFG_BAD_RSSI_THRESHOLD_MIN, + CFG_BAD_RSSI_THRESHOLD_MAX), + + REG_VARIABLE(CFG_GOOD_RSSI_PCNT_NAME, WLAN_PARAM_Integer, + struct hdd_config, good_rssi_pcnt, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_GOOD_RSSI_PCNT_DEFAULT, + CFG_GOOD_RSSI_PCNT_MIN, + CFG_GOOD_RSSI_PCNT_MAX), + + REG_VARIABLE(CFG_BAD_RSSI_PCNT_NAME, WLAN_PARAM_Integer, + struct hdd_config, bad_rssi_pcnt, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_BAD_RSSI_PCNT_DEFAULT, + CFG_BAD_RSSI_PCNT_MIN, + CFG_BAD_RSSI_PCNT_MAX), + + REG_VARIABLE(CFG_GOOD_RSSI_BUCKET_SIZE_NAME, WLAN_PARAM_Integer, + struct hdd_config, good_rssi_bucket_size, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_GOOD_RSSI_BUCKET_SIZE_DEFAULT, + CFG_GOOD_RSSI_BUCKET_SIZE_MIN, + CFG_GOOD_RSSI_BUCKET_SIZE_MAX), + + REG_VARIABLE(CFG_BAD_RSSI_BUCKET_SIZE_NAME, WLAN_PARAM_Integer, + struct hdd_config, bad_rssi_bucket_size, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_BAD_RSSI_BUCKET_SIZE_DEFAULT, + CFG_BAD_RSSI_BUCKET_SIZE_MIN, + CFG_BAD_RSSI_BUCKET_SIZE_MAX), + + REG_VARIABLE(CFG_RSSI_PERF_5G_THRESHOLD_NAME, WLAN_PARAM_Integer, + struct hdd_config, rssi_pref_5g_rssi_thresh, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_RSSI_PERF_5G_THRESHOLD_DEFAULT, + CFG_RSSI_PERF_5G_THRESHOLD_MIN, + CFG_RSSI_PERF_5G_THRESHOLD_MAX), + + REG_VARIABLE(CFG_BAND_WIDTH_WEIGHT_PER_INDEX_NAME, + WLAN_PARAM_HexInteger, + struct hdd_config, bandwidth_weight_per_index, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_BAND_WIDTH_WEIGHT_PER_INDEX_DEFAULT, + CFG_BAND_WIDTH_WEIGHT_PER_INDEX_MIN, + CFG_BAND_WIDTH_WEIGHT_PER_INDEX_MAX), + + REG_VARIABLE(CFG_NSS_WEIGHT_PER_INDEX_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, nss_weight_per_index, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_NSS_WEIGHT_PER_INDEX_DEFAULT, + CFG_NSS_WEIGHT_PER_INDEX_MIN, + CFG_NSS_WEIGHT_PER_INDEX_MAX), + + REG_VARIABLE(CFG_BAND_WEIGHT_PER_INDEX_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, band_weight_per_index, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_BAND_WEIGHT_PER_INDEX_DEFAULT, + CFG_BAND_WEIGHT_PER_INDEX_MIN, + CFG_BAND_WEIGHT_PER_INDEX_MAX), + + REG_VARIABLE(CFG_ESP_QBSS_SLOTS_NAME, WLAN_PARAM_Integer, + struct hdd_config, num_esp_qbss_slots, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ESP_QBSS_SLOTS_DEFAULT, + CFG_ESP_QBSS_SLOTS_MIN, + CFG_ESP_QBSS_SLOTS_MAX), + + REG_VARIABLE(CFG_ESP_QBSS_SCORE_IDX3_TO_0_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, esp_qbss_score_slots3_to_0, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ESP_QBSS_SCORE_IDX3_TO_0_DEFAULT, + CFG_ESP_QBSS_SCORE_IDX3_TO_0_MIN, + CFG_ESP_QBSS_SCORE_IDX3_TO_0_MAX), + + REG_VARIABLE(CFG_ESP_QBSS_SCORE_IDX7_TO_4_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, esp_qbss_score_slots7_to_4, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ESP_QBSS_SCORE_IDX7_TO_4_DEFAULT, + CFG_ESP_QBSS_SCORE_IDX7_TO_4_MIN, + CFG_ESP_QBSS_SCORE_IDX7_TO_4_MAX), + + REG_VARIABLE(CFG_ESP_QBSS_SCORE_IDX11_TO_8_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, esp_qbss_score_slots11_to_8, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ESP_QBSS_SCORE_IDX11_TO_8_DEFAULT, + CFG_ESP_QBSS_SCORE_IDX11_TO_8_MIN, + CFG_ESP_QBSS_SCORE_IDX11_TO_8_MAX), + + REG_VARIABLE(CFG_ESP_QBSS_SCORE_IDX15_TO_12_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, esp_qbss_score_slots15_to_12, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ESP_QBSS_SCORE_IDX15_TO_12_DEFAULT, + CFG_ESP_QBSS_SCORE_IDX15_TO_12_MIN, + CFG_ESP_QBSS_SCORE_IDX15_TO_12_MAX), + + REG_VARIABLE(CFG_OCE_WAN_SLOTS_NAME, WLAN_PARAM_Integer, + struct hdd_config, num_oce_wan_slots, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_WAN_SLOTS_DEFAULT, + CFG_OCE_WAN_SLOTS_MIN, + CFG_OCE_WAN_SLOTS_MAX), + + REG_VARIABLE(CFG_OCE_WAN_SCORE_IDX3_TO_0_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, oce_wan_score_slots3_to_0, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_WAN_SCORE_IDX3_TO_0_DEFAULT, + CFG_OCE_WAN_SCORE_IDX3_TO_0_MIN, + CFG_OCE_WAN_SCORE_IDX3_TO_0_MAX), + + REG_VARIABLE(CFG_OCE_WAN_SCORE_IDX7_TO_4_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, oce_wan_score_slots7_to_4, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_WAN_SCORE_IDX7_TO_4_DEFAULT, + CFG_OCE_WAN_SCORE_IDX7_TO_4_MIN, + CFG_OCE_WAN_SCORE_IDX7_TO_4_MAX), + + REG_VARIABLE(CFG_OCE_WAN_SCORE_IDX11_TO_8_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, oce_wan_score_slots11_to_8, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_WAN_SCORE_IDX11_TO_8_DEFAULT, + CFG_OCE_WAN_SCORE_IDX11_TO_8_MIN, + CFG_OCE_WAN_SCORE_IDX11_TO_8_MAX), + + REG_VARIABLE(CFG_OCE_WAN_SCORE_IDX15_TO_12_NAME, WLAN_PARAM_HexInteger, + struct hdd_config, oce_wan_score_slots15_to_12, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_WAN_SCORE_IDX15_TO_12_DEFAULT, + CFG_OCE_WAN_SCORE_IDX15_TO_12_MIN, + CFG_OCE_WAN_SCORE_IDX15_TO_12_MAX), + + REG_VARIABLE(CFG_ENABLE_SCORING_FOR_ROAM_NAME, WLAN_PARAM_Integer, + struct hdd_config, enable_scoring_for_roam, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_SCORING_FOR_ROAM_DEFAULT, + CFG_ENABLE_SCORING_FOR_ROAM_MIN, + CFG_ENABLE_SCORING_FOR_ROAM_MAX), + REG_VARIABLE(CFG_MBO_CANDIDATE_RSSI_THRESHOLD_NAME, WLAN_PARAM_SignedInteger, struct hdd_config, mbo_candidate_rssi_thres, @@ -6607,6 +6839,106 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx) hdd_debug("Name = [%s] value = [%u]", CFG_IS_BSSID_HINT_PRIORITY_NAME, hdd_ctx->config->is_bssid_hint_priority); + hdd_debug("Name = [%s] value = [%u]", + CFG_RSSI_WEIGHTAGE_NAME, + hdd_ctx->config->rssi_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_HT_CAPABILITY_WEIGHTAGE_NAME, + hdd_ctx->config->ht_caps_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_VHT_CAPABILITY_WEIGHTAGE_NAME, + hdd_ctx->config->vht_caps_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_HE_CAPABILITY_WEIGHTAGE_NAME, + hdd_ctx->config->he_caps_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_CHAN_WIDTH_WEIGHTAGE_NAME, + hdd_ctx->config->chan_width_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_CHAN_BAND_WEIGHTAGE_NAME, + hdd_ctx->config->chan_band_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_NSS_WEIGHTAGE_NAME, + hdd_ctx->config->nss_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_BEAMFORMING_CAP_WEIGHTAGE_NAME, + hdd_ctx->config->beamforming_cap_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_PCL_WEIGHT_WEIGHTAGE_NAME, + hdd_ctx->config->pcl_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_CHANNEL_CONGESTION_WEIGHTAGE_NAME, + hdd_ctx->config->channel_congestion_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_OCE_WAN_WEIGHTAGE_NAME, + hdd_ctx->config->oce_wan_weightage); + hdd_debug("Name = [%s] value = [%u]", + CFG_BAND_WIDTH_WEIGHT_PER_INDEX_NAME, + hdd_ctx->config->bandwidth_weight_per_index); + hdd_debug("Name = [%s] value = [%u]", + CFG_NSS_WEIGHT_PER_INDEX_NAME, + hdd_ctx->config->nss_weight_per_index); + hdd_debug("Name = [%s] value = [%u]", + CFG_BAND_WEIGHT_PER_INDEX_NAME, + hdd_ctx->config->band_weight_per_index); + hdd_debug("Name = [%s] value = [%u]", + CFG_BEST_RSSI_THRESHOLD_NAME, + hdd_ctx->config->best_rssi_threshold); + hdd_debug("Name = [%s] value = [%u]", + CFG_GOOD_RSSI_THRESHOLD_NAME, + hdd_ctx->config->good_rssi_threshold); + hdd_debug("Name = [%s] value = [%u]", + CFG_BAD_RSSI_THRESHOLD_NAME, + hdd_ctx->config->bad_rssi_threshold); + hdd_debug("Name = [%s] value = [%u]", + CFG_GOOD_RSSI_PCNT_NAME, + hdd_ctx->config->good_rssi_pcnt); + hdd_debug("Name = [%s] value = [%u]", + CFG_BAD_RSSI_PCNT_NAME, + hdd_ctx->config->bad_rssi_pcnt); + hdd_debug("Name = [%s] value = [%u]", + CFG_GOOD_RSSI_BUCKET_SIZE_NAME, + hdd_ctx->config->good_rssi_bucket_size); + hdd_debug("Name = [%s] value = [%u]", + CFG_BAD_RSSI_BUCKET_SIZE_NAME, + hdd_ctx->config->bad_rssi_bucket_size); + hdd_debug("Name = [%s] value = [%u]", + CFG_RSSI_PERF_5G_THRESHOLD_NAME, + hdd_ctx->config->rssi_pref_5g_rssi_thresh); + hdd_debug("Name = [%s] value = [%u]", + CFG_ESP_QBSS_SLOTS_NAME, + hdd_ctx->config->num_esp_qbss_slots); + hdd_debug("Name = [%s] value = [%u]", + CFG_ESP_QBSS_SCORE_IDX3_TO_0_NAME, + hdd_ctx->config->esp_qbss_score_slots3_to_0); + hdd_debug("Name = [%s] value = [%u]", + CFG_ESP_QBSS_SCORE_IDX7_TO_4_NAME, + hdd_ctx->config->esp_qbss_score_slots7_to_4); + hdd_debug("Name = [%s] value = [%u]", + CFG_ESP_QBSS_SCORE_IDX11_TO_8_NAME, + hdd_ctx->config->esp_qbss_score_slots11_to_8); + hdd_debug("Name = [%s] value = [%u]", + CFG_ESP_QBSS_SCORE_IDX15_TO_12_NAME, + hdd_ctx->config->esp_qbss_score_slots15_to_12); + hdd_debug("Name = [%s] value = [%u]", + CFG_ENABLE_SCORING_FOR_ROAM_NAME, + hdd_ctx->config->enable_scoring_for_roam); + + hdd_debug("Name = [%s] value = [%u]", + CFG_OCE_WAN_SLOTS_NAME, + hdd_ctx->config->num_oce_wan_slots); + hdd_debug("Name = [%s] value = [%u]", + CFG_OCE_WAN_SCORE_IDX3_TO_0_NAME, + hdd_ctx->config->oce_wan_score_slots3_to_0); + hdd_debug("Name = [%s] value = [%u]", + CFG_OCE_WAN_SCORE_IDX7_TO_4_NAME, + hdd_ctx->config->oce_wan_score_slots7_to_4); + hdd_debug("Name = [%s] value = [%u]", + CFG_OCE_WAN_SCORE_IDX11_TO_8_NAME, + hdd_ctx->config->oce_wan_score_slots11_to_8); + hdd_debug("Name = [%s] value = [%u]", + CFG_OCE_WAN_SCORE_IDX15_TO_12_NAME, + hdd_ctx->config->oce_wan_score_slots15_to_12); } @@ -7885,6 +8217,147 @@ hdd_to_csr_wmm_mode(enum hdd_wmm_user_mode mode) } } +/** + * hdd_limit_max_per_index_score() -check if per index score doesnt exceed 100% + * (0x64). If it exceed make it 100% + * + * @per_index_score: per_index_score as input + * + * Return: per_index_score within the max limit + */ +static uint32_t hdd_limit_max_per_index_score(uint32_t per_index_score) +{ + uint8_t i, score; + + for (i = 0; i < MAX_INDEX_PER_INI; i++) { + score = WLAN_GET_SCORE_PERCENTAGE(per_index_score, i); + if (score > MAX_INDEX_SCORE) + WLAN_SET_SCORE_PERCENTAGE(per_index_score, + MAX_INDEX_SCORE, i); + } + + return per_index_score; +} + +/** + * hdd_update_score_params() -initializes the sme config for bss score params + * + * @config: pointer to config + * @score_params: bss score params + * + * Return: None + */ +static void hdd_update_bss_score_params(struct hdd_config *config, + struct sir_score_config *score_params) +{ + int total_weight; + + score_params->enable_scoring_for_roam = + config->enable_scoring_for_roam; + score_params->weight_cfg.rssi_weightage = config->rssi_weightage; + score_params->weight_cfg.ht_caps_weightage = config->ht_caps_weightage; + score_params->weight_cfg.vht_caps_weightage = + config->vht_caps_weightage; + score_params->weight_cfg.he_caps_weightage = + config->he_caps_weightage; + score_params->weight_cfg.chan_width_weightage = + config->chan_width_weightage; + score_params->weight_cfg.chan_band_weightage = + config->chan_band_weightage; + score_params->weight_cfg.nss_weightage = config->nss_weightage; + score_params->weight_cfg.beamforming_cap_weightage = + config->beamforming_cap_weightage; + score_params->weight_cfg.pcl_weightage = config->pcl_weightage; + score_params->weight_cfg.channel_congestion_weightage = + config->channel_congestion_weightage; + score_params->weight_cfg.oce_wan_weightage = config->oce_wan_weightage; + + total_weight = score_params->weight_cfg.rssi_weightage + + score_params->weight_cfg.ht_caps_weightage + + score_params->weight_cfg.vht_caps_weightage + + score_params->weight_cfg.he_caps_weightage + + score_params->weight_cfg.chan_width_weightage + + score_params->weight_cfg.chan_band_weightage + + score_params->weight_cfg.nss_weightage + + score_params->weight_cfg.beamforming_cap_weightage + + score_params->weight_cfg.pcl_weightage + + score_params->weight_cfg.channel_congestion_weightage + + score_params->weight_cfg.oce_wan_weightage; + + if (total_weight > BEST_CANDIDATE_MAX_WEIGHT) { + hdd_err("total weight is greater than %d fallback to default values", + BEST_CANDIDATE_MAX_WEIGHT); + + score_params->weight_cfg.rssi_weightage = RSSI_WEIGHTAGE; + score_params->weight_cfg.ht_caps_weightage = + HT_CAPABILITY_WEIGHTAGE; + score_params->weight_cfg.vht_caps_weightage = VHT_CAP_WEIGHTAGE; + score_params->weight_cfg.he_caps_weightage = HE_CAP_WEIGHTAGE; + score_params->weight_cfg.chan_width_weightage = + CHAN_WIDTH_WEIGHTAGE; + score_params->weight_cfg.chan_band_weightage = + CHAN_BAND_WEIGHTAGE; + score_params->weight_cfg.nss_weightage = NSS_WEIGHTAGE; + score_params->weight_cfg.beamforming_cap_weightage = + BEAMFORMING_CAP_WEIGHTAGE; + score_params->weight_cfg.pcl_weightage = PCL_WEIGHT; + score_params->weight_cfg.channel_congestion_weightage = + CHANNEL_CONGESTION_WEIGHTAGE; + score_params->weight_cfg.oce_wan_weightage = OCE_WAN_WEIGHTAGE; + } + + score_params->bandwidth_weight_per_index = + hdd_limit_max_per_index_score( + config->bandwidth_weight_per_index); + score_params->nss_weight_per_index = + hdd_limit_max_per_index_score(config->nss_weight_per_index); + score_params->band_weight_per_index = + hdd_limit_max_per_index_score(config->band_weight_per_index); + + score_params->rssi_score.best_rssi_threshold = + config->best_rssi_threshold; + score_params->rssi_score.good_rssi_threshold = + config->good_rssi_threshold; + score_params->rssi_score.bad_rssi_threshold = + config->bad_rssi_threshold; + score_params->rssi_score.good_rssi_pcnt = config->good_rssi_pcnt; + score_params->rssi_score.bad_rssi_pcnt = config->bad_rssi_pcnt; + score_params->rssi_score.good_rssi_bucket_size = + config->good_rssi_bucket_size; + score_params->rssi_score.bad_rssi_bucket_size = + config->bad_rssi_bucket_size; + score_params->rssi_score.rssi_pref_5g_rssi_thresh = + config->rssi_pref_5g_rssi_thresh; + + score_params->esp_qbss_scoring.num_slot = config->num_esp_qbss_slots; + score_params->esp_qbss_scoring.score_pcnt3_to_0 = + hdd_limit_max_per_index_score( + config->esp_qbss_score_slots3_to_0); + score_params->esp_qbss_scoring.score_pcnt7_to_4 = + hdd_limit_max_per_index_score( + config->esp_qbss_score_slots7_to_4); + score_params->esp_qbss_scoring.score_pcnt11_to_8 = + hdd_limit_max_per_index_score( + config->esp_qbss_score_slots11_to_8); + score_params->esp_qbss_scoring.score_pcnt15_to_12 = + hdd_limit_max_per_index_score( + config->esp_qbss_score_slots15_to_12); + + score_params->oce_wan_scoring.num_slot = config->num_oce_wan_slots; + score_params->oce_wan_scoring.score_pcnt3_to_0 = + hdd_limit_max_per_index_score( + config->oce_wan_score_slots3_to_0); + score_params->oce_wan_scoring.score_pcnt7_to_4 = + hdd_limit_max_per_index_score( + config->oce_wan_score_slots7_to_4); + score_params->oce_wan_scoring.score_pcnt11_to_8 = + hdd_limit_max_per_index_score( + config->oce_wan_score_slots11_to_8); + score_params->oce_wan_scoring.score_pcnt15_to_12 = + hdd_limit_max_per_index_score( + config->oce_wan_score_slots15_to_12); +} + /** * hdd_set_sme_config() -initializes the sme configuration parameters * @@ -8293,6 +8766,9 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) smeConfig->csrConfig.num_11ag_tx_chains = hdd_ctx->config->num_11ag_tx_chains; + hdd_update_bss_score_params(hdd_ctx->config, + &smeConfig->csrConfig.bss_score_params); + status = sme_update_config(hdd_ctx->hHal, smeConfig); if (!QDF_IS_STATUS_SUCCESS(status)) hdd_err("sme_update_config() failure: %d", status); diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index ef2295335c73..f037ec331bc3 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -3099,6 +3099,93 @@ struct roam_ext_params { uint32_t bg_scan_client_bitmap; }; +/** + * struct sir_weight_config - weight params to + * calculate best candidate + * @rssi_weightage: RSSI weightage + * @ht_caps_weightage: HT caps weightage + * @vht_caps_weightage: VHT caps weightage + * @he_caps_weightage: HE caps weightage + * @chan_width_weightage: Channel width weightage + * @chan_band_weightage: Channel band weightage + * @nss_weightage: NSS weightage + * @beamforming_cap_weightage: Beamforming caps weightage + * @pcl_weightage: PCL weightage + * @channel_congestion_weightage: channel congestion weightage + * @oce_wan_weightage: OCE WAN metrics weightage + */ +struct sir_weight_config { + uint8_t rssi_weightage; + uint8_t ht_caps_weightage; + uint8_t vht_caps_weightage; + uint8_t he_caps_weightage; + uint8_t chan_width_weightage; + uint8_t chan_band_weightage; + uint8_t nss_weightage; + uint8_t beamforming_cap_weightage; + uint8_t pcl_weightage; + uint8_t channel_congestion_weightage; + uint8_t oce_wan_weightage; +}; + +struct sir_rssi_cfg_score { + uint32_t best_rssi_threshold; + uint32_t good_rssi_threshold; + uint32_t bad_rssi_threshold; + uint32_t good_rssi_pcnt; + uint32_t bad_rssi_pcnt; + uint32_t good_rssi_bucket_size; + uint32_t bad_rssi_bucket_size; + uint32_t rssi_pref_5g_rssi_thresh; +}; + +/** + * struct sir_per_slot_scoring - define % score for differents slots for a + * scoring param. + * num_slot: number of slots in which the param will be divided. + * Max 15. index 0 is used for 'not_present. Num_slot will + * equally divide 100. e.g, if num_slot = 4 slot 0 = 0-25%, slot + * 1 = 26-50% slot 2 = 51-75%, slot 3 = 76-100% + * score_pcnt3_to_0: Conatins score percentage for slot 0-3 + * BITS 0-7 :- the scoring pcnt when not present + * BITS 8-15 :- SLOT_1 + * BITS 16-23 :- SLOT_2 + * BITS 24-31 :- SLOT_3 + * score_pcnt7_to_4: Conatins score percentage for slot 4-7 + * BITS 0-7 :- SLOT_4 + * BITS 8-15 :- SLOT_5 + * BITS 16-23 :- SLOT_6 + * BITS 24-31 :- SLOT_7 + * score_pcnt11_to_8: Conatins score percentage for slot 8-11 + * BITS 0-7 :- SLOT_8 + * BITS 8-15 :- SLOT_9 + * BITS 16-23 :- SLOT_10 + * BITS 24-31 :- SLOT_11 + * score_pcnt15_to_12: Conatins score percentage for slot 12-15 + * BITS 0-7 :- SLOT_12 + * BITS 8-15 :- SLOT_13 + * BITS 16-23 :- SLOT_14 + * BITS 24-31 :- SLOT_15 + */ +struct sir_per_slot_scoring { + uint32_t num_slot; + uint32_t score_pcnt3_to_0; + uint32_t score_pcnt7_to_4; + uint32_t score_pcnt11_to_8; + uint32_t score_pcnt15_to_12; +}; + +struct sir_score_config { + bool enable_scoring_for_roam; + struct sir_weight_config weight_cfg; + struct sir_rssi_cfg_score rssi_score; + struct sir_per_slot_scoring esp_qbss_scoring; + struct sir_per_slot_scoring oce_wan_scoring; + uint32_t bandwidth_weight_per_index; + uint32_t nss_weight_per_index; + uint32_t band_weight_per_index; +}; + /** * struct pmkid_mode_bits - Bit flags for PMKID usage in RSN IE * @fw_okc: Opportunistic key caching enable in firmware @@ -3203,6 +3290,7 @@ typedef struct sSirRoamOffloadScanReq { enum wmi_dwelltime_adaptive_mode roamscan_adaptive_dwell_mode; tSirAddie assoc_ie; struct lca_disallow_config_params lca_config_params; + struct scoring_param score_params; } tSirRoamOffloadScanReq, *tpSirRoamOffloadScanReq; typedef struct sSirRoamOffloadScanRsp { diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 96a8d3db79ff..c65977bf246b 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1352,6 +1352,7 @@ typedef struct tagCsrConfigParam { uint32_t disallow_duration; uint32_t rssi_channel_penalization; uint32_t num_disallowed_aps; + struct sir_score_config bss_score_params; } tCsrConfigParam; /* Tush */ diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index c430f5d6b58d..2540a857d6a4 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -630,6 +630,7 @@ struct csr_config { uint32_t disallow_duration; uint32_t rssi_channel_penalization; uint32_t num_disallowed_aps; + struct sir_score_config bss_score_params; }; struct csr_channel_powerinfo { diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 88c313e0a23b..acbb4dbe354e 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -1569,6 +1569,27 @@ static void init_config_param(tpAniSirGlobal pMac) MAWC_ROAM_RSSI_HIGH_ADJUST_DEFAULT; pMac->roam.configParam.csr_mawc_config.mawc_roam_rssi_low_adjust = MAWC_ROAM_RSSI_LOW_ADJUST_DEFAULT; + + qdf_mem_zero(&pMac->roam.configParam.bss_score_params, + sizeof(struct sir_score_config)); + pMac->roam.configParam.bss_score_params.weight_cfg.rssi_weightage = + RSSI_WEIGHTAGE; + pMac->roam.configParam.bss_score_params.weight_cfg.ht_caps_weightage = + HT_CAPABILITY_WEIGHTAGE; + pMac->roam.configParam.bss_score_params.weight_cfg.vht_caps_weightage = + VHT_CAP_WEIGHTAGE; + pMac->roam.configParam.bss_score_params. + weight_cfg.chan_width_weightage = CHAN_WIDTH_WEIGHTAGE; + pMac->roam.configParam.bss_score_params. + weight_cfg.chan_band_weightage = CHAN_BAND_WEIGHTAGE; + pMac->roam.configParam.bss_score_params.weight_cfg.nss_weightage = + NSS_WEIGHTAGE; + pMac->roam.configParam.bss_score_params.weight_cfg. + beamforming_cap_weightage = BEAMFORMING_CAP_WEIGHTAGE; + pMac->roam.configParam.bss_score_params.weight_cfg.pcl_weightage = + PCL_WEIGHT; + pMac->roam.configParam.bss_score_params.weight_cfg. + channel_congestion_weightage = CHANNEL_CONGESTION_WEIGHTAGE; } eCsrBand csr_get_current_band(tHalHandle hHal) @@ -2926,6 +2947,10 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pMac->roam.configParam.num_disallowed_aps = pParam->num_disallowed_aps; + qdf_mem_copy(&pMac->roam.configParam.bss_score_params, + &pParam->bss_score_params, + sizeof(struct sir_score_config)); + csr_update_he_config_param(pMac, pParam); } return status; @@ -3183,6 +3208,10 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) &pMac->roam.configParam.csr_mawc_config, sizeof(pParam->csr_mawc_config)); + qdf_mem_copy(&pParam->bss_score_params, + &pMac->roam.configParam.bss_score_params, + sizeof(struct sir_score_config)); + csr_get_he_config_param(pParam, pMac); return QDF_STATUS_SUCCESS; @@ -18398,6 +18427,88 @@ csr_roam_offload_per_scan(tpAniSirGlobal mac_ctx, uint8_t session_id) return QDF_STATUS_SUCCESS; } +/** + * csr_update_score_params() - API to update Score params in RSO + * @mac_ctx: Mac context + * @req_buffer: RSO request buffer + * + * Return: None + */ +static void csr_update_score_params(tpAniSirGlobal mac_ctx, + tSirRoamOffloadScanReq *req_buffer) +{ + struct scoring_param *req_score_params; + struct rssi_scoring *req_rssi_score; + struct sir_score_config *bss_score_params; + struct sir_weight_config *weight_config; + struct sir_rssi_cfg_score *rssi_score; + + req_score_params = &req_buffer->score_params; + req_rssi_score = &req_score_params->rssi_scoring; + + bss_score_params = &mac_ctx->roam.configParam.bss_score_params; + weight_config = &bss_score_params->weight_cfg; + rssi_score = &bss_score_params->rssi_score; + + if (!bss_score_params->enable_scoring_for_roam) + req_score_params->disable_bitmap = + WLAN_ROAM_SCORING_DISABLE_ALL; + + req_score_params->rssi_weightage = weight_config->rssi_weightage; + req_score_params->ht_weightage = weight_config->ht_caps_weightage; + req_score_params->vht_weightage = weight_config->vht_caps_weightage; + req_score_params->he_weightage = weight_config->he_caps_weightage; + req_score_params->bw_weightage = weight_config->chan_width_weightage; + req_score_params->band_weightage = weight_config->chan_band_weightage; + req_score_params->nss_weightage = weight_config->nss_weightage; + req_score_params->esp_qbss_weightage = + weight_config->channel_congestion_weightage; + req_score_params->beamforming_weightage = + weight_config->beamforming_cap_weightage; + req_score_params->pcl_weightage = + weight_config->pcl_weightage; + req_score_params->oce_wan_weightage = weight_config->oce_wan_weightage; + + req_score_params->bw_index_score = + bss_score_params->bandwidth_weight_per_index; + req_score_params->band_index_score = + bss_score_params->band_weight_per_index; + req_score_params->nss_index_score = + bss_score_params->nss_weight_per_index; + + req_rssi_score->best_rssi_threshold = rssi_score->best_rssi_threshold; + req_rssi_score->good_rssi_threshold = rssi_score->good_rssi_threshold; + req_rssi_score->bad_rssi_threshold = rssi_score->bad_rssi_threshold; + req_rssi_score->good_rssi_pcnt = rssi_score->good_rssi_pcnt; + req_rssi_score->bad_rssi_pcnt = rssi_score->bad_rssi_pcnt; + req_rssi_score->good_bucket_size = rssi_score->good_rssi_bucket_size; + req_rssi_score->bad_bucket_size = rssi_score->bad_rssi_bucket_size; + req_rssi_score->rssi_pref_5g_rssi_thresh = + rssi_score->rssi_pref_5g_rssi_thresh; + + req_score_params->esp_qbss_scoring.num_slot = + bss_score_params->esp_qbss_scoring.num_slot; + req_score_params->esp_qbss_scoring.score_pcnt3_to_0 = + bss_score_params->esp_qbss_scoring.score_pcnt3_to_0; + req_score_params->esp_qbss_scoring.score_pcnt7_to_4 = + bss_score_params->esp_qbss_scoring.score_pcnt7_to_4; + req_score_params->esp_qbss_scoring.score_pcnt11_to_8 = + bss_score_params->esp_qbss_scoring.score_pcnt11_to_8; + req_score_params->esp_qbss_scoring.score_pcnt15_to_12 = + bss_score_params->esp_qbss_scoring.score_pcnt15_to_12; + + req_score_params->oce_wan_scoring.num_slot = + bss_score_params->oce_wan_scoring.num_slot; + req_score_params->oce_wan_scoring.score_pcnt3_to_0 = + bss_score_params->oce_wan_scoring.score_pcnt3_to_0; + req_score_params->oce_wan_scoring.score_pcnt7_to_4 = + bss_score_params->oce_wan_scoring.score_pcnt7_to_4; + req_score_params->oce_wan_scoring.score_pcnt11_to_8 = + bss_score_params->oce_wan_scoring.score_pcnt11_to_8; + req_score_params->oce_wan_scoring.score_pcnt15_to_12 = + bss_score_params->oce_wan_scoring.score_pcnt15_to_12; +} + /** * csr_roam_offload_scan() - populates roam offload scan request and sends to * WMA @@ -18609,6 +18720,7 @@ csr_roam_offload_scan(tpAniSirGlobal mac_ctx, uint8_t session_id, session->pAddIEAssoc, session->nAddIEAssocLength); csr_update_driver_assoc_ies(mac_ctx, session, req_buf); + csr_update_score_params(mac_ctx, req_buf); } QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index 473b68ec2803..356a6fb839e6 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -288,21 +288,12 @@ A_UINT32 e_csr_auth_type_to_rsn_authmode(eCsrAuthType authtype, A_UINT32 e_csr_encryption_type_to_rsn_cipherset(eCsrEncryptionType encr); -void wma_roam_scan_fill_ap_profile(tp_wma_handle wma_handle, - tpAniSirGlobal pMac, - tSirRoamOffloadScanReq *roam_req, - wmi_ap_profile *ap_profile_p); - void wma_roam_scan_fill_scan_params(tp_wma_handle wma_handle, tpAniSirGlobal pMac, tSirRoamOffloadScanReq *roam_req, wmi_start_scan_cmd_fixed_param * scan_params); -QDF_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle, - wmi_ap_profile *ap_profile_p, - uint32_t vdev_id); - QDF_STATUS wma_roam_scan_bmiss_cnt(tp_wma_handle wma_handle, A_INT32 first_bcnt, A_UINT32 final_bcnt, uint32_t vdev_id); diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index b64bf969bfdb..78b16f49d6a8 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -1210,60 +1210,56 @@ static uint32_t wma_roam_scan_get_cckm_mode(tSirRoamOffloadScanReq *roam_req, #endif /** * wma_roam_scan_fill_ap_profile() - fill ap_profile - * @wma_handle: wma handle - * @pMac: Mac ptr * @roam_req: roam offload scan request - * @ap_profile_p: ap profile + * @profile: ap profile * * Fill ap_profile structure from configured parameters * * Return: none */ -void wma_roam_scan_fill_ap_profile(tp_wma_handle wma_handle, - tpAniSirGlobal pMac, - tSirRoamOffloadScanReq *roam_req, - wmi_ap_profile *ap_profile_p) +static void wma_roam_scan_fill_ap_profile(tSirRoamOffloadScanReq *roam_req, + struct ap_profile *profile) { uint32_t rsn_authmode; - qdf_mem_zero(ap_profile_p, sizeof(wmi_ap_profile)); + qdf_mem_zero(profile, sizeof(*profile)); if (roam_req == NULL) { - ap_profile_p->ssid.ssid_len = 0; - ap_profile_p->ssid.ssid[0] = 0; - ap_profile_p->rsn_authmode = WMI_AUTH_NONE; - ap_profile_p->rsn_ucastcipherset = WMI_CIPHER_NONE; - ap_profile_p->rsn_mcastcipherset = WMI_CIPHER_NONE; - ap_profile_p->rsn_mcastmgmtcipherset = WMI_CIPHER_NONE; - ap_profile_p->rssi_threshold = WMA_ROAM_RSSI_DIFF_DEFAULT; + profile->ssid.length = 0; + profile->ssid.mac_ssid[0] = 0; + profile->rsn_authmode = WMI_AUTH_NONE; + profile->rsn_ucastcipherset = WMI_CIPHER_NONE; + profile->rsn_mcastcipherset = WMI_CIPHER_NONE; + profile->rsn_mcastmgmtcipherset = WMI_CIPHER_NONE; + profile->rssi_threshold = WMA_ROAM_RSSI_DIFF_DEFAULT; } else { - ap_profile_p->ssid.ssid_len = + profile->ssid.length = roam_req->ConnectedNetwork.ssId.length; - qdf_mem_copy(ap_profile_p->ssid.ssid, + qdf_mem_copy(profile->ssid.mac_ssid, roam_req->ConnectedNetwork.ssId.ssId, - ap_profile_p->ssid.ssid_len); - ap_profile_p->rsn_authmode = + profile->ssid.length); + profile->rsn_authmode = e_csr_auth_type_to_rsn_authmode( roam_req->ConnectedNetwork.authentication, roam_req->ConnectedNetwork.encryption); - rsn_authmode = ap_profile_p->rsn_authmode; + rsn_authmode = profile->rsn_authmode; if ((rsn_authmode == WMI_AUTH_CCKM_WPA) || (rsn_authmode == WMI_AUTH_CCKM_RSNA)) - ap_profile_p->rsn_authmode = + profile->rsn_authmode = wma_roam_scan_get_cckm_mode( roam_req, rsn_authmode); - ap_profile_p->rsn_ucastcipherset = + profile->rsn_ucastcipherset = e_csr_encryption_type_to_rsn_cipherset( roam_req->ConnectedNetwork.encryption); - ap_profile_p->rsn_mcastcipherset = + profile->rsn_mcastcipherset = e_csr_encryption_type_to_rsn_cipherset( roam_req->ConnectedNetwork.mcencryption); - ap_profile_p->rsn_mcastmgmtcipherset = - ap_profile_p->rsn_mcastcipherset; - ap_profile_p->rssi_threshold = roam_req->RoamRssiDiff; + profile->rsn_mcastmgmtcipherset = + profile->rsn_mcastcipherset; + profile->rssi_threshold = roam_req->RoamRssiDiff; #ifdef WLAN_FEATURE_11W if (roam_req->ConnectedNetwork.mfp_enabled) - ap_profile_p->flags |= WMI_AP_PROFILE_FLAG_PMF; + profile->flags |= WMI_AP_PROFILE_FLAG_PMF; #endif } } @@ -1585,19 +1581,23 @@ void wma_roam_scan_fill_scan_params(tp_wma_handle wma_handle, /** * wma_roam_scan_offload_ap_profile() - set roam ap profile in fw * @wma_handle: wma handle - * @ap_profile_p: ap profile - * @vdev_id: vdev id + * @mac_ctx: Mac ptr + * @roam_req: Request which contains the ap profile * * Send WMI_ROAM_AP_PROFILE to firmware * * Return: QDF status */ -QDF_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle, - wmi_ap_profile *ap_profile_p, - uint32_t vdev_id) +static QDF_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle, + tSirRoamOffloadScanReq *roam_req) { + struct ap_profile_params ap_profile; + + ap_profile.vdev_id = roam_req->sessionId; + wma_roam_scan_fill_ap_profile(roam_req, &ap_profile.profile); + ap_profile.param = roam_req->score_params; return wmi_unified_send_roam_scan_offload_ap_cmd(wma_handle->wmi_handle, - ap_profile_p, vdev_id); + &ap_profile); } /** @@ -1796,7 +1796,6 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, { QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; wmi_start_scan_cmd_fixed_param scan_params; - wmi_ap_profile ap_profile; tpAniSirGlobal pMac = cds_get_context(QDF_MODULE_ID_PE); uint32_t mode = 0; struct wma_txrx_node *intr = NULL; @@ -1881,11 +1880,8 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, if (qdf_status != QDF_STATUS_SUCCESS) break; - wma_roam_scan_fill_ap_profile(wma_handle, pMac, roam_req, - &ap_profile); - qdf_status = wma_roam_scan_offload_ap_profile(wma_handle, - &ap_profile, roam_req->sessionId); + roam_req); if (qdf_status != QDF_STATUS_SUCCESS) break; @@ -2122,10 +2118,8 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, if (qdf_status != QDF_STATUS_SUCCESS) break; - wma_roam_scan_fill_ap_profile(wma_handle, pMac, roam_req, - &ap_profile); qdf_status = wma_roam_scan_offload_ap_profile(wma_handle, - &ap_profile, roam_req->sessionId); + roam_req); if (qdf_status != QDF_STATUS_SUCCESS) break;