wlan: Add ini to configure aggregation and buffer size

Add two ini to set vendor OUI and to configure block
ack size during SCO. In SCO mode, on receiving disable
aggregation indcation, aggregation is enabled with
configured block ack during sco ini param with specific
AP based on vendor OUI.

Change-Id: I61f47d7d0feed2f61b6b2249a0918563a64be529
CRs-Fixed: 2164798
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index bb039ae..685f6ea 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3957,6 +3957,18 @@
                CFG_STA_SAP_SCC_ON_DFS_CHAN_DEFAULT,
                CFG_STA_SAP_SCC_ON_DFS_CHAN_MIN,
                CFG_STA_SAP_SCC_ON_DFS_CHAN_MAX),
+
+  REG_VARIABLE_STRING(CFG_ENABLE_AGG_BTC_SCO_OUI_NAME, WLAN_PARAM_String,
+                      hdd_config_t, enable_aggr_btc_sco_oui,
+                      VAR_FLAGS_OPTIONAL,
+                      (void *) CFG_ENABLE_AGG_BTC_SCO_OUI_DEFAULT),
+
+  REG_VARIABLE(CFG_NUM_BUFF_BTC_SCO_NAME, WLAN_PARAM_Integer,
+               hdd_config_t, num_buff_aggr_btc_sco,
+               VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+               CFG_NUM_BUFF_BTC_SCO_DEFAULT,
+               CFG_NUM_BUFF_BTC_SCO_MIN,
+               CFG_NUM_BUFF_BTC_SCO_MAX ),
 };
 
 /*
@@ -5139,9 +5151,9 @@
 
 VOS_STATUS hdd_string_to_u8_array(char *str, tANI_U8 *intArray,
 				   tANI_U8 *len, tANI_U8 intArrayMaxLen,
-				   char *seperator)
+				   char *seperator, bool to_hex)
 {
-   char *s = str;
+   char *format, *s = str;
 
    if( str == NULL || intArray == NULL || len == NULL )
    {
@@ -5149,12 +5161,13 @@
    }
    *len = 0;
 
+   format = (to_hex) ? "%02x" : "%d";
    while ( (s != NULL) && (*len < intArrayMaxLen) )
    {
       int val;
       //Increment length only if sscanf succesfully extracted one element.
       //Any other return value means error. Ignore it.
-      if( sscanf(s, "%d", &val ) == 1 )
+      if( sscanf(s, format, &val ) == 1 )
       {
          if (val > 255 || val < 0)
              return VOS_STATUS_E_FAILURE;
@@ -6307,7 +6320,6 @@
    return fStatus;
 }
 
-
 /**---------------------------------------------------------------------------
 
   \brief hdd_init_set_sme_config() -
@@ -6325,6 +6337,7 @@
    VOS_STATUS status = VOS_STATUS_SUCCESS;
    eHalStatus halStatus;
    tpSmeConfigParams smeConfig;
+   tANI_U8 i;
 
    hdd_config_t *pConfig = pHddCtx->cfg_ini;
 
@@ -6545,7 +6558,8 @@
    hdd_string_to_u8_array( pConfig->neighborScanChanList,
                                         smeConfig->csrConfig.neighborRoamConfig.neighborScanChanList.channelList,
                                         &smeConfig->csrConfig.neighborRoamConfig.neighborScanChanList.numChannels,
-                                        WNI_CFG_VALID_CHANNEL_LIST_LEN, "," );
+                                        WNI_CFG_VALID_CHANNEL_LIST_LEN, ",",
+                                        false);
 #endif
 
    smeConfig->csrConfig.addTSWhenACMIsOff = pConfig->AddTSWhenACMIsOff;
@@ -6625,7 +6639,15 @@
 
    smeConfig->csrConfig.sta_auth_retries_for_code17 =
                         pHddCtx->cfg_ini->sta_auth_retries_for_code17;
+   if (hdd_string_to_u8_array(pHddCtx->cfg_ini->enable_aggr_btc_sco_oui,
+       smeConfig->csrConfig.agg_btc_sco_oui, &i, VENDOR_AP_OUI_SIZE, "-",
+       true) != VOS_STATUS_SUCCESS)
+       vos_mem_set(smeConfig->csrConfig.agg_btc_sco_oui, VENDOR_AP_OUI_SIZE, 0);
 
+   smeConfig->csrConfig.num_ba_buff_btc_sco =
+                        pHddCtx->cfg_ini->num_buff_aggr_btc_sco;
+   smeConfig->csrConfig.num_ba_buff =
+                        pHddCtx->cfg_ini->numBuffAdvert;
    sme_set_mgmt_frm_via_wq5((tHalHandle)(pHddCtx->hHal),
            pHddCtx->cfg_ini->sendMgmtPktViaWQ5);