diff options
-rw-r--r-- | qcwcn/wifi_hal/common.h | 1 | ||||
-rw-r--r-- | qcwcn/wifi_hal/gscan.cpp | 21 | ||||
-rw-r--r-- | qcwcn/wifi_hal/ifaceeventhandler.cpp | 17 | ||||
-rw-r--r-- | qcwcn/wifi_hal/vendor_definitions.h | 3 | ||||
-rw-r--r-- | qcwcn/wifi_hal/wifi_hal.cpp | 1 |
5 files changed, 43 insertions, 0 deletions
diff --git a/qcwcn/wifi_hal/common.h b/qcwcn/wifi_hal/common.h index 950b9af..579eb5b 100644 --- a/qcwcn/wifi_hal/common.h +++ b/qcwcn/wifi_hal/common.h @@ -86,6 +86,7 @@ typedef struct { typedef struct { wifi_gscan_capabilities gscan_capa; + wifi_roaming_capabilities roaming_capa; } wifi_capa; struct gscan_event_handlers_s; diff --git a/qcwcn/wifi_hal/gscan.cpp b/qcwcn/wifi_hal/gscan.cpp index c13598c..f8d32a4 100644 --- a/qcwcn/wifi_hal/gscan.cpp +++ b/qcwcn/wifi_hal/gscan.cpp @@ -2498,3 +2498,24 @@ cleanup: return (wifi_error)ret; } + +wifi_error wifi_get_roaming_capabilities(wifi_interface_handle iface, + wifi_roaming_capabilities *caps) +{ + wifi_handle wifiHandle = getWifiHandle(iface); + hal_info *info = getHalInfo(wifiHandle); + + if (!caps) { + ALOGE("%s: Invalid Buffer provided. Exit", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + + if (!info) { + ALOGE("%s: hal_info is NULL", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + + memcpy(caps, &info->capa.roaming_capa, sizeof(wifi_roaming_capabilities)); + + return WIFI_SUCCESS; +} diff --git a/qcwcn/wifi_hal/ifaceeventhandler.cpp b/qcwcn/wifi_hal/ifaceeventhandler.cpp index ffb4174..fd959ac 100644 --- a/qcwcn/wifi_hal/ifaceeventhandler.cpp +++ b/qcwcn/wifi_hal/ifaceeventhandler.cpp @@ -367,6 +367,12 @@ int WifihalGeneric::handleResponse(WifiEvent &reply) mCapa->gscan_capa.max_number_epno_networks, mCapa->gscan_capa.max_number_epno_networks_by_ssid, mCapa->gscan_capa.max_number_of_white_listed_ssid); + + ALOGV("%s: Roaming Capabilities:\n" + " max_blacklist_size: %d\n" + " max_whitelist_size: %d\n", + __FUNCTION__, mCapa->roaming_capa.max_blacklist_size, + mCapa->roaming_capa.max_whitelist_size); } } break; @@ -476,9 +482,20 @@ wifi_error WifihalGeneric::wifiParseCapabilities(struct nlattr **tbVendor) ALOGE("%s: QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_CAPABILITIES_MAX_NUM_WHITELISTED_SSID not " "found. Set to 0.", __FUNCTION__); mCapa->gscan_capa.max_number_of_white_listed_ssid = 0; + mCapa->roaming_capa.max_whitelist_size = 0; } else { mCapa->gscan_capa.max_number_of_white_listed_ssid = nla_get_u32(tbVendor[ QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_CAPABILITIES_MAX_NUM_WHITELISTED_SSID]); + mCapa->roaming_capa.max_whitelist_size = mCapa->gscan_capa.max_number_of_white_listed_ssid; + } + + if (!tbVendor[QCA_WLAN_VENDOR_ATTR_CAPABILITIES_MAX_NUM_BLACKLISTED_BSSID]) { + ALOGE("%s: QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_CAPABILITIES_MAX" + "_NUM_BLACKLIST_BSSID not found. Set to 0.", __FUNCTION__); + mCapa->roaming_capa.max_blacklist_size = 0; + } else { + mCapa->roaming_capa.max_blacklist_size = nla_get_u32(tbVendor[ + QCA_WLAN_VENDOR_ATTR_CAPABILITIES_MAX_NUM_BLACKLISTED_BSSID]); } return WIFI_SUCCESS; } diff --git a/qcwcn/wifi_hal/vendor_definitions.h b/qcwcn/wifi_hal/vendor_definitions.h index b6f8a8e..54c4ad5 100644 --- a/qcwcn/wifi_hal/vendor_definitions.h +++ b/qcwcn/wifi_hal/vendor_definitions.h @@ -452,6 +452,9 @@ enum qca_wlan_vendor_attr_gscan_results QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_CAPABILITIES_MAX_NUM_WHITELISTED_SSID, QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_BUCKETS_SCANNED, + /* Unsigned 32bit value; a GSCAN Capabilities attribute. */ + QCA_WLAN_VENDOR_ATTR_CAPABILITIES_MAX_NUM_BLACKLISTED_BSSID, + /* keep last */ QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_AFTER_LAST, QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_MAX = diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp index b298454..7ebd3bd 100644 --- a/qcwcn/wifi_hal/wifi_hal.cpp +++ b/qcwcn/wifi_hal/wifi_hal.cpp @@ -383,6 +383,7 @@ wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn) { fn->wifi_start_pkt_fate_monitoring = wifi_start_pkt_fate_monitoring; fn->wifi_get_tx_pkt_fates = wifi_get_tx_pkt_fates; fn->wifi_get_rx_pkt_fates = wifi_get_rx_pkt_fates; + fn->wifi_get_roaming_capabilities = wifi_get_roaming_capabilities; return WIFI_SUCCESS; } |