TDLS Support for the P2P interface

Make the HDD TDLS Context separate for each interface and have the
TDLS connection information common for both interface in HDD global
context.

CRs-Fixed: 458139
Change-Id: I07f06f3caa446d6d57645ff1abcb0dd09f4b0ea4
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 2b99eb3..36fae0a 100755
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -5240,6 +5240,7 @@
     int status = 0;
     hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
 #ifdef FEATURE_WLAN_TDLS
+    hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
     tANI_U8 staIdx;
 #endif
     
@@ -5292,19 +5293,20 @@
 
 #ifdef FEATURE_WLAN_TDLS
             /* First clean up the tdls peers if any */
-            for (staIdx = 1 ; staIdx <= HDD_MAX_NUM_TDLS_STA; staIdx++)
+            for (staIdx = 0 ; staIdx < HDD_MAX_NUM_TDLS_STA; staIdx++)
             {
-                if (pHddStaCtx->conn_info.staId[staIdx])
+                if ((pHddCtx->tdlsConnInfo[staIdx].sessionId == pAdapter->sessionId) &&
+                    (pHddCtx->tdlsConnInfo[staIdx].staId))
                 {
                     uint8 *mac;
-                    mac = pHddStaCtx->conn_info.peerMacAddress[staIdx].bytes;
+                    mac = pHddCtx->tdlsConnInfo[staIdx].peerMac.bytes;
                     VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
                             "%s: call sme_DeleteTdlsPeerSta staId %d sessionId %d %02x:%02x:%02x:%02x:%02x:%02x",
-                            __func__, pHddStaCtx->conn_info.staId[staIdx], pAdapter->sessionId,
+                            __func__, pHddCtx->tdlsConnInfo[staIdx].staId, pAdapter->sessionId,
                             mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] );
                     sme_DeleteTdlsPeerSta(WLAN_HDD_GET_HAL_CTX(pAdapter),
-                              pAdapter->sessionId,
-                              pHddStaCtx->conn_info.peerMacAddress[staIdx].bytes);
+                                          pAdapter->sessionId,
+                                          mac);
                 }
             }
 #endif
@@ -6305,7 +6307,7 @@
         return -ENOTSUPP;
     }
 
-    if (wlan_hdd_tdls_is_progress(mac, TRUE))
+    if (wlan_hdd_tdls_is_progress(pAdapter, mac, TRUE))
     {
         VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
             "%s: TDLS setup is ongoing. Request declined.",__func__);
@@ -6315,7 +6317,7 @@
     /* first to check if we reached to maximum supported TDLS peer.
        TODO: for now, return -EPERM looks working fine,
        but need to check if any other errno fit into this category.*/
-    if (HDD_MAX_NUM_TDLS_STA <= wlan_hdd_tdlsConnectedPeers())
+    if (HDD_MAX_NUM_TDLS_STA <= wlan_hdd_tdlsConnectedPeers(pAdapter))
     {
         VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
                 "%s: TDLS Max peer already connected. Request declined. \n",
@@ -6325,7 +6327,7 @@
     else
     {
         hddTdlsPeer_t *pTdlsPeer;
-        pTdlsPeer = wlan_hdd_tdls_find_peer(mac);
+        pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac);
         if (pTdlsPeer && (eTDLS_LINK_CONNECTED == pTdlsPeer->link_status))
         {
             VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
@@ -6335,7 +6337,7 @@
         }
     }
 
-    wlan_hdd_tdls_set_connection_progress(mac,TRUE);
+    wlan_hdd_tdls_set_connection_progress(pAdapter, mac, TRUE);
 
     INIT_COMPLETION(pAdapter->tdls_add_station_comp);
 
@@ -6350,14 +6352,14 @@
         VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
                 "%s: timeout waiting for tdls add station indication",
                 __func__);
-        wlan_hdd_tdls_set_connection_progress(mac, FALSE);
+        wlan_hdd_tdls_set_connection_progress(pAdapter, mac, FALSE);
         return -EPERM;
     }
     if ( eHAL_STATUS_SUCCESS != pAdapter->tdlsAddStaStatus)
     {
         VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
                 "%s: Add Station is unsucessful", __func__);
-        wlan_hdd_tdls_set_connection_progress(mac, FALSE);
+        wlan_hdd_tdls_set_connection_progress(pAdapter, mac, FALSE);
         return -EPERM;
     }
 
@@ -6571,7 +6573,7 @@
 
     if (WLAN_IS_TDLS_SETUP_ACTION(action_code))
     {
-        if (wlan_hdd_tdls_is_progress(peer, TRUE))
+        if (wlan_hdd_tdls_is_progress(pAdapter, peer, TRUE))
         {
             VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
                        "%s: TDLS setup is ongoing. Request declined.", __func__);
@@ -6582,7 +6584,7 @@
     if (SIR_MAC_TDLS_SETUP_REQ == action_code ||
         SIR_MAC_TDLS_SETUP_RSP == action_code )
     {
-        if (HDD_MAX_NUM_TDLS_STA <= wlan_hdd_tdlsConnectedPeers())
+        if (HDD_MAX_NUM_TDLS_STA <= wlan_hdd_tdlsConnectedPeers(pAdapter))
         {
             /* supplicant still sends tdls_mgmt(SETUP_REQ) even after
                we return error code at 'add_station()'. Hence we have this
@@ -6611,7 +6613,7 @@
         else
         {
             hddTdlsPeer_t *pTdlsPeer;
-            pTdlsPeer = wlan_hdd_tdls_find_peer(peer);
+            pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer);
             if (pTdlsPeer && (eTDLS_LINK_CONNECTED == pTdlsPeer->link_status))
             {
                 VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
@@ -6634,8 +6636,8 @@
     responder = 0;
     if (SIR_MAC_TDLS_TEARDOWN == action_code)
     {
-       responder = wlan_hdd_tdls_get_responder(peerMac);
-       if (-1 == responder)
+       responder = wlan_hdd_tdls_get_responder(pAdapter, peerMac);
+       if(-1 == responder)
        {
             VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
                      "%s: %02x:%02x:%02x:%02x:%02x:%02x) peer doesn't exist dialog_token %d status %d, len = %d",
@@ -6647,7 +6649,7 @@
 
     if (ret == 0 && /* if failure, don't need to set the progress bit */
        (WLAN_IS_TDLS_SETUP_ACTION(action_code)))
-        wlan_hdd_tdls_set_connection_progress(peer, TRUE);
+        wlan_hdd_tdls_set_connection_progress(pAdapter, peer, TRUE);
 
     INIT_COMPLETION(pAdapter->tdls_mgmt_comp);
 
@@ -6658,7 +6660,7 @@
     {
         if(ret == 0 && /* if failure, don't need to set the progress bit */
            (WLAN_IS_TDLS_SETUP_ACTION(action_code)))
-           wlan_hdd_tdls_set_connection_progress(peer, FALSE);
+           wlan_hdd_tdls_set_connection_progress(pAdapter, peer, FALSE);
 
         VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
                 "%s: sme_SendTdlsMgmtFrame failed!", __func__);
@@ -6677,7 +6679,7 @@
         {
             if (ret == 0 && /* if failure, don't need to set the progress bit */
                (WLAN_IS_TDLS_SETUP_ACTION(action_code)))
-                wlan_hdd_tdls_set_connection_progress(peer, FALSE);
+                wlan_hdd_tdls_set_connection_progress(pAdapter, peer, FALSE);
 
             VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
                       "%s: Mgmt Tx Completion failed status %ld TxCompletion %lu",
@@ -6691,11 +6693,11 @@
 
     if (SIR_MAC_TDLS_SETUP_RSP == action_code)
     {
-        wlan_hdd_tdls_set_responder(peerMac, TRUE);
+        wlan_hdd_tdls_set_responder(pAdapter, peerMac, TRUE);
     }
     else if (SIR_MAC_TDLS_SETUP_CNF == action_code)
     {
-        wlan_hdd_tdls_set_responder(peerMac, FALSE);
+        wlan_hdd_tdls_set_responder(pAdapter, peerMac, FALSE);
     }
 
     return 0;
@@ -6756,7 +6758,7 @@
                 VOS_STATUS status;
 
                 if (peer) {
-                    pTdlsPeer = wlan_hdd_tdls_find_peer(peer);
+                    pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer);
 
                     hddLog(VOS_TRACE_LEVEL_INFO_HIGH, 
                             "%s: TDLS_LINK_ENABLE %2x:%2x:%2x:%2x:%2x:%2x",
@@ -6776,10 +6778,10 @@
                     {
                         /* start TDLS client registration with TL */
                         status = hdd_roamRegisterTDLSSTA( pAdapter, peer, pTdlsPeer->staId, pTdlsPeer->signature);
-                        wlan_hdd_tdls_increment_peer_count();
+                        wlan_hdd_tdls_increment_peer_count(pAdapter);
                         wlan_hdd_tdls_set_link_status(pTdlsPeer, eTDLS_LINK_CONNECTED);
-                        wlan_hdd_tdls_check_bmps(pHddCtx);
-                        wlan_hdd_tdls_set_connection_progress(peer, FALSE);
+                        wlan_hdd_tdls_check_bmps(pAdapter);
+                        wlan_hdd_tdls_set_connection_progress(pAdapter, peer, FALSE);
                     }
 
                 } else {
@@ -6789,7 +6791,7 @@
             break;
         case NL80211_TDLS_DISABLE_LINK:
             {
-                hddTdlsPeer_t *curr_peer = wlan_hdd_tdls_find_peer(peer);
+                hddTdlsPeer_t *curr_peer = wlan_hdd_tdls_find_peer(pAdapter, peer);
 
                 if(NULL != curr_peer)
                 {