summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnjaneedevi Kapparapu <akappa@codeaurora.org>2014-10-29 17:06:03 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2014-10-29 17:07:15 +0530
commit4975c6df4da21e2e692c38584f197a93a92fa484 (patch)
tree4061148a3aac67cd7f80fc55a53c25644509ba45
parentf3b603a5d324f6fb6a68ecb874c7d30201905694 (diff)
parent7138477aad32d6a8545733fab8a3ca2713533067 (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.c16
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c37
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/src/include/sirParams.h1
-rw-r--r--CORE/SERVICES/WMA/wma.c74
-rw-r--r--CORE/SERVICES/WMA/wma.h15
-rw-r--r--CORE/VOSS/src/vos_api.c8
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))
{