Merge "wlan: SETMCRATE improve implementation"
diff --git a/CORE/HDD/inc/wlan_hdd_hostapd.h b/CORE/HDD/inc/wlan_hdd_hostapd.h
index 0fba96b..534d808 100644
--- a/CORE/HDD/inc/wlan_hdd_hostapd.h
+++ b/CORE/HDD/inc/wlan_hdd_hostapd.h
@@ -108,6 +108,4 @@
VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCallback);
VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter );
void hdd_set_ap_ops( struct net_device *pWlanHostapdDev );
-int hdd_hostapd_set_mc_rate(hdd_adapter_t *pHostapdAdapter,
- int targetRateHkbps);
#endif // end #if !defined( WLAN_HDD_HOSTAPD_H )
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 9892def..7d89d45 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -685,13 +685,6 @@
tCsrRoamSetKey wepKey[CSR_MAX_NUM_KEY];
beacon_data_t *beacon;
-
- //Elements for setting MC rate with SAP mode
- v_U32_t targetMCRate;
- v_U32_t getStasCookie;
- tSap_Event getStasEventBuffer;
- tSap_AssocMacAddr *assocStasBuffer;
- struct completion sap_get_associated_stas_complete;
};
struct hdd_mon_ctx_s
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 3c6b59b..7a86b39 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -108,506 +108,6 @@
#define SAP_24GHZ_CH_COUNT (14)
-#define SAP_MAX_GET_ASSOC_STAS_TIMEOUT 500
-/* Max possible supported rate count
- * Legacy 14 + 11N MCS 8 + 11AC MCS 10 */
-#define SAP_MAX_SUPPORTED_RATE_COUNT 32
-#define SAP_LEGACY_RATE_MASK 0x007F
-#define SAP_GET_STAS_RATE_TIMEOUT 1000
-#define SAP_AC_MCS_MAP_MASK 0x03
-#define SAP_AC_MCS_MAP_OFFSET 7
-
-#define SAP_LEGACY_RATE_COUNT SIR_NUM_11B_RATES + SIR_NUM_11A_RATES
-#define SAP_11N_RATE_COUNT 8
-
-#define SAP_RATE_SUPPORT_MAP_LEGACY_MASK 0x0001
-#define SAP_RATE_SUPPORT_MAP_N_MASK 0x001E
-#define SAP_RATE_SUPPORT_MAP_AC_MASK 0x07E0
-
-#define SAP_MAX_24_CHANNEL_NUMBER 14
-#define SAP_GET_STAS_COOKIE 0xC000C1EE
-
-/* Temp put here, will locate correct location
- * work on progress with UMAC */
-/* Should syn with FW definition */
-typedef enum
-{
- WNI_CFG_FIXED_RATE_SAP_AUTO,
- WNI_CFG_FIXED_RATE_11B_LONG_1_MBPS,
- WNI_CFG_FIXED_RATE_11B_LONG_2_MBPS,
- WNI_CFG_FIXED_RATE_11B_LONG_5_5_MBPS,
- WNI_CFG_FIXED_RATE_11B_LONG_11_MBPS,
- WNI_CFG_FIXED_RATE_11A_6_MBPS,
- WNI_CFG_FIXED_RATE_11A_9_MBPS,
- WNI_CFG_FIXED_RATE_11A_12_MBPS,
- WNI_CFG_FIXED_RATE_11A_18_MBPS,
- WNI_CFG_FIXED_RATE_11A_24_MBPS,
- WNI_CFG_FIXED_RATE_11A_36_MBPS,
- WNI_CFG_FIXED_RATE_11A_48_MBPS,
- WNI_CFG_FIXED_RATE_11A_54_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_6_5_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_13_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_19_5_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_26_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_39_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_52_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_58_5_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_65_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_7_2_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_14_4_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_21_7_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_28_9_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_43_3_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_57_8_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_65_MBPS,
- WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_72_2_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_13_5_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_27_MBPS, /* 30 */
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_40_5_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_54_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_81_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_108_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_121_5_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_135_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_15_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_30_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_45_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_60_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_90_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_120_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_135_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_150_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_GF_13_5_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_GF_27_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_GF_40_5_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_GF_54_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_GF_81_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_GF_108_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_GF_121_5_MBPS,
- WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_GF_135_MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_6_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_13MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_19_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_26MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_39MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_52MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_58_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_65MBPS, /* 60 */
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_78MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_NGI_86_5_MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_SGI_21_667MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_SGI_28_889MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_SGI_43_333MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_SGI_57_778MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_SGI_65MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_SGI_72_222MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_SGI_86_667MBPS,
- WNI_CFG_FIXED_RATE_VHT_SIMO_CB_SGI_96_1_MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_13_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_27MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_40_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_54MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_81MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_108MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_121_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_135MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_RESERVED,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_162MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_180MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_15MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_30MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_45MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_60MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_90MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_120MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_135MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_150MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_RESERVED, /* 90 */
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_180MBPS,
- WNI_CFG_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_200MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_29_25MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_58_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_87_75MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_117MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_175_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_234MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_263_25MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_292_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_RESERVED,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_351MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_390MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_32_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_65MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_97_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_130MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_195MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_260MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_292_5MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_325MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_RESERVED,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_390MBPS,
- WNI_CFG_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_433_33MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_6_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_13MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_19_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_26MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_39MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_52MBPS, /* 120 */
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_58_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_65MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_78MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_86_5_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_7_2222MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_14_444MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_21_667MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_28_889MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_43_333MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_57_778MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_65MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_72_222MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_86_667MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_96_1_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_13_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_27MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_40_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_54MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_81MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_108MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_121_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_135MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_RESERVED,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_162MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_180MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_15MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_30MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_45MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_60MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_90MBPS, /* 150 */
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_120MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_135MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_150MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_RESERVED,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_180MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_200MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_29_25MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_58_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_87_75MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_117MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_175_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_234MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_263_25MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_292_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_RESERVED,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_351MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_390MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_32_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_65MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_97_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_130MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_195MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_260MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_292_5MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_325MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_RESERVED,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_390MBPS,
- WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_433_33MBPS,
- WNI_CFG_FIXED_RATE_11A_DUP_6_MBPS,
- WNI_CFG_FIXED_RATE_11A_DUP_9_MBPS, /* 180 */
- WNI_CFG_FIXED_RATE_11A_DUP_12_MBPS,
- WNI_CFG_FIXED_RATE_11A_DUP_18_MBPS,
- WNI_CFG_FIXED_RATE_11A_DUP_24_MBPS,
- WNI_CFG_FIXED_RATE_11A_DUP_36_MBPS,
- WNI_CFG_FIXED_RATE_11A_DUP_48_MBPS,
- WNI_CFG_FIXED_RATE_11A_DUP_54_MBPS,
- WNI_CFG_FIXED_RATE_11A_80MHZ_DUP_6_MBPS,
- WNI_CFG_FIXED_RATE_11A_80MHZDUP_9_MBPS,
- WNI_CFG_FIXED_RATE_11A_80MHZ_DUP_12_MBPS,
- WNI_CFG_FIXED_RATE_11A_80MHZ_DUP_18_MBPS,
- WNI_CFG_FIXED_RATE_11A_80MHZ_DUP_24_MBPS,
- WNI_CFG_FIXED_RATE_11A_80MHZ_DUP_36_MBPS,
- WNI_CFG_FIXED_RATE_11A_80MHZ_DUP_48_MBPS,
- WNI_CFG_FIXED_RATE_11A_80MHZ_DUP_54_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_6_5_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_13_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_19_5_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_26_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_39_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_52_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_58_5_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_65_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_SG_7_2_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_SG_14_4_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_SG_21_7_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_SG_28_9_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_SG_43_3_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_SG_57_8_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_SG_65_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_1NSS_MM_SG_72_2_MBPS, /* 210 */
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_13_5_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_27_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_40_5_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_54_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_81_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_108_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_121_5_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_135_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_15_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_30_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_45_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_60_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_90_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_120_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_135_MBPS,
- WNI_CFG_LDPC_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_150_MBPS
-} eCfgFixedRateCfgType;
-
-/* Legacy IDX based rate table */
-typedef struct
-{
- v_U16_t legacy_rate_index;
- v_U32_t legacy_rate;
-} supported_legacy_rate_t;
-static const supported_legacy_rate_t legacy_rate[] =
-{
-/* IDX Rate, 100kbps */
- {2, 10},
- {4, 20},
- {11, 55},
- {12, 60},
- {18, 90},
- {24, 120},
- {36, 180},
- {48, 240},
- {66, 330},
- {72, 360},
- {96, 480},
- {108, 540}
-};
-
-/* 11N MCS based rate table */
-typedef struct
-{
- v_U8_t mcs_index_11n;
- v_U32_t rate_11n[4];
-} supported_11n_rate_t;
-static const supported_11n_rate_t mcs_rate_11n[] =
-{
-/* MCS L20 L40 S20 S40 */
- {0, {65, 135, 72, 150}},
- {1, {130, 270, 144, 300}},
- {2, {195, 405, 217, 450}},
- {3, {260, 540, 289, 600}},
- {4, {390, 810, 433, 900}},
- {5, {520, 1080, 578, 1200}},
- {6, {585, 1215, 650, 1350}},
- {7, {650, 1350, 722, 1500}}
-};
-
-/* 11AC MCS based rate table */
-typedef struct
-{
- v_U8_t mcs_index_11ac;
- v_U16_t cb80_rate_11ac[2];
- v_U16_t cb40_rate_11ac[2];
- v_U16_t cb20_rate_11ac[2];
-} supported_11ac_rate_t;
-static const supported_11ac_rate_t mcs_rate_11ac[] =
-{
-/* MCS L80 S80 L40 S40 L20 S40*/
- {0, {293, 325}, {135, 150}, {65, 72}},
- {1, {585, 650}, {270, 300}, {130, 144}},
- {2, {878, 975}, {405, 450}, {195, 217}},
- {3, {1170, 1300}, {540, 600}, {260, 289}},
- {4, {1755, 1950}, {810, 900}, {390, 433}},
- {5, {2340, 2600}, {1080, 1200}, {520, 578}},
- {6, {2633, 2925}, {1215, 1350}, {585, 650}},
- {7, {2925, 3250}, {1350, 1500}, {650, 722}},
- {8, {3510, 3900}, {1620, 1800}, {780, 867}},
- {9, {3900, 4333}, {1800, 2000}, {860, 867}}
-};
-
-typedef struct
-{
- eCfgFixedRateCfgType eRateCfg;
- v_U16_t rate;
-} rate_cfg_item_mapping_t;
-
-static rate_cfg_item_mapping_t legacy_rate_mapping[] =
-{
- {WNI_CFG_FIXED_RATE_11B_LONG_1_MBPS, 10},
- {WNI_CFG_FIXED_RATE_11B_LONG_2_MBPS, 20},
- {WNI_CFG_FIXED_RATE_11B_LONG_5_5_MBPS, 55},
- {WNI_CFG_FIXED_RATE_11B_LONG_11_MBPS, 110},
- {WNI_CFG_FIXED_RATE_11A_6_MBPS, 60},
- {WNI_CFG_FIXED_RATE_11A_9_MBPS, 90},
- {WNI_CFG_FIXED_RATE_11A_12_MBPS, 120},
- {WNI_CFG_FIXED_RATE_11A_18_MBPS, 180},
- {WNI_CFG_FIXED_RATE_11A_24_MBPS, 240},
- {WNI_CFG_FIXED_RATE_11A_36_MBPS, 360},
- {WNI_CFG_FIXED_RATE_11A_48_MBPS, 480},
- {WNI_CFG_FIXED_RATE_11A_54_MBPS, 540}
-};
-static rate_cfg_item_mapping_t n_l20_rate_mapping[] =
-{
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_6_5_MBPS, 65},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_13_MBPS, 130},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_19_5_MBPS, 195},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_26_MBPS, 260},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_39_MBPS, 390},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_52_MBPS, 520},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_58_5_MBPS, 585},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_65_MBPS, 650}
-};
-static rate_cfg_item_mapping_t n_s20_rate_mapping[] =
-{
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_7_2_MBPS, 72},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_14_4_MBPS, 144},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_21_7_MBPS, 217},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_28_9_MBPS, 289},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_43_3_MBPS, 433},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_57_8_MBPS, 578},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_65_MBPS, 650},
- {WNI_CFG_FIXED_RATE_MCS_1NSS_MM_SG_72_2_MBPS, 722}
-};
-static rate_cfg_item_mapping_t n_l40_rate_mapping[] =
-{
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_13_5_MBPS, 135},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_27_MBPS, 270},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_40_5_MBPS, 405},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_54_MBPS, 540},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_81_MBPS, 810},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_108_MBPS, 1080},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_121_5_MBPS, 1215},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_135_MBPS, 1350}
-};
-static rate_cfg_item_mapping_t n_s40_rate_mapping[] =
-{
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_15_MBPS, 150},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_30_MBPS, 300},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_45_MBPS, 450},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_60_MBPS, 600},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_90_MBPS, 900},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_120_MBPS, 1200},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_135_MBPS, 1350},
- {WNI_CFG_FIXED_RATE_MCS_40MHZ_1NSS_MM_SG_150_MBPS, 1500}
-};
-
-#ifdef WLAN_FEATURE_11AC
-static rate_cfg_item_mapping_t ac_l20_rate_mapping[] =
-{
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_6_5MBPS, 65},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_13MBPS, 130},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_19_5MBPS, 195},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_26MBPS, 260},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_39MBPS, 390},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_52MBPS, 520},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_58_5MBPS, 585},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_65MBPS, 650},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_78MBPS, 780},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_NGI_86_5_MBPS, 865}
-};
-static rate_cfg_item_mapping_t ac_s20_rate_mapping[] =
-{
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_7_2222MBPS, 72},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_14_444MBPS, 144},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_21_667MBPS, 217},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_28_889MBPS, 289},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_43_333MBPS, 433},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_57_778MBPS, 578},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_65MBPS, 650},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_72_222MBPS, 722},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_86_667MBPS, 867},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_SIMO_CB_SGI_96_1_MBPS, 961}
-};
-static rate_cfg_item_mapping_t ac_l40_rate_mapping[] =
-{
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_13_5MBPS, 135},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_27MBPS, 270},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_40_5MBPS, 405},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_54MBPS, 540},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_81MBPS, 810},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_108MBPS, 1080},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_121_5MBPS, 1215},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_135MBPS, 1350},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_162MBPS, 1620},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_NGI_180MBPS, 1800}
-};
-static rate_cfg_item_mapping_t ac_s40_rate_mapping[] =
-{
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_15MBPS, 150},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_30MBPS, 300},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_45MBPS, 450},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_60MBPS, 600},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_90MBPS, 900},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_120MBPS, 1200},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_135MBPS, 1350},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_150MBPS, 1500},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_180MBPS, 1800},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_40MHZ_SIMO_CB_SGI_200MBPS, 2000}
-};
-static rate_cfg_item_mapping_t ac_l80_rate_mapping[] =
-{
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_29_25MBPS, 293},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_58_5MBPS, 585},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_87_75MBPS, 878},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_117MBPS, 1170},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_175_5MBPS, 1755},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_234MBPS, 2340},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_263_25MBPS, 2633},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_292_5MBPS, 2925},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_351MBPS, 3510},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_NGI_390MBPS, 3900}
-};
-static rate_cfg_item_mapping_t ac_s80_rate_mapping[] =
-{
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_32_5MBPS, 325},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_65MBPS, 650},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_97_5MBPS, 975},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_130MBPS, 1300},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_195MBPS, 1950},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_260MBPS, 2600},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_292_5MBPS, 2925},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_325MBPS, 3250},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_390MBPS, 3900},
- {WNI_CFG_LDPC_FIXED_RATE_VHT_80MHZ_SIMO_CB_SGI_433_33MBPS, 4333}
-};
-#endif /* WLAN_FEATURE_11AC */
-
-typedef enum
-{
- RATE_CFG_RATE_LEGACY,
- RATE_CFG_RATE_11N_MCS_LGI_20,
- RATE_CFG_RATE_11N_MCS_SGI_20,
- RATE_CFG_RATE_11N_MCS_LGI_40,
- RATE_CFG_RATE_11N_MCS_SGI_40,
- RATE_CFG_RATE_11AC_MCS_LGI_20,
- RATE_CFG_RATE_11AC_MCS_SGI_20,
- RATE_CFG_RATE_11AC_MCS_LGI_40,
- RATE_CFG_RATE_11AC_MCS_SGI_40,
- RATE_CFG_RATE_11AC_MCS_LGI_80,
- RATE_CFG_RATE_11AC_MCS_SGI_80
-} rate_cfg_supported_rate_t;
-
-typedef enum
-{
- RATE_CFG_RATE_11AC_MAX_MCS_7,
- RATE_CFG_RATE_11AC_MAX_MCS_8,
- RATE_CFG_RATE_11AC_MAX_MCS_9
-} rate_cfg_11ac_max_mcs_t;
-
-typedef enum
-{
- RATE_CFG_RATE_BW_20,
- RATE_CFG_RATE_BW_40,
- RATE_CFG_RATE_BW_80
-} rate_cfg_supported_bw_t;
-
-typedef enum
-{
- RATE_CFG_RATE_GI_LONG,
- RATE_CFG_RATE_GI_SHORT
-} rate_cfg_gi_t;
-
/*---------------------------------------------------------------------------
* Function definitions
*-------------------------------------------------------------------------*/
@@ -1501,466 +1001,6 @@
return VOS_STATUS_SUCCESS;
}
-/**---------------------------------------------------------------------------
-
- \brief hdd_hostapd_set_mc_rate_cb() -
-
- This is called to notify associated stas information ready
-
- \param - sapEvent Pointer to get associated stas event
- \param - apDriver SoftAP context
-
- \return - none
-
- --------------------------------------------------------------------------*/
-void hdd_hostapd_set_mc_rate_cb
-(
- tSap_Event *sapEvent,
- void *apDriver
-)
-{
- hdd_ap_ctx_t *apCtxt;
-
- if ((NULL == apDriver) || (NULL == sapEvent))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s : Invalid arguments", __func__);
- return;
- }
-
- apCtxt = (hdd_ap_ctx_t *)apDriver;
-
- /* there is a race condition that exists between this callback function
- and the caller since the caller could time out either before or
- while this code is executing. we'll assume the timeout hasn't
- occurred, but we'll verify that right before complete our work */
- if (SAP_GET_STAS_COOKIE == apCtxt->getStasCookie)
- {
- vos_mem_copy((void *)&apCtxt->getStasEventBuffer,
- (void *)sapEvent,
- sizeof(tSap_Event));
- complete(&apCtxt->sap_get_associated_stas_complete);
- }
- else
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s : Invalid cookie", __func__);
- }
- return;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief hdd_hostapd_set_mc_rate_update
-
- This is called to find rate and send cfg command to FW
-
- \param - sapEvent Pointer to get associated stas event
- \param - pHostapdAdapter SoftAP Adapter Context
-
- \return - int, 0 success
- negative fail
-
- --------------------------------------------------------------------------*/
-static int hdd_hostapd_set_mc_rate_update
-(
- tSap_Event *sapEvent,
- hdd_adapter_t *pHostapdAdapter
-)
-{
- tHalHandle hHal;
- hdd_ap_ctx_t *apCtxt;
- tSap_AssocMacAddr *assocSta;
- rate_cfg_11ac_max_mcs_t supportedAcMaxMcs = RATE_CFG_RATE_11AC_MAX_MCS_7;
- rate_cfg_supported_bw_t bandWidth;
- rate_cfg_gi_t gi;
- rate_cfg_item_mapping_t *nMappingTable = NULL;
- rate_cfg_item_mapping_t *acMappingTable = NULL;
- v_U8_t stasLoop, ratesLoop;
- v_U8_t rateArrayOrder;
- v_U8_t mcsTable11n;
- v_U16_t targetCfgId = 0;
- v_U16_t targetCfgValue = 0;
- v_U16_t currentRate;
- v_U16_t combinedSupportMap = 0xFFFF;
- v_U16_t supportMap = 0x0000;
- v_U16_t supportedChannelCount = 0;
- v_U32_t legacyRates[SAP_LEGACY_RATE_COUNT];
- int rc = 0;
- tSirRetStatus cfdStat;
-
- if ((NULL == pHostapdAdapter) || (NULL == sapEvent))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s : Invalid arguments", __func__);
- return -1;
- }
-
- apCtxt = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter);
- hHal = WLAN_HDD_GET_HAL_CTX(pHostapdAdapter);
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "setMcRateCB NUM SAT %d, targetMCRate %d, current channel %d",
- sapEvent->sapevt.sapAssocStaListEvent.noOfAssocSta,
- apCtxt->targetMCRate,
- apCtxt->operatingChannel);
-
- if (!sapEvent->sapevt.sapAssocStaListEvent.noOfAssocSta)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "Not connected any STA yet");
- return -1;
- }
-
- for (stasLoop = 0;
- stasLoop < sapEvent->sapevt.sapAssocStaListEvent.noOfAssocSta;
- stasLoop++)
- {
- vos_mem_zero((v_U8_t *)legacyRates, sizeof(legacyRates));
- rateArrayOrder = 0;
- mcsTable11n = 0;
- supportedChannelCount = 0;
- assocSta = sapEvent->sapevt.sapAssocStaListEvent.pAssocStas++;
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "ASSOSID %d, OPM %d, nBM %d, SGI40 %d, SGI20 %d, S40 %d",
- assocSta->assocId,
- assocSta->supportedRates.opRateMode,
- assocSta->supportedRates.aniEnhancedRateBitmap,
- assocSta->ShortGI40Mhz,
- assocSta->ShortGI20Mhz,
- assocSta->Support40Mhz);
-
- /* Legacy Rate */
- for (ratesLoop = 0; ratesLoop < SIR_NUM_11B_RATES; ratesLoop++)
- {
- currentRate = assocSta->supportedRates.llbRates[ratesLoop] &
- SAP_LEGACY_RATE_MASK;
-
- /* To fix KW error report */
- if (SAP_LEGACY_RATE_COUNT <= rateArrayOrder)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s, Invalid array Size, break", __func__);
- break;
- }
-
- /* Make 100kbps order */
- legacyRates[rateArrayOrder] = (currentRate * 100) / 20;
- rateArrayOrder++;
- if (currentRate)
- {
- supportedChannelCount++;
- }
- }
- for (ratesLoop = 0; ratesLoop < SIR_NUM_11A_RATES; ratesLoop++)
- {
- currentRate = assocSta->supportedRates.llaRates[ratesLoop] &
- SAP_LEGACY_RATE_MASK;
- /* To fix KW error report */
- if (SAP_LEGACY_RATE_COUNT <= rateArrayOrder)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s, Invalid array Size, break", __func__);
- break;
- }
-
- /* Make 100kbps order */
- legacyRates[rateArrayOrder] = (currentRate * 100) / 20;
- rateArrayOrder++;
- if (currentRate)
- {
- supportedChannelCount++;
- }
- }
- if (supportedChannelCount)
- {
- for (ratesLoop = 0; ratesLoop < SAP_LEGACY_RATE_COUNT; ratesLoop++)
- {
- if (legacyRates[ratesLoop] == apCtxt->targetMCRate)
- {
- supportMap |= (1 << RATE_CFG_RATE_LEGACY);
- break;
- }
- }
- }
-
- /* 11N */
- if (eSTA_11n <= assocSta->supportedRates.opRateMode)
- {
- if (assocSta->Support40Mhz)
- {
- mcsTable11n |= 0x01;
- if (assocSta->ShortGI40Mhz)
- {
- mcsTable11n |= 0x02;
- supportMap |= (1 << RATE_CFG_RATE_11N_MCS_SGI_40);
- nMappingTable = n_s40_rate_mapping;
- }
- else
- {
- supportMap |= (1 << RATE_CFG_RATE_11N_MCS_LGI_40);
- nMappingTable = n_l40_rate_mapping;
- }
- }
- else
- {
- if (assocSta->ShortGI20Mhz)
- {
- mcsTable11n |= 0x02;
- supportMap |= (1 << RATE_CFG_RATE_11N_MCS_SGI_20);
- nMappingTable = n_s20_rate_mapping;
- }
- else
- {
- supportMap |= (1 << RATE_CFG_RATE_11N_MCS_LGI_20);
- nMappingTable = n_l20_rate_mapping;
- }
- }
- }
-
-#ifdef WLAN_FEATURE_11AC
- /* 11AC */
- if (eSTA_11ac <= assocSta->supportedRates.opRateMode)
- {
- /* Find supported MAX MCS */
- supportedAcMaxMcs = assocSta->supportedRates.vhtRxMCSMap &
- SAP_AC_MCS_MAP_MASK;
- supportedAcMaxMcs += SAP_AC_MCS_MAP_OFFSET;
- /* Find channel characteristics from MAX rate */
- if (mcs_rate_11ac[supportedAcMaxMcs].cb80_rate_11ac[0] ==
- assocSta->supportedRates.vhtRxHighestDataRate)
- {
- supportMap |= (1 << RATE_CFG_RATE_11AC_MCS_LGI_80);
- bandWidth = RATE_CFG_RATE_BW_80;
- gi = RATE_CFG_RATE_GI_LONG;
- acMappingTable = ac_l80_rate_mapping;
- }
- else if (mcs_rate_11ac[supportedAcMaxMcs].cb80_rate_11ac[1] ==
- assocSta->supportedRates.vhtRxHighestDataRate)
- {
- supportMap |= (1 << RATE_CFG_RATE_11AC_MCS_SGI_80);
- bandWidth = RATE_CFG_RATE_BW_80;
- gi = RATE_CFG_RATE_GI_SHORT;
- acMappingTable = ac_s80_rate_mapping;
- }
- else if (mcs_rate_11ac[supportedAcMaxMcs].cb40_rate_11ac[0] ==
- assocSta->supportedRates.vhtRxHighestDataRate)
- {
- supportMap |= (1 << RATE_CFG_RATE_11AC_MCS_LGI_40);
- bandWidth = RATE_CFG_RATE_BW_40;
- gi = RATE_CFG_RATE_GI_LONG;
- acMappingTable = ac_l40_rate_mapping;
- }
- else if (mcs_rate_11ac[supportedAcMaxMcs].cb40_rate_11ac[1] ==
- assocSta->supportedRates.vhtRxHighestDataRate)
- {
- supportMap |= (1 << RATE_CFG_RATE_11AC_MCS_SGI_40);
- bandWidth = RATE_CFG_RATE_BW_40;
- gi = RATE_CFG_RATE_GI_SHORT;
- acMappingTable = ac_s40_rate_mapping;
- }
- else if (mcs_rate_11ac[supportedAcMaxMcs].cb20_rate_11ac[0] ==
- assocSta->supportedRates.vhtRxHighestDataRate)
- {
- supportMap |= (1 << RATE_CFG_RATE_11AC_MCS_LGI_20);
- bandWidth = RATE_CFG_RATE_BW_20;
- gi = RATE_CFG_RATE_GI_LONG;
- acMappingTable = ac_l20_rate_mapping;
- }
- else if (mcs_rate_11ac[supportedAcMaxMcs].cb20_rate_11ac[1] ==
- assocSta->supportedRates.vhtRxHighestDataRate)
- {
- supportMap |= (1 << RATE_CFG_RATE_11AC_MCS_SGI_20);
- bandWidth = RATE_CFG_RATE_BW_20;
- gi = RATE_CFG_RATE_GI_SHORT;
- acMappingTable = ac_s20_rate_mapping;
- }
- }
-#endif /* WLAN_FEATURE_11AC */
- combinedSupportMap &= supportMap;
- }
-
- if ((!combinedSupportMap) &&
- (!sapEvent->sapevt.sapAssocStaListEvent.noOfAssocSta))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s, No Common supported rate, discard", __func__);
- return -1;
- }
-
- /* Select target band */
- if (apCtxt->operatingChannel <=
- SAP_MAX_24_CHANNEL_NUMBER)
- {
- targetCfgId = WNI_CFG_FIXED_RATE_MULTICAST_24GHZ;
- }
- else
- {
- targetCfgId = WNI_CFG_FIXED_RATE_MULTICAST_5GHZ;
- }
-
- /* First find from legacy */
- if (combinedSupportMap & SAP_RATE_SUPPORT_MAP_LEGACY_MASK)
- {
- for (ratesLoop = 0; ratesLoop < SAP_LEGACY_RATE_COUNT; ratesLoop++)
- {
- if (apCtxt->targetMCRate ==
- legacy_rate_mapping[ratesLoop].rate)
- {
- targetCfgValue = legacy_rate_mapping[ratesLoop].eRateCfg;
- break;
- }
- }
- }
-
- /* If available same on 11N, update target rate */
- if ((combinedSupportMap & SAP_RATE_SUPPORT_MAP_N_MASK) &&
- (NULL != nMappingTable))
- {
- for (ratesLoop = 0; ratesLoop < SAP_11N_RATE_COUNT; ratesLoop++)
- {
- if (apCtxt->targetMCRate == nMappingTable[ratesLoop].rate)
- {
- targetCfgValue = nMappingTable[ratesLoop].eRateCfg;
- break;
- }
- }
- }
-
-#ifdef WLAN_FEATURE_11AC
- /* If available same on 11AC, update target rate */
- if ((combinedSupportMap & SAP_RATE_SUPPORT_MAP_AC_MASK) &&
- (NULL != acMappingTable))
- {
- for (ratesLoop = 0; ratesLoop < supportedAcMaxMcs; ratesLoop++)
- {
- if (apCtxt->targetMCRate == acMappingTable[ratesLoop].rate)
- {
- targetCfgValue = acMappingTable[ratesLoop].eRateCfg;
- break;
- }
- }
- }
-#endif /* WLAN_FEATURE_11AC */
-
- /* Finally send config to FW */
- if (targetCfgId && targetCfgValue)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "%s, Target Band %d, cfg value %d",
- __func__, targetCfgId, targetCfgValue);
- cfdStat = cfgSetInt((tpAniSirGlobal)hHal,
- targetCfgId,
- targetCfgValue);
- if (eSIR_SUCCESS != cfdStat)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s, CFG Fail %d",
- __func__, cfdStat);
- rc = -1;
- }
- }
-
- return rc;
-};
-
-/**---------------------------------------------------------------------------
-
- \brief hdd_hostapd_set_mc_rate() -
-
- This is called user application set forcefully MC rate
-
- \param - pHostapdAdapter Pointer to adapter structure
- \param - targetRateHkbps MC rate to set, hundreds kbps order
-
- \return - int, 0 success
- negative fail
-
- --------------------------------------------------------------------------*/
-int hdd_hostapd_set_mc_rate
-(
- hdd_adapter_t *pHostapdAdapter,
- int targetRateHkbps
-)
-{
- tHalHandle hHal;
- hdd_ap_ctx_t *apCtxt;
- eHalStatus smeStatus;
- int rc;
-
- if ((NULL == pHostapdAdapter) || (0 == targetRateHkbps))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s : Invalid arguments", __func__);
- return -1;
- }
-
- apCtxt = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter);
- hHal = WLAN_HDD_GET_HAL_CTX(pHostapdAdapter);
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "hdd_hostapd_setMcRate %d", targetRateHkbps);
-
- init_completion(&apCtxt->sap_get_associated_stas_complete);
-
- apCtxt->getStasCookie = SAP_GET_STAS_COOKIE;
- apCtxt->targetMCRate = targetRateHkbps;
- apCtxt->getStasEventBuffer.sapevt.sapAssocStaListEvent.noOfAssocSta = 0;
- apCtxt->assocStasBuffer = (tSap_AssocMacAddr *)vos_mem_malloc(
- sizeof(tSap_AssocMacAddr) * HAL_NUM_ASSOC_STA);
- if (NULL == apCtxt->assocStasBuffer)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s : Buffer Alloc fail", __func__);
- return -1;
- }
- smeStatus = sme_RoamGetAssociatedStas(hHal,
- pHostapdAdapter->sessionId,
- VOS_MODULE_ID_HDD,
- (void *)apCtxt,
- hdd_hostapd_set_mc_rate_cb,
- (tANI_U8 *)apCtxt->assocStasBuffer);
- if (smeStatus)
- {
- apCtxt->getStasCookie = 0;
- vos_mem_free(apCtxt->assocStasBuffer);
- apCtxt->assocStasBuffer = NULL;
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s : SME Issue fail", __func__);
- return -1;
- }
-
- /* Wait for completion */
- rc = wait_for_completion_interruptible_timeout(
- &apCtxt->sap_get_associated_stas_complete,
- msecs_to_jiffies(SAP_MAX_GET_ASSOC_STAS_TIMEOUT));
-
- /* either we have a response or we timed out
- either way, first invalidate our cookie */
- apCtxt->getStasCookie = 0;
- if (0 >= rc)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s : Wait timeout or interrupted", __func__);
-
- /* there is a race condition such that the callback
- function could be executing at the same time we are. of
- primary concern is if the callback function had already
- verified the "magic" but hasn't yet set the completion
- variable. Since the completion variable is on our
- stack, we'll delay just a bit to make sure the data is
- still valid if that is the case */
- vos_sleep(50);
- /* we'll now try to test memory */
- }
-
- rc = hdd_hostapd_set_mc_rate_update(
- &apCtxt->getStasEventBuffer,
- pHostapdAdapter);
- vos_mem_free(apCtxt->assocStasBuffer);
- apCtxt->assocStasBuffer = NULL;
-
- return rc;
-}
-
int
static iw_softap_setparam(struct net_device *dev,
struct iw_request_info *info,
@@ -2039,10 +1079,33 @@
case QCSAP_PARAM_SET_MC_RATE:
{
- if (hdd_hostapd_set_mc_rate(pHostapdAdapter, set_value))
+ tSirRateUpdateInd *rateUpdate;
+
+ rateUpdate = (tSirRateUpdateInd *)
+ vos_mem_malloc(sizeof(tSirRateUpdateInd));
+ if (NULL == rateUpdate)
{
hddLog(VOS_TRACE_LEVEL_ERROR,
- "%s: SET_MC_RATE failed", __func__);
+ "%s: SET_MC_RATE indication alloc fail", __func__);
+ ret = -1;
+ break;
+ }
+ vos_mem_zero(rateUpdate, sizeof(tSirRateUpdateInd ));
+
+ hddLog(VOS_TRACE_LEVEL_INFO, "MC Target rate %d", set_value);
+ /* Ignore unicast */
+ rateUpdate->ucastDataRate = -1;
+ rateUpdate->mcastDataRate24GHz = set_value;
+ rateUpdate->mcastDataRate5GHz = set_value;
+ rateUpdate->mcastDataRate24GHzTxFlag = 0;
+ rateUpdate->mcastDataRate5GHzTxFlag = 0;
+ status = sme_SendRateUpdateInd(hHal, rateUpdate);
+ if (eHAL_STATUS_SUCCESS != status)
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: SET_MC_RATE failed", __func__);
+ vos_mem_free(rateUpdate);
+ ret = -1;
}
break;
}
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 640ffbe..d759d09 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -3145,9 +3145,10 @@
}
else if (strncmp(command, "SETMCRATE", 9) == 0)
{
- int rc;
tANI_U8 *value = command;
int targetRate;
+ tSirRateUpdateInd *rateUpdate;
+ eHalStatus status;
/* Only valid for SAP mode */
if (WLAN_HDD_SOFTAP != pAdapter->device_mode)
@@ -3164,13 +3165,32 @@
/* Convert the value from ascii to integer, decimal base */
ret = kstrtouint(value, 10, &targetRate);
- rc = hdd_hostapd_set_mc_rate(pAdapter, targetRate);
- if (rc)
+ rateUpdate = (tSirRateUpdateInd *)vos_mem_malloc(sizeof(tSirRateUpdateInd));
+ if (NULL == rateUpdate)
{
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: Set MC Rate Fail %d", __func__, rc);
- ret = -EFAULT;
- goto exit;
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: SETMCRATE indication alloc fail", __func__);
+ ret = -EFAULT;
+ goto exit;
+ }
+ vos_mem_zero(rateUpdate, sizeof(tSirRateUpdateInd ));
+
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ "MC Target rate %d", targetRate);
+ /* Ignore unicast */
+ rateUpdate->ucastDataRate = -1;
+ rateUpdate->mcastDataRate24GHz = targetRate;
+ rateUpdate->mcastDataRate5GHz = targetRate;
+ rateUpdate->mcastDataRate24GHzTxFlag = 0;
+ rateUpdate->mcastDataRate5GHzTxFlag = 0;
+ status = sme_SendRateUpdateInd(pHddCtx->hHal, rateUpdate);
+ if (eHAL_STATUS_SUCCESS != status)
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: SET_MC_RATE failed", __func__);
+ vos_mem_free(rateUpdate);
+ ret = -EFAULT;
+ goto exit;
}
}
#ifdef FEATURE_WLAN_BATCH_SCAN