diff options
| author | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2014-10-29 17:06:03 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2014-10-29 17:07:15 +0530 |
| commit | 4975c6df4da21e2e692c38584f197a93a92fa484 (patch) | |
| tree | 4061148a3aac67cd7f80fc55a53c25644509ba45 | |
| parent | f3b603a5d324f6fb6a68ecb874c7d30201905694 (diff) | |
| parent | 7138477aad32d6a8545733fab8a3ca2713533067 (diff) | |
Release 1.0.0.222 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master'
* origin/caf/caf-wlan/master:
Cafstaging Release 1.0.0.222
qca_cld: Destroy sap_dfs_cac_timer in SSR shutdown routine
WLAN:Force Roaming to given Bssid
qca_cld: Print management frame type only after host resumes from D0WOW
Change-Id: I7fdb132d0f000c664531db992e404ef4e11a889c
| -rw-r--r-- | CORE/CLD_TXRX/TLSHIM/tl_shim.c | 16 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 37 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/MAC/src/include/sirParams.h | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 74 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.h | 15 | ||||
| -rw-r--r-- | CORE/VOSS/src/vos_api.c | 8 |
7 files changed, 150 insertions, 5 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c index 9db8328e38d6..5da9cba8d39c 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c @@ -466,6 +466,9 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, void *vos_ctx = vos_get_global_context(VOS_MODULE_ID_TL, NULL); struct txrx_tl_shim_ctx *tl_shim = vos_get_context(VOS_MODULE_ID_TL, vos_ctx); +#ifdef FEATURE_WLAN_D0WOW + tp_wma_handle wma_handle = vos_get_context(VOS_MODULE_ID_WDA, vos_ctx); +#endif WMI_MGMT_RX_EVENTID_param_tlvs *param_tlvs = NULL; wmi_mgmt_rx_hdr *hdr = NULL; #ifdef WLAN_FEATURE_11W @@ -485,6 +488,13 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, return 0; } +#ifdef FEATURE_WLAN_D0WOW + if (!wma_handle) { + TLSHIM_LOGE("%s: Failed to get WMA context!", __func__); + return 0; + } +#endif + param_tlvs = (WMI_MGMT_RX_EVENTID_param_tlvs *) data; if (!param_tlvs) { TLSHIM_LOGE("Get NULL point message from FW"); @@ -594,8 +604,12 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, mgt_subtype = (wh)->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK; #ifdef FEATURE_WLAN_D0WOW - TLSHIM_LOGD("%s: Frame subtype is 0x%x", __func__, mgt_subtype); + if (wma_read_d0wow_flag(wma_handle)) { + TLSHIM_LOGE("%s: Frame subtype is 0x%x", __func__, mgt_subtype); + wma_set_d0wow_flag(wma_handle, FALSE); + } #endif + if (!saved_beacon && mgt_type == IEEE80211_FC0_TYPE_MGT && (mgt_subtype == IEEE80211_FC0_SUBTYPE_BEACON || mgt_subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP)) { diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 0b737f40e339..9f9875385c60 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -295,6 +295,10 @@ extern int hdd_ftm_stop(hdd_context_t *pHddCtx); #ifdef FEATURE_WLAN_AUTO_SHUTDOWN v_VOID_t wlan_hdd_auto_shutdown_cb(v_VOID_t); #endif +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +static void wma_send_fastreassoc_cmd(int sessionId, tSirMacAddr bssId, + int channel); +#endif /* Store WLAN driver version info in a global variable such that crash debugger can extract it from driver debug symbol and crashdump for post processing */ @@ -5204,7 +5208,13 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter, "%s: Invalid Channel [%d] \n", __func__, channel); return -EINVAL; } - +#ifdef WLAN_FEATURE_ROAM_OFFLOAD + if (pHddCtx->cfg_ini->isRoamOffloadEnabled) { + wma_send_fastreassoc_cmd(pAdapter->sessionId, targetApBssid, + channel); + goto exit; + } +#endif /* Proceed with reassoc */ #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD handoffInfo.channel = channel; @@ -14095,6 +14105,31 @@ void wlan_hdd_check_sta_ap_concurrent_ch_intf(void *data) #endif +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +void wma_send_fastreassoc_cmd(int sessionId, tSirMacAddr bssId, int channel) +{ + t_wma_roam_invoke_cmd *fastReassoc; + vos_msg_t msg = {0}; + + fastReassoc = vos_mem_malloc(sizeof(*fastReassoc)); + if (NULL == fastReassoc) { + hddLog(LOGE, FL("vos_mem_alloc failed for fastReassoc")); + } + fastReassoc->vdev_id = sessionId; + fastReassoc->channel = channel; + vos_mem_copy(fastReassoc->bssId, bssId, sizeof( tSirMacAddr )); + + msg.type = SIR_HAL_ROAM_INVOKE; + msg.reserved = 0; + msg.bodyptr = fastReassoc; + if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MODULE_ID_WDA, + &msg)) { + vos_mem_free(fastReassoc); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("Not able to post ROAM_INVOKE_CMD message to WDA")); + } +} +#endif //Register the module init/exit functions module_init(hdd_module_init); module_exit(hdd_module_exit); diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index f18666fbb7a6..a5538b562787 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 221 +#define QWLAN_VERSION_BUILD 222 -#define QWLAN_VERSIONSTR "1.0.0.221" +#define QWLAN_VERSIONSTR "1.0.0.222" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index 7da0f18f60b6..9366d2bc3ed0 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -671,6 +671,7 @@ typedef struct sSirMbMsgP2p #ifdef WLAN_FEATURE_ROAM_OFFLOAD #define SIR_HAL_ROAM_OFFLOAD_SYNCH_FAIL (SIR_HAL_ITC_MSG_TYPES_BEGIN + 296) +#define SIR_HAL_ROAM_INVOKE (SIR_HAL_ITC_MSG_TYPES_BEGIN + 297) #endif #define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF) diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index debf7eabfb68..0225c953e6bd 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -337,6 +337,8 @@ void wma_process_roam_synch_complete(WMA_HANDLE handle, tSirSmeRoamOffloadSynchCnf *synchcnf); void wma_process_roam_synch_fail(WMA_HANDLE handle, tSirRoamOffloadSynchFail *synchfail); +void wma_process_roam_invoke(WMA_HANDLE handle, + t_wma_roam_invoke_cmd *roaminvoke); #endif /* Configure the regulatory domain for DFS radar filter initialization*/ void wma_set_dfs_regdomain(tp_wma_handle wma); @@ -17116,6 +17118,16 @@ static VOS_STATUS wma_del_wow_pattern_in_fw(tp_wma_handle wma, } #ifdef FEATURE_WLAN_D0WOW +void wma_set_d0wow_flag(tp_wma_handle wma_handle, A_BOOL flag) +{ + atomic_set(&wma_handle->in_d0wow, flag); +} + +A_BOOL wma_read_d0wow_flag(tp_wma_handle wma_handle) +{ + return atomic_read(&wma_handle->in_d0wow); +} + /* Enable D0-WOW in firmware. */ VOS_STATUS wma_enable_d0wow_in_fw(tp_wma_handle wma) { @@ -17179,6 +17191,7 @@ VOS_STATUS wma_enable_d0wow_in_fw(tp_wma_handle wma) wma->wow.wow_enable_cmd_sent = TRUE; wmi_set_d0wow_flag(wma->wmi_handle, TRUE); + wma_set_d0wow_flag(wma, TRUE); WMA_LOGD("D0-WOW is enabled successfully in FW."); return vos_status; @@ -22638,6 +22651,11 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg) (tSirRoamOffloadSynchFail *)msg->bodyptr); vos_mem_free(msg->bodyptr); break; + case SIR_HAL_ROAM_INVOKE: + wma_process_roam_invoke(wma_handle, + (t_wma_roam_invoke_cmd *)msg->bodyptr); + vos_mem_free(msg->bodyptr); + break; #endif #ifdef WLAN_FEATURE_NAN case WDA_NAN_REQUEST: @@ -27430,4 +27448,60 @@ void wma_process_roam_synch_fail(WMA_HANDLE handle, VOS_FALSE; adf_os_spin_unlock_bh(&wma_handle->roam_synch_lock); } +void wma_process_roam_invoke(WMA_HANDLE handle, + t_wma_roam_invoke_cmd *roaminvoke) +{ + tp_wma_handle wma_handle = (tp_wma_handle) handle; + wmi_roam_invoke_cmd_fixed_param* cmd; + wmi_buf_t wmi_buf; + u_int8_t *buf_ptr; + u_int16_t len, args_tlv_len; + A_UINT32 *channel_list; + wmi_mac_addr *bssid_list; + + if (!wma_handle || !wma_handle->wmi_handle) { + WMA_LOGE("%s: WMA is closed, can not send roam invoke", + __func__); + return; + } + /* Host sends only one channel and one bssid */ + args_tlv_len = 2 * WMI_TLV_HDR_SIZE + sizeof(A_UINT32) + + sizeof(wmi_mac_addr); + len = sizeof(wmi_roam_invoke_cmd_fixed_param) + args_tlv_len; + wmi_buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!wmi_buf) { + WMA_LOGE("%s: wmai_buf_alloc failed", __func__); + return; + } + + cmd = (wmi_roam_invoke_cmd_fixed_param *)wmi_buf_data(wmi_buf); + buf_ptr = (u_int8_t *) cmd; + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_roam_invoke_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_roam_invoke_cmd_fixed_param)); + cmd->vdev_id = roaminvoke->vdev_id; + cmd->flags = 0; + cmd->roam_scan_mode = 0; + cmd->roam_ap_sel_mode = 0; + cmd->roam_delay = 0; + cmd->num_chan = 1; + cmd->num_bssid = 1; + buf_ptr += sizeof(wmi_roam_invoke_cmd_fixed_param); + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_UINT32, + (sizeof(u_int32_t))); + channel_list = (A_UINT32 *)(buf_ptr + WMI_TLV_HDR_SIZE); + *channel_list = (A_UINT32)roaminvoke->channel; + buf_ptr += sizeof(A_UINT32) + WMI_TLV_HDR_SIZE; + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_FIXED_STRUC, + (sizeof(wmi_mac_addr))); + bssid_list = (wmi_mac_addr *)(buf_ptr + WMI_TLV_HDR_SIZE); + WMI_CHAR_ARRAY_TO_MAC_ADDR(roaminvoke->bssId, bssid_list); + if (wmi_unified_cmd_send(wma_handle->wmi_handle, wmi_buf, len, + WMI_ROAM_INVOKE_CMDID)) { + WMA_LOGP("%s: failed to send roam invoke command", __func__); + adf_nbuf_free(wmi_buf); + return; + } + return; +} #endif diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index 3fa2e18c546b..5c3232aab9c0 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -731,6 +731,9 @@ typedef struct { u_int32_t hw_bd_id; u_int32_t hw_bd_info[HW_BD_INFO_SIZE]; +#ifdef FEATURE_WLAN_D0WOW + atomic_t in_d0wow; +#endif }t_wma_handle, *tp_wma_handle; struct wma_target_cap { @@ -1514,6 +1517,11 @@ enum uapsd_up { UAPSD_UP_MAX }; +#ifdef FEATURE_WLAN_D0WOW +void wma_set_d0wow_flag(tp_wma_handle wma_handle, A_BOOL flag); +A_BOOL wma_read_d0wow_flag(tp_wma_handle wma_handle); +#endif + A_UINT32 eCsrAuthType_to_rsn_authmode (eCsrAuthType authtype, eCsrEncryptionType encr); A_UINT32 eCsrEncryptionType_to_rsn_cipherset (eCsrEncryptionType encr); @@ -1531,4 +1539,11 @@ typedef struct wma_unit_test_cmd v_U32_t num_args; v_U32_t args[WMA_MAX_NUM_ARGS]; }t_wma_unit_test_cmd; + +typedef struct wma_roam_invoke_cmd +{ + v_UINT_t vdev_id; + u_int8_t bssId[6]; + v_U32_t channel; +}t_wma_roam_invoke_cmd; #endif diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c index 35bd4525f1bb..224e2db0700c 100644 --- a/CORE/VOSS/src/vos_api.c +++ b/CORE/VOSS/src/vos_api.c @@ -2051,7 +2051,7 @@ void vos_abort_mac_scan(v_U8_t sessionId) VOS_STATUS vos_shutdown(v_CONTEXT_t vosContext) { VOS_STATUS vosStatus; - + tpAniSirGlobal pMac = (((pVosContextType)vosContext)->pMACContext); vosStatus = WLANTL_Close(vosContext); if (!VOS_IS_STATUS_SUCCESS(vosStatus)) @@ -2069,6 +2069,12 @@ VOS_STATUS vos_shutdown(v_CONTEXT_t vosContext) VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) ); } + if (pMac->sap.SapDfsInfo.is_dfs_cac_timer_running) { + vos_timer_stop(&pMac->sap.SapDfsInfo.sap_dfs_cac_timer); + pMac->sap.SapDfsInfo.is_dfs_cac_timer_running = 0; + } + vos_timer_destroy(&pMac->sap.SapDfsInfo.sap_dfs_cac_timer); + vosStatus = macClose( ((pVosContextType)vosContext)->pMACContext); if (!VOS_IS_STATUS_SUCCESS(vosStatus)) { |
