summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKomal Seelam <kseelam@qti.qualcomm.com>2015-01-13 19:12:32 +0530
committerAkash Patel <c_akashp@qca.qualcomm.com>2015-01-16 11:48:23 -0800
commit14fbd58df15fba14fe600f62b51c91bb6829c7e7 (patch)
treef3f80c08b0b1b0dd83d6a63a93b1d56797493255
parent679549f4aed5a76f9c314e35f730e37ee4659e95 (diff)
qcacld-2.0: Enable ARP/NS offload support on beaconing interfaces.
Enable ARP/NS offload support on beaconing interfaces (SAP/P2P GO) on HL devices dynamically based on the target service support. On LL targets ARP & NS offloads are not supported on beaconing interfaces. On HL targets FW supports the ARP and NS offloads. The Target support is dynamically read using the service bit and accordingly host will configure the ARP/NS offload. Change-Id: I5f56ed0e0c2889ca21e0c422c9c9749b1a363f73 CRs-Fixed: 778466
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h2
-rw-r--r--CORE/HDD/inc/wlan_hdd_tgt_cfg.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c22
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c1
-rw-r--r--CORE/SERVICES/WMA/wma.c8
-rw-r--r--CORE/SERVICES/WMA/wma.h1
6 files changed, 34 insertions, 1 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 0f1c1f37e090..1b0e157c1d7c 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1464,7 +1464,7 @@ struct hdd_context_s
#ifdef WLAN_FEATURE_LPSS
v_U8_t lpss_support;
#endif
-
+ uint8_t ap_arpns_support;
tSirScanType ioctl_scan_mode;
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
diff --git a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h
index d47a24634f05..a7d626e3abca 100644
--- a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h
@@ -101,6 +101,7 @@ struct hdd_tgt_cfg {
#ifdef WLAN_FEATURE_LPSS
v_U8_t lpss_support;
#endif
+ uint8_t ap_arpns_support;
};
struct hdd_dfs_radar_ind {
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index d440bdb3bb75..c0702974d3db 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -602,6 +602,17 @@ static void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable)
pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+ /* In SAP/P2PGo mode, ARP/NS offload feature capability
+ * is controlled by one bit.
+ */
+
+ if ((WLAN_HDD_SOFTAP == pAdapter->device_mode ||
+ WLAN_HDD_P2P_GO == pAdapter->device_mode) &&
+ !pHddCtx->ap_arpns_support) {
+ hddLog(LOG1, FL("NS Offload is not supported in SAP/P2PGO mode"));
+ return;
+ }
+
if (fenable)
{
in6_dev = __in6_dev_get(pAdapter->dev);
@@ -1029,6 +1040,17 @@ VOS_STATUS hdd_conf_arp_offload(hdd_adapter_t *pAdapter, int fenable)
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
hddLog(VOS_TRACE_LEVEL_ERROR, FL(" fenable = %d \n"), fenable);
+
+ /* In SAP/P2PGo mode, ARP/NS offload feature capability
+ * is controlled by one bit.
+ */
+ if ((WLAN_HDD_SOFTAP == pAdapter->device_mode ||
+ WLAN_HDD_P2P_GO == pAdapter->device_mode) &&
+ !pHddCtx->ap_arpns_support) {
+ hddLog(LOG1, FL("APR Offload is not supported in SAP/P2PGO mode"));
+ return VOS_STATUS_SUCCESS;
+ }
+
if(fenable)
{
if ((in_dev = __in_dev_get_rtnl(pAdapter->dev)) != NULL)
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index b5b73815041c..8d3b9923f016 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -8002,6 +8002,7 @@ void hdd_update_tgt_cfg(void *context, void *param)
hdd_ctx->lpss_support = cfg->lpss_support;
#endif
+ hdd_ctx->ap_arpns_support = cfg->ap_arpns_support;
hdd_update_tgt_services(hdd_ctx, &cfg->services);
hdd_update_tgt_ht_cap(hdd_ctx, &cfg->ht_cap);
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index e595bb16c3f4..910233f30310 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -25958,6 +25958,7 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle)
#ifdef WLAN_FEATURE_LPSS
hdd_tgt_cfg.lpss_support = wma_handle->lpss_support;
#endif
+ hdd_tgt_cfg.ap_arpns_support = wma_handle->ap_arpns_support;
wma_handle->tgt_cfg_update_cb(hdd_ctx, &hdd_tgt_cfg);
}
static wmi_buf_t wma_setup_wmi_init_msg(tp_wma_handle wma_handle,
@@ -26157,6 +26158,13 @@ v_VOID_t wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info)
WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap,
WMI_SERVICE_LPASS);
#endif
+ /*
+ * This Service bit is added to check for ARP/NS offload
+ * support for LL or HL targets
+ */
+ wma_handle->ap_arpns_support =
+ WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap,
+ WMI_SERVICE_AP_ARPNS_OFFLOAD);
if (WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap,
WMI_SERVICE_CSA_OFFLOAD)) {
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 3b601c1f34d3..5bc1a0ba0bb6 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -611,6 +611,7 @@ typedef struct {
#ifdef WLAN_FEATURE_LPSS
v_U8_t lpss_support; /* LPSS feature is supported in target or not */
#endif
+ uint8_t ap_arpns_support;
bool wmi_ready;
u_int32_t wlan_init_status;
adf_os_device_t adf_dev;