diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2014-11-12 13:58:16 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2014-11-12 13:58:16 -0800 |
| commit | 1f4ae4f453374bc52c6bc52e44bcd5f512825f94 (patch) | |
| tree | d0a9a26b42cb4e9a7dc7160d44b89e6827d9b8d7 | |
| parent | 7c379ac3b0f1290a3e7fbda7799f1ab1950a6bbf (diff) | |
| parent | ece76135a524e45ffe882c5e0e9305b9ea4b77f0 (diff) | |
Merge "Release 1.0.0.233 QCACLD WLAN Drive"
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_cfg.h | 12 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 7 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 12 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/BMI/ol_fw.c | 3 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/USB/if_usb.c | 86 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/USB/if_usb.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c | 40 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h | 2 | ||||
| -rw-r--r-- | CORE/SME/inc/csrApi.h | 6 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 10 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrNeighborRoam.c | 5 | ||||
| -rw-r--r-- | CORE/UTILS/PKTLOG/linux_ac.c | 7 |
13 files changed, 158 insertions, 38 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 05930db731ab..06506df25a91 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -2365,14 +2365,14 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */ #define CFG_BUS_BANDWIDTH_COMPUTE_INTERVAL_MAX ( 10000 ) #define CFG_TCP_DELACK_THRESHOLD_HIGH "gTcpDelAckThresholdHigh" -#define CFG_TCP_DELACK_THRESHOLD_HIGH_DEFAULT ( 4000 ) +#define CFG_TCP_DELACK_THRESHOLD_HIGH_DEFAULT ( 10000 ) #define CFG_TCP_DELACK_THRESHOLD_HIGH_MIN ( 1000 ) -#define CFG_TCP_DELACK_THRESHOLD_HIGH_MAX ( 10000 ) +#define CFG_TCP_DELACK_THRESHOLD_HIGH_MAX ( 16000 ) #define CFG_TCP_DELACK_THRESHOLD_LOW "gTcpDelAckThresholdLow" #define CFG_TCP_DELACK_THRESHOLD_LOW_DEFAULT ( 1000 ) #define CFG_TCP_DELACK_THRESHOLD_LOW_MIN ( 0 ) -#define CFG_TCP_DELACK_THRESHOLD_LOW_MAX ( 4000 ) +#define CFG_TCP_DELACK_THRESHOLD_LOW_MAX ( 10000 ) #endif /* MSM_PLATFORM */ #ifdef WLAN_FEATURE_11W @@ -2575,6 +2575,11 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */ #define CFG_DHCP_SERVER_IP_DEFAULT "" #endif /* DHCP_SERVER_OFFLOAD */ +#define CFG_ENABLE_MAC_ADDR_SPOOFING "gEnableMacAddrSpoof" +#define CFG_ENABLE_MAC_ADDR_SPOOFING_MIN (0) +#define CFG_ENABLE_MAC_ADDR_SPOOFING_MAX (1) +#define CFG_ENABLE_MAC_ADDR_SPOOFING_DEFAULT (1) + /*--------------------------------------------------------------------------- Type declarations -------------------------------------------------------------------------*/ @@ -3131,6 +3136,7 @@ typedef struct v_U32_t dhcpMaxNumClients; v_U8_t dhcpServerIP[IPADDR_STRING_LENGTH]; #endif /* DHCP_SERVER_OFFLOAD */ + bool enable_mac_spoofing; } hdd_config_t; #ifdef WLAN_FEATURE_MBSSID diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index aa4bedb17048..607ac533e25b 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -3376,6 +3376,13 @@ REG_TABLE_ENTRY g_registry_table[] = VAR_FLAGS_OPTIONAL, (void *) CFG_DHCP_SERVER_IP_DEFAULT ), #endif /* DHCP_SERVER_OFFLOAD */ + + REG_VARIABLE( CFG_ENABLE_MAC_ADDR_SPOOFING, WLAN_PARAM_Integer, + hdd_config_t, enable_mac_spoofing, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_MAC_ADDR_SPOOFING_DEFAULT, + CFG_ENABLE_MAC_ADDR_SPOOFING_MIN, + CFG_ENABLE_MAC_ADDR_SPOOFING_MAX ), }; #ifdef WLAN_FEATURE_MBSSID diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index ef72807a3717..d56a6aa5ae90 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -1243,9 +1243,21 @@ wlan_hdd_cfg80211_set_scanning_mac_oui(struct wiphy *wiphy, hdd_context_t *pHddCtx = wiphy_priv(wiphy); struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_SET_SCANNING_MAC_OUI_MAX + 1]; eHalStatus status; + int ret; ENTER(); + ret = wlan_hdd_validate_context(pHddCtx); + if (0 != ret) { + hddLog(LOGE, FL("HDD context is not valid")); + return ret; + } + + if (FALSE == pHddCtx->cfg_ini->enable_mac_spoofing) { + hddLog(LOGW, FL("MAC address spoofing is not enabled")); + return -ENOTSUPP; + } + if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SET_SCANNING_MAC_OUI_MAX, data, data_len, NULL)) { diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 4e80a4d7c8da..cc73bea666e9 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 0 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 232 +#define QWLAN_VERSION_BUILD 233 -#define QWLAN_VERSIONSTR "1.0.0.232" +#define QWLAN_VERSIONSTR "1.0.0.233" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c index 42cd9bef6f17..3b1996c1e9e0 100644 --- a/CORE/SERVICES/BMI/ol_fw.c +++ b/CORE/SERVICES/BMI/ol_fw.c @@ -1077,6 +1077,9 @@ void ol_ramdump_handler(struct ol_softc *scn) min_t(A_UINT32, len - 4, FW_REG_DUMP_CNT * 4), false); scn->fw_ram_dumping = 0; + + if (scn->enableFwSelfRecovery) + kobject_uevent(&scn->adf_dev->dev->kobj, KOBJ_OFFLINE); } else if (pattern == FW_REG_PATTERN) { reg = (A_UINT32 *) (data + 4); diff --git a/CORE/SERVICES/HIF/USB/if_usb.c b/CORE/SERVICES/HIF/USB/if_usb.c index 2b3ded45a077..2169a93b3f15 100644 --- a/CORE/SERVICES/HIF/USB/if_usb.c +++ b/CORE/SERVICES/HIF/USB/if_usb.c @@ -39,7 +39,7 @@ #include "wma_api.h" #include "wlan_hdd_main.h" #include "epping_main.h" - +#include "vos_sched.h" #ifndef REMOVE_PKT_LOG #include "ol_txrx_types.h" @@ -71,6 +71,7 @@ static wait_queue_head_t hif_usb_unload_event_wq; static atomic_t hif_usb_unload_state; struct hif_usb_softc *usb_sc = NULL; static int hif_usb_resume(struct usb_interface *interface); +static atomic_t hif_usb_hdd_remove; static int hif_usb_configure(struct hif_usb_softc *sc, hif_handle_t *hif_hdl, @@ -170,7 +171,9 @@ hif_usb_probe(struct usb_interface *interface, const struct usb_device_id *id) init_waitqueue_head(&ol_sc->sc_osdev->event_queue); - ret = hdd_wlan_startup(&pdev->dev, ol_sc); + ret = hif_init_adf_ctx(ol_sc); + if (ret == 0) + ret = hdd_wlan_startup(&pdev->dev, ol_sc); if (ret) { hif_nointrs(sc); if (sc->hif_device != NULL) { @@ -205,6 +208,7 @@ hif_usb_probe(struct usb_interface *interface, const struct usb_device_id *id) return 0; err_config: + hif_deinit_adf_ctx(ol_sc); A_FREE(ol_sc); err_attach: ret = -EIO; @@ -253,19 +257,24 @@ static void hif_usb_remove(struct usb_interface *interface) HIF_USB_UNLOAD_STATE_TARGET_RESET); scn = sc->ol_sc; - if (usb_sc->hdd_removed == 0) { - usb_sc->hdd_removed_processing = 1; + if (atomic_read(&hif_usb_hdd_remove) == 0) { + atomic_set(&hif_usb_hdd_remove, 1); + + if (usb_sc->hdd_removed == 0) { + usb_sc->hdd_removed = 1; + usb_sc->hdd_removed_processing = 1; #ifndef REMOVE_PKT_LOG - if (vos_get_conparam() != VOS_FTM_MODE && - !WLAN_IS_EPPING_ENABLED(vos_get_conparam())) - pktlogmod_exit(scn); + if (vos_get_conparam() != VOS_FTM_MODE && + !WLAN_IS_EPPING_ENABLED(vos_get_conparam())) + pktlogmod_exit(scn); #endif - __hdd_wlan_exit(); - usb_sc->hdd_removed_processing = 0; - usb_sc->hdd_removed = 1; + __hdd_wlan_exit(); + usb_sc->hdd_removed_processing = 0; + } } hif_nointrs(sc); HIF_USBDeviceDetached(interface, 1); + hif_deinit_adf_ctx(scn); A_FREE(scn); A_FREE(sc); usb_sc = NULL; @@ -384,20 +393,44 @@ struct usb_driver hif_usb_drv_id = { .supports_autosuspend = true, }; -void hif_init_adf_ctx(adf_os_device_t adf_dev, void *ol_sc) +int hif_init_adf_ctx(void *ol_sc) { + adf_os_device_t adf_ctx; + v_CONTEXT_t pVosContext = NULL; struct ol_softc *sc = (struct ol_softc *)ol_sc; struct hif_usb_softc *hif_sc = (struct hif_usb_softc *)sc->hif_sc; - adf_dev->drv = &hif_sc->aps_osdev; - adf_dev->drv_hdl = hif_sc->aps_osdev.bdev; - adf_dev->dev = hif_sc->aps_osdev.device; - sc->adf_dev = adf_dev; + + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + if(pVosContext == NULL) + return -EFAULT; + + adf_ctx = vos_mem_malloc(sizeof(*adf_ctx)); + if (!adf_ctx) + return -ENOMEM; + vos_mem_zero(adf_ctx, sizeof(*adf_ctx)); + adf_ctx->drv = &hif_sc->aps_osdev; + adf_ctx->drv_hdl = hif_sc->aps_osdev.bdev; + adf_ctx->dev = hif_sc->aps_osdev.device; + sc->adf_dev = adf_ctx; + ((VosContextType*)(pVosContext))->adf_ctx = adf_ctx; + return 0; } void hif_deinit_adf_ctx(void *ol_sc) { struct ol_softc *sc = (struct ol_softc *)ol_sc; - sc->adf_dev = NULL; + + if (sc == NULL) + return; + if (sc->adf_dev) { + v_CONTEXT_t pVosContext = NULL; + + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + vos_mem_free(sc->adf_dev); + sc->adf_dev = NULL; + if (pVosContext) + ((VosContextType*)(pVosContext))->adf_ctx = NULL; + } } static int hif_usb_dev_notify(struct notifier_block *nb, @@ -433,6 +466,7 @@ int hif_register_driver(void) is_usb_driver_register = 1; init_waitqueue_head(&hif_usb_unload_event_wq); atomic_set(&hif_usb_unload_state, HIF_USB_UNLOAD_STATE_NULL); + atomic_set(&hif_usb_hdd_remove, 0); usb_register_notify(&hif_usb_dev_nb); return usb_register(&hif_usb_drv_id); } @@ -458,16 +492,20 @@ void hif_unregister_driver(void) usb_sc->local_state.event = 0; } - if (usb_sc->hdd_removed == 0) { - usb_sc->hdd_removed_processing = 1; + if (atomic_read(&hif_usb_hdd_remove) == 0) { + atomic_set(&hif_usb_hdd_remove, 1); + + if (usb_sc->hdd_removed == 0) { + usb_sc->hdd_removed = 1; + usb_sc->hdd_removed_processing = 1; #ifndef REMOVE_PKT_LOG - if (vos_get_conparam() != VOS_FTM_MODE && - !WLAN_IS_EPPING_ENABLED(vos_get_conparam())) - pktlogmod_exit(usb_sc->ol_sc); + if (vos_get_conparam() != VOS_FTM_MODE && + !WLAN_IS_EPPING_ENABLED(vos_get_conparam())) + pktlogmod_exit(usb_sc->ol_sc); #endif - __hdd_wlan_exit(); - usb_sc->hdd_removed_processing = 0; - usb_sc->hdd_removed = 1; + __hdd_wlan_exit(); + usb_sc->hdd_removed_processing = 0; + } } } is_usb_driver_register = 0; diff --git a/CORE/SERVICES/HIF/USB/if_usb.h b/CORE/SERVICES/HIF/USB/if_usb.h index cfdf4e76c8f2..85ce3c001b51 100644 --- a/CORE/SERVICES/HIF/USB/if_usb.h +++ b/CORE/SERVICES/HIF/USB/if_usb.h @@ -100,7 +100,7 @@ extern void pktlogmod_exit(void *context); /*These functions are exposed to HDD*/ int hif_register_driver(void); void hif_unregister_driver(void); -void hif_init_adf_ctx(adf_os_device_t adf_dev, void *ol_sc); +int hif_init_adf_ctx(void *ol_sc); void hif_init_pdev_txrx_handle(void *ol_sc, void *txrx_handle); void hif_disable_isr(void *ol_sc); void hif_reset_soc(void *ol_sc); diff --git a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c index f4d7ebe44d36..76010b373da7 100644 --- a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c +++ b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c @@ -43,6 +43,7 @@ #include "bmi_msg.h" /* TARGET_TYPE_ */ #include "if_ath_sdio.h" #include "vos_api.h" +#include "vos_sched.h" #ifndef REMOVE_PKT_LOG #include "ol_txrx_types.h" @@ -164,8 +165,9 @@ ath_hif_sdio_probe(void *context, void *hif_handle) ret = A_ERROR; goto err_attach1; } - - ret = hdd_wlan_startup(&(func->dev), ol_sc); + ret = hif_init_adf_ctx(ol_sc); + if (ret == 0) + ret = hdd_wlan_startup(&(func->dev), ol_sc); if ( ret ) { VOS_TRACE(VOS_MODULE_ID_HIF, VOS_TRACE_LEVEL_FATAL," hdd_wlan_startup failed"); goto err_attach2; @@ -195,6 +197,7 @@ end: err_attach2: athdiag_procfs_remove(); + hif_deinit_adf_ctx(ol_sc); err_attach1: A_FREE(ol_sc); err_attach: @@ -249,6 +252,7 @@ ath_hif_sdio_remove(void *context, void *hif_handle) __hdd_wlan_exit(); if (sc && sc->ol_sc){ + hif_deinit_adf_ctx(sc->ol_sc); A_FREE(sc->ol_sc); sc->ol_sc = NULL; } @@ -340,21 +344,43 @@ void hif_unregister_driver(void) return ; } -void hif_init_adf_ctx(adf_os_device_t adf_dev, void *ol_sc) +int hif_init_adf_ctx(void *ol_sc) { + adf_os_device_t adf_ctx; + v_CONTEXT_t pVosContext = NULL; struct ol_softc *ol_sc_local = (struct ol_softc *)ol_sc; struct ath_hif_sdio_softc *hif_sc = ol_sc_local->hif_sc; ENTER(); - adf_dev->drv = &hif_sc->aps_osdev; - adf_dev->dev = hif_sc->aps_osdev.device; - ol_sc_local->adf_dev = adf_dev; + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + if(pVosContext == NULL) + return -EFAULT; + adf_ctx = vos_mem_malloc(sizeof(*adf_ctx)); + if (!adf_ctx) + return -ENOMEM; + vos_mem_zero(adf_ctx, sizeof(*adf_ctx)); + adf_ctx->drv = &hif_sc->aps_osdev; + adf_ctx->dev = hif_sc->aps_osdev.device; + ol_sc_local->adf_dev = adf_ctx; + ((VosContextType*)(pVosContext))->adf_ctx = adf_ctx; EXIT(); + return 0; } void hif_deinit_adf_ctx(void *ol_sc) { struct ol_softc *sc = (struct ol_softc *)ol_sc; - sc->adf_dev = NULL; + + if (sc == NULL) + return; + if (sc->adf_dev) { + v_CONTEXT_t pVosContext = NULL; + + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + vos_mem_free(sc->adf_dev); + sc->adf_dev = NULL; + if (pVosContext) + ((VosContextType*)(pVosContext))->adf_ctx = NULL; + } } /* Function to set the TXRX handle in the ol_sc context */ diff --git a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h index 8de7217ad844..103443af8636 100644 --- a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h +++ b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h @@ -93,7 +93,7 @@ int ath_sdio_resume(void *context); /*These functions are exposed to HDD*/ int hif_register_driver(void); void hif_unregister_driver(void); -void hif_init_adf_ctx(adf_os_device_t adf_dev, void *ol_sc); +int hif_init_adf_ctx(void *ol_sc); void hif_deinit_adf_ctx(void *ol_sc); void hif_disable_isr(void *ol_sc); void hif_init_pdev_txrx_handle(void *ol_sc, void *txrx_handle); diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index 53357291e16a..e839a5d8ee4b 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -1017,6 +1017,12 @@ typedef struct tagCsrRoamConnectedProfile #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH tCsrRoamHTProfile HTProfile; #endif +#ifdef WLAN_FEATURE_11W + /* Management Frame Protection */ + tANI_BOOLEAN MFPEnabled; + tANI_U8 MFPRequired; + tANI_U8 MFPCapable; +#endif }tCsrRoamConnectedProfile; diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index d4e014d965d3..df1fa201c266 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -6675,6 +6675,11 @@ eHalStatus csrRoamCopyConnectedProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, pDstProfile->CBMode = pSrcProfile->CBMode; vos_mem_copy(&pDstProfile->Keys, &pSrcProfile->Keys, sizeof(pDstProfile->Keys)); +#ifdef WLAN_FEATURE_11W + pDstProfile->MFPEnabled = pSrcProfile->MFPEnabled; + pDstProfile->MFPRequired = pSrcProfile->MFPRequired; + pDstProfile->MFPCapable = pSrcProfile->MFPCapable; +#endif #ifdef WLAN_FEATURE_VOWIFI_11R if (pSrcProfile->MDID.mdiePresent) { @@ -7580,6 +7585,11 @@ eHalStatus csrRoamSaveConnectedInfomation(tpAniSirGlobal pMac, tANI_U32 sessionI pProfile->nAddIEAssocLength); } +#ifdef WLAN_FEATURE_11W + pConnectProfile->MFPEnabled = pProfile->MFPEnabled; + pConnectProfile->MFPRequired = pProfile->MFPRequired; + pConnectProfile->MFPCapable = pProfile->MFPCapable; +#endif //Save bssid csrGetBssIdBssDesc(pMac, pSirBssDesc, &pConnectProfile->bssid); #ifdef WLAN_FEATURE_VOWIFI_11R diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c index 2cf7ad0e974c..8cbea8ce5e76 100644 --- a/CORE/SME/src/csr/csrNeighborRoam.c +++ b/CORE/SME/src/csr/csrNeighborRoam.c @@ -1867,6 +1867,11 @@ csrNeighborRoamPrepareScanProfileFilter(tpAniSirGlobal pMac, } #endif +#ifdef WLAN_FEATURE_11W + pScanFilter->MFPEnabled = pCurProfile->MFPEnabled; + pScanFilter->MFPRequired = pCurProfile->MFPRequired; + pScanFilter->MFPCapable = pCurProfile->MFPCapable; +#endif return eHAL_STATUS_SUCCESS; } diff --git a/CORE/UTILS/PKTLOG/linux_ac.c b/CORE/UTILS/PKTLOG/linux_ac.c index e067c23524fc..96a131e69582 100644 --- a/CORE/UTILS/PKTLOG/linux_ac.c +++ b/CORE/UTILS/PKTLOG/linux_ac.c @@ -874,6 +874,13 @@ void pktlogmod_exit(void *context) return; /* + * pktlog already be detached + * avoid to detach and remove proc entry again + */ + if (!pl_dev->pl_info) + return; + + /* * Disable firmware side pktlog function */ if (pl_dev->tgt_pktlog_enabled) { |
