prima: TDLS external control through HAL

TDLS can be enabled/disabled from HAL. mac address will be used
to identify the peer to which the link will be setup. Added
the required functionality and vendor commands in HDD to support
this.

Change-Id: I1e89194c8ad1df4b09f03b5a648249591ae2e449
CRs-Fixed: 691023
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 01bc84d..bf65898 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -149,6 +149,11 @@
     QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE = 31,
     QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE = 32,
     QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE = 33,
+    /*EXT TDLS*/
+    QCA_NL80211_VENDOR_SUBCMD_TDLS_ENABLE = 34,
+    QCA_NL80211_VENDOR_SUBCMD_TDLS_DISABLE = 35,
+    QCA_NL80211_VENDOR_SUBCMD_TDLS_GET_STATUS = 36,
+    QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE = 37,
 };
 
 enum qca_nl80211_vendor_subcmds_index {
@@ -175,6 +180,8 @@
     QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE_INDEX,
     QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE_INDEX,
     QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE_INDEX,
+    /*EXT TDLS*/
+    QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX,
 };
 
 enum qca_wlan_vendor_attr
@@ -190,6 +197,64 @@
     QCA_WLAN_VENDOR_ATTR_MAX       = QCA_WLAN_VENDOR_ATTR_AFTER_LAST - 1,
 };
 
+
+/*EXT TDLS*/
+enum qca_wlan_vendor_attr_tdls_enable
+{
+    QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_INVALID = 0,
+    /* An array of 6 x Unsigned 8-bit value */
+    QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_MAC_ADDR,
+    /* signed 32-bit value, but lets keep as unsigned for now */
+    QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_CHANNEL,
+    QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_GLOBAL_OPERATING_CLASS,
+    QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_MAX_LATENCY_MS,
+    QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_MIN_BANDWIDTH_KBPS,
+    /* keep last */
+    QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_AFTER_LAST,
+    QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_MAX =
+         QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_AFTER_LAST - 1,
+};
+
+enum qca_wlan_vendor_attr_tdls_disable
+{
+    QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_INVALID = 0,
+    /* An array of 6 x Unsigned 8-bit value */
+    QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_MAC_ADDR,
+    /* keep last */
+    QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_AFTER_LAST,
+    QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_MAX =
+       QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_AFTER_LAST - 1,
+};
+
+enum qca_wlan_vendor_attr_tdls_get_status
+{
+    QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_INVALID = 0,
+    /* An array of 6 x Unsigned 8-bit value */
+    QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_MAC_ADDR,
+    /* signed 32-bit value, but lets keep as unsigned for now */
+    QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_STATE,
+    QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_REASON,
+    /* keep last */
+    QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_AFTER_LAST,
+    QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_MAX =
+      QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_AFTER_LAST - 1,
+};
+
+enum qca_wlan_vendor_attr_tdls_state
+{
+    QCA_WLAN_VENDOR_ATTR_TDLS_STATE_INVALID = 0,
+    /* An array of 6 x Unsigned 8-bit value */
+    QCA_WLAN_VENDOR_ATTR_TDLS_STATE_MAC_ADDR,
+    /* signed 32-bit value, but lets keep as unsigned for now */
+    QCA_WLAN_VENDOR_ATTR_TDLS_NEW_STATE,
+    QCA_WLAN_VENDOR_ATTR_TDLS_STATE_REASON,
+    /* keep last */
+    QCA_WLAN_VENDOR_ATTR_TDLS_STATE_AFTER_LAST,
+    QCA_WLAN_VENDOR_ATTR_TDLS_STATE_MAX =
+        QCA_WLAN_VENDOR_ATTR_TDLS_STATE_AFTER_LAST - 1,
+};
+
+
 #ifdef WLAN_FEATURE_LINK_LAYER_STATS
 
 enum qca_wlan_vendor_attr_ll_stats_set