summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorychuang <ychuang@qca.qualcomm.com>2014-11-10 22:59:39 +0800
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-11-25 14:29:36 +0530
commit76bea5e48ec5ca2dead03bad5df75eb0d5482fed (patch)
tree843f6636da1c6a8d6585e5e0bee9ca556f72946e
parente8ac06c1530af51d24f08d2d26d391a879452a2f (diff)
wlan: HDD: add AP Find feature
Pass APFIND configuration information from user to firmware for APFind feature control. Change-Id: I4e5ada14e21e04a5c686b04cee2003b9b39b5ec1 CRs-Fixed: 755225
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c43
2 files changed, 44 insertions, 0 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 49aaeb0018b8..633f30d8fa8d 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -174,6 +174,7 @@ enum qca_nl80211_vendor_subcmds {
/* Get Concurrency Matrix */
QCA_NL80211_VENDOR_SUBCMD_GET_CONCURRENCY_MATRIX = 42,
+ QCA_NL80211_VENDOR_SUBCMD_APFIND = 52,
};
enum qca_nl80211_vendor_subcmds_index {
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 5d5c909e2c2d..92820ad89044 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -989,6 +989,39 @@ void wlan_hdd_cfg80211_nan_init(hdd_context_t *pHddCtx)
#endif
+#ifdef WLAN_FEATURE_APFIND
+/**
+ * wlan_hdd_cfg80211_apfind_cmd() - set configuration to firmware
+ * @wiphy: pointer to wireless wiphy structure.
+ * @wdev: pointer to wireless_dev structure.
+ * @data: pointer to apfind configuration data.
+ * @data_len: the length in byte of apfind data.
+ *
+ * This is called when wlan driver needs to send APFIND configuations to
+ * firmware.
+ *
+ * Return: An error code or 0 on success.
+ */
+static int wlan_hdd_cfg80211_apfind_cmd(struct wiphy *wiphy,
+ struct wireless_dev *wdev,
+ void *data, int data_len)
+{
+ struct sme_ap_find_request_req apfind_req;
+ VOS_STATUS status;
+ int ret_val = -EIO;
+
+ apfind_req.request_data_len = data_len;
+ apfind_req.request_data = data;
+
+ status = sme_apfind_set_cmd(&apfind_req);
+ if (VOS_STATUS_SUCCESS == status) {
+ ret_val = 0;
+ }
+ return ret_val;
+}
+#endif /* WLAN_FEATURE_APFIND */
+
+
/* vendor specific events */
static const struct nl80211_vendor_cmd_info wlan_hdd_cfg80211_vendor_events[] =
{
@@ -4386,6 +4419,16 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] =
WIPHY_VENDOR_CMD_NEED_NETDEV,
.doit = wlan_hdd_cfg80211_get_concurrency_matrix
},
+#ifdef WLAN_FEATURE_APFIND
+ {
+ .info.vendor_id = QCA_NL80211_VENDOR_ID,
+ .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_APFIND,
+ .flags = WIPHY_VENDOR_CMD_NEED_WDEV |
+ WIPHY_VENDOR_CMD_NEED_NETDEV,
+ .doit = wlan_hdd_cfg80211_apfind_cmd
+ },
+#endif /* WLAN_FEATURE_APFIND */
+
};