wlan: extra channel 144 support, host only

Host Only.
New requirement from customer. CH 144 support.
NV.bin should support CH 144 with NV3 structure.
NV2 will not support CH144.
NV2 without CH144 should be support.

Change-Id: Id4e1f0e078e1a326f3b488b4ea43a1dd4c60c649
CRs-fixed: 576601
diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c
index 9dea195..40968ad 100644
--- a/CORE/HDD/src/wlan_hdd_ftm.c
+++ b/CORE/HDD/src/wlan_hdd_ftm.c
@@ -1692,6 +1692,7 @@
 
   \brief wlan_hdd_ftm_get_nv_table() -
             Get Specific NV table
+            NV V2 dedicated API
 
   \param  - ftmCmd - Pointer FTM Commad Buffer
 
@@ -1709,8 +1710,8 @@
    VOS_STATUS          nvStatus = VOS_STATUS_SUCCESS;
    pttGetNvTable      *nvTable = (pttGetNvTable *)&ftmCmd->msgBody.GetNvTable;
    v_SIZE_t            nvSize;
-   sHalNv             *nvContents = NULL;
-
+   sHalNvV2           *nvContents = NULL;
+   eNvVersionType      nvVersion;
 
    if (NULL == pHddCtx)
    {
@@ -1719,6 +1720,14 @@
       return -EINVAL;
    }
 
+   nvVersion = vos_nv_getNvVersion();
+   if (E_NV_V2 != nvVersion)
+   {
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+                "%s : Not valid NV Version %d", __func__, nvVersion);
+      return -EINVAL;
+   }
+
    /* Test first chunk of NV table */
    if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) ||
       (0 == pHddCtx->ftm.processedNVTableSize))
@@ -1855,6 +1864,7 @@
 
   \brief wlan_hdd_ftm_set_nv_table() -
             Set Specific NV table as given
+            NV V2 dedicated API
 
   \param  - ftmCmd - Pointer FTM Commad Buffer
 
@@ -1872,7 +1882,8 @@
    VOS_STATUS          nvStatus = VOS_STATUS_SUCCESS;
    pttSetNvTable      *nvTable = (pttSetNvTable *)&ftmCmd->msgBody.SetNvTable;
    v_SIZE_t            nvSize;
-   sHalNv             *nvContents = NULL;
+   sHalNvV2           *nvContents = NULL;
+   eNvVersionType      nvVersion;
 
    if (NULL == pHddCtx)
    {
@@ -1881,6 +1892,14 @@
       return -EINVAL;
    }
 
+   nvVersion = vos_nv_getNvVersion();
+   if (E_NV_V2 != nvVersion)
+   {
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+                "%s : Not valid NV Version %d", __func__, nvVersion);
+      return -EINVAL;
+   }
+
    /* Test first chunk of NV table */
    if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) ||
        (0 == pHddCtx->ftm.processedNVTableSize))
@@ -2005,6 +2024,7 @@
 
   \brief wlan_hdd_ftm_blank_nv() -
             Set all NV table value as default
+            NV V2 dedicated API
 
   \param  - ftmCmd - Pointer FTM Commad Buffer
 
@@ -2018,10 +2038,11 @@
    tPttMsgbuffer  *ftmCmd
 )
 {
-   VOS_STATUS      nvStatus = VOS_STATUS_SUCCESS;
+   VOS_STATUS          nvStatus = VOS_STATUS_SUCCESS;
    v_SIZE_t            nvSize;
    v_SIZE_t            itemSize;
-   sHalNv             *nvContents = NULL;
+   sHalNvV2           *nvContents = NULL;
+   eNvVersionType      nvVersion;
 
    nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
    if((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
@@ -2031,54 +2052,62 @@
       return -EIO;
    }
 
+   nvVersion = vos_nv_getNvVersion();
+   if (E_NV_V2 != nvVersion)
+   {
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+                "%s : Not valid NV Version %d", __func__, nvVersion);
+      return -EINVAL;
+   }
+
    itemSize = sizeof(nvContents->tables.pwrOptimum);
    memcpy(&nvContents->tables.pwrOptimum,
-          &nvDefaults.tables.pwrOptimum,
+          &nvDefaultsV2.tables.pwrOptimum,
           itemSize);
 
    itemSize = sizeof(nvContents->tables.regDomains);
    memcpy(&nvContents->tables.regDomains,
-          &nvDefaults.tables.regDomains,
+          &nvDefaultsV2.tables.regDomains,
           itemSize);
 
    itemSize = sizeof(nvContents->tables.defaultCountryTable);
    memcpy(&nvContents->tables.defaultCountryTable,
-          &nvDefaults.tables.defaultCountryTable,
+          &nvDefaultsV2.tables.defaultCountryTable,
           itemSize);
 
    itemSize = sizeof(nvContents->tables.plutCharacterized);
    memcpy(&nvContents->tables.plutCharacterized[0],
-          &nvDefaults.tables.plutCharacterized[0],
+          &nvDefaultsV2.tables.plutCharacterized[0],
           itemSize);
 
    itemSize = sizeof(nvContents->tables.plutPdadcOffset);
    memcpy(&nvContents->tables.plutPdadcOffset[0],
-          &nvDefaults.tables.plutPdadcOffset[0],
+          &nvDefaultsV2.tables.plutPdadcOffset[0],
           itemSize);
 
    itemSize = sizeof(nvContents->tables.pwrOptimum_virtualRate);
    memcpy(&nvContents->tables.pwrOptimum_virtualRate[0],
-          &nvDefaults.tables.pwrOptimum_virtualRate[0],
+          &nvDefaultsV2.tables.pwrOptimum_virtualRate[0],
           itemSize);
 
    itemSize = sizeof(nvContents->tables.rssiChanOffsets);
    memcpy(&nvContents->tables.rssiChanOffsets[0],
-          &nvDefaults.tables.rssiChanOffsets[0],
+          &nvDefaultsV2.tables.rssiChanOffsets[0],
           itemSize);
 
    itemSize = sizeof(nvContents->tables.hwCalValues);
    memcpy(&nvContents->tables.hwCalValues,
-          &nvDefaults.tables.hwCalValues,
+          &nvDefaultsV2.tables.hwCalValues,
           itemSize);
 
    itemSize = sizeof(nvContents->tables.antennaPathLoss);
    memcpy(&nvContents->tables.antennaPathLoss[0],
-          &nvDefaults.tables.antennaPathLoss[0],
+          &nvDefaultsV2.tables.antennaPathLoss[0],
           itemSize);
 
    itemSize = sizeof(nvContents->tables.pktTypePwrLimits);
    memcpy(&nvContents->tables.pktTypePwrLimits[0][0],
-          &nvDefaults.tables.pktTypePwrLimits[0][0],
+          &nvDefaultsV2.tables.pktTypePwrLimits[0][0],
           itemSize);
 
    return 1;
@@ -2088,6 +2117,7 @@
 
   \brief wlan_hdd_ftm_delete_nv_table() -
             Delete Specific NV table
+            NV V2 dedicated API
 
   \param  - ftmCmd - Pointer FTM Commad Buffer
 
@@ -2101,11 +2131,12 @@
    tPttMsgbuffer  *ftmCmd
 )
 {
-   VOS_STATUS      nvStatus = VOS_STATUS_SUCCESS;
+   VOS_STATUS          nvStatus = VOS_STATUS_SUCCESS;
    tMsgPttDelNvTable  *nvTable = (tMsgPttDelNvTable *)&ftmCmd->msgBody.DelNvTable;
    v_SIZE_t            nvSize;
    v_SIZE_t            itemSize;
-   sHalNv             *nvContents = NULL;
+   sHalNvV2           *nvContents = NULL;
+   eNvVersionType      nvVersion;
 
    nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
    if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
@@ -2115,82 +2146,90 @@
       return -EIO;
    }
 
+   nvVersion = vos_nv_getNvVersion();
+   if (E_NV_V2 != nvVersion)
+   {
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+                "%s : Not valid NV Version %d", __func__, nvVersion);
+      return -EINVAL;
+   }
+
    switch (nvTable->nvTable)
    {
       case NV_TABLE_RATE_POWER_SETTINGS:
          itemSize = sizeof(nvContents->tables.pwrOptimum);
          memcpy(&nvContents->tables.pwrOptimum,
-                &nvDefaults.tables.pwrOptimum,
+                &nvDefaultsV2.tables.pwrOptimum,
                 itemSize);
          break;
 
       case NV_TABLE_REGULATORY_DOMAINS:
          itemSize = sizeof(nvContents->tables.regDomains);
          memcpy(&nvContents->tables.regDomains,
-                &nvDefaults.tables.regDomains,
+                &nvDefaultsV2.tables.regDomains,
                 itemSize);
          break;
 
       case NV_TABLE_DEFAULT_COUNTRY:
          itemSize = sizeof(nvContents->tables.defaultCountryTable);
          memcpy(&nvContents->tables.defaultCountryTable,
-                &nvDefaults.tables.defaultCountryTable,
+                &nvDefaultsV2.tables.defaultCountryTable,
                 itemSize);
          break;
 
       case NV_TABLE_TPC_POWER_TABLE:
          itemSize = sizeof(nvContents->tables.plutCharacterized);
          memcpy(&nvContents->tables.plutCharacterized[0],
-                &nvDefaults.tables.plutCharacterized[0],
+                &nvDefaultsV2.tables.plutCharacterized[0],
                 itemSize);
          break;
 
       case NV_TABLE_TPC_PDADC_OFFSETS:
          itemSize = sizeof(nvContents->tables.plutPdadcOffset);
          memcpy(&nvContents->tables.plutPdadcOffset[0],
-                &nvDefaults.tables.plutPdadcOffset[0],
+                &nvDefaultsV2.tables.plutPdadcOffset[0],
                 itemSize);
          break;
 
       case NV_TABLE_VIRTUAL_RATE:
          itemSize = sizeof(nvContents->tables.pwrOptimum_virtualRate);
          memcpy(&nvContents->tables.pwrOptimum_virtualRate[0],
-                &nvDefaults.tables.pwrOptimum_virtualRate[0],
+                &nvDefaultsV2.tables.pwrOptimum_virtualRate[0],
                 itemSize);
          break;
 
       case NV_TABLE_RSSI_CHANNEL_OFFSETS:
          itemSize = sizeof(nvContents->tables.rssiChanOffsets);
          memcpy(&nvContents->tables.rssiChanOffsets[0],
-                &nvDefaults.tables.rssiChanOffsets[0],
+                &nvDefaultsV2.tables.rssiChanOffsets[0],
                 itemSize);
          break;
 
       case NV_TABLE_HW_CAL_VALUES:
          itemSize = sizeof(nvContents->tables.hwCalValues);
          memcpy(&nvContents->tables.hwCalValues,
-                &nvDefaults.tables.hwCalValues,
+                &nvDefaultsV2.tables.hwCalValues,
                 itemSize);
          break;
 
       case NV_TABLE_FW_CONFIG:
          itemSize = sizeof(nvContents->tables.fwConfig);
          memcpy(&nvContents->tables.fwConfig,
-                &nvDefaults.tables.fwConfig,
+                &nvDefaultsV2.tables.fwConfig,
                 itemSize);
          break;
 
       case NV_TABLE_ANTENNA_PATH_LOSS:
          itemSize = sizeof(nvContents->tables.antennaPathLoss);
          memcpy(&nvContents->tables.antennaPathLoss[0],
-                &nvDefaults.tables.antennaPathLoss[0],
+                &nvDefaultsV2.tables.antennaPathLoss[0],
                 itemSize);
          break;
 
       case NV_TABLE_PACKET_TYPE_POWER_LIMITS:
          itemSize = sizeof(nvContents->tables.pktTypePwrLimits);
          memcpy(&nvContents->tables.pktTypePwrLimits[0][0],
-                &nvDefaults.tables.pktTypePwrLimits[0][0],
+                &nvDefaultsV2.tables.pktTypePwrLimits[0][0],
                 itemSize);
          break;
 
@@ -2437,6 +2476,7 @@
 
   \brief wlan_hdd_ftm_store_nv_table() -
             Store Cached NV information into Flash Memory, file
+            NV V2 dedicated API
 
   \param  - ftmCmd - Pointer FTM Commad Buffer
 
@@ -2452,11 +2492,12 @@
 {
    VOS_STATUS           nvStatus = VOS_STATUS_SUCCESS;
    v_SIZE_t             nvSize;
-   sHalNv              *nvContents = NULL;
    tMsgPttStoreNvTable *nvTable = (tMsgPttStoreNvTable *)&ftmCmd->msgBody.StoreNvTable;
    void                *tablePtr = NULL;
    unsigned int         tableSize = 0;
    VNV_TYPE             tableVNVType = VNV_FIELD_IMAGE;
+   sHalNvV2            *nvContents = NULL;
+   eNvVersionType       nvVersion;
 
    nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
    if((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
@@ -2464,6 +2505,14 @@
       return -EIO;
    }
 
+   nvVersion = vos_nv_getNvVersion();
+   if (E_NV_V2 != nvVersion)
+   {
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+                "%s : Not valid NV Version %d", __func__, nvVersion);
+      return -EINVAL;
+   }
+
    /* Set Platform type as PRIMA */
    nvContents->fields.wlanNvRevId = 2;
 
@@ -2583,7 +2632,15 @@
    v_SIZE_t            nvSize;
    v_U8_t             *nvContents;
    v_U16_t offset = 0;
+   eNvVersionType      nvVersion;
 
+   nvVersion = vos_nv_getNvVersion();
+   if (E_NV_V3 != nvVersion)
+   {
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+                "%s : Not valid NV Version %d", __func__, nvVersion);
+      return -EINVAL;
+   }
 
    if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) ||
       (0 == pHddCtx->ftm.processedNVTableSize))
@@ -2707,6 +2764,16 @@
 {
    VOS_STATUS          nvStatus = VOS_STATUS_SUCCESS;
    pttSetNvTable      *nvTable = (pttSetNvTable *)&ftmCmd->msgBody.SetNvBin;
+   eNvVersionType      nvVersion;
+
+   nvVersion = vos_nv_getNvVersion();
+   if (E_NV_V3 != nvVersion)
+   {
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+                "%s : Not valid NV Version %d", __func__, nvVersion);
+      return -EINVAL;
+   }
+
 
    /* Test first chunk of NV table */
    if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) ||