diff options
| author | Komal Seelam <kseelam@qti.qualcomm.com> | 2015-01-13 19:12:32 +0530 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2015-01-16 11:48:23 -0800 |
| commit | 14fbd58df15fba14fe600f62b51c91bb6829c7e7 (patch) | |
| tree | f3f80c08b0b1b0dd83d6a63a93b1d56797493255 | |
| parent | 679549f4aed5a76f9c314e35f730e37ee4659e95 (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.h | 2 | ||||
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_tgt_cfg.h | 1 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_early_suspend.c | 22 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 8 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.h | 1 |
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; |
