summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPitani Venkata Rajesh Kumar <vpitan@codeaurora.org>2014-08-12 14:57:28 +0530
committerPitani Venkata Rajesh Kumar <vpitan@codeaurora.org>2014-08-12 14:59:20 +0530
commitd9f5c0e6918f5ffec355c6479508cc35c09fed67 (patch)
tree9001934934ac0b8c218588cf350c5be7b4be5e34
parent3bed4b1c9597005409634d6089310d6b1c8e0864 (diff)
parent60eec99c64ba6fa15c589ebf84b7cc96bc0c1296 (diff)
Release 1.0.0.167 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master' * origin/caf/caf-wlan/master: Cafstaging Release 1.0.0.167 Copyright Fix: wlan: Add nan-parser support for cnss_diag. wlan: txrx: Remove obsolete ISOC and WIFI_2_0 conditions qca_cld: convert reason code to string qcacld-new: HDD: Provide fix for not decementing active session while roam qcacld: Enable SIFS burst in cfg.ini by default qcacld: Remove obsolete WDA layer (phase 1) qcacld: Remove obsolete DXE modules Change-Id: I02f59c879c565ff236a711865016187769a1f02a
-rw-r--r--CORE/CLD_TXRX/HTT/htt_isoc.h7
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c124
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_cfg.c2
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h49
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx.c4
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx_reorder.c78
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx_reorder.h17
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx.c6
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_classify.c38
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_queue.c165
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_queue.h7
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_sched.c62
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx.c4
-rw-r--r--CORE/DXE/inc/wlan_qct_dxe.h474
-rw-r--r--CORE/DXE/src/wlan_qct_dxe.c5618
-rw-r--r--CORE/DXE/src/wlan_qct_dxe_cfg_i.c626
-rw-r--r--CORE/DXE/src/wlan_qct_dxe_i.h711
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c36
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/src/pe/lim/limProcessDeauthFrame.c6
-rw-r--r--CORE/MAC/src/pe/lim/limProcessDisassocFrame.c5
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.c58
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.h1
-rw-r--r--CORE/SERVICES/HIF/DXE/dmux_dxe.c456
-rw-r--r--CORE/SERVICES/HIF/DXE/dmux_dxe_api.h98
-rw-r--r--CORE/SERVICES/HIF/DXE/dmux_dxe_internal.h51
-rw-r--r--CORE/SERVICES/HIF/DXE/hif_dxe.c2083
-rw-r--r--CORE/SERVICES/HIF/DXE/hif_dxe.h198
-rw-r--r--CORE/SERVICES/HIF/DXE/hif_dxe_config.c517
-rw-r--r--CORE/SERVICES/HIF/DXE/hif_dxe_hw_pvt.h396
-rw-r--r--CORE/SERVICES/HIF/DXE/hif_dxe_os.h165
-rw-r--r--CORE/SERVICES/HIF/DXE/hif_dxe_pvt.h311
-rw-r--r--CORE/SERVICES/HIF/DXE/linux/hif_dxe_os.c822
-rw-r--r--CORE/SERVICES/HIF/DXE/linux/hif_dxe_ospvt.h102
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h3
-rw-r--r--CORE/WDA/src/wlan_qct_wda.c15069
-rw-r--r--CORE/WDA/src/wlan_qct_wda_ds.c1208
-rw-r--r--CORE/WDA/src/wlan_qct_wda_legacy.c24
-rw-r--r--Kbuild64
-rwxr-xr-xfirmware_bin/WCNSS_qcom_cfg.ini3
-rw-r--r--tools/fwdebuglog/nan-parser.c2
41 files changed, 102 insertions, 29572 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt_isoc.h b/CORE/CLD_TXRX/HTT/htt_isoc.h
index a23e6496076e..3285a844cfd9 100644
--- a/CORE/CLD_TXRX/HTT/htt_isoc.h
+++ b/CORE/CLD_TXRX/HTT/htt_isoc.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -92,13 +92,8 @@ typedef enum htt_isoc_t2h_msg_type {
(*((A_UINT8 *) msg_addr))
#ifndef INLINE
-#ifdef QCA_WIFI_ISOC
-/* host SW */
-#define INLINE inline
-#else
/* target FW */
#define INLINE __inline
-#endif
#define HTT_ISOC_INLINE_DEF
#endif /* INLINE */
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
index f6eecac17574..f4c3969c83db 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
@@ -38,10 +38,6 @@
#include "adf_nbuf.h"
#include "adf_os_mem.h"
#include "adf_os_lock.h"
-#ifdef QCA_WIFI_ISOC
-#include "htt_dxe_types.h"
-#include "isoc_hw_desc.h"
-#endif
#include "adf_nbuf.h"
#include "wma_api.h"
#include "vos_utils.h"
@@ -324,88 +320,6 @@ tlshim_check_n_process_iapp_frame (pVosContextType pVosGCtx,
#endif /* defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD) */
-#ifdef QCA_WIFI_ISOC
-static void tlshim_mgmt_rx_dxe_handler(void *context, adf_nbuf_t buflist)
-{
- adf_nbuf_t tmp_next, cur = buflist;
- isoc_rx_bd_t *rx_bd;
- vos_pkt_t *rx_packet;
- u_int8_t mpdu_header_offset = 0;
- struct txrx_tl_shim_ctx *tl_shim = (struct txrx_tl_shim_ctx *)context;
- void *vos_ctx = vos_get_global_context(VOS_MODULE_ID_TL, context);
-
- while(cur) {
- /* Store the next buf in the list */
- tmp_next = adf_nbuf_next(cur);
-
- /* Move to next nBuf in list */
- adf_nbuf_set_next(cur, NULL);
-
- /* Get the Rx Bd */
- rx_bd = (isoc_rx_bd_t *)adf_nbuf_data(cur);
-
- /* Get MPDU Offset in RxBd */
- mpdu_header_offset = rx_bd->mpdu_header_offset;
-
- /*
- * Allocate memory for the Rx Packet
- * that has to be delivered to UMAC
- */
- rx_packet =
- (vos_pkt_t *)adf_os_mem_alloc(NULL, sizeof(vos_pkt_t));
-
- if(!rx_packet) {
- TLSHIM_LOGE("Rx Packet Mem Alloc Failed");
- adf_nbuf_free(cur);
- goto next_nbuf;
- }
-
- /* Fill packet related Meta Info */
- rx_packet->pkt_meta.channel = rx_bd->rx_channel;
- rx_packet->pkt_meta.rssi = rx_bd->rssi0;
- rx_packet->pkt_meta.snr = (((rx_bd->phy_stats1) >> 24) & 0xff);
- rx_packet->pkt_meta.timestamp = rx_bd->rx_timestamp;
-
- rx_packet->pkt_meta.mpdu_hdr_len = rx_bd->mpdu_header_length;
- rx_packet->pkt_meta.mpdu_len = rx_bd->mpdu_length;
- rx_packet->pkt_meta.mpdu_data_len =
- rx_bd->mpdu_length - rx_bd->mpdu_header_length;
-
- /* set the length of the packet buffer */
- adf_nbuf_put_tail(cur,
- mpdu_header_offset + rx_bd->mpdu_length);
-
- /*
- * Rx Bd is removed from adf_nbuf
- * adf_nbuf is having only Rx Mgmt packet
- */
- rx_packet->pkt_meta.mpdu_hdr_ptr =
- adf_nbuf_pull_head(cur,mpdu_header_offset);
-
- /* Store the MPDU Data Pointer in Rx Packet */
- rx_packet->pkt_meta.mpdu_data_ptr =
- rx_packet->pkt_meta.mpdu_hdr_ptr + rx_bd->mpdu_header_length;
-
- /*
- * Rx Bd is removed from adf_nbuf data
- * adf_nbuf data is having only Rx Mgmt packet
- */
- rx_packet->pkt_buf = cur;
-
- /*
- * Call the Callback registered by umac with wma
- * for Rx Management Frames
- */
- if(tl_shim->mgmt_rx)
- tl_shim->mgmt_rx(vos_ctx, rx_packet);
- else
- vos_pkt_return_packet(rx_packet);
-next_nbuf:
- /* Move to next nBuf in the list */
- cur = tmp_next;
- }
-}
-#else
/*AR9888/AR6320 noise floor approx value*/
#define TLSHIM_TGT_NOISE_FLOOR_DBM (-96)
@@ -820,7 +734,6 @@ static int tlshim_mgmt_rx_wmi_handler(void *context, u_int8_t *data,
{
return (tlshim_mgmt_rx_process(context, data, data_len, FALSE, 0));
}
-#endif
/*
* tlshim_mgmt_roam_event_ind() is called from WMA layer when
* BETTER_AP_FOUND event is received from roam engine.
@@ -1503,12 +1416,7 @@ VOS_STATUS WLANTL_DisableUAPSDForAC(void *vos_ctx, u_int8_t sta_id,
VOS_STATUS WLANTL_DeRegisterMgmtFrmClient(void *vos_ctx)
{
struct txrx_tl_shim_ctx *tl_shim;
-#ifdef QCA_WIFI_ISOC
- ol_txrx_pdev_handle txrx_pdev;
- struct htt_dxe_pdev_t *htt_dxe_pdev;
-#else
tp_wma_handle wma_handle;
-#endif
ENTER();
#ifdef QCA_WIFI_FTM
@@ -1523,22 +1431,6 @@ VOS_STATUS WLANTL_DeRegisterMgmtFrmClient(void *vos_ctx)
return VOS_STATUS_E_FAILURE;
}
-#ifdef QCA_WIFI_ISOC
- txrx_pdev = vos_get_context(VOS_MODULE_ID_TXRX,
- vos_ctx);
- if (!txrx_pdev) {
- TLSHIM_LOGE("%s: Failed to get TXRX context", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- htt_dxe_pdev = txrx_pdev->htt_pdev;
-
- if (dmux_dxe_register_callback_rx_mgmt(htt_dxe_pdev->dmux_dxe_pdev,
- NULL, NULL) != 0) {
- TLSHIM_LOGE("Failed to Unregister rx mgmt handler with dxe");
- return VOS_STATUS_E_FAILURE;
- }
-#else
wma_handle = vos_get_context(VOS_MODULE_ID_WDA, vos_ctx);
if (!wma_handle) {
TLSHIM_LOGE("%s: Failed to get WMA context", __func__);
@@ -1550,7 +1442,6 @@ VOS_STATUS WLANTL_DeRegisterMgmtFrmClient(void *vos_ctx)
TLSHIM_LOGE("Failed to Unregister rx mgmt handler with wmi");
return VOS_STATUS_E_FAILURE;
}
-#endif
tl_shim->mgmt_rx = NULL;
return VOS_STATUS_SUCCESS;
}
@@ -1561,26 +1452,12 @@ VOS_STATUS WLANTL_RegisterMgmtFrmClient(void *vos_ctx,
struct txrx_tl_shim_ctx *tl_shim = vos_get_context(VOS_MODULE_ID_TL,
vos_ctx);
-#ifdef QCA_WIFI_ISOC
- ol_txrx_pdev_handle txrx_pdev = vos_get_context(VOS_MODULE_ID_TXRX,
- vos_ctx);
- struct htt_dxe_pdev_t *htt_dxe_pdev = txrx_pdev->htt_pdev;
-#else
tp_wma_handle wma_handle = vos_get_context(VOS_MODULE_ID_WDA, vos_ctx);
-#endif
if (!tl_shim) {
TLSHIM_LOGE("%s: Failed to get TLSHIM context", __func__);
return VOS_STATUS_E_FAILURE;
}
-#ifdef QCA_WIFI_ISOC
- if (dmux_dxe_register_callback_rx_mgmt(htt_dxe_pdev->dmux_dxe_pdev,
- tlshim_mgmt_rx_dxe_handler,
- tl_shim) != 0) {
- TLSHIM_LOGE("Failed to register rx mgmt handler with dxe");
- return VOS_STATUS_E_FAILURE;
- }
-#else
if (!wma_handle) {
TLSHIM_LOGE("%s: Failed to get WMA context", __func__);
return VOS_STATUS_E_FAILURE;
@@ -1592,7 +1469,6 @@ VOS_STATUS WLANTL_RegisterMgmtFrmClient(void *vos_ctx,
TLSHIM_LOGE("Failed to register rx mgmt handler with wmi");
return VOS_STATUS_E_FAILURE;
}
-#endif
tl_shim->mgmt_rx = mgmt_frm_rx;
return VOS_STATUS_SUCCESS;
diff --git a/CORE/CLD_TXRX/TXRX/ol_cfg.c b/CORE/CLD_TXRX/TXRX/ol_cfg.c
index 6d4aaf22e1f4..32dff6f7ed22 100644
--- a/CORE/CLD_TXRX/TXRX/ol_cfg.c
+++ b/CORE/CLD_TXRX/TXRX/ol_cfg.c
@@ -61,10 +61,8 @@ ol_pdev_handle ol_pdev_cfg_attach(adf_os_device_t osdev,
*/
cfg_ctx->tx_download_size = 16;
#endif
-#ifndef QCA_WIFI_ISOC
/* temporarily diabled PN check for Riva/Pronto */
cfg_ctx->rx_pn_check = 1;
-#endif
#if CFG_TGT_DEFAULT_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK
cfg_ctx->defrag_timeout_check = 1;
#endif
diff --git a/CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h b/CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h
index 2a07a52caec4..e945870476bf 100644
--- a/CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h
+++ b/CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -192,57 +192,10 @@ ol_rx_notify(
void
ol_tx_paused_peer_data(ol_peer_handle peer, int has_tx_data);
-#ifdef QCA_WIFI_ISOC
-
-/**
- * @brief Request the control SW to begin an ADDBA negotiation
- * @details
- * For systems in which ADDBA-request / response handshaking is handled
- * by the host SW, the data SW will use this function to request for the
- * control SW to perform ADDBA negotiation.
- * The control SW will check whether it is able to do the ADDBA
- * negotiation, and will use the return value to indicate whether the
- * requested ADDBA negotiation was actually started.
- * If the control SW starts ADDBA negotiation, it will call the
- * reverse-direction ol_tx_addba_conf function to notify the data SW
- * when the ADDBA negotiation completes.
- *
- * @param pdev - handle to the ctrl SW's physical device object
- * @param peer_mac_addr - which peer the ADDBA negotiation is with
- * @param tid - which traffic type the ADDBA negotiation is for
- * @return ol_addba_status enum
- */
-enum ol_addba_status
-ol_ctrl_addba_req(ol_pdev_handle pdev, u_int8_t *peer_mac_addr, int tid);
-
-/**
- * @brief Notify the control SW that rx aggregation setup is complete
- * @details
- * For systems in which responses to ADDBA-requests are handled by the host
- * SW, the host control SW will tell the target to set up rx aggregation.
- * The target, in turn, will send a HTT T2H RX_ADDBA message to the host
- * data SW, to set up the host's side of rx aggregation.
- * After the host data SW processes the RX_ADDBA message from the target,
- * it will call this function to notify the host control SW that the target
- * and the host data SW are fully prepared for rx aggregation.
- * So, upon receiving this function call, the host control SW can send
- * the ADDBA-response message.
- *
- * @param pdev - handle to the ctrl SW's physical device object
- * @param peer_mac_addr - which peer the ADDBA request was from
- * @param tid - which traffic type the ADDBA request was for
- * @param failed - whether rx aggregation setup succeeded (0) or failed (1)
- */
-void
-ol_ctrl_rx_addba_complete(
- ol_pdev_handle pdev, u_int8_t *peer_mac_addr, int tid, int failed);
-
-#else
#define ol_ctrl_addba_req(pdev, peer_mac_addr, tid) ol_addba_req_reject
#define ol_ctrl_rx_addba_complete(pdev, peer_mac_addr, tid, failed) /* no-op */
-#endif /* QCA_SUPPORT_HOST_ADDBA */
#endif /* _OL_CTRL_TXRX_API__H_ */
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.c b/CORE/CLD_TXRX/TXRX/ol_rx.c
index 410df5e0486a..f7509e3eeed9 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_rx.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -60,7 +60,7 @@
#include <ol_vowext_dbg_defs.h>
#ifdef HTT_RX_RESTORE
-#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) && defined(CONFIG_CNSS)
+#if defined(CONFIG_CNSS)
#include <net/cnss.h>
#endif
#endif
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_reorder.c b/CORE/CLD_TXRX/TXRX/ol_rx_reorder.c
index 803e24a7379f..21294288ab71 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx_reorder.c
+++ b/CORE/CLD_TXRX/TXRX/ol_rx_reorder.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -71,40 +71,6 @@ static char g_log2ceil[] = {
/*=== function definitions ===*/
/*---*/
-#ifdef QCA_WIFI_ISOC
-
-#define QCA_SUPPORT_RX_REORDER_RELEASE_CHECK 1
-
-static inline void
-OL_RX_REORDER_IDX_START_SELF_SELECT(
- struct ol_txrx_peer_t *peer, unsigned tid, unsigned *idx_start)
-{
- /* for simplicity, always use the next_rel_idx value */
- //if (*idx_start == ~0)
- {
- *idx_start = peer->tids_next_rel_idx[tid];
- }
-}
-#define OL_RX_REORDER_IDX_WRAP(idx, win_sz, win_sz_mask) \
- do { \
- if (idx >= win_sz) { \
- idx = 0; \
- } \
- } while (0)
-#define OL_RX_REORDER_IDX_MAX(win_sz, win_sz_mask) (win_sz - 1)
-/*
- * For "integrated SoC", the reorder index represents the offset from the
- * start of the block ack window.
- * Hence, the initial value for this index is zero.
- */
-#define OL_RX_REORDER_IDX_INIT(seq_num, win_sz, win_sz_mask) 0
-#define OL_RX_REORDER_NO_HOLES(rx_reorder) ((rx_reorder)->num_mpdus == 0)
-#define OL_RX_REORDER_MPDU_CNT_INCR(rx_reorder, incr) \
- ((rx_reorder)->num_mpdus += (incr))
-#define OL_RX_REORDER_MPDU_CNT_DECR(rx_reorder, decr) \
- ((rx_reorder)->num_mpdus -= (decr))
-
-#else
#define QCA_SUPPORT_RX_REORDER_RELEASE_CHECK 0
#define OL_RX_REORDER_IDX_START_SELF_SELECT(peer, tid, idx_start) /* no-op */
@@ -115,31 +81,14 @@ OL_RX_REORDER_IDX_START_SELF_SELECT(
#define OL_RX_REORDER_MPDU_CNT_INCR(rx_reorder, incr) /* n/a */
#define OL_RX_REORDER_MPDU_CNT_DECR(rx_reorder, decr) /* n/a */
-#endif /* QCA_WIFI_ISOC */
/*---*/
-#if defined (QCA_WIFI_ISOC) && defined (QCA_SUPPORT_RX_REORDER_RELEASE_CHECK)
-
-/* reorder array elements could be NULL */
-#define OL_RX_REORDER_PTR_CHECK(ptr) if (ptr)
-#define OL_RX_REORDER_LIST_APPEND(head_msdu, tail_msdu, rx_reorder_array_elem) \
- do { \
- if (tail_msdu) { \
- adf_nbuf_set_next(tail_msdu, rx_reorder_array_elem->head); \
- } else { \
- head_msdu = rx_reorder_array_elem->head; \
- tail_msdu = rx_reorder_array_elem->tail; \
- } \
- } while (0)
-
-#else
/* reorder array elements are known to be non-NULL */
#define OL_RX_REORDER_PTR_CHECK(ptr) /* no-op */
#define OL_RX_REORDER_LIST_APPEND(head_msdu, tail_msdu, rx_reorder_array_elem) \
adf_nbuf_set_next(tail_msdu, rx_reorder_array_elem->head)
-#endif /* QCA_SUPPORT_RX_REORDER_RELEASE_CHECK */
/* functions called by txrx components */
@@ -204,14 +153,6 @@ ol_rx_reorder_store(
idx &= peer->tids_rx_reorder[tid].win_sz_mask;
rx_reorder_array_elem = &peer->tids_rx_reorder[tid].array[idx];
if (rx_reorder_array_elem->head) {
-#ifdef QCA_WIFI_ISOC
- /* This should not happen in Riva/Pronto case. Because
- * A-MSDU within a MPDU is indicated together. Defragmentation
- * is handled by RPE. So add an Assert here to catch potential
- * rx reorder issues.
- */
- TXRX_ASSERT2(0);
-#endif
adf_nbuf_set_next(rx_reorder_array_elem->tail, head_msdu);
} else {
rx_reorder_array_elem->head = head_msdu;
@@ -440,23 +381,6 @@ ol_rx_reorder_peer_cleanup(
OL_RX_REORDER_TIMEOUT_PEER_CLEANUP(peer);
}
-#ifdef QCA_WIFI_ISOC
-/*
- * (Responder Role) TXRX Data Path will invoke this API after
- * Aggregation has been enabled for this peer-tid combination
- * with appropriate status code. Send ADDBA Response to Peer with
- * status.
- */
-void ol_ctrl_rx_addba_complete(ol_pdev_handle pdev,
- u_int8_t *peer_mac_addr,
- int tid, int failed)
-{
- /*
- * TODO: Send Rx AddBA response to umac for the devices
- * which does addba processing on host (pronto).
- */
-}
-#endif
/* functions called by HTT */
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_reorder.h b/CORE/CLD_TXRX/TXRX/ol_rx_reorder.h
index e7721205aa7c..920717b0da85 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx_reorder.h
+++ b/CORE/CLD_TXRX/TXRX/ol_rx_reorder.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011, 2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -89,20 +89,6 @@ ol_rx_reorder_seq_num_check(
unsigned tid,
unsigned seq_num);
-#ifdef QCA_WIFI_ISOC
-
-/*
- * Riva, Pronto, Northstar: do sequence number checking in the host
- * for peer-TIDs with aggregation is enabled
- */
-#define OL_RX_REORDER_SEQ_NUM_CHECK(pdev, peer, tid, rx_mpdu_desc) \
- (peer->tids_rx_reorder[tid].win_sz_mask != 0) ? \
- ol_rx_reorder_seq_num_check( \
- pdev, peer, tid, \
- htt_rx_mpdu_desc_seq_num(pdev->htt_pdev, rx_mpdu_desc)) : \
- htt_rx_status_ok
-
-#else
/*
* Peregrine and Rome: do sequence number checking in the host
@@ -115,7 +101,6 @@ ol_rx_reorder_seq_num_check(
htt_rx_mpdu_desc_seq_num(pdev->htt_pdev, rx_mpdu_desc)) : \
htt_rx_status_ok
-#endif /* QCA_WIFI_ISOC */
#endif /* _OL_RX_REORDER__H_ */
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.c b/CORE/CLD_TXRX/TXRX/ol_tx.c
index b340c549bdcb..ac828d79729c 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx.c
@@ -469,14 +469,8 @@ ol_tx_non_std_ll(
#define OL_TX_ENCAP_WRAPPER(pdev, vdev, tx_desc, msdu, tx_msdu_info) /* no-op */
#endif
-#ifdef QCA_WIFI_ISOC
-#define TX_FILTER_CHECK(tx_msdu_info) \
- ((tx_msdu_info)->peer && \
- ((tx_msdu_info)->peer->tx_filter(tx_msdu_info) != A_OK))
-#else
/* tx filtering is handled within the target FW */
#define TX_FILTER_CHECK(tx_msdu_info) 0 /* don't filter */
-#endif
static inline adf_nbuf_t
ol_tx_hl_base(
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_classify.c b/CORE/CLD_TXRX/TXRX/ol_tx_classify.c
index 333faabce46a..f3700f6b745d 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_classify.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_classify.c
@@ -54,46 +54,8 @@
#if defined(CONFIG_HL_SUPPORT)
-#ifdef QCA_WIFI_ISOC
-
-A_STATUS
-ol_tx_classify_extension(
- struct ol_txrx_vdev_t *vdev,
- struct ol_tx_desc_t *tx_desc,
- adf_nbuf_t tx_nbuf,
- struct ol_txrx_msdu_info_t *tx_msdu_info);
-
-A_STATUS
-ol_tx_classify_mgmt_extension(
- struct ol_txrx_vdev_t *vdev,
- struct ol_tx_desc_t *tx_desc,
- adf_nbuf_t tx_nbuf,
- struct ol_txrx_msdu_info_t *tx_msdu_info);
-
-#define OL_TX_CLASSIFY_EXTENSION(vdev, tx_desc, netbuf, msdu_info, txq) \
- do { \
- A_STATUS status; \
- status = ol_tx_classify_extension( \
- vdev, tx_desc, netbuf, msdu_info); \
- if (A_OK != status) { \
- txq = NULL; /* error */ \
- } \
- } while (0)
-
-#define OL_TX_CLASSIFY_MGMT_EXTENSION(vdev, tx_desc, netbuf, msdu_info, txq) \
- do { \
- A_STATUS status; \
- status = ol_tx_classify_mgmt_extension( \
- vdev, tx_desc, netbuf, msdu_info); \
- if (A_OK != status) { \
- txq = NULL; /* error */ \
- } \
- } while (0)
-
-#else
#define OL_TX_CLASSIFY_EXTENSION(vdev, tx_desc, netbuf, msdu_info, txq)
#define OL_TX_CLASSIFY_MGMT_EXTENSION(vdev, tx_desc, netbuf, msdu_info, txq)
-#endif /* QCA_WIFI_ISOC */
#ifdef QCA_TX_HTT2_SUPPORT
static void
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c
index b647c6356a1a..21da7590b64c 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c
@@ -82,20 +82,9 @@ ol_tx_queue_log_free(
/*--- function prototypes for optional host ADDBA negotiation ---------------*/
-#ifdef QCA_WIFI_ISOC
-
-void
-ol_tx_queue_addba_check(
- struct ol_txrx_pdev_t *pdev,
- struct ol_tx_frms_queue_t *txq,
- struct ol_txrx_msdu_info_t *tx_msdu_info);
-#define OL_TX_QUEUE_ADDBA_CHECK ol_tx_queue_addba_check
-
-#else
#define OL_TX_QUEUE_ADDBA_CHECK(pdev, txq, tx_msdu_info) /* no-op */
-#endif /* QCA_SUPPORT_HOST_ADDBA */
#ifndef container_of
#define container_of(ptr, type, member) ((type *)( \
@@ -430,24 +419,6 @@ ol_txrx_peer_tid_unpause_base(
}
}
-#if defined(CONFIG_HL_SUPPORT) && defined(QCA_WIFI_ISOC)
-void
-ol_txrx_peer_pause(ol_txrx_peer_handle peer)
-{
- struct ol_txrx_pdev_t *pdev = peer->vdev->pdev;
-
- /* TO DO: log the queue pause */
-
- /* acquire the mutex lock, since we'll be modifying the queues */
- TX_SCHED_DEBUG_PRINT("Enter %s\n", __func__);
- adf_os_spin_lock_bh(&pdev->tx_queue_spinlock);
-
- ol_txrx_peer_pause_base(pdev, peer);
-
- adf_os_spin_unlock_bh(&pdev->tx_queue_spinlock);
- TX_SCHED_DEBUG_PRINT("Leave %s\n", __func__);
-}
-#endif
void
ol_txrx_peer_tid_unpause(ol_txrx_peer_handle peer, int tid)
@@ -800,142 +771,6 @@ void ol_tx_throttle_init(struct ol_txrx_pdev_t *pdev)
/*--- ADDBA triggering functions --------------------------------------------*/
-#ifdef QCA_WIFI_ISOC
-
-/**
-* Request the control SW to begin an ADDBA negotiation
-*/
-enum ol_addba_status
-ol_ctrl_addba_req(
- ol_pdev_handle pdev,
- u_int8_t *peer_mac_addr,
- int tidno)
-{
- /*
- * TODO: Process ADDBA request and send whether the requested
- * ADDBA negotiation was started.
- */
- return ol_addba_success;
-}
-
-void
-ol_tx_queue_addba_check(
- struct ol_txrx_pdev_t *pdev,
- struct ol_tx_frms_queue_t *txq,
- struct ol_txrx_msdu_info_t *tx_msdu_info)
-{
- struct ol_txrx_peer_t *peer;
- int tid;
- enum ol_addba_status status;
-
- if (!pdev->cfg.host_addba || /* host doesn't handle ADDBA negotiation */
- txq->aggr_state == ol_tx_aggr_enabled || /* ADDBA already done */
- txq->aggr_state == ol_tx_aggr_disabled || /* ADDBA not permitted */
- txq->aggr_state == ol_tx_aggr_in_progress)
- {
- return;
- }
-
- /* if the tx queue is not marked as aggr_disabled, it belongs to a peer */
- TXRX_ASSERT1(tx_msdu_info->peer);
- peer = tx_msdu_info->peer;
- tid = tx_msdu_info->htt.info.ext_tid;
-
- if (ETHERTYPE_IS_EAPOL_WAPI(tx_msdu_info->htt.info.ethertype)) {
- /*
- * Don't start aggregation based on EAPOL frame,
- * but do start for future real data frames.
- */
- txq->aggr_state = ol_tx_aggr_retry;
- return;
- }
-
- if (txq->aggr_state == ol_tx_aggr_retry) {
- if (tx_msdu_info->peer) {
- /*
- * The queue is probably currently unpaused.
- * Pause it during the ADDBA negotiation.
- */
- ol_txrx_peer_tid_pause_base(pdev, peer, tid);
- }
- }
-
- status = ol_ctrl_addba_req(
- pdev->ctrl_pdev, &peer->mac_addr.raw[0], tid);
- if (status == ol_addba_reject) {
- /* Aggregation is disabled for this peer-TID. Unpause the tx queue. */
- txq->aggr_state = ol_tx_aggr_disabled;
- ol_txrx_peer_tid_unpause_base(pdev, peer, tid);
- } else if (status == ol_addba_busy) {
- if (ol_cfg_addba_retry(pdev->ctrl_pdev)) {
- /* ADDBA negotiation can't be done now, but try again next time */
- txq->aggr_state = ol_tx_aggr_retry;
- } else {
- txq->aggr_state = ol_tx_aggr_disabled;
- }
- /* unpause the tx queue, so the new frame can be sent */
- ol_txrx_peer_tid_unpause_base(pdev, peer, tid);
- } else {
- /* ADDBA negotiation successfully started */
- txq->aggr_state = ol_tx_aggr_in_progress;
- }
-}
-
-void
-ol_tx_queue_decs_reinit(
- ol_txrx_peer_handle peer,
- u_int16_t peer_id)
-{
- ol_tx_desc_list *tx_descs;
- struct ol_tx_desc_t *tx_desc, *tmp;
-
- tx_descs = &peer->txqs[HTT_TX_EXT_TID_MGMT].head;
-
- TAILQ_FOREACH_SAFE(tx_desc, tx_descs, tx_desc_list_elem, tmp) {
- /* initialize the HW tx descriptor */
- htt_tx_desc_set_peer_id((u_int32_t*)tx_desc->htt_tx_desc, peer_id);
- }
-
- adf_os_print("%s peer_id=%d\n", __func__, peer_id);
-}
-
-void
-ol_tx_addba_conf(ol_txrx_peer_handle peer, int tid, enum ol_addba_status status)
-{
- if (!peer->vdev->pdev->cfg.host_addba) {
- /*
- * In theory, this function should never be called if the
- * host_addba configuration flag is not set.
- * In practice, some test framework SW may call this function
- * even if host_addba is not set, so handle this unexpected
- * invocation gracefully.
- */
- adf_os_print(
- "UNEXPECTED CALL TO %s WHEN HOST ADDBA IS DISABLED!\n", __func__);
- return;
- }
- /* mark the aggregation as being complete */
- TXRX_ASSERT1(peer->txqs[tid].aggr_state == ol_tx_aggr_in_progress);
- /*
- * It's possible that the ADDBA request was rejected, but regardless of
- * whether it was accepted, mark the tx queue to show that ADDBA
- * negotiation has already been done, and need not be attempted again.
- * However, if the negotiation failed to complete (i.e. was aborted),
- * then mark tx queue to try again later, unless the status says to
- * not try again.
- */
- if (status == ol_addba_success) {
- peer->txqs[tid].aggr_state = ol_tx_aggr_enabled;
- } else if (status == ol_addba_reject) {
- peer->txqs[tid].aggr_state = ol_tx_aggr_disabled;
- } else { /* busy */
- peer->txqs[tid].aggr_state = ol_tx_aggr_retry;
- }
- /* unpause the tx queue */
- ol_txrx_peer_tid_unpause(peer, tid);
-}
-
-#endif /* QCA_SUPPORT_HOST_ADDBA */
/*=== debug functions =======================================================*/
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_queue.h b/CORE/CLD_TXRX/TXRX/ol_tx_queue.h
index b761e393a286..94ec2e39b821 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_queue.h
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_queue.h
@@ -159,14 +159,7 @@ ol_tx_queues_display(struct ol_txrx_pdev_t *pdev);
#define ol_tx_queues_display(pdev) /* no-op */
#endif
-#ifdef QCA_WIFI_ISOC
-void
-ol_tx_queue_decs_reinit(
- ol_txrx_peer_handle peer,
- u_int16_t peer_id);
-#else
#define ol_tx_queue_decs_reinit(peer, peer_id) /* no-op */
-#endif /* CONFIG_HL_SUPPORT */
#ifdef QCA_SUPPORT_TX_THROTTLE
/**
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_sched.c b/CORE/CLD_TXRX/TXRX/ol_tx_sched.c
index b764573bd475..edb1bf6355bd 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_sched.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_sched.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -487,61 +487,6 @@ struct ol_tx_sched_wrr_adv_category_info_t {
enum { OL_TX_SCHED_WRR_ADV_ ## cat ## _DISCARD_WEIGHT = \
(discard_weights) }
-#ifdef QCA_WIFI_ISOC
-/* Riva, Pronto, Northstar:
- * For high-volume traffic flows (VI, BE, BK), use a credit threshold
- * roughly equal to a large A-MPDU (5 fragments * 64 frames) to download
- * AMPDU-sized batches of traffic.
- * For high-priority, low-volume traffic flows (VO and mgmt), use no
- * credit threshold, to minimize download latency.
- */
-/*
-* VO:
-* - high priority (no skip)
-* - download a.s.a.p. (don't wait for enough credit to download a batch)
-* - allow a large number of frames to be downloaded at once
-* (In real systems this is unneeded - voice traffic is such
-* low bandwidth that no more than 1 frame per user will be
-* present at a time. However, this setting allows for large
-* volumes of fake voice traffic during testing.)
-* - use all available credit
-* - don't discard, if possible
-* VI:
-* - high priority (no skip)
-* - wait for enough credit to download a moderately large batch
-* - allow a moderately large batch to be downloaded at once
-* - don't use all credit - leave enough for a single frame
-* (which can be used by voice)
-* - try not to discard, but if necessary discard the VI frames
-* before VO frames
-* BK:
-* - low priority (skip twice between actual servicing)
-* - wait for enough credit to download a small batch
-* - allow a small batch to be downloaded at once
-* - don't use all credit - leave enough for a single frame
-* (which can be used by voice)
-* - discard these frames before VI or VO
-* BE:
-* - moderate priority (skip once between actual servicing)
-* - wait for enough credit to download a moderate batch
-* - allow a moderate batch to be downloaded at once
-* - don't use all credit - leave enough for a single frame
-* (which can be used by voice)
-* - discard these frames before VI or VO
-*/
-// WRR send
-// skip credit limit credit disc
-// wts thresh (frms) reserv wts
-OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(VO, 1, 1, 32, 0, 1);
-OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(VI, 1, (5*32), 24, 5, 4);
-OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(BK, 3, (5*64), 10, 5, 8);
-OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(BE, 2, (5*64), 16, 5, 8);
-OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(NON_QOS_DATA, 3, (5*64), 4, 5, 8);
-OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(UCAST_MGMT, 1, 1, 4, 0, 0);
-OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(MCAST_DATA, 2, (5*64), 4, 5, 4);
-OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(MCAST_MGMT, 1, 1, 4, 0, 1);
-
-#else
/* Rome:
* For high-volume traffic flows (VI, BE, BK), use a credit threshold
* roughly equal to a large A-MPDU (occupying half the target memory
@@ -562,7 +507,6 @@ OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(UCAST_MGMT, 1, 1, 4, 0, 1);
OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(MCAST_DATA, 10, 16, 4, 1, 4);
OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC(MCAST_MGMT, 1, 1, 4, 0, 1);
-#endif /* QCA_WIFI_ISOC */
#if DEBUG_SCHED_STAT
@@ -1222,11 +1166,7 @@ ol_tx_sched_notify(
}
}
-#ifdef QCA_WIFI_ISOC
-#define OL_TX_MSDU_ID_STORAGE_ERR(ptr) 0 /* always have headroom in ISOC */
-#else
#define OL_TX_MSDU_ID_STORAGE_ERR(ptr) (NULL == ptr)
-#endif
void
ol_tx_sched_dispatch(
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c
index ea8382edf4d2..925fbc5d0c97 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c
@@ -1555,11 +1555,7 @@ ol_txrx_get_tx_pending(ol_txrx_pdev_handle pdev_handle)
total = ol_cfg_target_tx_credit(pdev->ctrl_pdev);
}
-#ifndef QCA_WIFI_ISOC
return (total - pdev->tx_desc.num_free);
-#else
- return total - adf_os_atomic_read(&pdev->target_tx_credit);
-#endif
}
void
diff --git a/CORE/DXE/inc/wlan_qct_dxe.h b/CORE/DXE/inc/wlan_qct_dxe.h
deleted file mode 100644
index 1453d9b51a4e..000000000000
--- a/CORE/DXE/inc/wlan_qct_dxe.h
+++ /dev/null
@@ -1,474 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-#ifndef WLAN_QCT_DXE_H
-#define WLAN_QCT_DXE_H
-
-/**=========================================================================
-
- @file wlan_qct_dxe.h
-
- @brief
-
- This file contains the external API exposed by the wlan data transfer abstraction layer module.
-========================================================================*/
-
-/*===========================================================================
-
- EDIT HISTORY FOR FILE
-
-
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
-
-
- $Header:$ $DateTime: $ $Author: $
-
-
-when who what, where, why
--------- --- ----------------------------------------------------------
-08/03/10 schang Created module.
-
-===========================================================================*/
-
-/*===========================================================================
-
- INCLUDE FILES FOR MODULE
-
-===========================================================================*/
-
-/*----------------------------------------------------------------------------
- * Include Files
- * -------------------------------------------------------------------------*/
-#include "wlan_qct_pal_api.h"
-#include "wlan_qct_pal_packet.h"
-#include "wlan_qct_pal_status.h"
-#include "wlan_qct_pal_type.h"
-#include "wlan_qct_pal_msg.h"
-#include "wlan_qct_pal_sync.h"
-#include "wlan_qct_wdi_dts.h"
-
-/*----------------------------------------------------------------------------
- * Type Declarations
- * -------------------------------------------------------------------------*/
-/* DXE Descriptor contents SWAP option flag */
-
-//#define WLANDXE_ENDIAN_SWAP_ENABLE
-
-/* Default RX OS frame buffer size
- * Size must be same with Vos Packet Size */
-#define WLANDXE_DEFAULT_RX_OS_BUFFER_SIZE (VPKT_SIZE_BUFFER)
-
-/*The maximum number of packets that can be chained in dxe for the Low
- priority channel
- Note: Increased it to 240 from 128 for Windows(EA) becase Windows is
- able to push 2~6 packet chain in one NET_BUFFER. It causes TX low
- resource condition more easily than LA. It ends up to cause low
- throughut number and spend more CPU time*/
-#ifdef WINDOWS_DT
-#define WLANDXE_LO_PRI_RES_NUM 240
-#else
-#define WLANDXE_LO_PRI_RES_NUM 128
-#endif
-
-
-/*The maximum number of packets that can be chained in dxe for the HI
- priority channel */
-#define WLANDXE_HI_PRI_RES_NUM 10
-
-typedef enum
-{
- WLANDXE_POWER_STATE_FULL,
- WLANDXE_POWER_STATE_IMPS,
- WLANDXE_POWER_STATE_BMPS,
- WLANDXE_POWER_STATE_BMPS_PENDING,
- WLANDXE_POWER_STATE_DOWN,
- WLANDXE_POWER_STATE_MAX
-} WLANDXE_PowerStateType;
-
-typedef enum
-{
- WLANDXE_RIVA_POWER_STATE_ACTIVE,
- WLANDXE_RIVA_POWER_STATE_IMPS_UNKNOWN,
- WLANDXE_RIVA_POWER_STATE_BMPS_UNKNOWN,
- WLANDXE_RIVA_POWER_STATE_DOWN_UNKNOWN,
- WLANDXE_RIVA_POWER_STATE_MAX
-} WLANDXE_RivaPowerStateType;
-
-/*==========================================================================
- @ Type Name
- WLANDXE_RxFrameReadyCbType
-
- @ Description
- RX Frame Ready indication CB
-
- @ Parameters
- pVoid pAdapter : Driver global control block pointer
- palPacket pRXFramePtr : Received Frame Pointer
- pVoid userCtxt : DTS user contect pointer
-
- @ Return
- wpt_status
-===========================================================================*/
-typedef WDTS_RxFrameReadyCbType WLANDXE_RxFrameReadyCbType;
-
-/*==========================================================================
- @ Type Name
- WLANDXE_TxCompleteCbType
-
- @ Description
- TX complete indication CB
-
- @ Parameters
- pVoid pAdapter : Driver global control block pointer
- void pTXFramePtr : Completed TX Frame Pointer
- pVoid userCtxt : DTS user contect pointer
-
- @ Return
- wpt_status
-===========================================================================*/
-typedef WDTS_TxCompleteCbType WLANDXE_TxCompleteCbType;
-
-/*==========================================================================
- @ Type Name
- WLANDXE_LowResourceCbType
-
- @ Description
- DXE Low resource indication CB
-
- @ Parameters
- pVoid pAdapter : Driver global control block pointer
- BOOL lowResourceCondition : DXE low resource or not
- pVoid userCtxt : DTS user contect pointer
-
- @ Return
- wpt_status
-===========================================================================*/
-typedef WDTS_LowResourceCbType WLANDXE_LowResourceCbType;
-
-/*==========================================================================
- @ Type Name
- WLANDXE_SetPowerStateCbType
-
- @ Description
- DXE Set power state ACK callback. This callback function should be
- invoked by the DXE to notify WDI that set power state request is complete
-
- @ Parameters
- status status of the set operation
- pUserData Cookie that should be passed back to the caller along with the
- callback.
-
- @ Return
- None
-===========================================================================*/
-typedef WDTS_SetPSCbType WLANDXE_SetPowerStateCbType;
-
-/*-------------------------------------------------------------------------
- *Function declarations and documenation
- *-------------------------------------------------------------------------*/
-/*==========================================================================
- @ Function Name
- WLANDXE_Open
-
- @ Description
- Open host DXE driver, allocate DXE resources
- Allocate, DXE local control block, DXE descriptor pool, DXE descriptor control block pool
-
- @ Parameters
- pVoid pAdapter : Driver global control block pointer
-
- @ Return
- pVoid DXE local module control block pointer
-===========================================================================*/
-void *WLANDXE_Open
-(
- void
-);
-
-/*==========================================================================
- @ Function Name
- WLANDXE_ClientRegistration
-
- @ Description
- Make callback functions registration into DXE driver from DXE driver client
-
- @ Parameters
- pVoid pDXEContext : DXE module control block
- WDTS_RxFrameReadyCbType rxFrameReadyCB : RX Frame ready CB function pointer
- WDTS_TxCompleteCbType txCompleteCB : TX complete CB function pointer
- WDTS_LowResourceCbType lowResourceCB : Low DXE resource notification CB function pointer
- void *userContext : DXE Cliennt control block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_ClientRegistration
-(
- void *pDXEContext,
- WDTS_RxFrameReadyCbType rxFrameReadyCB,
- WDTS_TxCompleteCbType txCompleteCB,
- WDTS_LowResourceCbType lowResourceCB,
- void *userContext
-);
-
-/*==========================================================================
- @ Function Name
- WLANDXE_Start
-
- @ Description
- Start Host DXE driver
- Initialize DXE channels and start channel
-
- @ Parameters
- pVoid pDXEContext : DXE module control block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_Start
-(
- void *pDXEContext
-);
-
-/*==========================================================================
- @ Function Name
- WLANDXE_TXFrame
-
- @ Description
- Trigger frame transmit from host to RIVA
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
- wpt_packet pPacket : transmit packet structure
- WDTS_ChannelType channel : TX channel
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_TxFrame
-(
- void *pDXEContext,
- wpt_packet *pPacket,
- WDTS_ChannelType channel
-);
-
-
-/*==========================================================================
- @ Function Name
- WLANDXE_CompleteTX
-
- @ Description
- Informs DXE that the current series of Tx packets is complete
-
- @ Parameters
- pDXEContext : DXE Control Block
- ucTxResReq TX resource number required by TL/WDI
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status
-WLANDXE_CompleteTX
-(
- void* pDXEContext,
- wpt_uint32 ucTxResReq
-);
-
-/*==========================================================================
- @ Function Name
- WLANDXE_Stop
-
- @ Description
- Stop DXE channels and DXE engine operations
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_Stop
-(
- void *pDXEContext
-);
-
-/*==========================================================================
- @ Function Name
- WLANDXE_Close
-
- @ Description
- Close DXE channels
- Free DXE related resources
- DXE descriptor free
- Descriptor control block free
- Pre allocated RX buffer free
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_Close
-(
- void *pDXEContext
-);
-
-/*==========================================================================
- @ Function Name
- WLANDXE_TriggerTX
-
- @ Description
- TBD
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_TriggerTX
-(
- void *pDXEContext
-);
-
-/*==========================================================================
- @ Function Name
- WLANDXE_SetPowerState
-
- @ Description
- From Client let DXE knows what is the WLAN HW(RIVA) power state
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
- WLANDXE_PowerStateType powerState
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_SetPowerState
-(
- void *pDXEContext,
- WDTS_PowerStateType powerState,
- WDTS_SetPSCbType cBack
-);
-
-/*==========================================================================
- @ Function Name
- WLANDXE_GetFreeTxDataResNumber
-
- @ Description
- Returns free descriptor numbers for TX data channel (TX high priority)
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
-
- @ Return
- wpt_uint32 Free descriptor number of TX high pri ch
-===========================================================================*/
-wpt_uint32 WLANDXE_GetFreeTxDataResNumber
-(
- void *pDXEContext
-);
-
-/*==========================================================================
- @ Function Name
- WLANDXE_ChannelDebug
-
- @ Description
- Display DXE Channel debugging information
- User may request to display DXE channel snapshot
- Or if host driver detects any abnormal stcuk may display
-
- @ Parameters
- displaySnapshot : Display DXE snapshot option
- enableStallDetect : Enable stall detect feature
- This feature will take effect to data performance
- Not integrate till fully verification
-
- @ Return
- NONE
-
-===========================================================================*/
-void WLANDXE_ChannelDebug
-(
- wpt_boolean displaySnapshot,
- wpt_boolean enableStallDetect
-);
-
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
-/*==========================================================================
- @ Function Name
- WLANDXE_UnitTest
-
- @ Description
- Temporary for the DXE module test
-
- @ Parameters
- NONE
-
- @ Return
- NONE
-
-===========================================================================*/
-void WLANDXE_UnitTestStartDXE
-(
- void
-);
-
-/*==========================================================================
- @ Function Name
-
- @ Description
-
- @ Parameters
-
- @ Return
-
-===========================================================================*/
-void WLANDXE_UnitTestDataTransfer
-(
- void
-);
-
-/*==========================================================================
- @ Function Name
-
- @ Description
-
- @ Parameters
-
- @ Return
-
-===========================================================================*/
-void WLANDXE_UnitTestEventHandle
-(
- void *dxeCB
-);
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-#endif /* WLAN_QCT_DXE_H */
diff --git a/CORE/DXE/src/wlan_qct_dxe.c b/CORE/DXE/src/wlan_qct_dxe.c
deleted file mode 100644
index 378c0b65f67c..000000000000
--- a/CORE/DXE/src/wlan_qct_dxe.c
+++ /dev/null
@@ -1,5618 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**=========================================================================
-
- @file wlan_qct_dxe.c
-
- @brief
-
- This file contains the external API exposed by the wlan data transfer abstraction layer module.
-========================================================================*/
-
-/*===========================================================================
-
- EDIT HISTORY FOR FILE
-
-
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
-
-
- $Header:$ $DateTime: $ $Author: $
-
-
-when who what, where, why
--------- --- ----------------------------------------------------------
-08/03/10 schang Created module.
-
-===========================================================================*/
-
-/*===========================================================================
-
- INCLUDE FILES FOR MODULE
-
-===========================================================================*/
-
-/*----------------------------------------------------------------------------
- * Include Files
- * -------------------------------------------------------------------------*/
-#include "wlan_qct_dxe.h"
-#include "wlan_qct_dxe_i.h"
-#include "wlan_qct_pal_device.h"
-#ifdef FEATURE_R33D
-#include "wlan_qct_pal_bus.h"
-#endif /* FEATURE_R33D */
-
-/*----------------------------------------------------------------------------
- * Local Definitions
- * -------------------------------------------------------------------------*/
-//#define WLANDXE_DEBUG_CH_INFO_DUMP
-
-/* Temporary configuration defines
- * Have to find out permanent solution */
-#define T_WLANDXE_MAX_DESCRIPTOR_COUNT 40
-#define T_WLANDXE_MAX_FRAME_SIZE 2000
-#define T_WLANDXE_TX_INT_ENABLE_FCOUNT 1
-#define T_WLANDXE_MEMDUMP_BYTE_PER_LINE 16
-#define T_WLANDXE_MAX_RX_PACKET_WAIT 6000
-#define T_WLANDXE_SSR_TIMEOUT 5000
-#define T_WLANDXE_PERIODIC_HEALTH_M_TIME 2500
-#define T_WLANDXE_MAX_HW_ACCESS_WAIT 2000
-#define WLANDXE_MAX_REAPED_RX_FRAMES 512
-
-#define WLANPAL_RX_INTERRUPT_PRO_MASK 0x20
-#define WLANDXE_RX_INTERRUPT_PRO_UNMASK 0x5F
-
-/* 1msec busy wait in case CSR is not valid */
-#define WLANDXE_CSR_NEXT_READ_WAIT 1000
-/* CSR max retry count */
-#define WLANDXE_CSR_MAX_READ_COUNT 30
-
-
-/* This is temporary fot the compile
- * WDI will release official version
- * This must be removed */
-#define WDI_GET_PAL_CTX() NULL
-
-
-/*-------------------------------------------------------------------------
- * Local Varables
- *-------------------------------------------------------------------------*/
-/* This is temp, someone have to allocate for me, and must be part of global context */
-static WLANDXE_CtrlBlkType *tempDxeCtrlBlk;
-static char *channelType[WDTS_CHANNEL_MAX] =
- {
- "TX_LOW_PRI",
- "TX_HIGH_PRI",
- "RX_LOW_PRI",
-#ifndef WLANDXE_TEST_CHANNEL_ENABLE
- "RX_HIGH_PRI",
-#else
- "H2H_TEST_TX",
- "H2H_TEST_RX"
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
- };
-static wpt_packet *rx_reaped_buf[WLANDXE_MAX_REAPED_RX_FRAMES];
-
-/*-------------------------------------------------------------------------
- * External Function Proto Type
- *-------------------------------------------------------------------------*/
-
-/*-------------------------------------------------------------------------
- * Local Function Proto Type
- *-------------------------------------------------------------------------*/
-static wpt_status dxeRXFrameSingleBufferAlloc
-(
- WLANDXE_CtrlBlkType *dxeCtxt,
- WLANDXE_ChannelCBType *channelEntry,
- WLANDXE_DescCtrlBlkType *currentCtrlBlock
-);
-
-static wpt_status dxeNotifySmsm
-(
- wpt_boolean kickDxe,
- wpt_boolean ringEmpty
-);
-
-static void dxeStartSSRTimer
-(
- WLANDXE_CtrlBlkType *dxeCtxt
-);
-
-/*-------------------------------------------------------------------------
- * Local Function
- *-------------------------------------------------------------------------*/
-/*==========================================================================
- @ Function Name
- dxeChannelMonitor
-
- @ Description
-
- @ Parameters
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeChannelMonitor
-(
- char *monitorDescription,
- WLANDXE_ChannelCBType *channelEntry,
- wpt_log_data_stall_channel_type *channelLog
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-
- if((NULL == monitorDescription) || (NULL == channelEntry))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "INVALID Input ARG");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if(channelEntry->channelType > WDTS_CHANNEL_RX_HIGH_PRI)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "INVALID Channel type");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : HCBO %d, HCBDP 0x%x, HCBDC 0x%x,",
- channelType[channelEntry->channelType],
- channelEntry->headCtrlBlk->ctrlBlkOrder,
- channelEntry->headCtrlBlk->linkedDescPhyAddr,
- channelEntry->headCtrlBlk->linkedDesc->descCtrl.ctrl);
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : TCBO %d, TCBDP 0x%x, TCBDC 0x%x",
- channelType[channelEntry->channelType],
- channelEntry->tailCtrlBlk->ctrlBlkOrder,
- channelEntry->tailCtrlBlk->linkedDescPhyAddr,
- channelEntry->tailCtrlBlk->linkedDesc->descCtrl.ctrl);
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : FDC %d, RDC %d, TFC %d",
- channelType[channelEntry->channelType],
- channelEntry->numFreeDesc,
- channelEntry->numRsvdDesc,
- channelEntry->numTotalFrame);
-
- if(channelLog)
- {
- channelLog->numDesc = channelEntry->numDesc;
- channelLog->numFreeDesc = channelEntry->numFreeDesc;
- channelLog->numRsvdDesc = channelEntry->numRsvdDesc;
- channelLog->headDescOrder = channelEntry->headCtrlBlk->ctrlBlkOrder;
- channelLog->tailDescOrder = channelEntry->tailCtrlBlk->ctrlBlkOrder;
- }
-
- return status;
-}
-
-#ifdef WLANDXE_DEBUG_MEMORY_DUMP
-/*==========================================================================
- @ Function Name
- dxeMemoryDump
-
- @ Description
-
- @ Parameters
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeMemoryDump
-(
- wpt_uint8 *dumpPointer,
- wpt_uint32 dumpSize,
- char *dumpTarget
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 numBytes = 0;
- wpt_uint32 idx;
-
- if((NULL == dumpPointer) ||
- (NULL == dumpTarget))
- {
- return status;
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Location 0x%x, Size %d", dumpTarget, dumpPointer, dumpSize);
-
- numBytes = dumpSize % T_WLANDXE_MEMDUMP_BYTE_PER_LINE;
- for(idx = 0; idx < dumpSize; idx++)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "0x%2x ", dumpPointer[idx]);
- if(0 == ((idx + 1) % T_WLANDXE_MEMDUMP_BYTE_PER_LINE))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "\n");
- }
- }
- if(0 != numBytes)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "\n");
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
-
- return status;
-}
-#endif /* WLANDXE_DEBUG_MEMORY_DUMP */
-
-/*==========================================================================
- @ Function Name
- dxeDescriptorDump
-
- @ Description
-
- @ Parameters
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-wpt_status dxeDescriptorDump
-(
- WLANDXE_ChannelCBType *channelEntry,
- WLANDXE_DescType *targetDesc,
- wpt_uint32 fragmentOrder
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "Descriptor Dump for channel %s, %d / %d fragment",
- channelType[channelEntry->channelType],
- fragmentOrder + 1,
- channelEntry->numFragmentCurrentChain);
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "CTRL WORD 0x%x, TransferSize %d",
- WLANDXE_U32_SWAP_ENDIAN(targetDesc->descCtrl.ctrl),
- WLANDXE_U32_SWAP_ENDIAN(targetDesc->xfrSize));
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "SRC ADD 0x%x, DST ADD 0x%x, NEXT DESC 0x%x",
- WLANDXE_U32_SWAP_ENDIAN(targetDesc->dxedesc.dxe_short_desc.srcMemAddrL),
- WLANDXE_U32_SWAP_ENDIAN(targetDesc->dxedesc.dxe_short_desc.dstMemAddrL),
- WLANDXE_U32_SWAP_ENDIAN(targetDesc->dxedesc.dxe_short_desc.phyNextL));
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
-
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeChannelRegisterDump
-
- @ Description
-
- @ Parameters
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-wpt_status dxeChannelRegisterDump
-(
- WLANDXE_ChannelCBType *channelEntry,
- char *dumpTarget,
- wpt_log_data_stall_channel_type *channelLog
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 chStatusReg, chControlReg, chDescReg, chLDescReg;
-
- /* Whatever RIVA power condition try to wakeup RIVA through SMSM
- * This will not simply wakeup RIVA
- * Just incase TX not wanted stuck, Trigger TX again */
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
- dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE);
- wpalSleep(10);
-
- if(channelEntry->channelType > WDTS_CHANNEL_RX_HIGH_PRI)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "INVALID Channel type");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- wpalReadRegister(channelEntry->channelRegister.chDXEDesclRegAddr, &chDescReg);
- wpalReadRegister(channelEntry->channelRegister.chDXELstDesclRegAddr, &chLDescReg);
- wpalReadRegister(channelEntry->channelRegister.chDXECtrlRegAddr, &chControlReg);
- wpalReadRegister(channelEntry->channelRegister.chDXEStatusRegAddr, &chStatusReg);
-
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : CCR 0x%x, CSR 0x%x, CDR 0x%x, CLDR 0x%x",
- channelType[channelEntry->channelType],
- chControlReg, chStatusReg, chDescReg, chLDescReg);
-
- if(channelLog)
- {
- channelLog->ctrlRegVal = chControlReg;
- channelLog->statRegVal = chStatusReg;
- }
-
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeChannelAllDescDump
-
- @ Description
- Dump all DXE descriptors within assigned channe;
-
- @ Parameters
- WLANDXE_ChannelCBType *channelEntry
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeChannelAllDescDump
-(
- WLANDXE_ChannelCBType *channelEntry,
- WDTS_ChannelType channel,
- wpt_log_data_stall_channel_type *channelLog
-)
-{
- wpt_uint32 channelLoop;
- WLANDXE_DescCtrlBlkType *targetCtrlBlk;
- wpt_uint32 previousCtrlValue = 0;
- wpt_uint32 previousCtrlValid = 0;
- wpt_uint32 currentCtrlValid = 0;
- wpt_uint32 valDescCount = 0;
- wpt_uint32 invalDescCount = 0;
-
- targetCtrlBlk = channelEntry->headCtrlBlk;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : %d descriptor chains, head desc ctrl 0x%x",
- channelType[channelEntry->channelType],
- channelEntry->numDesc,
- targetCtrlBlk->linkedDesc->descCtrl.ctrl);
- previousCtrlValue = targetCtrlBlk->linkedDesc->descCtrl.ctrl;
-
- if((WDTS_CHANNEL_RX_LOW_PRI == channel) ||
- (WDTS_CHANNEL_RX_HIGH_PRI == channel))
- {
- for(channelLoop = 0; channelLoop < channelEntry->numDesc; channelLoop++)
- {
- if(previousCtrlValue != targetCtrlBlk->linkedDesc->descCtrl.ctrl)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%5d : 0x%x", targetCtrlBlk->ctrlBlkOrder,
- targetCtrlBlk->linkedDesc->descCtrl.ctrl);
- }
- if(targetCtrlBlk->linkedDesc->descCtrl.ctrl & WLANDXE_DESC_CTRL_VALID)
- {
- valDescCount++;
- }
- else
- {
- invalDescCount++;
- }
- previousCtrlValue = targetCtrlBlk->linkedDesc->descCtrl.ctrl;
- targetCtrlBlk = (WLANDXE_DescCtrlBlkType *)targetCtrlBlk->nextCtrlBlk;
- }
- }
- else
- {
- /* Head Descriptor is valid or not */
- previousCtrlValid = targetCtrlBlk->linkedDesc->descCtrl.ctrl & WLANDXE_DESC_CTRL_VALID;
- targetCtrlBlk = (WLANDXE_DescCtrlBlkType *)targetCtrlBlk->nextCtrlBlk;
- for(channelLoop = 0; channelLoop < channelEntry->numDesc; channelLoop++)
- {
- currentCtrlValid = targetCtrlBlk->linkedDesc->descCtrl.ctrl & WLANDXE_DESC_CTRL_VALID;
- if(currentCtrlValid)
- {
- valDescCount++;
- }
- else
- {
- invalDescCount++;
- }
- if(currentCtrlValid != previousCtrlValid)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%5d : 0x%x", targetCtrlBlk->ctrlBlkOrder,
- targetCtrlBlk->linkedDesc->descCtrl.ctrl);
- }
- previousCtrlValid = currentCtrlValid;
- targetCtrlBlk = (WLANDXE_DescCtrlBlkType *)targetCtrlBlk->nextCtrlBlk;
- }
- }
-
- if(channelLog)
- {
- channelLog->numValDesc = valDescCount;
- channelLog->numInvalDesc = invalDescCount;
- }
-
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeErrChannelDebug
-
- @ Description
- Dump channel information for which Error interrupt has occured
-
- @ Parameters
- WLANDXE_ChannelCBType *channelCb
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeErrChannelDebug
-(
- WLANDXE_ChannelCBType *channelCb
-)
-{
- wpt_log_data_stall_channel_type channelLog;
-
- dxeChannelMonitor("INT_ERR", channelCb, &channelLog);
- dxeDescriptorDump(channelCb, channelCb->headCtrlBlk->linkedDesc, 0);
- dxeChannelRegisterDump(channelCb, "INT_ERR", &channelLog);
- dxeChannelAllDescDump(channelCb, channelCb->channelType, &channelLog);
- wpalMemoryCopy(channelLog.channelName,
- "INT_ERR",
- WPT_TRPT_CHANNEL_NAME);
- wpalPacketStallUpdateInfo(NULL, NULL, &channelLog, channelCb->channelType);
-#ifdef FEATURE_WLAN_DIAG_SUPPORT
- wpalPacketStallDumpLog();
-#endif /* FEATURE_WLAN_DIAG_SUPPORT */
-
- wpalFwDumpReq(17, 0, 0, 0, 0);
-}
-/*==========================================================================
- @ Function Name
- dxeTxThreadChannelDebugHandler
-
- @ Description
- Dump TX channel information
-
- @ Parameters
- Wwpt_msg *msgPtr
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeTxThreadChannelDebugHandler
-(
- wpt_msg *msgPtr
-)
-{
- wpt_uint8 channelLoop;
- wpt_log_data_stall_channel_type channelLog;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Whatever RIVA power condition try to wakeup RIVA through SMSM
- * This will not simply wakeup RIVA
- * Just incase TX not wanted stuck, Trigger TX again */
- for(channelLoop = 0; channelLoop < WDTS_CHANNEL_RX_LOW_PRI; channelLoop++)
- {
- dxeChannelMonitor("******** Get Descriptor Snapshot ",
- &tempDxeCtrlBlk->dxeChannel[channelLoop],
- &channelLog);
- dxeChannelRegisterDump(&tempDxeCtrlBlk->dxeChannel[channelLoop],
- "Abnormal successive empty interrupt",
- &channelLog);
- dxeChannelAllDescDump(&tempDxeCtrlBlk->dxeChannel[channelLoop],
- channelLoop,
- &channelLog);
-
- wpalMemoryCopy(channelLog.channelName,
- channelType[channelLoop],
- WPT_TRPT_CHANNEL_NAME);
- wpalPacketStallUpdateInfo(NULL, NULL, &channelLog, channelLoop);
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "================== DXE Dump End ======================");
- wpalMemoryFree(msgPtr);
-
-#ifdef FEATURE_WLAN_DIAG_SUPPORT
- wpalPacketStallDumpLog();
-#endif /* FEATURE_WLAN_DIAG_SUPPORT */
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeRxThreadChannelDebugHandler
-
- @ Description
- Dump RX channel information
-
- @ Parameters
- Wwpt_msg *msgPtr
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeRxThreadChannelDebugHandler
-(
- wpt_msg *msgPtr
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint8 channelLoop;
- wpt_log_data_stall_channel_type channelLog;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Whatever RIVA power condition try to wakeup RIVA through SMSM
- * This will not simply wakeup RIVA
- * Just incase TX not wanted stuck, Trigger TX again */
- for(channelLoop = WDTS_CHANNEL_RX_LOW_PRI; channelLoop < WDTS_CHANNEL_MAX; channelLoop++)
- {
- dxeChannelMonitor("******** Get Descriptor Snapshot ",
- &tempDxeCtrlBlk->dxeChannel[channelLoop],
- &channelLog);
- dxeChannelRegisterDump(&tempDxeCtrlBlk->dxeChannel[channelLoop],
- "Abnormal successive empty interrupt",
- &channelLog);
- dxeChannelAllDescDump(&tempDxeCtrlBlk->dxeChannel[channelLoop],
- channelLoop, &channelLog);
-
- wpalMemoryCopy(channelLog.channelName,
- channelType[channelLoop],
- WPT_TRPT_CHANNEL_NAME);
- wpalPacketStallUpdateInfo(NULL, NULL, &channelLog, channelLoop);
-
- }
-
- /* Now serialise the message through Tx thread also to make sure
- * no register access when RIVA is in powersave */
- /*Use the same message pointer just change the call back function */
- msgPtr->callback = dxeTxThreadChannelDebugHandler;
- status = wpalPostTxMsg(WDI_GET_PAL_CTX(),
- msgPtr);
- if ( eWLAN_PAL_STATUS_SUCCESS != status )
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "Tx thread state dump req serialize fail status=%d",
- status);
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXHealthMonitor
-
- @ Description
- Monitoring RX channel healthy stataus
- If detect any problem, try to recover
-
- @ Parameters
- healthMonitorMsg MSG pointer.
- will have low resource TX channel context
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeRXHealthMonitor
-(
- wpt_msg *healthMonitorMsg
-)
-{
- WLANDXE_ChannelCBType *channelCtrlBlk;
- WLANDXE_ChannelCBType *testCHCtrlBlk;
- wpt_uint32 regValue;
- wpt_uint32 chStatusReg, chControlReg, chDescReg, chLDescReg;
- wpt_uint32 hwWakeLoop, chLoop;
-
- if(NULL == healthMonitorMsg)
- {
- return;
- }
-
- /* Make wake up HW */
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
- dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE);
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
-
- for(hwWakeLoop = 0; hwWakeLoop < T_WLANDXE_MAX_HW_ACCESS_WAIT; hwWakeLoop++)
- {
- wpalReadRegister(WLANDXE_BMU_AVAILABLE_BD_PDU, &regValue);
- if(0 != regValue)
- {
- break;
- }
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "Scheduled RX, num free BD/PDU %d, loop Count %d",
- regValue, hwWakeLoop);
-
- for(chLoop = WDTS_CHANNEL_RX_LOW_PRI; chLoop < WDTS_CHANNEL_MAX; chLoop++)
- {
- testCHCtrlBlk = &tempDxeCtrlBlk->dxeChannel[chLoop];
- wpalReadRegister(testCHCtrlBlk->channelRegister.chDXECtrlRegAddr, &chControlReg);
- wpalReadRegister(testCHCtrlBlk->channelRegister.chDXEStatusRegAddr, &chStatusReg);
- wpalReadRegister(testCHCtrlBlk->channelRegister.chDXEDesclRegAddr, &chDescReg);
- wpalReadRegister(testCHCtrlBlk->channelRegister.chDXELstDesclRegAddr, &chLDescReg);
-
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO,
- "%11s : CCR 0x%x, CSR 0x%x, CDR 0x%x, CLDR 0x%x, HCBO %d, HCBDP 0x%x, HCBDC 0x%x, TCBO %d,TCBDP 0x%x, TCBDC 0x%x",
- channelType[chLoop],
- chControlReg, chStatusReg, chDescReg, chLDescReg,
- testCHCtrlBlk->headCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->headCtrlBlk->linkedDesc->descCtrl.ctrl,
- testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl);
-
- if((chControlReg & WLANDXE_DESC_CTRL_VALID) &&
- (chLDescReg != testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr))
- {
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : CCR 0x%x, CSR 0x%x, CDR 0x%x, CLDR 0x%x, "
- "HCBO %d, HCBDP 0x%x, HCBDC 0x%x, TCBO %d,TCBDP 0x%x, TCBDC 0x%x",
- channelType[chLoop],
- chControlReg, chStatusReg, chDescReg, chLDescReg,
- testCHCtrlBlk->headCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->headCtrlBlk->linkedDesc->descCtrl.ctrl,
- testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : RX CH EN Descriptor Async, resync it", channelType[chLoop]);
- wpalWriteRegister(testCHCtrlBlk->channelRegister.chDXELstDesclRegAddr,
- testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr);
- }
- else if(!(chControlReg & WLANDXE_DESC_CTRL_VALID) &&
- (chDescReg != testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr))
- {
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : CCR 0x%x, CSR 0x%x, CDR 0x%x, CLDR 0x%x, "
- "HCBO %d, HCBDP 0x%x, HCBDC 0x%x, TCBO %d,TCBDP 0x%x, TCBDC 0x%x",
- channelType[chLoop],
- chControlReg, chStatusReg, chDescReg, chLDescReg,
- testCHCtrlBlk->headCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->headCtrlBlk->linkedDesc->descCtrl.ctrl,
- testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : RX CH DIS Descriptor Async, resync it", channelType[chLoop]);
- wpalWriteRegister(testCHCtrlBlk->channelRegister.chDXEDesclRegAddr,
- testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr);
- }
- }
-
- channelCtrlBlk = (WLANDXE_ChannelCBType *)healthMonitorMsg->pContext;
- if(channelCtrlBlk->hitLowResource)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : Still Low Resource, kick DXE TX and restart timer",
- channelType[channelCtrlBlk->channelType]);
- /* Still Low Resource, Kick DXE again and start timer again */
- wpalTimerStart(&channelCtrlBlk->healthMonitorTimer,
- T_WLANDXE_PERIODIC_HEALTH_M_TIME);
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : Out from Low resource condition, do nothing",
- channelType[channelCtrlBlk->channelType]);
- /* Recovered from low resource condition
- * Not need to do anything */
- }
-
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeTXHealthMonitor
-
- @ Description
- Monitoring TX channel healthy stataus
- If detect any problem, try to recover
-
- @ Parameters
- healthMonitorMsg MSG pointer.
- will have low resource TX channel context
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeTXHealthMonitor
-(
- wpt_msg *healthMonitorMsg
-)
-{
- WLANDXE_ChannelCBType *channelCtrlBlk;
- WLANDXE_ChannelCBType *testCHCtrlBlk;
- wpt_uint32 regValue;
- wpt_uint32 chStatusReg, chControlReg, chDescReg, chLDescReg;
- wpt_uint32 hwWakeLoop, chLoop;
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-
- if(NULL == healthMonitorMsg)
- {
- return;
- }
-
- /* First of all kick TX channel
- * This will fix if there is any problem with SMSM state */
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
- dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE);
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
-
- /* Wait till RIVA up */
- for(hwWakeLoop = 0; hwWakeLoop < T_WLANDXE_MAX_HW_ACCESS_WAIT; hwWakeLoop++)
- {
- wpalReadRegister(WLANDXE_BMU_AVAILABLE_BD_PDU, &regValue);
- if(0 != regValue)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "num free BD/PDU %d, loop Count %d",
- regValue, hwWakeLoop);
- break;
- }
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "Scheduled TX, num free BD/PDU %d, loop Count %d",
- regValue, hwWakeLoop);
-
- for(chLoop = 0; chLoop < WDTS_CHANNEL_RX_LOW_PRI; chLoop++)
- {
- testCHCtrlBlk = &tempDxeCtrlBlk->dxeChannel[chLoop];
- wpalReadRegister(testCHCtrlBlk->channelRegister.chDXECtrlRegAddr, &chControlReg);
- wpalReadRegister(testCHCtrlBlk->channelRegister.chDXEStatusRegAddr, &chStatusReg);
- wpalReadRegister(testCHCtrlBlk->channelRegister.chDXEDesclRegAddr, &chDescReg);
- wpalReadRegister(testCHCtrlBlk->channelRegister.chDXELstDesclRegAddr, &chLDescReg);
-
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO,
- "%11s : CCR 0x%x, CSR 0x%x, CDR 0x%x, CLDR 0x%x, HCBO %d, HCBDP 0x%x, HCBDC 0x%x, TCBO %d,TCBDP 0x%x, TCBDC 0x%x",
- channelType[chLoop],
- chControlReg, chStatusReg, chDescReg, chLDescReg,
- testCHCtrlBlk->headCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->headCtrlBlk->linkedDesc->descCtrl.ctrl,
- testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl);
-
- if((chControlReg & WLANDXE_DESC_CTRL_VALID) &&
- (chLDescReg != testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr))
- {
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : CCR 0x%x, CSR 0x%x, CDR 0x%x, CLDR 0x%x, "
- "HCBO %d, HCBDP 0x%x, HCBDC 0x%x, TCBO %d,TCBDP 0x%x, TCBDC 0x%x",
- channelType[chLoop],
- chControlReg, chStatusReg, chDescReg, chLDescReg,
- testCHCtrlBlk->headCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->headCtrlBlk->linkedDesc->descCtrl.ctrl,
- testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : TX CH EN Descriptor Async, resync it", channelType[chLoop]);
- wpalWriteRegister(testCHCtrlBlk->channelRegister.chDXELstDesclRegAddr,
- testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr);
- }
- else if(!(chControlReg & WLANDXE_DESC_CTRL_VALID) &&
- (chDescReg != testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr))
- {
- wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : CCR 0x%x, CSR 0x%x, CDR 0x%x, CLDR 0x%x, "
- "HCBO %d, HCBDP 0x%x, HCBDC 0x%x, TCBO %d,TCBDP 0x%x, TCBDC 0x%x",
- channelType[chLoop],
- chControlReg, chStatusReg, chDescReg, chLDescReg,
- testCHCtrlBlk->headCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->headCtrlBlk->linkedDesc->descCtrl.ctrl,
- testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr,
- testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : TX CH DIS Descriptor Async, resync it", channelType[chLoop]);
- wpalWriteRegister(testCHCtrlBlk->channelRegister.chDXEDesclRegAddr,
- testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr);
- }
- }
-
- /* TX channel test done, test RX channels */
- channelCtrlBlk = (WLANDXE_ChannelCBType *)healthMonitorMsg->pContext;
- channelCtrlBlk->healthMonitorMsg->callback = dxeRXHealthMonitor;
- status = wpalPostRxMsg(WDI_GET_PAL_CTX(),
- channelCtrlBlk->healthMonitorMsg);
- if (eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "TX Low resource Kick DXE MSG Serialize fail status=%d",
- status);
- }
-
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeHealthMonitorTimeout
-
- @ Description
- Health Monitor timer started when TX channel low resource condition
- And if reciovered from low resource condition, timer would not fired
- Timer fired means during certain time, TX CH could not be recovered
-
- @ Parameters
- channelCtxt Low resource condition happen Channel context
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeHealthMonitorTimeout
-(
- void *channelCtxt
-)
-{
- WLANDXE_ChannelCBType *channelCtrlBlk;
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-
- if(NULL == channelCtxt)
- {
- return;
- }
-
- /* Timeout Fired, DXE TX should kick on TX thread
- * Serailize to TX Thread */
- channelCtrlBlk = (WLANDXE_ChannelCBType *)channelCtxt;
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO,
- "%11s : Health Monitor timer expired",
- channelType[channelCtrlBlk->channelType]);
-
- channelCtrlBlk->healthMonitorMsg->callback = dxeTXHealthMonitor;
- status = wpalPostTxMsg(WDI_GET_PAL_CTX(),
- channelCtrlBlk->healthMonitorMsg);
- if (eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "TX Low resource Kick DXE MSG Serialize fail status=%d",
- status);
- }
-
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeCtrlBlkAlloc
-
- @ Description
- Allocate DXE Control block
- DXE control block will used by Host DXE driver only, internal structure
- Will make ring linked list
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeCtrlBlkAlloc
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- unsigned int idx, fIdx;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- WLANDXE_DescCtrlBlkType *freeCtrlBlk = NULL;
- WLANDXE_DescCtrlBlkType *prevCtrlBlk = NULL;
- WLANDXE_DescCtrlBlkType *nextCtrlBlk = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity check */
- if((NULL == dxeCtrlBlk) || (NULL == channelEntry))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeCtrlBlkAlloc Channel Entry is not valid");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- /* Allocate pre asigned number of control blocks */
- for(idx = 0; idx < channelEntry->numDesc; idx++)
- {
- currentCtrlBlk = (WLANDXE_DescCtrlBlkType *)wpalMemoryAllocate(sizeof(WLANDXE_DescCtrlBlkType));
- if(NULL == currentCtrlBlk)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeCtrlBlkOpen MemAlloc Fail for channel %d",
- channelEntry->channelType);
- freeCtrlBlk = channelEntry->headCtrlBlk;
- for(fIdx = 0; fIdx < idx; fIdx++)
- {
- if(NULL == freeCtrlBlk)
- {
- break;
- }
-
- nextCtrlBlk = freeCtrlBlk->nextCtrlBlk;
- wpalMemoryFree((void *)freeCtrlBlk);
- freeCtrlBlk = nextCtrlBlk;
- }
- return eWLAN_PAL_STATUS_E_FAULT;
- }
-
- memset((wpt_uint8 *)currentCtrlBlk, 0, sizeof(WLANDXE_DescCtrlBlkType));
- /* Initialize common elements first */
- currentCtrlBlk->xfrFrame = NULL;
- currentCtrlBlk->linkedDesc = NULL;
- currentCtrlBlk->linkedDescPhyAddr = 0;
- currentCtrlBlk->ctrlBlkOrder = idx;
-
- /* This is the first control block allocated
- * Next Control block is not allocated yet
- * head and tail must be first control block */
- if(0 == idx)
- {
- currentCtrlBlk->nextCtrlBlk = NULL;
- channelEntry->headCtrlBlk = currentCtrlBlk;
- channelEntry->tailCtrlBlk = currentCtrlBlk;
- }
- /* This is not first, not last control block
- * previous control block may has next linked block */
- else if((0 < idx) && (idx < (channelEntry->numDesc - 1)))
- {
- prevCtrlBlk->nextCtrlBlk = currentCtrlBlk;
- }
- /* This is last control blocl
- * next control block for the last control block is head, first control block
- * then whole linked list made RING */
- else if((channelEntry->numDesc - 1) == idx)
- {
- prevCtrlBlk->nextCtrlBlk = currentCtrlBlk;
- currentCtrlBlk->nextCtrlBlk = channelEntry->headCtrlBlk;
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeCtrlBlkOpen Invalid Ctrl Blk location %d",
- channelEntry->channelType);
- wpalMemoryFree(currentCtrlBlk);
- return eWLAN_PAL_STATUS_E_FAULT;
- }
-
- prevCtrlBlk = currentCtrlBlk;
- channelEntry->numFreeDesc++;
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,"%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeDescLinkAlloc
-
- @ Description
- Allocate DXE descriptor
- DXE descriptor will be shared by DXE host driver and RIVA DXE engine
- Will make RING linked list
- Will be linked with Descriptor control block one by one
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeDescAllocAndLink
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_DescType *currentDesc = NULL;
- WLANDXE_DescType *prevDesc = NULL;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- unsigned int idx;
- void *physAddressAlloc = NULL;
- wpt_uint32 physAddress;
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
- WLANDXE_ChannelCBType *testTXChannelCB = &dxeCtrlBlk->dxeChannel[WDTS_CHANNEL_H2H_TEST_TX];
- WLANDXE_DescCtrlBlkType *currDescCtrlBlk = testTXChannelCB->headCtrlBlk;
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE*/
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity Check */
- if((NULL == dxeCtrlBlk) || (NULL == channelEntry))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeDescLinkAlloc Channel Entry is not valid");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- currentCtrlBlk = channelEntry->headCtrlBlk;
-
-#if !(defined(FEATURE_R33D) || defined(WLANDXE_TEST_CHANNEL_ENABLE))
- /* allocate all DXE descriptors for this channel in one chunk */
- channelEntry->descriptorAllocation = (WLANDXE_DescType *)
- wpalDmaMemoryAllocate(sizeof(WLANDXE_DescType)*channelEntry->numDesc,
- &physAddressAlloc);
- physAddress = (wpt_uint32) (uintptr_t)(physAddressAlloc);
- if(NULL == channelEntry->descriptorAllocation)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeDescLinkAlloc Descriptor Alloc Fail");
- return eWLAN_PAL_STATUS_E_RESOURCES;
- }
- currentDesc = channelEntry->descriptorAllocation;
-#endif
-
- /* Allocate pre asigned number of descriptor */
- for(idx = 0; idx < channelEntry->numDesc; idx++)
- {
-#ifndef FEATURE_R33D
-#ifndef WLANDXE_TEST_CHANNEL_ENABLE
- // descriptors were allocated in a chunk -- use the current one
- memset((wpt_uint8 *)currentDesc, 0, sizeof(WLANDXE_DescType));
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "Allocated Descriptor VA %p, PA %p", currentDesc, physAddressAlloc);
-#else
- if(WDTS_CHANNEL_H2H_TEST_RX != channelEntry->channelType)
- {
- // allocate a descriptor
- currentDesc = (WLANDXE_DescType *)wpalDmaMemoryAllocate(sizeof(WLANDXE_DescType),
- &physAddressAlloc);
- memset((wpt_uint8 *)currentDesc, 0, sizeof(WLANDXE_DescType));
- physAddress = (wpt_uint32) (uintptr_t)(physAddressAlloc);
- }
- else
- {
- currentDesc = currDescCtrlBlk->linkedDesc;
- physAddress = currDescCtrlBlk->linkedDescPhyAddr;
- currDescCtrlBlk = (WLANDXE_DescCtrlBlkType *)currDescCtrlBlk->nextCtrlBlk;
- }
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-#else
-#ifndef WLANDXE_TEST_CHANNEL_ENABLE
- currentDesc = (WLANDXE_DescType *)wpalAcpuDdrDxeDescMemoryAllocate(&physAddressAlloc);
- memset((wpt_uint8 *)currentDesc, 0, sizeof(WLANDXE_DescType));
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "Allocated Descriptor VA %p, PA %p", currentDesc, physAddressAlloc);
- physAddress = (wpt_uint32) (uintptr_t)(physAddressAlloc);
-#else
- if(WDTS_CHANNEL_H2H_TEST_RX != channelEntry->channelType)
- {
- currentDesc = (WLANDXE_DescType *)wpalAcpuDdrDxeDescMemoryAllocate(&physAddressAlloc);
- memset((wpt_uint8 *)currentDesc, 0, sizeof(WLANDXE_DescType));
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "Allocated Descriptor VA %p, PA %p", currentDesc, physAddressAlloc);
- physAddress = (wpt_uint32) (uintptr_t)(physAddressAlloc);
- }
- else
- {
- currentDesc = currDescCtrlBlk->linkedDesc;
- physAddress = currDescCtrlBlk->linkedDescPhyAddr;
- currDescCtrlBlk = (WLANDXE_DescCtrlBlkType *)currDescCtrlBlk->nextCtrlBlk;
- }
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-#endif /* FEATURE_R33D */
- if(NULL == currentDesc)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeDescLinkAlloc MemAlloc Fail for channel %d",
- channelEntry->channelType);
- return eWLAN_PAL_STATUS_E_FAULT;
- }
-
- currentCtrlBlk->linkedDesc = currentDesc;
- currentCtrlBlk->linkedDescPhyAddr = physAddress;
- /* First descriptor, next none
- * descriptor bottom location is first descriptor address */
- if(0 == idx)
- {
- currentDesc->dxedesc.dxe_short_desc.phyNextL = 0;
- channelEntry->DescBottomLoc = currentDesc;
- channelEntry->descBottomLocPhyAddr = physAddress;
- }
- /* Not first, not last descriptor
- * may make link for previous descriptor with current descriptor
- * ENDIAN SWAP needed ????? */
- else if((0 < idx) && (idx < (channelEntry->numDesc - 1)))
- {
- prevDesc->dxedesc.dxe_short_desc.phyNextL =
- WLANDXE_U32_SWAP_ENDIAN(physAddress);
- }
- /* Last descriptor
- * make a ring by asign next pointer as first descriptor
- * ENDIAN SWAP NEEDED ??? */
- else if((channelEntry->numDesc - 1) == idx)
- {
- prevDesc->dxedesc.dxe_short_desc.phyNextL =
- WLANDXE_U32_SWAP_ENDIAN(physAddress);
- currentDesc->dxedesc.dxe_short_desc.phyNextL =
- WLANDXE_U32_SWAP_ENDIAN(channelEntry->headCtrlBlk->linkedDescPhyAddr);
- }
-
- /* If Current Channel is RX channel PAL Packet and OS packet buffer should be
- * Pre allocated and physical address must be assigned into
- * Corresponding DXE Descriptor */
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
- if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_H2H_TEST_RX == channelEntry->channelType))
-#else
- if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
- {
- status = dxeRXFrameSingleBufferAlloc(dxeCtrlBlk,
- channelEntry,
- currentCtrlBlk);
- if( !WLAN_PAL_IS_STATUS_SUCCESS(status) )
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeDescLinkAlloc RX Buffer Alloc Fail for channel %d",
- channelEntry->channelType);
- return status;
- }
- --channelEntry->numFreeDesc;
- }
-
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write;
- currentDesc->dxedesc.dxe_short_desc.dstMemAddrL = channelEntry->extraConfig.refWQ_swapped;
- }
- else if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
- {
- currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_read;
- currentDesc->dxedesc.dxe_short_desc.srcMemAddrL = channelEntry->extraConfig.refWQ_swapped;
- }
- else
- {
- /* Just in case. H2H Test RX channel, do nothing
- * By Definition this must not happen */
- }
-
- currentCtrlBlk = currentCtrlBlk->nextCtrlBlk;
- prevDesc = currentDesc;
-
-#ifndef FEATURE_R33D
-#ifndef WLANDXE_TEST_CHANNEL_ENABLE
- // advance to the next pre-allocated descriptor in the chunk
- currentDesc++;
- physAddress = (physAddress + sizeof(WLANDXE_DescType));
-#endif
-#endif
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
-
- @ Description
-
- @ Parameters
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeSetInterruptPath
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 interruptPath = 0;
- wpt_uint32 idx;
- WLANDXE_ChannelCBType *channelEntry = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++)
- {
- channelEntry = &dxeCtrlBlk->dxeChannel[idx];
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_H2H_TEST_TX == channelEntry->channelType))
-#else
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
- {
- interruptPath |= (1 << channelEntry->assignedDMAChannel);
- }
- else if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
- {
- interruptPath |= (1 << (channelEntry->assignedDMAChannel + 16));
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "H2H TEST RX???? %d", channelEntry->channelType);
- }
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "Interrupt Path Must be 0x%x", interruptPath);
- dxeCtrlBlk->interruptPath = interruptPath;
- wpalWriteRegister(WLANDXE_CCU_DXE_INT_SELECT, interruptPath);
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeEngineCoreStart
-
- @ Description
- Trigger to start RIVA DXE Hardware
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeEngineCoreStart
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 registerData = 0;
- wpt_uint8 readRetry;
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-#ifdef WCN_PRONTO
- /* Read default */
- wpalReadRegister(WLANDXE_CCU_SOFT_RESET, &registerData);
- registerData |= WLANDXE_DMA_CCU_DXE_RESET_MASK;
-
- /* Make reset */
- wpalWriteRegister(WLANDXE_CCU_SOFT_RESET, registerData);
-
- /* Clear reset */
- registerData &= ~WLANDXE_DMA_CCU_DXE_RESET_MASK;
- wpalWriteRegister(WLANDXE_CCU_SOFT_RESET, registerData);
-#else
- /* START This core init is not needed for the integrated system */
- /* Reset First */
- registerData = WLANDXE_DMA_CSR_RESET_MASK;
- wpalWriteRegister(WALNDEX_DMA_CSR_ADDRESS,
- registerData);
-#endif /* WCN_PRONTO */
- for(readRetry = 0; readRetry < WLANDXE_CSR_MAX_READ_COUNT; readRetry++)
- {
- wpalWriteRegister(WALNDEX_DMA_CSR_ADDRESS,
- WLANDXE_CSR_DEFAULT_ENABLE);
- wpalReadRegister(WALNDEX_DMA_CSR_ADDRESS, &registerData);
- if(!(registerData & WLANDXE_DMA_CSR_EN_MASK))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "%s CSR 0x%x, count %d",
- __func__, registerData, readRetry);
- /* CSR is not valid value, re-try to write */
- wpalBusyWait(WLANDXE_CSR_NEXT_READ_WAIT);
- }
- else
- {
- break;
- }
- }
- if(WLANDXE_CSR_MAX_READ_COUNT == readRetry)
- {
- /* MAX wait, still cannot write correct value
- * Panic device */
- wpalDevicePanic();
- }
- /* Is This needed?
- * Not sure, revisit with integrated system */
- /* END This core init is not needed for the integrated system */
-
- dxeSetInterruptPath(dxeCtrlBlk);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeChannelInitProgram
-
- @ Description
- Program RIVA DXE engine register with initial value
- What must be programmed
- - Source Address (SADRL, chDXESadrlRegAddr)
- - Destination address (DADRL, chDXEDadrlRegAddr)
- - Next Descriptor address (DESCL, chDXEDesclRegAddr)
- - current descriptor address (LST_DESCL, chDXELstDesclRegAddr)
-
- Not need to program now
- - Channel Control register (CH_CTRL, chDXECtrlRegAddr)
- TX : Have to program to trigger send out frame
- RX : programmed by DXE engine
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeChannelInitProgram
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 idx;
- WLANDXE_DescType *currentDesc = NULL;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity Check */
- if((NULL == dxeCtrlBlk) || (NULL == channelEntry))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelInitProgram Channel Entry is not valid");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- /* Program Source address and destination adderss */
- if(!channelEntry->channelConfig.useShortDescFmt)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelInitProgram Long Descriptor not support yet");
- return eWLAN_PAL_STATUS_E_FAILURE;
- }
-
- /* Common register area */
- /* Next linked list Descriptor pointer */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDesclRegAddr,
- channelEntry->headCtrlBlk->linkedDescPhyAddr);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelInitProgram Write DESC Address register fail");
- return status;
- }
-
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- /* Program default registers */
- /* TX DMA channel, DMA destination address is work Q */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDadrlRegAddr,
- channelEntry->channelConfig.refWQ);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelInitProgram Write TX DAddress register fail");
- return status;
- }
- }
- else if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
- {
- /* Initialize Descriptor control Word First */
- currentCtrlBlk = channelEntry->headCtrlBlk;
- for(idx = 0; idx < channelEntry->channelConfig.nDescs; idx++)
- {
- currentDesc = currentCtrlBlk->linkedDesc;
- currentCtrlBlk = currentCtrlBlk->nextCtrlBlk;
- }
-
- /* RX DMA channel, DMA source address is work Q */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXESadrlRegAddr,
- channelEntry->channelConfig.refWQ);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelInitProgram Write RX SAddress WQ register fail");
- return status;
- }
-
- /* RX DMA channel, Program pre allocated destination Address */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDadrlRegAddr,
- WLANDXE_U32_SWAP_ENDIAN(channelEntry->DescBottomLoc->dxedesc.dxe_short_desc.phyNextL));
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelInitProgram Write RX DAddress register fail");
- return status;
- }
-
- /* RX Channels, default Control registers MUST BE ENABLED */
- wpalWriteRegister(channelEntry->channelRegister.chDXECtrlRegAddr,
- channelEntry->extraConfig.chan_mask);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelInitProgram Write RX Control register fail");
- return status;
- }
- }
- else
- {
- /* H2H test channel, not use work Q */
- /* Program pre allocated destination Address */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDadrlRegAddr,
- WLANDXE_U32_SWAP_ENDIAN(channelEntry->DescBottomLoc->dxedesc.dxe_short_desc.phyNextL));
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelInitProgram Write RX DAddress register fail");
- return status;
- }
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-
-/*==========================================================================
- @ Function Name
- dxeChannelStart
-
- @ Description
- Start Specific Channel
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeChannelStart
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 regValue = 0;
- wpt_uint32 intMaskVal = 0;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- channelEntry->extraConfig.chEnabled = eWLAN_PAL_TRUE;
- channelEntry->extraConfig.chConfigured = eWLAN_PAL_TRUE;
-
- /* Enable individual channel
- * not to break current channel setup, first read register */
- status = wpalReadRegister(WALNDEX_DMA_CH_EN_ADDRESS,
- &regValue);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelStart Read Channel Enable register fail");
- return status;
- }
-
- /* Enable Channel specific Interrupt */
- status = wpalReadRegister(WLANDXE_INT_MASK_REG_ADDRESS,
- &intMaskVal);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelStart Read INT_MASK register fail");
- return status;
- }
- intMaskVal |= channelEntry->extraConfig.intMask;
- status = wpalWriteRegister(WLANDXE_INT_MASK_REG_ADDRESS,
- intMaskVal);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelStart Write INT_MASK register fail");
- return status;
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeChannelStop
-
- @ Description
- Stop Specific Channel
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeChannelStop
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 intMaskVal = 0;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity */
- if((NULL == dxeCtrlBlk) || (NULL == channelEntry))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelStop Invalid arg input");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if ( (channelEntry->extraConfig.chEnabled != eWLAN_PAL_TRUE) ||
- (channelEntry->extraConfig.chConfigured != eWLAN_PAL_TRUE))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelStop channels are not enabled ");
- return status;
- }
- /* Maskout interrupt */
- status = wpalReadRegister(WLANDXE_INT_MASK_REG_ADDRESS,
- &intMaskVal);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelStop Read INT_MASK register fail");
- return status;
- }
- intMaskVal ^= channelEntry->extraConfig.intMask;
- status = wpalWriteRegister(WLANDXE_INT_MASK_REG_ADDRESS,
- intMaskVal);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelStop Write INT_MASK register fail");
- return status;
- }
-
- channelEntry->extraConfig.chEnabled = eWLAN_PAL_FALSE;
-
- /* Stop Channel ??? */
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeChannelClose
-
- @ Description
- Close Specific Channel
- Free pre allocated RX frame buffer if RX channel
- Free DXE descriptor for each channel
- Free Descriptor control block for each channel
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeChannelClose
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 idx;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- WLANDXE_DescCtrlBlkType *nextCtrlBlk = NULL;
- WLANDXE_DescType *currentDescriptor = NULL;
- WLANDXE_DescType *nextDescriptor = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity */
- if((NULL == dxeCtrlBlk) || (NULL == channelEntry))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelStop Invalid arg input");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- currentCtrlBlk = channelEntry->headCtrlBlk;
- if(NULL != currentCtrlBlk)
- {
- currentDescriptor = currentCtrlBlk->linkedDesc;
- for(idx = 0; idx < channelEntry->numDesc; idx++)
- {
- if (idx + 1 != channelEntry->numDesc)
- {
- nextCtrlBlk = currentCtrlBlk->nextCtrlBlk;
- nextDescriptor = nextCtrlBlk->linkedDesc;
- }
- else
- {
- nextCtrlBlk = NULL;
- nextDescriptor = NULL;
- }
- if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
- {
- if (NULL != currentCtrlBlk->xfrFrame)
- {
- wpalUnlockPacket(currentCtrlBlk->xfrFrame);
- wpalPacketFree(currentCtrlBlk->xfrFrame);
- }
- }
- /*
- * It is the responsibility of DXE to walk through the
- * descriptor chain and unlock any pending packets (if
- * locked).
- */
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- if((NULL != currentCtrlBlk->xfrFrame) &&
- (eWLAN_PAL_STATUS_SUCCESS == wpalIsPacketLocked(currentCtrlBlk->xfrFrame)))
- {
- wpalUnlockPacket(currentCtrlBlk->xfrFrame);
- wpalPacketFree(currentCtrlBlk->xfrFrame);
- }
- }
-#if (defined(FEATURE_R33D) || defined(WLANDXE_TEST_CHANNEL_ENABLE))
- // descriptors allocated individually so free them individually
- wpalDmaMemoryFree(currentDescriptor);
-#endif
- wpalMemoryFree(currentCtrlBlk);
-
- currentCtrlBlk = nextCtrlBlk;
- currentDescriptor = nextDescriptor;
- if(NULL == currentCtrlBlk)
- {
- /* Already reach last of the control block
- * Not need to process anymore, break */
- break;
- }
- }
- }
-
-#if !(defined(FEATURE_R33D) || defined(WLANDXE_TEST_CHANNEL_ENABLE))
- // descriptors were allocated as a single chunk so free the chunk
- if(NULL != channelEntry->descriptorAllocation)
- {
- wpalDmaMemoryFree(channelEntry->descriptorAllocation);
- }
-#endif
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeChannelCleanInt
-
- @ Description
- Clean up interrupt from RIVA HW
- After Host finish to handle interrupt, interrupt signal must be cleaned up
- Otherwise next interrupt will not be generated
-
- @ Parameters
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
- wpt_uint32 *chStat
- Channel Status register value
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeChannelCleanInt
-(
- WLANDXE_ChannelCBType *channelEntry,
- wpt_uint32 *chStat
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Read Channel Status Register to know why INT Happen */
- status = wpalReadRegister(channelEntry->channelRegister.chDXEStatusRegAddr,
- chStat);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelCleanInt Read CH STAT register fail");
- return eWLAN_PAL_STATUS_E_FAULT;
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Channel INT Clean, Status 0x%x",
- channelType[channelEntry->channelType], *chStat);
-
- /* Clean up all the INT within this channel */
- status = wpalWriteRegister(WLANDXE_INT_CLR_ADDRESS,
- (1 << channelEntry->assignedDMAChannel));
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelCleanInt Write CH Clean register fail");
- return eWLAN_PAL_STATUS_E_FAULT;
- }
-
- /* Clean up Error INT Bit */
- if(WLANDXE_CH_STAT_INT_ERR_MASK & *chStat)
- {
- status = wpalWriteRegister(WLANDXE_INT_ERR_CLR_ADDRESS,
- (1 << channelEntry->assignedDMAChannel));
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelCleanInt Read CH STAT register fail");
- return eWLAN_PAL_STATUS_E_FAULT;
- }
- }
-
- /* Clean up DONE INT Bit */
- if(WLANDXE_CH_STAT_INT_DONE_MASK & *chStat)
- {
- status = wpalWriteRegister(WLANDXE_INT_DONE_CLR_ADDRESS,
- (1 << channelEntry->assignedDMAChannel));
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelCleanInt Read CH STAT register fail");
- return eWLAN_PAL_STATUS_E_FAULT;
- }
- }
-
- /* Clean up ED INT Bit */
- if(WLANDXE_CH_STAT_INT_ED_MASK & *chStat)
- {
- status = wpalWriteRegister(WLANDXE_INT_ED_CLR_ADDRESS,
- (1 << channelEntry->assignedDMAChannel));
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelCleanInt Read CH STAT register fail");
- return eWLAN_PAL_STATUS_E_FAULT;
- }
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXResourceAvailableTimerExpHandler
-
- @ Description
- During pre-set timeperiod, if free available RX buffer is not allocated
- Trigger Driver re-loading to recover RX dead end
-
- @ Parameters
- v_VOID_t *usrData
- DXE context
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeRXResourceAvailableTimerExpHandler
-(
- void *usrData
-)
-{
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "RX Low resource, Durign wait time period %d, RX resource not allocated",
- T_WLANDXE_MAX_RX_PACKET_WAIT);
- wpalWlanReload();
-
- if (NULL != usrData)
- dxeStartSSRTimer((WLANDXE_CtrlBlkType *)usrData);
-
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeStartSSRTimer
-
- @ Description
- Start the dxeSSRTimer after issuing the FIQ to restart the WCN chip,
- this makes sure that if the chip does not respond to the FIQ within
- the timeout period the dxeSSRTimer expiration handler will take the
- appropriate action.
-
- @ Parameters
- NONE
-
- @ Return
- NONE
-
-===========================================================================*/
-static void dxeStartSSRTimer
-(
- WLANDXE_CtrlBlkType *dxeCtxt
-)
-{
- if(VOS_TIMER_STATE_RUNNING !=
- wpalTimerGetCurStatus(&dxeCtxt->dxeSSRTimer))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%s: Starting SSR Timer",__func__);
- wpalTimerStart(&dxeCtxt->dxeSSRTimer,
- T_WLANDXE_SSR_TIMEOUT);
- }
-}
-
-/*==========================================================================
- @ Function Name
- dxeSSRTimerExpHandler
-
- @ Description
- Issue an explicit subsystem restart of the wcnss subsystem if the
- WCN chip does not respond to the FIQ within the timeout period
-
- @ Parameters
- v_VOID_t *usrData
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeSSRTimerExpHandler
-(
- void *usrData
-)
-{
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "DXE not shutdown %d ms after FIQ!! Issue SSR",
- T_WLANDXE_SSR_TIMEOUT);
- wpalRivaSubystemRestart();
-
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXPacketAvailableCB
-
- @ Description
- If RX frame handler encounts RX buffer pool empty condition,
- DXE RX handle loop will be blocked till get available RX buffer pool.
- When new RX buffer pool available, Packet available CB function will
- be called.
-
- @ Parameters
- wpt_packet *freePacket
- Newly allocated RX buffer
- v_VOID_t *usrData
- DXE context
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeRXPacketAvailableCB
-(
- wpt_packet *freePacket,
- v_VOID_t *usrData
-)
-{
- WLANDXE_CtrlBlkType *dxeCtxt = NULL;
- wpt_status status;
-
- /* Simple Sanity */
- if((NULL == freePacket) || (NULL == usrData))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "Get Free RX Buffer fail, Critical Error");
- HDXE_ASSERT(0);
- return;
- }
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)usrData;
-
- if(WLANDXE_CTXT_COOKIE != dxeCtxt->dxeCookie)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "DXE Context data corrupted, Critical Error");
- HDXE_ASSERT(0);
- return;
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO,
- "DXE RX packet available, post MSG to RX Thread");
-
- dxeCtxt->freeRXPacket = freePacket;
-
- /* Serialize RX Packet Available message upon RX thread */
- if (NULL == dxeCtxt->rxPktAvailMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "DXE NULL pkt");
- HDXE_ASSERT(0);
- return;
- }
- status = wpalPostRxMsg(WDI_GET_PAL_CTX(),
- dxeCtxt->rxPktAvailMsg);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "dxeRXPacketAvailableCB serialize fail");
- }
-
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXFrameSingleBufferAlloc
-
- @ Description
- Allocate Platform packet buffer to prepare RX frame
- RX frame memory space must be pre allocted and must be asigned to
- descriptor
- then whenever DMA engine want to tranfer frame from BMU,
- buffer must be ready
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
- WLANDXE_DescCtrlBlkType currentCtrlBlock
- current control block which have to be asigned
- frame buffer
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeRXFrameSingleBufferAlloc
-(
- WLANDXE_CtrlBlkType *dxeCtxt,
- WLANDXE_ChannelCBType *channelEntry,
- WLANDXE_DescCtrlBlkType *currentCtrlBlock
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_packet *currentPalPacketBuffer = NULL;
- WLANDXE_DescType *currentDesc = NULL;
-#ifdef FEATURE_R33D
- wpt_uint32 virtualAddressPCIe;
- wpt_uint32 physicalAddressPCIe;
-#else
- wpt_iterator iterator;
- wpt_uint32 allocatedSize = 0;
- void *physAddress = NULL;
-#endif /* FEATURE_R33D */
-
-
- currentDesc = currentCtrlBlock->linkedDesc;
-
- if(currentDesc->descCtrl.valid)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "This Descriptor is valid, Do not refill");
- return eWLAN_PAL_STATUS_E_EXISTS;
- }
-
- /* First check if a packet pointer has already been provided by a previously
- invoked Rx packet available callback. If so use that packet. */
- if(dxeCtxt->rxPalPacketUnavailable && (NULL != dxeCtxt->freeRXPacket))
- {
- currentPalPacketBuffer = dxeCtxt->freeRXPacket;
- dxeCtxt->rxPalPacketUnavailable = eWLAN_PAL_FALSE;
- dxeCtxt->freeRXPacket = NULL;
- }
- else if(!dxeCtxt->rxPalPacketUnavailable)
- {
- /* Allocate platform Packet buffer and OS Frame Buffer at here */
- currentPalPacketBuffer = wpalPacketAlloc(eWLAN_PAL_PKT_TYPE_RX_RAW,
- WLANDXE_DEFAULT_RX_OS_BUFFER_SIZE,
- dxeRXPacketAvailableCB,
- (void *)dxeCtxt);
-
- if(NULL == currentPalPacketBuffer)
- {
- dxeCtxt->rxPalPacketUnavailable = eWLAN_PAL_TRUE;
- /* Out of RX free buffer,
- * Start timer to recover from RX dead end */
- if(VOS_TIMER_STATE_RUNNING !=
- wpalTimerGetCurStatus(&dxeCtxt->rxResourceAvailableTimer))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "RX Low resource, wait available resource");
- wpalTimerStart(&dxeCtxt->rxResourceAvailableTimer,
- T_WLANDXE_MAX_RX_PACKET_WAIT);
- }
- }
- }
-
- if(NULL == currentPalPacketBuffer)
- {
- return eWLAN_PAL_STATUS_E_RESOURCES;
- }
-
- currentCtrlBlock->xfrFrame = currentPalPacketBuffer;
- currentPalPacketBuffer->pktType = eWLAN_PAL_PKT_TYPE_RX_RAW;
- currentPalPacketBuffer->pBD = NULL;
- currentPalPacketBuffer->pBDPhys = NULL;
- currentPalPacketBuffer->BDLength = 0;
-#ifdef FEATURE_R33D
- status = wpalAllocateShadowRxFrame(currentPalPacketBuffer,
- &physicalAddressPCIe,
- &virtualAddressPCIe);
- if((0 == physicalAddressPCIe) || (0 = virtualAddressPCIe))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED,
- "RX NULL Shadow Memory");
- HDXE_ASSERT(0);
- return eWLAN_PAL_STATUS_E_FAULT;
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED,
- "RX Shadow Memory Va 0x%x, Pa 0x%x",
- virtualAddressPCIe, physicalAddressPCIe);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameBufferAlloc Shadow Mem Alloc fail");
- return status;
- }
- currentCtrlBlock->shadowBufferVa = virtualAddressPCIe;
- currentPalPacketBuffer->pBDPhys = (void *)physicalAddressPCIe;
- memset((wpt_uint8 *)currentCtrlBlock->shadowBufferVa, 0, WLANDXE_DEFAULT_RX_OS_BUFFER_SIZE);
-#else
- status = wpalLockPacketForTransfer(currentPalPacketBuffer);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameBufferAlloc unable to lock packet");
- return status;
- }
-
- /* Init iterator to get physical os buffer address */
- status = wpalIteratorInit(&iterator, currentPalPacketBuffer);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameBufferAlloc iterator init fail");
- return status;
- }
- status = wpalIteratorNext(&iterator,
- currentPalPacketBuffer,
- &physAddress,
- &allocatedSize);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameBufferAlloc iterator Get Next pointer fail");
- return status;
- }
- currentPalPacketBuffer->pBDPhys = physAddress;
-#endif /* FEATURE_R33D */
-
- /* DXE descriptor must have SWAPPED addres in it's structure
- * !!! SWAPPED !!! */
- currentDesc->dxedesc.dxe_short_desc.dstMemAddrL =
- WLANDXE_U32_SWAP_ENDIAN((wpt_uint32)(uintptr_t)currentPalPacketBuffer->pBDPhys);
-
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXFrameRefillRing
-
- @ Description
- Allocate Platform packet buffers to try to fill up the DXE Rx ring
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeRXFrameRefillRing
-(
- WLANDXE_CtrlBlkType *dxeCtxt,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = channelEntry->tailCtrlBlk;
- WLANDXE_DescType *currentDesc = NULL;
-
- while(channelEntry->numFreeDesc > 0)
- {
- /* Current Control block is free
- * and associated frame buffer is not linked with control block anymore
- * allocate new frame buffer for current control block */
- status = dxeRXFrameSingleBufferAlloc(dxeCtxt,
- channelEntry,
- currentCtrlBlk);
-
- if((eWLAN_PAL_STATUS_SUCCESS != status) &&
- (eWLAN_PAL_STATUS_E_EXISTS != status))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "dxeRXFrameRefillRing, out of RX buffer pool, break here");
- break;
- }
-
- if(eWLAN_PAL_STATUS_E_EXISTS == status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameRefillRing, Descriptor Non-Empry");
- }
-
- currentDesc = currentCtrlBlk->linkedDesc;
- currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_read;
-
- /* Issue a dummy read from the DXE descriptor DDR location to ensure
- that any posted writes are reflected in memory before DXE looks at
- the descriptor. */
- if(channelEntry->extraConfig.cw_ctrl_read != currentDesc->descCtrl.ctrl)
- {
- //HDXE_ASSERT(0);
- }
-
- /* Kick off the DXE ring, if not in any power save mode */
- if(WLANDXE_POWER_STATE_FULL == dxeCtxt->hostPowerState)
- {
- wpalWriteRegister(WALNDEX_DMA_ENCH_ADDRESS,
- 1 << channelEntry->assignedDMAChannel);
- }
- currentCtrlBlk = currentCtrlBlk->nextCtrlBlk;
- if(eWLAN_PAL_STATUS_E_EXISTS != status)
- {
- --channelEntry->numFreeDesc;
- }
- }
-
- channelEntry->tailCtrlBlk = currentCtrlBlk;
-
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXFrameRouteUpperLayer
-
- @ Description
- Test DXE descriptors and if any RX frame pending within RING,
- Route to upper layer
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
- @ Return
- < 0 Any error happen
- 0 No frame pulled from RX RING
- int number of RX frames pulled from RX ring
-
-===========================================================================*/
-static wpt_int32 dxeRXFrameRouteUpperLayer
-(
- WLANDXE_CtrlBlkType *dxeCtxt,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- WLANDXE_DescType *currentDesc = NULL;
- wpt_uint32 descCtrl, frameCount = 0, i;
- wpt_int32 ret_val = -1;
-
- currentCtrlBlk = channelEntry->headCtrlBlk;
- currentDesc = currentCtrlBlk->linkedDesc;
-
- /* Descriptoe should be SWAPPED ???? */
- descCtrl = currentDesc->descCtrl.ctrl;
-
- /* Get frames while VALID bit is not set (DMA complete) and a data
- * associated with it */
- while(!(WLANDXE_U32_SWAP_ENDIAN(descCtrl) & WLANDXE_DESC_CTRL_VALID) &&
- (eWLAN_PAL_STATUS_SUCCESS == wpalIsPacketLocked(currentCtrlBlk->xfrFrame)) &&
- (currentCtrlBlk->xfrFrame->pInternalData != NULL) &&
- (frameCount < WLANDXE_MAX_REAPED_RX_FRAMES) )
- {
- channelEntry->numTotalFrame++;
- channelEntry->numFreeDesc++;
-#ifdef FEATURE_R33D
- /* Transfer Size should be */
- currentDesc->xfrSize = WLANDXE_U32_SWAP_ENDIAN(WLANDXE_DEFAULT_RX_OS_BUFFER_SIZE);
- status = wpalPrepareRxFrame(&currentCtrlBlk->xfrFrame,
- (wpt_uint32)currentCtrlBlk->xfrFrame->pBDPhys,
- currentCtrlBlk->shadowBufferVa,
- WLANDXE_DEFAULT_RX_OS_BUFFER_SIZE);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameReady Prepare RX Frame fail");
- return ret_val;
- }
- status = wpalFreeRxFrame(currentCtrlBlk->shadowBufferVa);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameReady Free Shadow RX Frame fail");
- return ret_val;
- }
-
-#else /* FEATURE_R33D */
- status = wpalUnlockPacket(currentCtrlBlk->xfrFrame);
- if (eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameReady unable to unlock packet");
- return ret_val;
- }
-#endif /* FEATURE_R33D */
- /* This Descriptor is valid, so linked Control block is also valid
- * Linked Control block has pre allocated packet buffer
- * So, just let upper layer knows preallocated frame pointer will be OK */
- /* Reap Rx frames */
- rx_reaped_buf[frameCount] = currentCtrlBlk->xfrFrame;
- frameCount++;
- currentCtrlBlk->xfrFrame = NULL;
-
- /* Now try to refill the ring with empty Rx buffers to keep DXE busy */
- dxeRXFrameRefillRing(dxeCtxt, channelEntry);
-
- /* Test next contorl block
- * if valid, this control block also has new RX frame must be handled */
- currentCtrlBlk = (WLANDXE_DescCtrlBlkType *)currentCtrlBlk->nextCtrlBlk;
- currentDesc = currentCtrlBlk->linkedDesc;
- descCtrl = currentDesc->descCtrl.ctrl;
- }
-
- /* Update head control block
- * current control block's valid bit was 0
- * next trial first control block must be current control block */
- channelEntry->headCtrlBlk = currentCtrlBlk;
-
- /* Deliver all the reaped RX frames to upper layers */
- i = 0;
- while(i < frameCount)
- {
- dxeCtxt->rxReadyCB(dxeCtxt->clientCtxt, rx_reaped_buf[i], channelEntry->channelType);
- i++;
- }
-
- return frameCount;
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXFrameReady
-
- @ Description
- Pop frame from descriptor and route frame to upper transport layer
- Assign new platform packet buffer into used descriptor
- Actual frame pop and resource realloc
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeRXFrameReady
-(
- WLANDXE_CtrlBlkType *dxeCtxt,
- WLANDXE_ChannelCBType *channelEntry,
- wpt_uint32 chStat
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- WLANDXE_DescType *currentDesc = NULL;
- wpt_uint32 descCtrl;
- wpt_int32 frameCount = 0;
-
- wpt_uint32 descLoop;
- wpt_uint32 invalidatedFound = 0;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity Check */
- if((NULL == dxeCtxt) || (NULL == channelEntry))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameReady Channel Entry is not valid");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- frameCount = dxeRXFrameRouteUpperLayer(dxeCtxt, channelEntry);
-
- if(0 > frameCount)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameReady RX frame route fail");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if((0 == frameCount) &&
- ((WLANDXE_POWER_STATE_BMPS == dxeCtxt->hostPowerState) ||
- (WLANDXE_POWER_STATE_FULL == dxeCtxt->hostPowerState)))
- {
- /* None of the frame handled and CH is not enabled
- * RX CH wrap around happen and No RX free frame
- * RX side should wait till new free frame available in the pool
- * Do not try reload driver at here*/
- if(!(chStat & WLANDXE_CH_CTRL_EN_MASK))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "dxeRXFrameReady %s RING Wrapped, RX Free Low 0x%x",
- channelType[channelEntry->channelType], chStat);
- /* This is not empty interrupt case
- * If handle this as empty interrupt, false SSR might be issued
- * Frame count '1' is dummy frame count to avoid SSR */
- channelEntry->numFragmentCurrentChain = 1;
- return eWLAN_PAL_STATUS_SUCCESS;
- }
-
- currentCtrlBlk = channelEntry->headCtrlBlk;
- currentDesc = currentCtrlBlk->linkedDesc;
- descCtrl = currentDesc->descCtrl.ctrl;
-
- if(WLANDXE_POWER_STATE_BMPS != dxeCtxt->hostPowerState)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "RX ISR called but no frame handled PWS %d, channel %s",
- (int)dxeCtxt->hostPowerState,
- channelType[channelEntry->channelType]);
- }
-
- /* Current interupt empty and previous interrupt also empty
- * detected successive empty interrupt
- * or first interrupt empty, this should not happen */
- if(0 == channelEntry->numFragmentCurrentChain)
- {
- dxeChannelMonitor("RX Ready", channelEntry, NULL);
- dxeDescriptorDump(channelEntry, channelEntry->headCtrlBlk->linkedDesc, 0);
- dxeChannelRegisterDump(channelEntry, "RX successive empty interrupt", NULL);
- dxeChannelAllDescDump(channelEntry, channelEntry->channelType, NULL);
- /* Abnormal interrupt detected, try to find not validated descriptor */
- for(descLoop = 0; descLoop < channelEntry->numDesc; descLoop++)
- {
- if(!(WLANDXE_U32_SWAP_ENDIAN(descCtrl) & WLANDXE_DESC_CTRL_VALID))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "Found Invalidated Descriptor %d", (int)descLoop);
- if(eWLAN_PAL_STATUS_SUCCESS == wpalIsPacketLocked(currentCtrlBlk->xfrFrame))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "Packet locked, Resync Host and HW");
- channelEntry->headCtrlBlk = currentCtrlBlk;
- invalidatedFound = 1;
- break;
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "Packet Not Locked, cannot transfer frame");
- }
- }
- currentCtrlBlk = (WLANDXE_DescCtrlBlkType *)currentCtrlBlk->nextCtrlBlk;
- currentDesc = currentCtrlBlk->linkedDesc;
- descCtrl = currentDesc->descCtrl.ctrl;
- }
-
- /* Invalidated descriptor found, and that is not head descriptor
- * This means HW/SW descriptor miss match happen, and we may recover with just resync
- * Try re-sync here */
- if((invalidatedFound) && (0 != descLoop))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "Found New Sync location with HW, handle frames from there");
- frameCount = dxeRXFrameRouteUpperLayer(dxeCtxt, channelEntry);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "re-sync routed %d frames to upper layer", (int)frameCount);
- channelEntry->numFragmentCurrentChain = frameCount;
- }
- /* Successive Empty interrupt
- * But this case, first descriptor also invalidated, then it means head descriptor
- * is linked with already handled RX frame, then could not unlock RX frame
- * This is just Out of RX buffer pool, not need to anything here */
- else if((invalidatedFound) && (0 == descLoop))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "Out of RX Low resource, and INT came in, do nothing till get RX resource");
- }
- /* Critical error, reload driver */
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "Could not found invalidated descriptor");
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "RX successive empty interrupt, Could not find invalidated DESC reload driver");
- dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE;
- wpalWlanReload();
- dxeStartSSRTimer(dxeCtxt);
- }
- }
- }
- channelEntry->numFragmentCurrentChain = frameCount;
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeNotifySmsm
-
- @ Description: Notify SMSM to start DXE engine and/or condition of Tx ring
- buffer
-
- @ Parameters
-
- @ Return
- wpt_status
-
-===========================================================================*/
-static wpt_status dxeNotifySmsm
-(
- wpt_boolean kickDxe,
- wpt_boolean ringEmpty
-)
-{
- wpt_uint32 clrSt = 0;
- wpt_uint32 setSt = 0;
-
- if(kickDxe)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED, "Kick off DXE");
-
- if(tempDxeCtrlBlk->lastKickOffDxe == 0)
- {
- setSt |= WPAL_SMSM_WLAN_TX_ENABLE;
- tempDxeCtrlBlk->lastKickOffDxe = 1;
- }
- else if(tempDxeCtrlBlk->lastKickOffDxe == 1)
- {
- clrSt |= WPAL_SMSM_WLAN_TX_ENABLE;
- tempDxeCtrlBlk->lastKickOffDxe = 0;
- }
- else
- {
- HDXE_ASSERT(0);
- }
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED, "no need to kick off DXE");
- }
-
- if(ringEmpty)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED, "SMSM Tx Ring Empty");
- clrSt |= WPAL_SMSM_WLAN_TX_RINGS_EMPTY;
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED, "SMSM Tx Ring Not Empty");
- setSt |= WPAL_SMSM_WLAN_TX_RINGS_EMPTY;
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_HIGH, "C%x S%x", clrSt, setSt);
-
- wpalNotifySmsm(clrSt, setSt);
-
- return eWLAN_PAL_STATUS_SUCCESS;
-}
-
-/*==========================================================================
- @ Function Name
- dxePsComplete
-
- @ Description: Utility function to check the resv desc to deside if we can
- get into Power Save mode now
-
- @ Parameters
-
- @ Return
- None
-
-===========================================================================*/
-static void dxePsComplete(WLANDXE_CtrlBlkType *dxeCtxt, wpt_boolean intr_based)
-{
- if( dxeCtxt->hostPowerState == WLANDXE_POWER_STATE_FULL )
- {
- return;
- }
-
- //if both HIGH & LOW Tx channels don't have anything on resv desc,all Tx pkts
- //must have been consumed by RIVA, OK to get into BMPS
- if((0 == dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].numRsvdDesc) &&
- (0 == dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].numRsvdDesc))
- {
- tempDxeCtrlBlk->ringNotEmpty = eWLAN_PAL_FALSE;
- //if host is in BMPS & no pkt to Tx, RIVA can go to power save
- if(WLANDXE_POWER_STATE_BMPS == dxeCtxt->hostPowerState)
- {
- dxeCtxt->rivaPowerState = WLANDXE_RIVA_POWER_STATE_BMPS_UNKNOWN;
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
- }
- }
- else //still more pkts to be served by RIVA
- {
- tempDxeCtrlBlk->ringNotEmpty = eWLAN_PAL_TRUE;
-
- switch(dxeCtxt->rivaPowerState)
- {
- case WLANDXE_RIVA_POWER_STATE_ACTIVE:
- //NOP
- break;
- case WLANDXE_RIVA_POWER_STATE_BMPS_UNKNOWN:
- if(intr_based)
- {
- dxeCtxt->rivaPowerState = WLANDXE_RIVA_POWER_STATE_ACTIVE;
- dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE);
- }
- break;
- default:
- //assert
- break;
- }
- }
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXEventHandler
-
- @ Description
- Handle serailized RX frame ready event
- First disable interrupt then pick up frame from pre allocated buffer
- Since frame handle is doen, clear interrupt bit to ready next interrupt
- Finally re enable interrupt
-
- @ Parameters
- wpt_msg *rxReadyMsg
- RX frame ready MSG pointer
- include DXE control context
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeRXEventHandler
-(
- wpt_msg *rxReadyMsg
-)
-{
- wpt_msg *msgContent = (wpt_msg *)rxReadyMsg;
- WLANDXE_CtrlBlkType *dxeCtxt = NULL;
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 intSrc = 0;
- WLANDXE_ChannelCBType *channelCb = NULL;
- wpt_uint32 chHighStat = 0;
- wpt_uint32 chLowStat = 0;
- wpt_uint32 regValue;
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)(msgContent->pContext);
-
- if(eWLAN_PAL_TRUE == dxeCtxt->driverReloadInProcessing)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "RX Ready WLAN Driver re-loading in progress");
- return;
- }
-
- /* Now try to refill the ring with empty Rx buffers to keep DXE busy */
- dxeRXFrameRefillRing(dxeCtxt, &dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_LOW_PRI]);
- dxeRXFrameRefillRing(dxeCtxt, &dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_HIGH_PRI]);
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)(msgContent->pContext);
-
- if((!dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_HIGH_PRI].extraConfig.chEnabled) ||
- (!dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_LOW_PRI].extraConfig.chEnabled))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "DXE already stopped in RX event handler. Just return");
- return;
- }
-
- if((WLANDXE_POWER_STATE_IMPS == dxeCtxt->hostPowerState) ||
- (WLANDXE_POWER_STATE_DOWN == dxeCtxt->hostPowerState))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%s Riva is in %d, Just Pull frames without any register touch ",
- __func__, dxeCtxt->hostPowerState);
-
- /* Not to touch any register, just pull frame directly from chain ring
- * First high priority */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_HIGH_PRI];
- status = dxeRXFrameReady(dxeCtxt,
- channelCb,
- chHighStat);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXEventHandler Pull from RX high channel fail");
- }
- /* In case FW could not power collapse in IMPS mode
- * Next power restore might have empty interrupt
- * If IMPS mode has empty interrupt since RX thread race,
- * Invalid re-load driver might happen
- * To prevent invalid re-load driver,
- * IMPS event handler set dummpy frame count */
- channelCb->numFragmentCurrentChain = 1;
-
- /* Second low priority */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_LOW_PRI];
- status = dxeRXFrameReady(dxeCtxt,
- channelCb,
- chLowStat);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXEventHandler Pull from RX low channel fail");
- }
- /* LOW Priority CH same above */
- channelCb->numFragmentCurrentChain = 1;
-
- /* Interrupt will not enabled at here, it will be enabled at PS mode change */
- tempDxeCtrlBlk->rxIntDisabledByIMPS = eWLAN_PAL_TRUE;
-
- return;
- }
-
- /* Disable device interrupt */
- /* Read whole interrupt mask register and exclusive only this channel int */
- status = wpalReadRegister(WLANDXE_INT_SRC_RAW_ADDRESS,
- &intSrc);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXEventHandler Read INT_SRC register fail");
- return;
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED,
- "RX Event Handler INT Source 0x%x", intSrc);
-
-#ifndef WLANDXE_TEST_CHANNEL_ENABLE
- /* Test High Priority Channel interrupt is enabled or not */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_HIGH_PRI];
- if(intSrc & (1 << channelCb->assignedDMAChannel))
- {
- status = dxeChannelCleanInt(channelCb, &chHighStat);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXEventHandler INT Clean up fail");
- return;
- }
- if(WLANDXE_CH_STAT_INT_ERR_MASK & chHighStat)
- {
- /* Error Happen during transaction, Handle it */
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : 0x%x Error Reported, Reload Driver",
- channelType[channelCb->channelType], chHighStat);
-
- dxeErrChannelDebug(channelCb);
-
- dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE;
- wpalWlanReload();
- dxeStartSSRTimer(dxeCtxt);
- }
- else if((WLANDXE_CH_STAT_INT_DONE_MASK & chHighStat) ||
- (WLANDXE_CH_STAT_INT_ED_MASK & chHighStat))
- {
- /* Handle RX Ready for high priority channel */
- status = dxeRXFrameReady(dxeCtxt,
- channelCb,
- chHighStat);
- }
- else if(WLANDXE_CH_STAT_MASKED_MASK & chHighStat)
- {
- status = dxeRXFrameReady(dxeCtxt,
- channelCb,
- chHighStat);
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO,
- "RX HIGH CH EVNT STAT 0x%x, %d frames handled", chHighStat, channelCb->numFragmentCurrentChain);
- /* Update the Rx DONE histogram */
- channelCb->rxDoneHistogram = (channelCb->rxDoneHistogram << 1);
- if(WLANDXE_CH_STAT_INT_DONE_MASK & chHighStat)
- {
- channelCb->rxDoneHistogram |= 1;
- }
- else
- {
- channelCb->rxDoneHistogram &= ~1;
- }
- }
-#else
- /* Test H2H Test interrupt is enabled or not */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_H2H_TEST_RX];
- if(intSrc & (1 << channelCb->assignedDMAChannel))
- {
- status = dxeChannelCleanInt(channelCb, &chStat);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXEventHandler INT Clean up fail");
- return;
- }
-
- if(WLANDXE_CH_STAT_INT_ERR_MASK & chStat)
- {
- /* Error Happen during transaction, Handle it */
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : 0x%x Error Reported, Reload Driver",
- channelType[channelCb->channelType], chStat);
-
- dxeErrChannelDebug(channelCb);
-
- dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE;
- wpalWlanReload();
- dxeStartSSRTimer(dxeCtxt);
- }
- else if(WLANDXE_CH_STAT_INT_ED_MASK & chStat)
- {
- /* Handle RX Ready for high priority channel */
- status = dxeRXFrameReady(dxeCtxt,
- channelCb,
- chStat);
- }
- /* Update the Rx DONE histogram */
- channelCb->rxDoneHistogram = (channelCb->rxDoneHistogram << 1);
- if(WLANDXE_CH_STAT_INT_DONE_MASK & chStat)
- {
- channelCb->rxDoneHistogram |= 1;
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "DXE Channel Number %d, Rx DONE Histogram 0x%016llx",
- channelCb->assignedDMAChannel, channelCb->rxDoneHistogram);
- }
- else
- {
- channelCb->rxDoneHistogram &= ~1;
- }
- }
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-
- /* Test Low Priority Channel interrupt is enabled or not */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_LOW_PRI];
- if(intSrc & (1 << channelCb->assignedDMAChannel))
- {
- status = dxeChannelCleanInt(channelCb, &chLowStat);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXEventHandler INT Clean up fail");
- return;
- }
-
- if(WLANDXE_CH_STAT_INT_ERR_MASK & chLowStat)
- {
- /* Error Happen during transaction, Handle it */
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : 0x%x Error Reported, Reload Driver",
- channelType[channelCb->channelType], chLowStat);
-
- dxeErrChannelDebug(channelCb);
-
- dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE;
- wpalWlanReload();
- dxeStartSSRTimer(dxeCtxt);
- }
- else if(WLANDXE_CH_STAT_INT_ED_MASK & chLowStat)
- {
- /* Handle RX Ready for low priority channel */
- status = dxeRXFrameReady(dxeCtxt,
- channelCb,
- chLowStat);
- }
-
- /* Update the Rx DONE histogram */
- channelCb->rxDoneHistogram = (channelCb->rxDoneHistogram << 1);
- if(WLANDXE_CH_STAT_INT_DONE_MASK & chLowStat)
- {
- channelCb->rxDoneHistogram |= 1;
- }
- else
- {
- channelCb->rxDoneHistogram &= ~1;
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO,
- "RX LOW CH EVNT STAT 0x%x, %d frames handled", chLowStat, channelCb->numFragmentCurrentChain);
- }
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXEventHandler Handle Frame Ready Fail");
- return;
- }
-
- /* Prepare Control Register EN Channel */
- if(!(dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_HIGH_PRI].extraConfig.chan_mask & WLANDXE_CH_CTRL_EN_MASK))
- {
- HDXE_ASSERT(0);
- }
- wpalWriteRegister(dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_HIGH_PRI].channelRegister.chDXECtrlRegAddr,
- dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_HIGH_PRI].extraConfig.chan_mask);
-
- /* Prepare Control Register EN Channel */
- if(!(dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_LOW_PRI].extraConfig.chan_mask & WLANDXE_CH_CTRL_EN_MASK))
- {
- HDXE_ASSERT(0);
- }
-
- wpalWriteRegister(dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_LOW_PRI].channelRegister.chDXECtrlRegAddr,
- dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_LOW_PRI].extraConfig.chan_mask);
-
- /* Clear Interrupt handle processing bit
- * RIVA may power down */
- wpalReadRegister(WLANDXE_INT_MASK_REG_ADDRESS, &regValue);
- regValue &= WLANDXE_RX_INTERRUPT_PRO_UNMASK;
- wpalWriteRegister(WLANDXE_INT_MASK_REG_ADDRESS, regValue);
-
- /* Enable system level ISR */
- /* Enable RX ready Interrupt at here */
- status = wpalEnableInterrupt(DXE_INTERRUPT_RX_READY);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXEventHandler Enable RX Ready interrupt fail");
- return;
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXPacketAvailableEventHandler
-
- @ Description
- Handle serialized RX Packet Available event when the corresponding callback
- is invoked by WPAL.
- Try to fill up any completed DXE descriptors with available Rx packet buffer
- pointers.
-
- @ Parameters
- wpt_msg *rxPktAvailMsg
- RX frame ready MSG pointer
- include DXE control context
-
- @ Return
- NONE
-
-===========================================================================*/
-void dxeRXPacketAvailableEventHandler
-(
- wpt_msg *rxPktAvailMsg
-)
-{
- WLANDXE_CtrlBlkType *dxeCtxt = NULL;
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_ChannelCBType *channelCb = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity Check */
- if(NULL == rxPktAvailMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXPacketAvailableEventHandler Context is not valid");
- return;
- }
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)(rxPktAvailMsg->pContext);
- /* Available resource allocated
- * Stop timer not needed */
- if(VOS_TIMER_STATE_RUNNING ==
- wpalTimerGetCurStatus(&dxeCtxt->rxResourceAvailableTimer))
- {
- wpalTimerStop(&dxeCtxt->rxResourceAvailableTimer);
- }
-
- do
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "dxeRXPacketAvailableEventHandler, start refilling ring");
-
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_HIGH_PRI];
- status = dxeRXFrameRefillRing(dxeCtxt,channelCb);
-
- // Wait for another callback to indicate when Rx resources are available
- // again.
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- break;
- }
-
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_LOW_PRI];
- status = dxeRXFrameRefillRing(dxeCtxt,channelCb);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- break;
- }
- } while(0);
-
- if((WLANDXE_POWER_STATE_IMPS == dxeCtxt->hostPowerState) ||
- (WLANDXE_POWER_STATE_DOWN == dxeCtxt->hostPowerState))
- {
- /* Interrupt will not enabled at here, it will be enabled at PS mode change */
- tempDxeCtrlBlk->rxIntDisabledByIMPS = eWLAN_PAL_TRUE;
- }
-}
-
-/*==========================================================================
- @ Function Name
- dxeRXISR
-
- @ Description
- RX frame ready interrupt service routine
- interrupt entry function, this function called based on ISR context
- Must be serialized
-
- @ Parameters
- void *hostCtxt
- DXE host driver control context,
- pre registerd during interrupt registration
-
- @ Return
- NONE
-
-===========================================================================*/
-static void dxeRXISR
-(
- void *hostCtxt
-)
-{
- WLANDXE_CtrlBlkType *dxeCtxt = (WLANDXE_CtrlBlkType *)hostCtxt;
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 regValue;
-
-#ifdef FEATURE_R33D
- status = wpalReadRegister(WLANDXE_INT_SRC_RAW_ADDRESS,
- &regValue);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompISR Read INT_SRC_RAW fail");
- return;
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "INT_SRC_RAW 0x%x", regValue);
- if(0 == regValue)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "This is not DXE Interrupt, Reject it 0x%x", regValue);
- return;
- }
-#endif /* FEATURE_R33D */
-
- /* Set Interrupt processing bit
- * During this bit set, WLAN HW may not power collapse */
- wpalReadRegister(WLANDXE_INT_MASK_REG_ADDRESS, &regValue);
- regValue |= WLANPAL_RX_INTERRUPT_PRO_MASK;
- wpalWriteRegister(WLANDXE_INT_MASK_REG_ADDRESS, regValue);
-
- /* Disable interrupt at here
- * Disable RX Ready system level Interrupt at here
- * Otherwise infinite loop might happen */
- status = wpalDisableInterrupt(DXE_INTERRUPT_RX_READY);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameReadyISR Disable RX ready interrupt fail");
- return;
- }
-
- /* Serialize RX Ready interrupt upon RX thread */
- if(NULL == dxeCtxt->rxIsrMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameReadyISR NULL message");
- HDXE_ASSERT(0);
- return;
- }
-
- status = wpalPostRxMsg(WDI_GET_PAL_CTX(),
- dxeCtxt->rxIsrMsg);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "dxeRXFrameReadyISR interrupt serialize fail");
- }
-
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeTXPushFrame
-
- @ Description
- Push TX frame into DXE descriptor and DXE register
- Send notification to DXE register that TX frame is ready to transfer
-
- @ Parameters
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
- wpt_packet *palPacket
- Packet pointer ready to transfer
-
- @ Return
- PAL_STATUS_T
-===========================================================================*/
-static wpt_status dxeTXPushFrame
-(
- WLANDXE_ChannelCBType *channelEntry,
- wpt_packet *palPacket
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- WLANDXE_DescType *currentDesc = NULL;
- WLANDXE_DescType *firstDesc = NULL;
- WLANDXE_DescType *LastDesc = NULL;
- void *sourcePhysicalAddress = NULL;
- wpt_uint32 xferSize = 0;
-#ifdef FEATURE_R33D
- tx_frm_pcie_vector_t frameVector;
- wpt_uint32 Va;
- wpt_uint32 fragCount = 0;
-#else
- wpt_iterator iterator;
-#endif /* FEATURE_R33D */
- wpt_uint32 isEmpty = 0;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- tempDxeCtrlBlk->smsmToggled = eWLAN_PAL_FALSE;
- if((0 == tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].numRsvdDesc) &&
- (0 == tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].numRsvdDesc))
- {
- isEmpty = 1;
- }
-
- channelEntry->numFragmentCurrentChain = 0;
- currentCtrlBlk = channelEntry->headCtrlBlk;
-
- /* Initialize interator, TX is fragmented */
-#ifdef FEATURE_R33D
- memset(&frameVector, 0, sizeof(tx_frm_pcie_vector_t));
- status = wpalPrepareTxFrame(palPacket,
- &frameVector,
- &Va);
-#else
- status = wpalLockPacketForTransfer(palPacket);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame unable to lock packet");
- return status;
- }
-
- status = wpalIteratorInit(&iterator, palPacket);
-#endif /* FEATURE_R33D */
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame iterator init fail");
- return status;
- }
-
- /* !!!! Revisit break condition !!!!!!! */
- while(1)
- {
- /* Get current descriptor pointer from current control block */
- currentDesc = currentCtrlBlk->linkedDesc;
- if(NULL == firstDesc)
- {
- firstDesc = currentCtrlBlk->linkedDesc;
- }
- /* All control block will have same palPacket Pointer
- * to make logic simpler */
- currentCtrlBlk->xfrFrame = palPacket;
-
- /* Get next fragment physical address and fragment size
- * if this is the first trial, will get first physical address
- * if no more fragment, Descriptor src address will be set as NULL, OK??? */
-#ifdef FEATURE_R33D
- if(fragCount == frameVector.num_frg)
- {
- break;
- }
- currentCtrlBlk->shadowBufferVa = frameVector.frg[0].va;
- sourcePhysicalAddress = (void *)frameVector.frg[fragCount].pa;
- xferSize = frameVector.frg[fragCount].size;
- fragCount++;
- if(0 == xferSize)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame invalid transfer size");
-
- HDXE_ASSERT(0);
- return eWLAN_PAL_STATUS_E_FAILURE;
- }
- if(NULL == sourcePhysicalAddress)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame invalid sourcePhysicalAddress");
- HDXE_ASSERT(0);
- return eWLAN_PAL_STATUS_E_FAILURE;
- }
-#else
- status = wpalIteratorNext(&iterator,
- palPacket,
- &sourcePhysicalAddress,
- &xferSize);
- if((NULL == sourcePhysicalAddress) ||
- (0 == xferSize))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "dxeTXPushFrame end of current frame");
- break;
- }
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Get next frame fail");
- return status;
- }
-#endif /* FEATURE_R33D */
-
- /* This is the LAST descriptor valid for this transaction */
- LastDesc = currentCtrlBlk->linkedDesc;
-
- /* Program DXE descriptor */
- currentDesc->dxedesc.dxe_short_desc.srcMemAddrL =
- WLANDXE_U32_SWAP_ENDIAN((wpt_uint32)(uintptr_t)sourcePhysicalAddress);
-
- /* Just normal data transfer from aCPU Flat Memory to BMU Q */
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- currentDesc->dxedesc.dxe_short_desc.dstMemAddrL =
- WLANDXE_U32_SWAP_ENDIAN(channelEntry->channelConfig.refWQ);
- }
- else
- {
- /* Test specific H2H transfer, destination address already set
- * Do Nothing */
- }
- currentDesc->xfrSize = WLANDXE_U32_SWAP_ENDIAN(xferSize);
-
- /* Program channel control register */
- /* First frame not set VAL bit, why ??? */
- if(0 == channelEntry->numFragmentCurrentChain)
- {
- currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write;
- }
- else
- {
- currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write_valid;
- }
-
- /* Update statistics */
- channelEntry->numFragmentCurrentChain++;
- channelEntry->numFreeDesc--;
- channelEntry->numRsvdDesc++;
-
- /* Get next control block */
- currentCtrlBlk = currentCtrlBlk->nextCtrlBlk;
- }
- channelEntry->numTotalFrame++;
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "NUM TX FRAG %d, Total Frame %d",
- channelEntry->numFragmentCurrentChain, channelEntry->numTotalFrame);
-
- /* Program Channel control register
- * Set as end of packet
- * Enable interrupt also for first code lock down
- * performace optimization, this will be revisited */
- if(NULL == LastDesc)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame NULL Last Descriptor, broken chain");
- return eWLAN_PAL_STATUS_E_FAULT;
- }
- LastDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write_eop_int;
- /* Now First one also Valid ????
- * this procedure will prevent over handle descriptor from previous
- * TX trigger */
- firstDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write_valid;
-
- /* If in BMPS mode no need to notify the DXE Engine, notify SMSM instead */
- if(WLANDXE_RIVA_POWER_STATE_BMPS_UNKNOWN == tempDxeCtrlBlk->rivaPowerState)
- {
- /* Update channel head as next avaliable linked slot */
- channelEntry->headCtrlBlk = currentCtrlBlk;
- if(isEmpty)
- {
- tempDxeCtrlBlk->ringNotEmpty = eWLAN_PAL_TRUE;
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "SMSM_ret LO=%d HI=%d",
- tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].numRsvdDesc,
- tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].numRsvdDesc );
- dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE);
- tempDxeCtrlBlk->smsmToggled = eWLAN_PAL_TRUE;
- }
- return status;
- }
-
- /* If DXE use external descriptor, registers are not needed to be programmed
- * Just after finish to program descriptor, tirigger to send */
- if(channelEntry->extraConfig.chan_mask & WLANDXE_CH_CTRL_EDEN_MASK)
- {
- /* Issue a dummy read from the DXE descriptor DDR location to
- ensure that any previously posted write to the descriptor
- completes. */
- if(channelEntry->extraConfig.cw_ctrl_write_valid != firstDesc->descCtrl.ctrl)
- {
- //HDXE_ASSERT(0);
- }
-
- /* Everything is ready
- * Trigger to start DMA */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXECtrlRegAddr,
- channelEntry->extraConfig.chan_mask);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Write Channel Ctrl Register fail");
- return status;
- }
-
- /* Update channel head as next avaliable linked slot */
- channelEntry->headCtrlBlk = currentCtrlBlk;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
- }
-
- /* If DXE not use external descriptor, program each registers */
- /* Circular buffer handle not need to program DESC register???
- * GEN5 code not programed RING buffer case
- * REVISIT THIS !!!!!! */
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- /* Destination address, assigned Work Q */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDadrlRegAddr,
- channelEntry->channelConfig.refWQ);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Program dest address register fail");
- return status;
- }
- /* If descriptor format is SHORT */
- if(channelEntry->channelConfig.useShortDescFmt)
- {
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDadrhRegAddr,
- 0);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Program dest address register fail");
- return status;
- }
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame LONG Descriptor Format!!!");
- }
- }
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
- else if(WDTS_CHANNEL_H2H_TEST_TX == channelEntry->channelType)
- {
- /* Destination address, Physical memory address */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDadrlRegAddr,
- WLANDXE_U32_SWAP_ENDIAN(firstDesc->dxedesc.dxe_short_desc.dstMemAddrL));
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Program dest address register fail");
- return status;
- }
- /* If descriptor format is SHORT */
- if(channelEntry->channelConfig.useShortDescFmt)
- {
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDadrhRegAddr,
- 0);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Program dest address register fail");
- return status;
- }
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame LONG Descriptor Format!!!");
- }
- }
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-
- /* Program Source address register
- * This address is already programmed into DXE Descriptor
- * But register also upadte */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXESadrlRegAddr,
- WLANDXE_U32_SWAP_ENDIAN(firstDesc->dxedesc.dxe_short_desc.srcMemAddrL));
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Program src address register fail");
- return status;
- }
- /* If descriptor format is SHORT */
- if(channelEntry->channelConfig.useShortDescFmt)
- {
- status = wpalWriteRegister(channelEntry->channelRegister.chDXESadrhRegAddr,
- 0);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Program dest address register fail");
- return status;
- }
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame LONG Descriptor Format!!!");
- }
-
- /* Linked list Descriptor pointer */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDesclRegAddr,
- channelEntry->headCtrlBlk->linkedDescPhyAddr);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Write DESC Address register fail");
- return status;
- }
- /* If descriptor format is SHORT */
- if(channelEntry->channelConfig.useShortDescFmt)
- {
- status = wpalWriteRegister(channelEntry->channelRegister.chDXEDeschRegAddr,
- 0);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Program dest address register fail");
- return status;
- }
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame LONG Descriptor Format!!!");
- }
-
- /* Transfer Size */
- xferSize = WLANDXE_U32_SWAP_ENDIAN(firstDesc->xfrSize);
- status = wpalWriteRegister(channelEntry->channelRegister.chDXESzRegAddr,
- xferSize);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Write DESC Address register fail");
- return status;
- }
-
- /* Everything is ready
- * Trigger to start DMA */
- status = wpalWriteRegister(channelEntry->channelRegister.chDXECtrlRegAddr,
- channelEntry->extraConfig.chan_mask);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXPushFrame Write Channel Ctrl Register fail");
- return status;
- }
-
- /* Update channel head as next avaliable linked slot */
- channelEntry->headCtrlBlk = currentCtrlBlk;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeTXCompFrame
-
- @ Description
- TX Frame transfer complete event handler
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- PAL_STATUS_T
-===========================================================================*/
-static wpt_status dxeTXCompFrame
-(
- WLANDXE_CtrlBlkType *hostCtxt,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- WLANDXE_DescType *currentDesc = NULL;
- wpt_uint32 descCtrlValue = 0;
- unsigned int *lowThreshold = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity */
- if((NULL == hostCtxt) || (NULL == channelEntry))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompFrame Invalid ARG");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if(NULL == hostCtxt->txCompCB)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompFrame TXCompCB is not registered");
- return eWLAN_PAL_STATUS_SUCCESS;
- }
-
- status = wpalMutexAcquire(&channelEntry->dxeChannelLock);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompFrame Mutex Acquire fail");
- return status;
- }
-
- currentCtrlBlk = channelEntry->tailCtrlBlk;
- currentDesc = currentCtrlBlk->linkedDesc;
-
- if( currentCtrlBlk == channelEntry->headCtrlBlk )
- {
- status = wpalMutexRelease(&channelEntry->dxeChannelLock);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompFrame Mutex Release fail");
- return status;
- }
- return eWLAN_PAL_STATUS_SUCCESS;
- }
-
-
- while(1)
- {
-// HDXE_ASSERT(WLAN_PAL_IS_STATUS_SUCCESS(WLAN_RivaValidateDesc(currentDesc)));
- descCtrlValue = currentDesc->descCtrl.ctrl;
- if((descCtrlValue & WLANDXE_DESC_CTRL_VALID))
- {
- /* caught up with head, bail out */
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED,
- "dxeTXCompFrame caught up with head - next DESC has VALID set");
- break;
- }
-
- if(currentCtrlBlk->xfrFrame == NULL)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "Invalid transfer frame");
- HDXE_ASSERT(0);
- break;
- }
- channelEntry->numFreeDesc++;
- channelEntry->numRsvdDesc--;
-
- /* Send Frame TX Complete notification with frame start fragment location */
- if(WLANDXE_U32_SWAP_ENDIAN(descCtrlValue) & WLANDXE_DESC_CTRL_EOP)
- {
- hostCtxt->txCompletedFrames--;
-#ifdef FEATURE_R33D
- wpalFreeTxFrame(currentCtrlBlk->shadowBufferVa);
-#else
- status = wpalUnlockPacket(currentCtrlBlk->xfrFrame);
- if (eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameReady unable to unlock packet");
- status = wpalMutexRelease(&channelEntry->dxeChannelLock);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompFrame Mutex Release fail");
- }
- return status;
- }
-#endif /* FEATURE_R33D */
- hostCtxt->txCompCB(hostCtxt->clientCtxt,
- currentCtrlBlk->xfrFrame,
- eWLAN_PAL_STATUS_SUCCESS);
- channelEntry->numFragmentCurrentChain = 0;
- }
- currentCtrlBlk = currentCtrlBlk->nextCtrlBlk;
- currentDesc = currentCtrlBlk->linkedDesc;
-
- /* Break condition
- * Head control block is the control block must be programed for the next TX
- * so, head control block is not programmed control block yet
- * if loop encounte head control block, stop to complete
- * in theory, COMP CB must be called already ??? */
- if(currentCtrlBlk == channelEntry->headCtrlBlk)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED,
- "dxeTXCompFrame caught up with head ptr");
- break;
- }
- /* VALID Bit check ???? */
- }
-
- /* Tail and Head Control block must be same */
- channelEntry->tailCtrlBlk = currentCtrlBlk;
-
- lowThreshold = channelEntry->channelType == WDTS_CHANNEL_TX_LOW_PRI?
- &(hostCtxt->txCompInt.txLowResourceThreshold_LoPriCh):
- &(hostCtxt->txCompInt.txLowResourceThreshold_HiPriCh);
-
- /* If specific channel hit low resource condition send notification to upper layer */
- if((eWLAN_PAL_TRUE == channelEntry->hitLowResource) &&
- (channelEntry->numFreeDesc > *lowThreshold))
- {
- /* Change it back if we raised it for fetching a remaining packet from TL */
- if(WLANDXE_TX_LOW_RES_THRESHOLD > *lowThreshold)
- {
- *lowThreshold = WLANDXE_TX_LOW_RES_THRESHOLD;
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "DXE TX %d channel recovered from low resource", channelEntry->channelType);
- hostCtxt->lowResourceCB(hostCtxt->clientCtxt,
- channelEntry->channelType,
- eWLAN_PAL_TRUE);
- channelEntry->hitLowResource = eWLAN_PAL_FALSE;
- wpalTimerStop(&channelEntry->healthMonitorTimer);
- }
-
- status = wpalMutexRelease(&channelEntry->dxeChannelLock);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompFrame Mutex Release fail");
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeTXEventHandler
-
- @ Description
- If DXE HW sends TX related interrupt, this event handler will be called
- Handle higher priority channel first
- Figureout why interrupt happen and call appropriate final even handler
- TX complete or error happen
-
- @ Parameters
- void *msgPtr
- Even MSG
-
- @ Return
- PAL_STATUS_T
-===========================================================================*/
-void dxeTXEventHandler
-(
- wpt_msg *msgPtr
-)
-{
- wpt_msg *msgContent = (wpt_msg *)msgPtr;
- WLANDXE_CtrlBlkType *dxeCtxt = NULL;
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 intSrc = 0;
- wpt_uint32 chStat = 0;
- WLANDXE_ChannelCBType *channelCb = NULL;
-
- wpt_uint8 bEnableISR = 0;
- static wpt_uint8 successiveIntWithIMPS;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)(msgContent->pContext);
- dxeCtxt->ucTxMsgCnt = 0;
-
- if(eWLAN_PAL_TRUE == dxeCtxt->driverReloadInProcessing)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "wlan: TX COMP WLAN Driver re-loading in progress");
- return;
- }
-
- /* Return from here if the RIVA is in IMPS, to avoid register access */
- if(WLANDXE_POWER_STATE_IMPS == dxeCtxt->hostPowerState)
- {
- successiveIntWithIMPS++;
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXEventHandler IMPS TX COMP INT successiveIntWithIMPS %d", successiveIntWithIMPS);
- status = dxeTXCompFrame(dxeCtxt, &dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI]);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXEventHandler IMPS HC COMP interrupt fail");
- }
-
- status = dxeTXCompFrame(dxeCtxt, &dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI]);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXEventHandler IMPS LC COMP interrupt fail");
- }
-
- if(((dxeCtxt->txCompletedFrames) &&
- (eWLAN_PAL_FALSE == dxeCtxt->txIntEnable)) &&
- (successiveIntWithIMPS == 1))
- {
- dxeCtxt->txIntEnable = eWLAN_PAL_TRUE;
- wpalEnableInterrupt(DXE_INTERRUPT_TX_COMPLE);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "TX COMP INT Enabled, remain TX frame count on ring %d",
- dxeCtxt->txCompletedFrames);
- /*Kicking the DXE after the TX Complete interrupt was enabled - to avoid
- the posibility of a race*/
- dxePsComplete(dxeCtxt, eWLAN_PAL_TRUE);
- }
- else
- {
- dxeCtxt->txIntEnable = eWLAN_PAL_FALSE;
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "TX COMP INT NOT Enabled, RIVA still wake up? remain TX frame count on ring %d, successiveIntWithIMPS %d",
- dxeCtxt->txCompletedFrames, successiveIntWithIMPS);
- }
- return;
- }
-
- successiveIntWithIMPS = 0;
- if((!dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].extraConfig.chEnabled) ||
- (!dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].extraConfig.chEnabled))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "DXE already stopped in TX event handler. Just return");
- return;
- }
-
- /* Disable device interrupt */
- /* Read whole interrupt mask register and exclusive only this channel int */
- status = wpalReadRegister(WLANDXE_INT_SRC_RAW_ADDRESS,
- &intSrc);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompleteEventHandler Read INT_DONE_SRC register fail");
- return;
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED,
- "TX Event Handler INT Source 0x%x", intSrc);
-
- /* Test High Priority Channel is the INT source or not */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI];
- if(intSrc & (1 << channelCb->assignedDMAChannel))
- {
- status = dxeChannelCleanInt(channelCb, &chStat);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXEventHandler INT Clean up fail");
- return;
- }
-
- if(WLANDXE_CH_STAT_INT_ERR_MASK & chStat)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : 0x%x Error Reported, Reload Driver",
- channelType[channelCb->channelType], chStat);
-
- dxeErrChannelDebug(channelCb);
-
- dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE;
- wpalWlanReload();
- dxeStartSSRTimer(dxeCtxt);
- }
- else if(WLANDXE_CH_STAT_INT_DONE_MASK & chStat)
- {
- /* Handle TX complete for high priority channel */
- status = dxeTXCompFrame(dxeCtxt,
- channelCb);
- bEnableISR = 1;
- }
- else if(WLANDXE_CH_STAT_INT_ED_MASK & chStat)
- {
- /* Handle TX complete for high priority channel */
- status = dxeTXCompFrame(dxeCtxt,
- channelCb);
- bEnableISR = 1;
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXEventHandler TX HI status=%x", chStat);
- }
-
- if(WLANDXE_CH_STAT_MASKED_MASK & chStat)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_HIGH,
- "dxeTXEventHandler TX HIGH Channel Masked Unmask it!!!!");
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_HIGH,
- "TX HIGH STAT 0x%x RESRVD %d", chStat, channelCb->numRsvdDesc);
- }
-
- /* Test Low Priority Channel interrupt is enabled or not */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI];
- if(intSrc & (1 << channelCb->assignedDMAChannel))
- {
- status = dxeChannelCleanInt(channelCb, &chStat);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXEventHandler INT Clean up fail");
- return;
- }
-
- if(WLANDXE_CH_STAT_INT_ERR_MASK & chStat)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : 0x%x Error Reported, Reload Driver",
- channelType[channelCb->channelType], chStat);
-
- dxeErrChannelDebug(channelCb);
-
- dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE;
- wpalWlanReload();
- dxeStartSSRTimer(dxeCtxt);
- }
- else if(WLANDXE_CH_STAT_INT_DONE_MASK & chStat)
- {
- /* Handle TX complete for low priority channel */
- status = dxeTXCompFrame(dxeCtxt,
- channelCb);
- bEnableISR = 1;
- }
- else if(WLANDXE_CH_STAT_INT_ED_MASK & chStat)
- {
- /* Handle TX complete for low priority channel */
- status = dxeTXCompFrame(dxeCtxt,
- channelCb);
- bEnableISR = 1;
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXEventHandler TX LO status=%x", chStat);
- }
-
- if(WLANDXE_CH_STAT_MASKED_MASK & chStat)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_HIGH,
- "dxeTXEventHandler TX Low Channel Masked Unmask it!!!!");
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO,
- "TX LOW STAT 0x%x RESRVD %d", chStat, channelCb->numRsvdDesc);
- }
-
-
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
- /* Test H2H TX Channel interrupt is enabled or not */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_H2H_TEST_TX];
- if(intSrc & (1 << channelCb->assignedDMAChannel))
- {
- status = wpalReadRegister(channelCb->channelRegister.chDXEStatusRegAddr,
- &chStat);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeChannelCleanInt Read CH STAT register fail");
- return;
- }
-
- if(WLANDXE_CH_STAT_INT_ERR_MASK & chStat)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : 0x%x Error Reported, Reload Driver",
- channelType[channelCb->channelType], chStat);
-
- dxeErrChannelDebug(channelCb);
-
- dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE;
- wpalWlanReload();
- dxeStartSSRTimer(dxeCtxt);
- }
- else if(WLANDXE_CH_STAT_INT_DONE_MASK & chStat)
- {
- /* Handle TX complete for high priority channel */
- status = dxeTXCompFrame(dxeCtxt,
- channelCb);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXEventHandler INT Clean up fail");
- return;
- }
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "unexpected channel state %d", chStat);
- }
- }
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-
- if((bEnableISR || (dxeCtxt->txCompletedFrames)) &&
- (eWLAN_PAL_FALSE == dxeCtxt->txIntEnable))
- {
- dxeCtxt->txIntEnable = eWLAN_PAL_TRUE;
- wpalEnableInterrupt(DXE_INTERRUPT_TX_COMPLE);
- if(0 != dxeCtxt->txCompletedFrames)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "TX COMP INT Enabled, remain TX frame count on ring %d",
- dxeCtxt->txCompletedFrames);
- }
- }
-
- /*Kicking the DXE after the TX Complete interrupt was enabled - to avoid
- the posibility of a race*/
- dxePsComplete(dxeCtxt, eWLAN_PAL_TRUE);
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return;
-}
-
-
-/*==========================================================================
- @ Function Name
- dxeTXCompleteProcessing
-
- @ Description
- If DXE HW sends TX related interrupt, this event handler will be called
- Handle higher priority channel first
- Figureout why interrupt happen and call appropriate final even handler
- TX complete or error happen
-
- @ Parameters
- dxeCtxt DXE context
-
- @ Return
- PAL_STATUS_T
-===========================================================================*/
-void dxeTXCompleteProcessing
-(
- WLANDXE_CtrlBlkType *dxeCtxt
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_ChannelCBType *channelCb = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Test High Priority Channel is the INT source or not */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI];
-
- /* Handle TX complete for high priority channel */
- status = dxeTXCompFrame(dxeCtxt, channelCb);
-
- /* Test Low Priority Channel interrupt is enabled or not */
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI];
-
- /* Handle TX complete for low priority channel */
- status = dxeTXCompFrame(dxeCtxt, channelCb);
-
- if((eWLAN_PAL_FALSE == dxeCtxt->txIntEnable) &&
- ((dxeCtxt->txCompletedFrames > 0) ||
- (WLANDXE_POWER_STATE_FULL == dxeCtxt->hostPowerState)))
- {
- dxeCtxt->txIntEnable = eWLAN_PAL_TRUE;
- wpalEnableInterrupt(DXE_INTERRUPT_TX_COMPLE);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%s %s : %d, %s : %d", __func__,
- channelType[dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].channelType],
- dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].numRsvdDesc,
- channelType[dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].channelType],
- dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].numRsvdDesc);
-
- if((WLANDXE_POWER_STATE_FULL != dxeCtxt->hostPowerState) &&
- (eWLAN_PAL_FALSE == tempDxeCtrlBlk->smsmToggled))
- {
- /* After TX Comp processing, still remaining frame on the DXE TX ring
- * And when push frame, RING was not empty marked
- * Then when push frame, no SMSM toggle happen
- * To avoid permanent TX stall, SMSM toggle is needed at here
- * With this toggle, host should gaurantee SMSM state should be changed */
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
- dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE);
- }
- }
-
- /*Kicking the DXE after the TX Complete interrupt was enabled - to avoid
- the posibility of a race*/
- dxePsComplete(dxeCtxt, eWLAN_PAL_FALSE);
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeTXReSyncDesc
-
- @ Description
- When STA comeout from IMPS, check DXE TX next transfer candidate descriptor
- And HW programmed descriptor.
- If any async happen between HW/SW TX stall will happen
-
- @ Parameters
- void *msgPtr
- Message pointer to sync with TX thread
-
- @ Return
- NONE
-===========================================================================*/
-void dxeTXReSyncDesc
-(
- wpt_msg *msgPtr
-)
-{
- wpt_msg *msgContent = (wpt_msg *)msgPtr;
- WLANDXE_CtrlBlkType *pDxeCtrlBlk;
- wpt_uint32 nextDescReg;
- WLANDXE_ChannelCBType *channelEntry;
- WLANDXE_DescCtrlBlkType *validCtrlBlk;
- wpt_uint32 descLoop;
- wpt_uint32 channelLoop;
-
- if(NULL == msgContent)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXReSyncDesc Invalid Control Block");
- return;
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "dxeTXReSyncDesc Try to re-sync TX channel if any problem");
- pDxeCtrlBlk = (WLANDXE_CtrlBlkType *)(msgContent->pContext);
-
- for(channelLoop = WDTS_CHANNEL_TX_LOW_PRI; channelLoop < WDTS_CHANNEL_RX_LOW_PRI; channelLoop++)
- {
- channelEntry = &pDxeCtrlBlk->dxeChannel[channelLoop];
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%11s : Try to detect TX descriptor async", channelType[channelEntry->channelType]);
- wpalReadRegister(channelEntry->channelRegister.chDXEDesclRegAddr,
- &nextDescReg);
- /* Async detect without TX pending frame */
- if(channelEntry->tailCtrlBlk == channelEntry->headCtrlBlk)
- {
- if(nextDescReg != channelEntry->tailCtrlBlk->linkedDescPhyAddr)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "TX Async no Pending frame");
-
- dxeChannelMonitor("!!! TX Async no Pending frame !!!", channelEntry, NULL);
- dxeChannelRegisterDump(channelEntry, "!!! TX Async no Pending frame !!!", NULL);
-
- wpalWriteRegister(channelEntry->channelRegister.chDXEDesclRegAddr,
- channelEntry->tailCtrlBlk->linkedDescPhyAddr);
- }
- }
- /* Async detect with some TX pending frames
- * next descriptor register should sync with first valid descriptor */
- else
- {
- validCtrlBlk = channelEntry->tailCtrlBlk;
- for(descLoop = 0; descLoop < channelEntry->numDesc; descLoop++)
- {
- if(validCtrlBlk->linkedDesc->descCtrl.ctrl & WLANDXE_DESC_CTRL_VALID)
- {
- if(nextDescReg != validCtrlBlk->linkedDescPhyAddr)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "TX Async");
-
- dxeChannelMonitor("!!! TX Async !!!", channelEntry, NULL);
- dxeChannelRegisterDump(channelEntry, "!!! TX Async !!!", NULL);
-
- wpalWriteRegister(channelEntry->channelRegister.chDXEDesclRegAddr,
- validCtrlBlk->linkedDescPhyAddr);
- }
- break;
- }
- validCtrlBlk = (WLANDXE_DescCtrlBlkType *)validCtrlBlk->nextCtrlBlk;
- if(validCtrlBlk == channelEntry->headCtrlBlk->nextCtrlBlk)
- {
- /* Finished to test till head control blcok, but could not find valid descriptor
- * from head to tail all descriptors are invalidated
- * host point of view head descriptor is next TX candidate
- * So, next descriptor control have to be programmed with head descriptor
- * check */
- if(nextDescReg != channelEntry->headCtrlBlk->linkedDescPhyAddr)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "TX Async with not completed transferred frames, next descriptor must be head");
-
- dxeChannelMonitor("!!! TX Async !!!", channelEntry, NULL);
- dxeChannelRegisterDump(channelEntry, "!!! TX Async !!!", NULL);
-
- wpalWriteRegister(channelEntry->channelRegister.chDXEDesclRegAddr,
- validCtrlBlk->linkedDescPhyAddr);
- }
- break;
- }
- }
- }
- }
-
- /* HW/SW descriptor resync is done.
- * Next if there are any valid descriptor in chain, Push to HW again */
- for(channelLoop = WDTS_CHANNEL_TX_LOW_PRI; channelLoop < WDTS_CHANNEL_RX_LOW_PRI; channelLoop++)
- {
- channelEntry = &pDxeCtrlBlk->dxeChannel[channelLoop];
- if(channelEntry->tailCtrlBlk == channelEntry->headCtrlBlk)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%11s : No TX Pending frame",
- channelType[channelEntry->channelType]);
- /* No Pending frame, Do nothing */
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : TX Pending frame, process it",
- channelType[channelEntry->channelType]);
- validCtrlBlk = channelEntry->tailCtrlBlk;
- for(descLoop = 0; descLoop < channelEntry->numDesc; descLoop++)
- {
- if(validCtrlBlk->linkedDesc->descCtrl.ctrl & WLANDXE_DESC_CTRL_VALID)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%11s : when exit IMPS found valid descriptor",
- channelType[channelEntry->channelType]);
-
- /* Found valid descriptor, kick DXE */
- wpalWriteRegister(channelEntry->channelRegister.chDXECtrlRegAddr,
- channelEntry->extraConfig.chan_mask);
- break;
- }
- validCtrlBlk = (WLANDXE_DescCtrlBlkType *)validCtrlBlk->nextCtrlBlk;
- if(validCtrlBlk == channelEntry->headCtrlBlk->nextCtrlBlk)
- {
- /* Finished to test till head control blcok, but could not find valid descriptor
- * from head to tail all descriptors are invalidated */
- break;
- }
- }
- }
- }
-
- wpalMemoryFree(msgPtr);
- return;
-}
-
-/*==========================================================================
- @ Function Name
- dxeTXISR
-
- @ Description
- TX interrupt ISR
- Platform will call this function if INT is happen
- This function must be registered into platform interrupt module
-
- @ Parameters
- void *hostCtxt
- DXE host driver control context,
- pre registerd during interrupt registration
-
- @ Return
- PAL_STATUS_T
-===========================================================================*/
-static void dxeTXISR
-(
- void *hostCtxt
-)
-{
- WLANDXE_CtrlBlkType *dxeCtxt = (WLANDXE_CtrlBlkType *)hostCtxt;
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-#ifdef FEATURE_R33D
- wpt_uint32 regValue;
-#endif /* FEATURE_R33D */
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Return from here if the RIVA is in IMPS, to avoid register access */
- if(WLANDXE_POWER_STATE_DOWN == dxeCtxt->hostPowerState)
- {
- dxeCtxt->txIntEnable = eWLAN_PAL_FALSE;
- /* Disable interrupt at here,
- IMPS or IMPS Pending state should not access RIVA register */
- status = wpalDisableInterrupt(DXE_INTERRUPT_TX_COMPLE);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeRXFrameReadyISR Disable RX ready interrupt fail");
- return;
- }
- dxeCtxt->txIntDisabledByIMPS = eWLAN_PAL_TRUE;
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%s Riva is in %d, return from here ", __func__, dxeCtxt->hostPowerState);
- return;
- }
-
-#ifdef FEATURE_R33D
- status = wpalReadRegister(WLANDXE_INT_SRC_RAW_ADDRESS,
- &regValue);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompISR Read INT_SRC_RAW fail");
- return;
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "INT_SRC_RAW 0x%x", regValue);
- if(0 == regValue)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "This is not DXE Interrupt, Reject it");
- return;
- }
-#endif /* FEATURE_R33D */
-
- /* Disable TX Complete Interrupt at here */
- status = wpalDisableInterrupt(DXE_INTERRUPT_TX_COMPLE);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompISR Disable TX complete interrupt fail");
- return;
- }
- dxeCtxt->txIntEnable = eWLAN_PAL_FALSE;
-
-
- if( dxeCtxt->ucTxMsgCnt )
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO,
- "Avoiding serializing TX Complete event");
- return;
- }
-
- dxeCtxt->ucTxMsgCnt = 1;
-
- /* Serialize TX complete interrupt upon TX thread */
- if(NULL == dxeCtxt->txIsrMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "Invalid message");
- HDXE_ASSERT(0);
- return;
- }
- status = wpalPostTxMsg(WDI_GET_PAL_CTX(),
- dxeCtxt->txIsrMsg);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "dxeTXCompISR interrupt serialize fail status=%d", status);
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return;
-}
-
-/*-------------------------------------------------------------------------
- * Global Function
- *-------------------------------------------------------------------------*/
-/*==========================================================================
- @ Function Name
- WLANDXE_Open
-
- @ Description
- Open host DXE driver, allocate DXE resources
- Allocate, DXE local control block, DXE descriptor pool, DXE descriptor control block pool
-
- @ Parameters
- pVoid pAdapter : Driver global control block pointer
-
- @ Return
- pVoid DXE local module control block pointer
-===========================================================================*/
-void *WLANDXE_Open
-(
- void
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- unsigned int idx;
- WLANDXE_ChannelCBType *currentChannel = NULL;
- int smsmInitState;
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
- wpt_uint32 sIdx;
- WLANDXE_ChannelCBType *channel = NULL;
- WLANDXE_DescCtrlBlkType *crntDescCB = NULL;
- WLANDXE_DescCtrlBlkType *nextDescCB = NULL;
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* This is temporary allocation */
- tempDxeCtrlBlk = (WLANDXE_CtrlBlkType *)wpalMemoryAllocate(sizeof(WLANDXE_CtrlBlkType));
- if(NULL == tempDxeCtrlBlk)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Open Control Block Alloc Fail");
- return NULL;
- }
- wpalMemoryZero(tempDxeCtrlBlk, sizeof(WLANDXE_CtrlBlkType));
-
- status = dxeCommonDefaultConfig(tempDxeCtrlBlk);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Open Common Configuration Fail");
- WLANDXE_Close(tempDxeCtrlBlk);
- return NULL;
- }
-
- for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "WLANDXE_Open Channel %s Open Start", channelType[idx]);
- currentChannel = &tempDxeCtrlBlk->dxeChannel[idx];
- if(idx == WDTS_CHANNEL_TX_LOW_PRI)
- {
- currentChannel->channelType = WDTS_CHANNEL_TX_LOW_PRI;
- }
- else if(idx == WDTS_CHANNEL_TX_HIGH_PRI)
- {
- currentChannel->channelType = WDTS_CHANNEL_TX_HIGH_PRI;
- }
- else if(idx == WDTS_CHANNEL_RX_LOW_PRI)
- {
- currentChannel->channelType = WDTS_CHANNEL_RX_LOW_PRI;
- }
- else if(idx == WDTS_CHANNEL_RX_HIGH_PRI)
- {
- currentChannel->channelType = WDTS_CHANNEL_RX_HIGH_PRI;
- }
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
- else if(idx == WDTS_CHANNEL_H2H_TEST_TX)
- {
- currentChannel->channelType = WDTS_CHANNEL_H2H_TEST_TX;
- }
- else if(idx == WDTS_CHANNEL_H2H_TEST_RX)
- {
- currentChannel->channelType = WDTS_CHANNEL_H2H_TEST_RX;
- }
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-
- /* Config individual channels from channel default setup table */
- status = dxeChannelDefaultConfig(tempDxeCtrlBlk,
- currentChannel);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Open Channel Basic Configuration Fail for channel %d", idx);
- WLANDXE_Close(tempDxeCtrlBlk);
- return NULL;
- }
-
- /* Allocate DXE Control Block will be used by host DXE driver */
- status = dxeCtrlBlkAlloc(tempDxeCtrlBlk, currentChannel);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Open Alloc DXE Control Block Fail for channel %d", idx);
-
- WLANDXE_Close(tempDxeCtrlBlk);
- return NULL;
- }
- status = wpalMutexInit(&currentChannel->dxeChannelLock);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "WLANDXE_Open Lock Init Fail for channel %d", idx);
- WLANDXE_Close(tempDxeCtrlBlk);
- return NULL;
- }
-
- status = wpalTimerInit(&currentChannel->healthMonitorTimer,
- dxeHealthMonitorTimeout,
- (void *)currentChannel);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "WLANDXE_Open Health Monitor timer init fail %d", idx);
- WLANDXE_Close(tempDxeCtrlBlk);
- return NULL;
- }
-
- currentChannel->healthMonitorMsg = (wpt_msg *)wpalMemoryAllocate(sizeof(wpt_msg));
- if(NULL == currentChannel->healthMonitorMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "WLANDXE_Open Health Monitor MSG Alloc fail %d", idx);
- WLANDXE_Close(tempDxeCtrlBlk);
- return NULL;
- }
- wpalMemoryZero(currentChannel->healthMonitorMsg, sizeof(wpt_msg));
- currentChannel->healthMonitorMsg->callback = dxeTXHealthMonitor;
- currentChannel->healthMonitorMsg->pContext = (void *)currentChannel;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "WLANDXE_Open Channel %s Open Success", channelType[idx]);
- }
-
- /* Allocate and Init RX READY ISR Serialize Buffer */
- tempDxeCtrlBlk->rxIsrMsg = (wpt_msg *)wpalMemoryAllocate(sizeof(wpt_msg));
- if(NULL == tempDxeCtrlBlk->rxIsrMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Open Alloc RX ISR Fail");
- WLANDXE_Close(tempDxeCtrlBlk);
- return NULL;
- }
- wpalMemoryZero(tempDxeCtrlBlk->rxIsrMsg, sizeof(wpt_msg));
- tempDxeCtrlBlk->rxIsrMsg->callback = dxeRXEventHandler;
- tempDxeCtrlBlk->rxIsrMsg->pContext = (void *)tempDxeCtrlBlk;
-
- /* Allocate and Init TX COMP ISR Serialize Buffer */
- tempDxeCtrlBlk->txIsrMsg = (wpt_msg *)wpalMemoryAllocate(sizeof(wpt_msg));
- if(NULL == tempDxeCtrlBlk->txIsrMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Open Alloc TX ISR Fail");
- WLANDXE_Close(tempDxeCtrlBlk);
- return NULL;
- }
- wpalMemoryZero(tempDxeCtrlBlk->txIsrMsg, sizeof(wpt_msg));
- tempDxeCtrlBlk->txIsrMsg->callback = dxeTXEventHandler;
- tempDxeCtrlBlk->txIsrMsg->pContext = (void *)tempDxeCtrlBlk;
-
- /* Allocate and Init RX Packet Available Serialize Message Buffer */
- tempDxeCtrlBlk->rxPktAvailMsg = (wpt_msg *)wpalMemoryAllocate(sizeof(wpt_msg));
- if(NULL == tempDxeCtrlBlk->rxPktAvailMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Open Alloc RX Packet Available Message Fail");
- WLANDXE_Close(tempDxeCtrlBlk);
- return NULL;
- }
- wpalMemoryZero(tempDxeCtrlBlk->rxPktAvailMsg, sizeof(wpt_msg));
- tempDxeCtrlBlk->rxPktAvailMsg->callback = dxeRXPacketAvailableEventHandler;
- tempDxeCtrlBlk->rxPktAvailMsg->pContext = (void *)tempDxeCtrlBlk;
-
- tempDxeCtrlBlk->freeRXPacket = NULL;
- tempDxeCtrlBlk->dxeCookie = WLANDXE_CTXT_COOKIE;
- tempDxeCtrlBlk->rxIntDisabledByIMPS = eWLAN_PAL_FALSE;
- tempDxeCtrlBlk->txIntDisabledByIMPS = eWLAN_PAL_FALSE;
- tempDxeCtrlBlk->driverReloadInProcessing = eWLAN_PAL_FALSE;
- tempDxeCtrlBlk->smsmToggled = eWLAN_PAL_FALSE;
-
- /* Initialize SMSM state
- * Init State is
- * Clear TX Enable
- * RING EMPTY STATE */
- smsmInitState = wpalNotifySmsm(WPAL_SMSM_WLAN_TX_ENABLE,
- WPAL_SMSM_WLAN_TX_RINGS_EMPTY);
- if(0 != smsmInitState)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "SMSM Channel init fail %d", smsmInitState);
- for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++)
- {
- dxeChannelClose(tempDxeCtrlBlk, &tempDxeCtrlBlk->dxeChannel[idx]);
- }
- wpalMemoryFree(tempDxeCtrlBlk->rxIsrMsg);
- wpalMemoryFree(tempDxeCtrlBlk->txIsrMsg);
- wpalMemoryFree(tempDxeCtrlBlk);
- return NULL;
- }
-
- wpalTimerInit(&tempDxeCtrlBlk->rxResourceAvailableTimer,
- dxeRXResourceAvailableTimerExpHandler,
- tempDxeCtrlBlk);
-
- wpalTimerInit(&tempDxeCtrlBlk->dxeSSRTimer,
- dxeSSRTimerExpHandler, tempDxeCtrlBlk);
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "WLANDXE_Open Success");
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return (void *)tempDxeCtrlBlk;
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_ClientRegistration
-
- @ Description
- Make callback functions registration into DXE driver from DXE driver client
-
- @ Parameters
- pVoid pDXEContext : DXE module control block
- WDTS_RxFrameReadyCbType rxFrameReadyCB : RX Frame ready CB function pointer
- WDTS_TxCompleteCbType txCompleteCB : TX complete CB function pointer
- WDTS_LowResourceCbType lowResourceCB : Low DXE resource notification CB function pointer
- void *userContext : DXE Cliennt control block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_ClientRegistration
-(
- void *pDXEContext,
- WLANDXE_RxFrameReadyCbType rxFrameReadyCB,
- WLANDXE_TxCompleteCbType txCompleteCB,
- WLANDXE_LowResourceCbType lowResourceCB,
- void *userContext
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_CtrlBlkType *dxeCtxt;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity */
- if(NULL == pDXEContext)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_ClientRegistration Invalid DXE CB");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if(NULL == rxFrameReadyCB)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_ClientRegistration Invalid RX READY CB");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if(NULL == txCompleteCB)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_ClientRegistration Invalid txCompleteCB");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if(NULL == lowResourceCB)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_ClientRegistration Invalid lowResourceCB");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if(NULL == userContext)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_ClientRegistration Invalid userContext");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)pDXEContext;
-
- /* Assign */
- dxeCtxt->rxReadyCB = rxFrameReadyCB;
- dxeCtxt->txCompCB = txCompleteCB;
- dxeCtxt->lowResourceCB = lowResourceCB;
- dxeCtxt->clientCtxt = userContext;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_Start
-
- @ Description
- Start Host DXE driver
- Initialize DXE channels and start channel
-
- @ Parameters
- pVoid pDXEContext : DXE module control block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_Start
-(
- void *pDXEContext
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 idx;
- WLANDXE_CtrlBlkType *dxeCtxt = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity */
- if(NULL == pDXEContext)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start Invalid DXE CB");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
- dxeCtxt = (WLANDXE_CtrlBlkType *)pDXEContext;
-
- /* WLANDXE_Start called means DXE engine already initiates
- * And DXE HW is reset and init finished
- * But here to make sure HW is initialized, reset again */
- status = dxeEngineCoreStart(dxeCtxt);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start DXE HW init Fail");
- return status;
- }
-
- /* Individual Channel Start */
- for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "WLANDXE_Start Channel %s Start", channelType[idx]);
-
- /* Allocate DXE descriptor will be shared by Host driver and DXE engine */
- /* Make connection between DXE descriptor and DXE control block */
- status = dxeDescAllocAndLink(tempDxeCtrlBlk, &dxeCtxt->dxeChannel[idx]);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start Alloc DXE Descriptor Fail for channel %d", idx);
- return status;
- }
-
- /* Program each channel register with configuration arguments */
- status = dxeChannelInitProgram(dxeCtxt,
- &dxeCtxt->dxeChannel[idx]);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start %d Program DMA channel Fail", idx);
- return status;
- }
-
- /* ??? Trigger to start DMA channel
- * This must be seperated from ??? */
- status = dxeChannelStart(dxeCtxt,
- &dxeCtxt->dxeChannel[idx]);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start %d Channel Start Fail", idx);
- return status;
- }
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "WLANDXE_Start Channel %s Start Success", channelType[idx]);
- }
-
- /* Register ISR to OS */
- /* Register TX complete interrupt into platform */
- status = wpalRegisterInterrupt(DXE_INTERRUPT_TX_COMPLE,
- dxeTXISR,
- dxeCtxt);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start TX comp interrupt registration Fail");
- return status;
- }
-
- /* Register RX ready interrupt into platform */
- status = wpalRegisterInterrupt(DXE_INTERRUPT_RX_READY,
- dxeRXISR,
- dxeCtxt);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start RX Ready interrupt registration Fail");
- return status;
- }
-
- /* Enable system level ISR */
- /* Enable RX ready Interrupt at here */
- status = wpalEnableInterrupt(DXE_INTERRUPT_RX_READY);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeTXCompleteEventHandler Enable TX complete interrupt fail");
- return status;
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_TXFrame
-
- @ Description
- Trigger frame transmit from host to RIVA
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
- wpt_packet pPacket : transmit packet structure
- WDTS_ChannelType channel : TX channel
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_TxFrame
-(
- void *pDXEContext,
- wpt_packet *pPacket,
- WDTS_ChannelType channel
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_ChannelCBType *currentChannel = NULL;
- WLANDXE_CtrlBlkType *dxeCtxt = NULL;
- unsigned int *lowThreshold = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity */
- if(NULL == pDXEContext)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start Invalid DXE CB");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if(NULL == pPacket)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start Invalid pPacket");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- if((WDTS_CHANNEL_MAX < channel) || (WDTS_CHANNEL_MAX == channel))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Start Invalid channel");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)pDXEContext;
-
- currentChannel = &dxeCtxt->dxeChannel[channel];
-
-
- status = wpalMutexAcquire(&currentChannel->dxeChannelLock);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_TxFrame Mutex Acquire fail");
- return status;
- }
-
- lowThreshold = currentChannel->channelType == WDTS_CHANNEL_TX_LOW_PRI?
- &(dxeCtxt->txCompInt.txLowResourceThreshold_LoPriCh):
- &(dxeCtxt->txCompInt.txLowResourceThreshold_HiPriCh);
-
- /* Decide have to activate TX complete event or not */
- switch(dxeCtxt->txCompInt.txIntEnable)
- {
- /* TX complete interrupt will be activated when low DXE resource */
- case WLANDXE_TX_COMP_INT_LR_THRESHOLD:
- if((currentChannel->numFreeDesc <= *lowThreshold) &&
- (eWLAN_PAL_FALSE == dxeCtxt->txIntEnable))
- {
- dxeCtxt->txIntEnable = eWLAN_PAL_TRUE;
- dxeCtxt->lowResourceCB(dxeCtxt->clientCtxt,
- channel,
- eWLAN_PAL_FALSE);
- }
- break;
-
- /* TX complete interrupt will be activated n number of frames transferred */
- case WLANDXE_TX_COMP_INT_PER_K_FRAMES:
- if(channel == WDTS_CHANNEL_TX_LOW_PRI)
- {
- currentChannel->numFrameBeforeInt++;
- }
- break;
-
- /* TX complete interrupt will be activated periodically */
- case WLANDXE_TX_COMP_INT_TIMER:
- break;
- }
-
- dxeCtxt->txCompletedFrames++;
-
- /* Update DXE descriptor, this is frame based
- * if a frame consist of N fragments, N Descriptor will be programed */
- status = dxeTXPushFrame(currentChannel, pPacket);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_TxFrame TX Push Frame fail");
- status = wpalMutexRelease(&currentChannel->dxeChannelLock);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_TxFrame Mutex Release fail");
- }
- return status;
- }
-
- /* If specific channel hit low resource condition, send notification to upper layer */
- if(currentChannel->numFreeDesc <= *lowThreshold)
- {
- dxeCtxt->lowResourceCB(dxeCtxt->clientCtxt,
- channel,
- eWLAN_PAL_FALSE);
- currentChannel->hitLowResource = eWLAN_PAL_TRUE;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%11s : Low Resource currentChannel->numRsvdDesc %d",
- channelType[currentChannel->channelType],
- currentChannel->numRsvdDesc);
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
- dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE);
- wpalTimerStart(&currentChannel->healthMonitorTimer,
- T_WLANDXE_PERIODIC_HEALTH_M_TIME);
- }
- status = wpalMutexRelease(&currentChannel->dxeChannelLock);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_TxFrame Mutex Release fail");
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_CompleteTX
-
- @ Description
- Informs DXE that the current series of Tx packets is complete
-
- @ Parameters
- pContext pDXEContext : DXE Control Block
- ucTxResReq TX resource number required by TL/WDI
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status
-WLANDXE_CompleteTX
-(
- void* pContext,
- wpt_uint32 ucTxResReq
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_CtrlBlkType *dxeCtxt = (WLANDXE_CtrlBlkType *)(pContext);
- WLANDXE_ChannelCBType *channelCb = NULL;
- wpt_boolean inLowRes;
-
- /* Sanity Check */
- if( NULL == pContext )
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_CompleteTX invalid param");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI];
- inLowRes = channelCb->hitLowResource;
-
- if(WLANDXE_TX_LOW_RES_THRESHOLD < ucTxResReq)
- {
- /* Raise threshold temporarily if necessary */
- dxeCtxt->txCompInt.txLowResourceThreshold_LoPriCh = ucTxResReq;
-
- if(eWLAN_PAL_FALSE == inLowRes)
- {
- /* Put the channel to low resource condition */
- dxeCtxt->lowResourceCB(dxeCtxt->clientCtxt,
- WDTS_CHANNEL_TX_LOW_PRI,
- eWLAN_PAL_FALSE);
- inLowRes = channelCb->hitLowResource = eWLAN_PAL_TRUE;
- wpalTimerStart(&channelCb->healthMonitorTimer,
- T_WLANDXE_PERIODIC_HEALTH_M_TIME);
- }
- }
-
- /*Try to reclaim resources*/
- dxeTXCompleteProcessing(dxeCtxt);
-
- /* In previous WLANTL_GetFrames call, TL didn't fetch a packet
- because its fragment size is larger than DXE free resource. */
- if(0 < ucTxResReq)
- {
- /* DXE successfully claimed enough free DXE resouces for next fetch. */
- if(WLANDXE_GetFreeTxDataResNumber(dxeCtxt) >= ucTxResReq)
- {
- /* DXE has not been in low resource condition. DXE forces to kick off
- TX tranmit */
- if((eWLAN_PAL_FALSE == inLowRes) &&
- (eWLAN_PAL_FALSE == channelCb->hitLowResource))
- {
- dxeCtxt->lowResourceCB(dxeCtxt->clientCtxt,
- WDTS_CHANNEL_TX_LOW_PRI,
- eWLAN_PAL_FALSE);
- dxeCtxt->lowResourceCB(dxeCtxt->clientCtxt,
- WDTS_CHANNEL_TX_LOW_PRI,
- eWLAN_PAL_TRUE);
- channelCb->hitLowResource = eWLAN_PAL_FALSE;
- }
- }
- else
- {
- /* DXE doesn't have enough free DXE resources. Put the channel
- to low resource condition. */
- if(eWLAN_PAL_FALSE == channelCb->hitLowResource)
- {
- /* Put the channel to low resource condition */
- dxeCtxt->lowResourceCB(dxeCtxt->clientCtxt,
- WDTS_CHANNEL_TX_LOW_PRI,
- eWLAN_PAL_FALSE);
- channelCb->hitLowResource = eWLAN_PAL_TRUE;
- wpalTimerStart(&channelCb->healthMonitorTimer,
- T_WLANDXE_PERIODIC_HEALTH_M_TIME);
- }
- }
- }
-
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_Stop
-
- @ Description
- Stop DXE channels and DXE engine operations
- Disable all channel interrupt
- Stop all channel operation
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_Stop
-(
- void *pDXEContext
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 idx;
- WLANDXE_CtrlBlkType *dxeCtxt = NULL;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity */
- if(NULL == pDXEContext)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Stop Invalid DXE CB");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)pDXEContext;
- for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++)
- {
- if(VOS_TIMER_STATE_RUNNING == wpalTimerGetCurStatus(&dxeCtxt->dxeChannel[idx].healthMonitorTimer))
- {
- wpalTimerStop(&dxeCtxt->dxeChannel[idx].healthMonitorTimer);
- }
-
- status = dxeChannelStop(dxeCtxt, &dxeCtxt->dxeChannel[idx]);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Stop Channel %d Stop Fail", idx);
- }
- }
-
- /* During Stop unregister interrupt */
- wpalUnRegisterInterrupt(DXE_INTERRUPT_TX_COMPLE);
- wpalUnRegisterInterrupt(DXE_INTERRUPT_RX_READY);
-
- if(VOS_TIMER_STATE_STOPPED !=
- wpalTimerGetCurStatus(&dxeCtxt->rxResourceAvailableTimer))
- {
- wpalTimerStop(&dxeCtxt->rxResourceAvailableTimer);
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_Close
-
- @ Description
- Close DXE channels
- Free DXE related resources
- DXE descriptor free
- Descriptor control block free
- Pre allocated RX buffer free
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_Close
-(
- void *pDXEContext
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 idx;
- WLANDXE_CtrlBlkType *dxeCtxt = NULL;
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
- wpt_uint32 sIdx;
- WLANDXE_ChannelCBType *channel = NULL;
- WLANDXE_DescCtrlBlkType *crntDescCB = NULL;
- WLANDXE_DescCtrlBlkType *nextDescCB = NULL;
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Sanity */
- if(NULL == pDXEContext)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_Stop Invalid DXE CB");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)pDXEContext;
- wpalTimerDelete(&dxeCtxt->rxResourceAvailableTimer);
- wpalTimerDelete(&dxeCtxt->dxeSSRTimer);
- for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++)
- {
- wpalMutexDelete(&dxeCtxt->dxeChannel[idx].dxeChannelLock);
- wpalTimerDelete(&dxeCtxt->dxeChannel[idx].healthMonitorTimer);
- if(NULL != dxeCtxt->dxeChannel[idx].healthMonitorMsg)
- {
- wpalMemoryFree(dxeCtxt->dxeChannel[idx].healthMonitorMsg);
- }
- dxeChannelClose(dxeCtxt, &dxeCtxt->dxeChannel[idx]);
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
- channel = &dxeCtxt->dxeChannel[idx];
- crntDescCB = channel->headCtrlBlk;
- for(sIdx = 0; sIdx < channel->numDesc; sIdx++)
- {
- nextDescCB = (WLANDXE_DescCtrlBlkType *)crntDescCB->nextCtrlBlk;
- wpalMemoryFree((void *)crntDescCB);
- crntDescCB = nextDescCB;
- if(NULL == crntDescCB)
- {
- break;
- }
- }
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
- }
-
- if(NULL != dxeCtxt->rxIsrMsg)
- {
- wpalMemoryFree(dxeCtxt->rxIsrMsg);
- }
- if(NULL != dxeCtxt->txIsrMsg)
- {
- wpalMemoryFree(dxeCtxt->txIsrMsg);
- }
- if(NULL != dxeCtxt->rxPktAvailMsg)
- {
- wpalMemoryFree(dxeCtxt->rxPktAvailMsg);
- }
-
- wpalMemoryFree(pDXEContext);
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_TriggerTX
-
- @ Description
- TBD
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_TriggerTX
-(
- void *pDXEContext
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* TBD */
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeTxThreadSetPowerStateEventHandler
-
- @ Description
- If WDI sends set power state req, this event handler will be called in Tx
- thread context
-
- @ Parameters
- void *msgPtr
- Event MSG
-
- @ Return
- None
-===========================================================================*/
-void dxeTxThreadSetPowerStateEventHandler
-(
- wpt_msg *msgPtr
-)
-{
- wpt_msg *msgContent = (wpt_msg *)msgPtr;
- WLANDXE_CtrlBlkType *dxeCtxt;
- wpt_status status = eWLAN_PAL_STATUS_E_FAILURE;
- WLANDXE_PowerStateType reqPowerState;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- dxeCtxt = (WLANDXE_CtrlBlkType *)(msgContent->pContext);
- reqPowerState = (WLANDXE_PowerStateType)msgContent->val;
- dxeCtxt->setPowerStateCb = (WLANDXE_SetPowerStateCbType)msgContent->ptr;
-
- switch(reqPowerState)
- {
- case WLANDXE_POWER_STATE_BMPS:
- if(WLANDXE_RIVA_POWER_STATE_ACTIVE == dxeCtxt->rivaPowerState)
- {
- //don't block MC waiting for num_rsvd to become 0 since it may take a while
- //based on amount of TX and RX activity - during this time any received
- // management frames will remain un-processed consuming RX buffers
- dxeCtxt->rivaPowerState = WLANDXE_RIVA_POWER_STATE_BMPS_UNKNOWN;
- dxeCtxt->hostPowerState = reqPowerState;
- }
- else
- {
- status = eWLAN_PAL_STATUS_E_INVAL;
- }
- break;
- case WLANDXE_POWER_STATE_IMPS:
- if(WLANDXE_RIVA_POWER_STATE_ACTIVE == dxeCtxt->rivaPowerState)
- {
- dxeCtxt->rivaPowerState = WLANDXE_RIVA_POWER_STATE_IMPS_UNKNOWN;
- }
- else
- {
- status = eWLAN_PAL_STATUS_E_INVAL;
- }
- break;
- case WLANDXE_POWER_STATE_FULL:
- if(WLANDXE_RIVA_POWER_STATE_BMPS_UNKNOWN == dxeCtxt->rivaPowerState)
- {
- dxeCtxt->rivaPowerState = WLANDXE_RIVA_POWER_STATE_ACTIVE;
- }
- dxeCtxt->hostPowerState = reqPowerState;
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
- break;
- case WLANDXE_POWER_STATE_DOWN:
- WLANDXE_Stop((void *)dxeCtxt);
- break;
- default:
- //assert
- break;
- }
-
- if(WLANDXE_POWER_STATE_BMPS_PENDING != dxeCtxt->hostPowerState)
- {
- dxeCtxt->setPowerStateCb(status,
- dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].descBottomLocPhyAddr);
- }
- else
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "%s State of DXE is WLANDXE_POWER_STATE_BMPS_PENDING, so cannot proceed", __func__);
- }
- /* Free MSG buffer */
- wpalMemoryFree(msgPtr);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
- return;
-}
-
-
-/*==========================================================================
- @ Function Name
- dxeRxThreadSetPowerStateEventHandler
-
- @ Description
- If WDI sends set power state req, this event handler will be called in Rx
- thread context
-
- @ Parameters
- void *msgPtr
- Event MSG
-
- @ Return
- None
-===========================================================================*/
-void dxeRxThreadSetPowerStateEventHandler
-(
- wpt_msg *msgPtr
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- /* Now serialise the message through Tx thread also to make sure
- * no register access when RIVA is in powersave */
- /*Use the same message pointer just change the call back function */
- msgPtr->callback = dxeTxThreadSetPowerStateEventHandler;
- status = wpalPostTxMsg(WDI_GET_PAL_CTX(),
- msgPtr);
- if ( eWLAN_PAL_STATUS_SUCCESS != status )
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "Tx thread Set power state req serialize fail status=%d",
- status);
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_SetPowerState
-
- @ Description
- From Client let DXE knows what is the WLAN HW(RIVA) power state
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
- WLANDXE_PowerStateType powerState
-
- @ Return
- wpt_status
-===========================================================================*/
-wpt_status WLANDXE_SetPowerState
-(
- void *pDXEContext,
- WDTS_PowerStateType powerState,
- WDTS_SetPSCbType cBack
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- WLANDXE_CtrlBlkType *pDxeCtrlBlk;
- WLANDXE_PowerStateType hostPowerState;
- wpt_msg *rxCompMsg;
- wpt_msg *txDescReSyncMsg;
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
- if(NULL == pDXEContext)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "NULL pDXEContext passed by caller");
- return eWLAN_PAL_STATUS_E_FAILURE;
- }
- pDxeCtrlBlk = (WLANDXE_CtrlBlkType *)pDXEContext;
-
- switch(powerState)
- {
- case WDTS_POWER_STATE_FULL:
- if(WLANDXE_POWER_STATE_IMPS == pDxeCtrlBlk->hostPowerState)
- {
- txDescReSyncMsg = (wpt_msg *)wpalMemoryAllocate(sizeof(wpt_msg));
- if(NULL == txDescReSyncMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_SetPowerState, TX Resync MSG MEM alloc Fail");
- }
- else
- {
- txDescReSyncMsg->callback = dxeTXReSyncDesc;
- txDescReSyncMsg->pContext = pDxeCtrlBlk;
- status = wpalPostTxMsg(WDI_GET_PAL_CTX(),
- txDescReSyncMsg);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_SetPowerState, Post TX re-sync MSG fail");
- }
- }
- }
- hostPowerState = WLANDXE_POWER_STATE_FULL;
- break;
- case WDTS_POWER_STATE_BMPS:
- pDxeCtrlBlk->hostPowerState = WLANDXE_POWER_STATE_BMPS;
- hostPowerState = WLANDXE_POWER_STATE_BMPS;
- break;
- case WDTS_POWER_STATE_IMPS:
- pDxeCtrlBlk->hostPowerState = WLANDXE_POWER_STATE_IMPS;
- hostPowerState = WLANDXE_POWER_STATE_IMPS;
- break;
- case WDTS_POWER_STATE_DOWN:
- pDxeCtrlBlk->hostPowerState = WLANDXE_POWER_STATE_DOWN;
- hostPowerState = WLANDXE_POWER_STATE_DOWN;
- break;
- default:
- hostPowerState = WLANDXE_POWER_STATE_MAX;
- }
-
- // A callback i.e. ACK back is needed only when we want to enable BMPS
- // and the data/management path is active because we want to ensure
- // DXE registers are not accessed when RIVA may be power-collapsed. So
- // we need a callback in enter_bmps_req (the request to RIVA is sent
- // only after ACK back from TX thread). A callback is not needed in
- // finish_scan_req during BMPS since data-path is resumed only in
- // finish_scan_rsp and no management frames are sent in between. No
- // callback is needed when going from BMPS enabled to BMPS suspended/
- // disabled when it is known that RIVA is awake and cannot enter power
- // collapse autonomously so no callback is needed in exit_bmps_rsp or
- // init_scan_rsp
- if ( cBack )
- {
- //serialize through Rx thread
- rxCompMsg = (wpt_msg *)wpalMemoryAllocate(sizeof(wpt_msg));
- if(NULL == rxCompMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_SetPowerState, MSG MEM alloc Fail");
- return eWLAN_PAL_STATUS_E_RESOURCES;
- }
-
- /* Event type, where it must be defined???? */
- /* THIS MUST BE CLEARED ASAP
- txCompMsg->type = TX_COMPLETE; */
- rxCompMsg->callback = dxeRxThreadSetPowerStateEventHandler;
- rxCompMsg->pContext = pDxeCtrlBlk;
- rxCompMsg->val = hostPowerState;
- rxCompMsg->ptr = cBack;
- status = wpalPostRxMsg(WDI_GET_PAL_CTX(),
- rxCompMsg);
- if ( eWLAN_PAL_STATUS_SUCCESS != status )
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "Rx thread Set power state req serialize fail status=%d",
- status);
- }
- }
- else
- {
- if ( WLANDXE_POWER_STATE_FULL == hostPowerState )
- {
- if( WLANDXE_POWER_STATE_BMPS == pDxeCtrlBlk->hostPowerState )
- {
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
- }
- else if( WLANDXE_POWER_STATE_IMPS == pDxeCtrlBlk->hostPowerState )
- {
- /* Requested Full power from exit IMPS, reenable the interrupts*/
- if(eWLAN_PAL_TRUE == pDxeCtrlBlk->rxIntDisabledByIMPS)
- {
- pDxeCtrlBlk->rxIntDisabledByIMPS = eWLAN_PAL_FALSE;
- /* Enable RX interrupt at here, if new PS is not IMPS */
- status = wpalEnableInterrupt(DXE_INTERRUPT_RX_READY);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "%s Enable RX ready interrupt fail", __func__);
- return status;
- }
- }
- if(eWLAN_PAL_TRUE == pDxeCtrlBlk->txIntDisabledByIMPS)
- {
- pDxeCtrlBlk->txIntDisabledByIMPS = eWLAN_PAL_FALSE;
- pDxeCtrlBlk->txIntEnable = eWLAN_PAL_TRUE;
- /* Enable RX interrupt at here, if new PS is not IMPS */
- status = wpalEnableInterrupt(DXE_INTERRUPT_TX_COMPLE);
- if(eWLAN_PAL_STATUS_SUCCESS != status)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "%s Enable TX comp interrupt fail", __func__);
- return status;
- }
- }
- }
- pDxeCtrlBlk->hostPowerState = hostPowerState;
- pDxeCtrlBlk->rivaPowerState = WLANDXE_RIVA_POWER_STATE_ACTIVE;
- }
- else if ( hostPowerState == WLANDXE_POWER_STATE_BMPS )
- {
- pDxeCtrlBlk->hostPowerState = hostPowerState;
- pDxeCtrlBlk->rivaPowerState = WLANDXE_RIVA_POWER_STATE_BMPS_UNKNOWN;
- }
- else
- {
- HDXE_ASSERT(0);
- }
- }
-
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Exit", __func__);
-
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_GetFreeTxDataResNumber
-
- @ Description
- Returns free descriptor numbers for TX data channel (TX high priority)
-
- @ Parameters
- pVoid pDXEContext : DXE Control Block
-
- @ Return
- wpt_uint32 Free descriptor number of TX high pri ch
-===========================================================================*/
-wpt_uint32 WLANDXE_GetFreeTxDataResNumber
-(
- void *pDXEContext
-)
-{
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
- "%s Enter", __func__);
-
- if(NULL == pDXEContext)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "NULL parameter passed by caller");
- return (0);
- }
-
- return
- ((WLANDXE_CtrlBlkType *)pDXEContext)->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].numFreeDesc;
-}
-
-/*==========================================================================
- @ Function Name
- WLANDXE_ChannelDebug
-
- @ Description
- Display DXE Channel debugging information
- User may request to display DXE channel snapshot
- Or if host driver detects any abnormal stcuk may display
-
- @ Parameters
- displaySnapshot : Display DXE snapshot option
- enableStallDetect : Enable stall detect feature
- This feature will take effect to data performance
- Not integrate till fully verification
-
- @ Return
- NONE
-
-===========================================================================*/
-void WLANDXE_ChannelDebug
-(
- wpt_boolean displaySnapshot,
- wpt_boolean enableStallDetect
-)
-{
- wpt_msg *channelDebugMsg;
- wpt_uint32 regValue;
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-
- /* Debug Type 1, Display current snapshot */
- if(displaySnapshot)
- {
- /* Whatever RIVA power condition try to wakeup RIVA through SMSM
- * This will not simply wakeup RIVA
- * Just incase TX not wanted stuck, Trigger TX again */
- dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE);
- dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE);
- /* Get free BD count */
- wpalSleep(10);
- wpalReadRegister(WLANDXE_BMU_AVAILABLE_BD_PDU, &regValue);
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "===== DXE Dump Start HPS %d, FWS %d, TX PFC %d, ABD %d =====",
- tempDxeCtrlBlk->hostPowerState, tempDxeCtrlBlk->rivaPowerState,
- tempDxeCtrlBlk->txCompletedFrames, regValue);
-
- wpalPacketStallUpdateInfo((wpt_uint32 *)&tempDxeCtrlBlk->rivaPowerState,
- &regValue,
- NULL,
- 0);
-
- channelDebugMsg = (wpt_msg *)wpalMemoryAllocate(sizeof(wpt_msg));
- if(NULL == channelDebugMsg)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "WLANDXE_ChannelDebug, MSG MEM alloc Fail");
- return ;
- }
-
- channelDebugMsg->callback = dxeRxThreadChannelDebugHandler;
- status = wpalPostRxMsg(WDI_GET_PAL_CTX(), channelDebugMsg);
- if ( eWLAN_PAL_STATUS_SUCCESS != status )
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "Tx thread Set power state req serialize fail status=%d",
- status);
- }
- }
-
- /* Debug Type 2, toggling stall detect enable/disable */
- if(enableStallDetect)
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
- "DXE TX Stall detect");
- /* Start Stall detect timer and detect stall */
- wpalTimerStart(&tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].healthMonitorTimer,
- T_WLANDXE_PERIODIC_HEALTH_M_TIME);
- }
- return;
-}
diff --git a/CORE/DXE/src/wlan_qct_dxe_cfg_i.c b/CORE/DXE/src/wlan_qct_dxe_cfg_i.c
deleted file mode 100644
index e9c2200849da..000000000000
--- a/CORE/DXE/src/wlan_qct_dxe_cfg_i.c
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**=========================================================================
-
- @file wlan_qct_dxe_cfg_i.c
-
- @brief
-
- This file contains the external API exposed by the wlan data transfer abstraction layer module.
-========================================================================*/
-
-/*===========================================================================
-
- EDIT HISTORY FOR FILE
-
-
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
-
-
- $Header:$ $DateTime: $ $Author: $
-
-
-when who what, where, why
--------- --- ----------------------------------------------------------
-08/03/10 schang Created module.
-
-===========================================================================*/
-
-/*===========================================================================
-
- INCLUDE FILES FOR MODULE
-
-===========================================================================*/
-
-/*----------------------------------------------------------------------------
- * Include Files
- * -------------------------------------------------------------------------*/
-#include "wlan_qct_dxe_i.h"
-
-/*----------------------------------------------------------------------------
- * Preprocessor Definitions and Constants
- * -------------------------------------------------------------------------*/
-typedef struct
-{
- WDTS_ChannelType wlanChannel;
- WLANDXE_DMAChannelType DMAChannel;
- WLANDXE_ChannelConfigType *channelConfig;
-} WLANDXE_ChannelMappingType;
-
-wpt_uint32 channelBaseAddressList[WLANDXE_DMA_CHANNEL_MAX] =
-{
- WLANDXE_DMA_CHAN0_BASE_ADDRESS,
- WLANDXE_DMA_CHAN1_BASE_ADDRESS,
- WLANDXE_DMA_CHAN2_BASE_ADDRESS,
- WLANDXE_DMA_CHAN3_BASE_ADDRESS,
- WLANDXE_DMA_CHAN4_BASE_ADDRESS,
- WLANDXE_DMA_CHAN5_BASE_ADDRESS,
- WLANDXE_DMA_CHAN6_BASE_ADDRESS
-};
-
-wpt_uint32 channelInterruptMask[WLANDXE_DMA_CHANNEL_MAX] =
-{
- WLANDXE_INT_MASK_CHAN_0,
- WLANDXE_INT_MASK_CHAN_1,
- WLANDXE_INT_MASK_CHAN_2,
- WLANDXE_INT_MASK_CHAN_3,
- WLANDXE_INT_MASK_CHAN_4,
- WLANDXE_INT_MASK_CHAN_5,
- WLANDXE_INT_MASK_CHAN_6
-};
-
-WLANDXE_ChannelConfigType chanTXLowPriConfig =
-{
- /* Q handle type, Circular */
- WLANDXE_CHANNEL_HANDLE_CIRCULA,
-
- /* Number of Descriptor, NOT CLEAR YET !!! */
- WLANDXE_LO_PRI_RES_NUM ,
-
- /* MAX num RX Buffer */
- 0,
-
- /* Reference WQ, TX23 */
- 23,
-
- /* USB Only, End point info */
- 0,
-
- /* Transfer Type */
- WLANDXE_DESC_CTRL_XTYPE_H2B,
-
- /* Channel Priority 7(Highest) - 0(Lowest) NOT CLEAR YET !!! */
- 4,
-
- /* BD attached to frames for this pipe */
- eWLAN_PAL_TRUE,
-
- /* chk_size, NOT CLEAR YET !!!*/
- 0,
-
- /* bmuThdSel, NOT CLEAR YET !!! */
- 5,
-
- /* Added in Gen5 for Prefetch, NOT CLEAR YET !!! */
- eWLAN_PAL_TRUE,
-
- /* Use short Descriptor */
- eWLAN_PAL_TRUE
-};
-
-WLANDXE_ChannelConfigType chanTXHighPriConfig =
-{
- /* Q handle type, Circular */
- WLANDXE_CHANNEL_HANDLE_CIRCULA,
-
- /* Number of Descriptor, NOT CLEAR YET !!! */
- WLANDXE_HI_PRI_RES_NUM ,
-
- /* MAX num RX Buffer */
- 0,
-
- /* Reference WQ, TX23 */
- 23,
-
- /* USB Only, End point info */
- 0,
-
- /* Transfer Type */
- WLANDXE_DESC_CTRL_XTYPE_H2B,
-
- /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
- 6,
-
- /* BD attached to frames for this pipe */
- eWLAN_PAL_TRUE,
-
- /* chk_size, NOT CLEAR YET !!!*/
- 0,
-
- /* bmuThdSel, NOT CLEAR YET !!! */
- 7,
-
- /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
- eWLAN_PAL_TRUE,
-
- /* Use short Descriptor */
- eWLAN_PAL_TRUE
-};
-
-WLANDXE_ChannelConfigType chanRXLowPriConfig =
-{
- /* Q handle type, Circular */
- WLANDXE_CHANNEL_HANDLE_CIRCULA,
-
- /* Number of Descriptor, NOT CLEAR YET !!! */
- 256,
-
- /* MAX num RX Buffer, NOT CLEAR YET !!! */
- 1,
-
- /* Reference WQ, NOT CLEAR YET !!! */
- /* Temporary BMU Work Q 4 */
- 11,
-
- /* USB Only, End point info */
- 0,
-
- /* Transfer Type */
- WLANDXE_DESC_CTRL_XTYPE_B2H,
-
- /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
- 5,
-
- /* BD attached to frames for this pipe */
- eWLAN_PAL_TRUE,
-
- /* chk_size, NOT CLEAR YET !!!*/
- 0,
-
- /* bmuThdSel, NOT CLEAR YET !!! */
- 6,
-
- /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
- eWLAN_PAL_TRUE,
-
- /* Use short Descriptor */
- eWLAN_PAL_TRUE
-};
-
-WLANDXE_ChannelConfigType chanRXHighPriConfig =
-{
- /* Q handle type, Circular */
- WLANDXE_CHANNEL_HANDLE_CIRCULA,
-
- /* Number of Descriptor, NOT CLEAR YET !!! */
- 256,
-
- /* MAX num RX Buffer, NOT CLEAR YET !!! */
- 1,
-
- /* Reference WQ, RX11 */
- 4,
-
- /* USB Only, End point info */
- 0,
-
- /* Transfer Type */
- WLANDXE_DESC_CTRL_XTYPE_B2H,
-
- /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
- 6,
-
- /* BD attached to frames for this pipe */
- eWLAN_PAL_TRUE,
-
- /* chk_size, NOT CLEAR YET !!!*/
- 0,
-
- /* bmuThdSel, NOT CLEAR YET !!! */
- 8,
-
- /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
- eWLAN_PAL_TRUE,
-
- /* Use short Descriptor */
- eWLAN_PAL_TRUE
-};
-
-#ifdef WLANDXE_TEST_CHANNEL_ENABLE
-WLANDXE_ChannelConfigType chanH2HTestConfig =
-{
- /* Q handle type, Circular */
- WLANDXE_CHANNEL_HANDLE_CIRCULA,
-
- /* Number of Descriptor, NOT CLEAR YET !!! */
- 5,
-
- /* MAX num RX Buffer, NOT CLEAR YET !!! */
- 0,
-
- /* Reference WQ, NOT CLEAR YET !!! */
- /* Temporary BMU Work Q 5 */
- 5,
-
- /* USB Only, End point info */
- 0,
-
- /* Transfer Type */
- WLANDXE_DESC_CTRL_XTYPE_H2H,
-
- /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
- 5,
-
- /* BD attached to frames for this pipe */
- eWLAN_PAL_FALSE,
-
- /* chk_size, NOT CLEAR YET !!!*/
- 0,
-
- /* bmuThdSel, NOT CLEAR YET !!! */
- 0,
-
- /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
- eWLAN_PAL_TRUE,
-
- /* Use short Descriptor */
- eWLAN_PAL_TRUE
-};
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-
-WLANDXE_ChannelMappingType channelList[WDTS_CHANNEL_MAX] =
-{
- {WDTS_CHANNEL_TX_LOW_PRI, WLANDXE_DMA_CHANNEL_0, &chanTXLowPriConfig},
- {WDTS_CHANNEL_TX_HIGH_PRI, WLANDXE_DMA_CHANNEL_4, &chanTXHighPriConfig},
- {WDTS_CHANNEL_RX_LOW_PRI, WLANDXE_DMA_CHANNEL_1, &chanRXLowPriConfig},
-#ifndef WLANDXE_TEST_CHANNEL_ENABLE
- {WDTS_CHANNEL_RX_HIGH_PRI, WLANDXE_DMA_CHANNEL_3, &chanRXHighPriConfig},
-#else
- {WDTS_CHANNEL_H2H_TEST_TX, WLANDXE_DMA_CHANNEL_2, &chanH2HTestConfig},
- {WDTS_CHANNEL_H2H_TEST_RX, WLANDXE_DMA_CHANNEL_2, &chanH2HTestConfig}
-#endif /* WLANDXE_TEST_CHANNEL_ENABLE */
-};
-
-WLANDXE_TxCompIntConfigType txCompInt =
-{
- /* TX Complete Interrupt enable method */
- WLANDXE_TX_COMP_INT_PER_K_FRAMES,
-
- /* TX Low Resource remaining resource threshold for Low Pri Ch */
- WLANDXE_TX_LOW_RES_THRESHOLD,
-
- /* TX Low Resource remaining resource threshold for High Pri Ch */
- WLANDXE_TX_LOW_RES_THRESHOLD,
-
- /* RX Low Resource remaining resource threshold */
- 5,
-
- /* Per K frame enable Interrupt */
- /*WLANDXE_HI_PRI_RES_NUM*/ 5,
-
- /* Periodic timer msec */
- 10
-};
-
-/*==========================================================================
- @ Function Name
- dxeCommonDefaultConfig
-
- @ Description
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-wpt_status dxeCommonDefaultConfig
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
-
- dxeCtrlBlk->rxReadyCB = NULL;
- dxeCtrlBlk->txCompCB = NULL;
- dxeCtrlBlk->lowResourceCB = NULL;
-
- wpalMemoryCopy(&dxeCtrlBlk->txCompInt,
- &txCompInt,
- sizeof(WLANDXE_TxCompIntConfigType));
-
- return status;
-}
-
-/*==========================================================================
- @ Function Name
- dxeChannelDefaultConfig
-
- @ Description
- Get defualt configuration values from pre defined structure
- All the channels must have it's own configurations
-
- @ Parameters
- WLANDXE_CtrlBlkType: *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-wpt_status dxeChannelDefaultConfig
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- WLANDXE_ChannelCBType *channelEntry
-)
-{
- wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
- wpt_uint32 baseAddress;
- wpt_uint32 dxeControlRead = 0;
- wpt_uint32 dxeControlWrite = 0;
- wpt_uint32 dxeControlWriteValid = 0;
- wpt_uint32 dxeControlWriteEop = 0;
- wpt_uint32 dxeControlWriteEopInt = 0;
- wpt_uint32 idx;
- wpt_uint32 rxResourceCount = 0;
- WLANDXE_ChannelMappingType *mappedChannel = NULL;
-
- /* Sanity Check */
- if((NULL == dxeCtrlBlk) || (NULL == channelEntry))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "dxeLinkDescAndCtrlBlk Channel Entry is not valid");
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++)
- {
- if(channelEntry->channelType == channelList[idx].wlanChannel)
- {
- mappedChannel = &channelList[idx];
- break;
- }
- }
-
- if((NULL == mappedChannel) || (WDTS_CHANNEL_MAX == idx))
- {
- HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
- "%s Failed to map channel", __func__);
- return eWLAN_PAL_STATUS_E_INVAL;
- }
-
- wpalMemoryCopy(&channelEntry->channelConfig,
- mappedChannel->channelConfig,
- sizeof(WLANDXE_ChannelConfigType));
-
- baseAddress = channelBaseAddressList[mappedChannel->DMAChannel];
- channelEntry->channelRegister.chDXEBaseAddr = baseAddress;
- channelEntry->channelRegister.chDXEStatusRegAddr = baseAddress + WLANDXE_DMA_CH_STATUS_REG;
- channelEntry->channelRegister.chDXEDesclRegAddr = baseAddress + WLANDXE_DMA_CH_DESCL_REG;
- channelEntry->channelRegister.chDXEDeschRegAddr = baseAddress + WLANDXE_DMA_CH_DESCH_REG;
- channelEntry->channelRegister.chDXELstDesclRegAddr = baseAddress + WLANDXE_DMA_CH_LST_DESCL_REG;
- channelEntry->channelRegister.chDXECtrlRegAddr = baseAddress + WLANDXE_DMA_CH_CTRL_REG;
- channelEntry->channelRegister.chDXESzRegAddr = baseAddress + WLANDXE_DMA_CH_SZ_REG;
- channelEntry->channelRegister.chDXEDadrlRegAddr = baseAddress + WLANDXE_DMA_CH_DADRL_REG;
- channelEntry->channelRegister.chDXEDadrhRegAddr = baseAddress + WLANDXE_DMA_CH_DADRH_REG;
- channelEntry->channelRegister.chDXESadrlRegAddr = baseAddress + WLANDXE_DMA_CH_SADRL_REG;
- channelEntry->channelRegister.chDXESadrhRegAddr = baseAddress + WLANDXE_DMA_CH_SADRH_REG;
-
- /* Channel Mask?
- * This value will control channel control register.
- * This register will be set to trigger actual DMA transfer activate
- * CH_N_CTRL */
- channelEntry->extraConfig.chan_mask = 0;
- /* Check VAL bit before processing descriptor */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EDVEN_MASK;
- /* Use External Descriptor Linked List */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EDEN_MASK;
- /* Enable Channel Interrupt on error */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_INE_ERR_MASK;
- /* Enable INT after XFER done */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_INE_DONE_MASK;
- /* Enable INT External Descriptor */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_INE_ED_MASK;
- /* Set Channel This is not channel, event counter, somthing wrong */
- channelEntry->extraConfig.chan_mask |=
- mappedChannel->DMAChannel << WLANDXE_CH_CTRL_CTR_SEL_OFFSET;
- /* Transfer Type */
- channelEntry->extraConfig.chan_mask |= mappedChannel->channelConfig->xfrType;
- /* Use Short Descriptor, THIS LOOKS SOME WIERD, REVISIT */
- if(!channelEntry->channelConfig.useShortDescFmt)
- {
- channelEntry->extraConfig.chan_mask |= WLANDXE_DESC_CTRL_DFMT;
- }
- /* TX Channel, Set DIQ bit, Clear SIQ bit since source is not WQ */
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_DIQ_MASK;
- }
- /* RX Channel, Set SIQ bit, Clear DIQ bit since source is not WQ */
- else if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
- {
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_SIQ_MASK;
- }
- else
- {
- /* This is test H2H channel, TX, RX not use work Q
- * Do Nothing */
- }
- /* Frame Contents Swap */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_SWAP_MASK;
- /* Host System Using Little Endian */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_ENDIAN_MASK;
- /* BMU Threshold select */
- channelEntry->extraConfig.chan_mask |=
- channelEntry->channelConfig.bmuThdSel << WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET;
- /* EOP for control register ??? */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EOP_MASK;
- /* Channel Priority */
- channelEntry->extraConfig.chan_mask |= channelEntry->channelConfig.chPriority << WLANDXE_CH_CTRL_PRIO_OFFSET;
- /* PDU REL */
- channelEntry->extraConfig.chan_mask |= WLANDXE_DESC_CTRL_PDU_REL;
- /* Disable DMA transfer on this channel */
- channelEntry->extraConfig.chan_mask_read_disable = channelEntry->extraConfig.chan_mask;
- /* Enable DMA transfer on this channel */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EN_MASK;
- /* Channel Mask done */
-
- /* Control Read
- * Default Descriptor control Word value for RX ready DXE descriptor
- * DXE engine will reference this value before DMA transfer */
- dxeControlRead = 0;
- /* Source is a Queue ID, not flat memory address */
- dxeControlRead |= WLANDXE_DESC_CTRL_SIQ;
- /* Transfer direction is BMU 2 Host */
- dxeControlRead |= WLANDXE_DESC_CTRL_XTYPE_B2H;
- /* End of Packet, RX is single fragment */
- dxeControlRead |= WLANDXE_DESC_CTRL_EOP;
- /* BD Present, default YES, B2H case it must be 0 to insert BD */
- if(!channelEntry->channelConfig.bdPresent)
- {
- dxeControlRead |= WLANDXE_DESC_CTRL_BDH;
- }
- /* Channel Priority */
- dxeControlRead |= channelEntry->channelConfig.chPriority << WLANDXE_CH_CTRL_PRIO_OFFSET;
- /* BMU Threshold select, only used H2B, not this case??? */
- dxeControlRead |= channelEntry->channelConfig.bmuThdSel << WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET;
- /* PDU Release, Release BD/PDU when DMA done */
- dxeControlRead |= WLANDXE_DESC_CTRL_PDU_REL;
- /* Use Short Descriptor, THIS LOOKS SOME WIERD, REVISIT */
- if(!channelEntry->channelConfig.useShortDescFmt)
- {
- dxeControlRead |= WLANDXE_DESC_CTRL_DFMT;
- }
- /* Interrupt on Descriptor done */
- dxeControlRead |= WLANDXE_DESC_CTRL_INT;
- /* For ready status, this Control WORD must be VALID */
- dxeControlRead |= WLANDXE_DESC_CTRL_VALID;
- /* Frame Contents Swap */
- dxeControlRead |= WLANDXE_DESC_CTRL_BDT_SWAP;
- /* Host Little Endian */
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- dxeControlRead |= WLANDXE_DESC_CTRL_ENDIANNESS;
- }
-
- /* SWAP if needed */
- channelEntry->extraConfig.cw_ctrl_read = WLANDXE_U32_SWAP_ENDIAN(dxeControlRead);
- /* Control Read Done */
-
- /* Control Write
- * Write into DXE descriptor control word to TX frame
- * DXE engine will reference this word to contorl TX DMA channel */
- channelEntry->extraConfig.cw_ctrl_write = 0;
- /* Transfer type, from Host 2 BMU */
- dxeControlWrite |= mappedChannel->channelConfig->xfrType;
- /* BD Present, this looks some weird ??? */
- if(!channelEntry->channelConfig.bdPresent)
- {
- dxeControlWrite |= WLANDXE_DESC_CTRL_BDH;
- }
- /* Channel Priority */
- dxeControlWrite |= channelEntry->channelConfig.chPriority << WLANDXE_CH_CTRL_PRIO_OFFSET;
- /* Use Short Descriptor, THIS LOOKS SOME WIERD, REVISIT */
- if(!channelEntry->channelConfig.useShortDescFmt)
- {
- dxeControlWrite |= WLANDXE_DESC_CTRL_DFMT;
- }
- /* BMU Threshold select, only used H2B, not this case??? */
- dxeControlWrite |= channelEntry->channelConfig.bmuThdSel << WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET;
- /* Destination is WQ */
- dxeControlWrite |= WLANDXE_DESC_CTRL_DIQ;
- /* Frame Contents Swap */
- dxeControlWrite |= WLANDXE_DESC_CTRL_BDT_SWAP;
- /* Host Little Endian */
- dxeControlWrite |= WLANDXE_DESC_CTRL_ENDIANNESS;
- /* Interrupt Enable */
- dxeControlWrite |= WLANDXE_DESC_CTRL_INT;
-
- dxeControlWriteValid = dxeControlWrite | WLANDXE_DESC_CTRL_VALID;
- dxeControlWriteEop = dxeControlWriteValid | WLANDXE_DESC_CTRL_EOP;
- dxeControlWriteEopInt = dxeControlWriteEop | WLANDXE_DESC_CTRL_INT;
-
- /* DXE Descriptor must has Endian swapped value */
- channelEntry->extraConfig.cw_ctrl_write = WLANDXE_U32_SWAP_ENDIAN(dxeControlWrite);
- /* Control Write DONE */
-
- /* Control Write include VAL bit
- * This Control word used to set valid bit and
- * trigger DMA transfer for specific descriptor */
- channelEntry->extraConfig.cw_ctrl_write_valid =
- WLANDXE_U32_SWAP_ENDIAN(dxeControlWriteValid);
-
- /* Control Write include EOP
- * End of Packet */
- channelEntry->extraConfig.cw_ctrl_write_eop =
- WLANDXE_U32_SWAP_ENDIAN(dxeControlWriteEop);
-
- /* Control Write include EOP and INT
- * indicate End Of Packet and generate interrupt on descriptor Done */
- channelEntry->extraConfig.cw_ctrl_write_eop_int =
- WLANDXE_U32_SWAP_ENDIAN(dxeControlWriteEopInt);
-
-
- /* size mask???? */
- channelEntry->extraConfig.chk_size_mask =
- mappedChannel->channelConfig->chk_size << 10;
-
- channelEntry->extraConfig.refWQ_swapped =
- WLANDXE_U32_SWAP_ENDIAN(channelEntry->channelConfig.refWQ);
-
- /* Set Channel specific Interrupt mask */
- channelEntry->extraConfig.intMask = channelInterruptMask[mappedChannel->DMAChannel];
-
-
- wpalGetNumRxRawPacket(&rxResourceCount);
- if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (0 == rxResourceCount))
- {
- channelEntry->numDesc = mappedChannel->channelConfig->nDescs;
- }
- else
- {
- channelEntry->numDesc = rxResourceCount / 4;
- }
- channelEntry->assignedDMAChannel = mappedChannel->DMAChannel;
- channelEntry->numFreeDesc = 0;
- channelEntry->numRsvdDesc = 0;
- channelEntry->numFragmentCurrentChain = 0;
- channelEntry->numTotalFrame = 0;
- channelEntry->hitLowResource = eWLAN_PAL_FALSE;
-
- return status;
-}
diff --git a/CORE/DXE/src/wlan_qct_dxe_i.h b/CORE/DXE/src/wlan_qct_dxe_i.h
deleted file mode 100644
index 1905e3855fac..000000000000
--- a/CORE/DXE/src/wlan_qct_dxe_i.h
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
- * Copyright (c) 2014 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-#ifndef WLAN_QCT_DXE_I_H
-#define WLAN_QCT_DXE_I_H
-
-/**=========================================================================
-
- @file wlan_qct_dxe_i.h
-
- @brief
-
- This file contains the external API exposed by the wlan data transfer abstraction layer module.
-========================================================================*/
-
-/*===========================================================================
-
- EDIT HISTORY FOR FILE
-
-
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
-
-
- $Header:$ $DateTime: $ $Author: $
-
-
-when who what, where, why
--------- --- ----------------------------------------------------------
-08/03/10 schang Created module.
-
-===========================================================================*/
-
-/*===========================================================================
-
- INCLUDE FILES FOR MODULE
-
-===========================================================================*/
-
-/*----------------------------------------------------------------------------
- * Include Files
- * -------------------------------------------------------------------------*/
-#include "wlan_qct_dxe.h"
-#include "wlan_qct_pal_trace.h"
-#include "wlan_qct_pal_timer.h"
-#include "vos_trace.h"
-/*----------------------------------------------------------------------------
- * Preprocessor Definitions and Constants
- * -------------------------------------------------------------------------*/
-#define WLANDXE_CTXT_COOKIE 0xC00CC111
-
-
-/* From here WCNSS DXE register information
- * This is temporary definition location to make compile and unit test
- * If official msmreg.h integrated, this part will be eliminated */
-/* Start with base address */
-
-#ifdef WCN_PRONTO
-#define WLANDXE_CCU_DXE_INT_SELECT 0xfb2050dc
-#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0xfb2050e0
-#define WLANDXE_CCU_ASIC_INT_ENABLE 0xfb2050e4
-#define WLANDXE_CCU_SOFT_RESET 0xfb204010
-#else
-#define WLANDXE_CCU_DXE_INT_SELECT 0x03200b10
-#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0x03200b14
-#define WLANDXE_CCU_ASIC_INT_ENABLE 0x03200b18
-#endif
-
-#ifdef PAL_OS_TYPE_BMP
-#define WLANDXE_WCNSS_BASE_ADDRESS 0xCDD00000
-#else
-#ifdef WCN_PRONTO
-#define WLANDXE_WCNSS_BASE_ADDRESS 0xfb000000
-#else
-#define WLANDXE_WCNSS_BASE_ADDRESS 0x03000000
-#endif
-#endif /* PAL_OS_TYPE_BMP */
-
-#define WLANDXE_BMU_AVAILABLE_BD_PDU (WLANDXE_WCNSS_BASE_ADDRESS + 0x80084)
-
-#define WLANDXE_REGISTER_BASE_ADDRESS (WLANDXE_WCNSS_BASE_ADDRESS + 0x202000)
-
-/* Common over the channels register addresses */
-#define WALNDEX_DMA_CSR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x00)
-#define WALNDEX_DMA_ENCH_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x04)
-#define WALNDEX_DMA_CH_EN_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x08)
-#define WALNDEX_DMA_CH_DONE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x0C)
-#define WALNDEX_DMA_CH_ERR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x10)
-#define WALNDEX_DMA_CH_STOP_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x14)
-
-/* Interrupt Control register address */
-#define WLANDXE_INT_MASK_REG_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x18)
-#define WLANDXE_INT_SRC_MSKD_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x1C)
-#define WLANDXE_INT_SRC_RAW_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x20)
-#define WLANDXE_INT_ED_SRC_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x24)
-#define WLANDXE_INT_DONE_SRC_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x28)
-#define WLANDXE_INT_ERR_SRC_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x2C)
-#define WLANDXE_INT_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x30)
-#define WLANDXE_INT_ED_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x34)
-#define WLANDXE_INT_DONE_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x38)
-#define WLANDXE_INT_ERR_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x3C)
-
-#define WLANDXE_DMA_CH_PRES_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x40)
-#define WLANDXE_ARB_CH_MSK_CLR_ADDRRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x74)
-
-/* Channel Counter register */
-#define WLANDXE_DMA_COUNTER_0 (WLANDXE_REGISTER_BASE_ADDRESS + 0x200)
-#define WLANDXE_DMA_COUNTER_1 (WLANDXE_REGISTER_BASE_ADDRESS + 0x204)
-#define WLANDXE_DMA_COUNTER_2 (WLANDXE_REGISTER_BASE_ADDRESS + 0x208)
-#define WLANDXE_DMA_COUNTER_3 (WLANDXE_REGISTER_BASE_ADDRESS + 0x20C)
-#define WLANDXE_DMA_COUNTER_4 (WLANDXE_REGISTER_BASE_ADDRESS + 0x210)
-#define WLANDXE_DMA_COUNTER_5 (WLANDXE_REGISTER_BASE_ADDRESS + 0x214)
-#define WLANDXE_DMA_COUNTER_6 (WLANDXE_REGISTER_BASE_ADDRESS + 0x218)
-
-#define WLANDXE_ENGINE_STAT_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x64)
-#define WLANDXE_BMU_SB_QDAT_AV_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x5c)
-
-/* Channel Base address */
-#define WLANDXE_DMA_CHAN0_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x400)
-#define WLANDXE_DMA_CHAN1_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x440)
-#define WLANDXE_DMA_CHAN2_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x480)
-#define WLANDXE_DMA_CHAN3_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x4C0)
-#define WLANDXE_DMA_CHAN4_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x500)
-#define WLANDXE_DMA_CHAN5_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x540)
-#define WLANDXE_DMA_CHAN6_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x580)
-
-/* Channel specific register offset */
-#define WLANDXE_DMA_CH_CTRL_REG 0x0000
-#define WLANDXE_DMA_CH_STATUS_REG 0x0004
-#define WLANDXE_DMA_CH_SZ_REG 0x0008
-#define WLANDXE_DMA_CH_SADRL_REG 0x000C
-#define WLANDXE_DMA_CH_SADRH_REG 0x0010
-#define WLANDXE_DMA_CH_DADRL_REG 0x0014
-#define WLANDXE_DMA_CH_DADRH_REG 0x0018
-#define WLANDXE_DMA_CH_DESCL_REG 0x001C
-#define WLANDXE_DMA_CH_DESCH_REG 0x0020
-#define WLANDXE_DMA_CH_LST_DESCL_REG 0x0024
-#define WLANDXE_DMA_CH_LST_DESCH_REG 0x0028
-#define WLANDXE_DMA_CH_BD_REG 0x002C
-#define WLANDXE_DMA_CH_HEAD_REG 0x0030
-#define WLANDXE_DMA_CH_TAIL_REG 0x0034
-#define WLANDXE_DMA_CH_PDU_REG 0x0038
-#define WLANDXE_DMA_CH_TSTMP_REG 0x003C
-
-/* Common CSR Register Contorol mask and offset */
-#ifdef WCN_PRONTO
-#define WLANDXE_DMA_CSR_RESERVED_MASK 0xFFFF0000
-#define WLANDXE_DMA_CSR_RESERVED_OFFSET 0x10
-#define WLANDXE_DMA_CSR_RESERVED_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK 0x8000
-#define WLANDXE_DMA_CSR_H2H_SYNC_EN_OFFSET 0x0F
-#define WLANDXE_DMA_CSR_H2H_SYNC_EN_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_PAUSED_MASK 0x4000
-#define WLANDXE_DMA_CSR_PAUSED_OFFSET 0x0E
-#define WLANDXE_DMA_CSR_PAUSED_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_ECTR_EN_MASK 0x2000
-#define WLANDXE_DMA_CSR_ECTR_EN_OFFSET 0x0D
-#define WLANDXE_DMA_CSR_ECTR_EN_DEFAULT 0x2000
-
-#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_MASK 0x1F00
-#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_OFFSET 0x08
-#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_DEFAULT 0x0F00
-
-#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_MASK 0xF8
-#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_OFFSET 0x03
-#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_DEFAULT 0x28
-
-#define WLANDXE_DMA_CSR_TSTMP_EN_MASK 0x04
-#define WLANDXE_DMA_CSR_TSTMP_EN_OFFSET 0x02
-#define WLANDXE_DMA_CSR_TSTMP_EN_DEFAULT 0x0
-
-#define WLANDXE_DMA_CCU_DXE_RESET_MASK 0x4
-#else
-#define WLANDXE_DMA_CSR_RESERVED_MASK 0xFFFE0000
-#define WLANDXE_DMA_CSR_RESERVED_OFFSET 0x11
-#define WLANDXE_DMA_CSR_RESERVED_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK 0x10000
-#define WLANDXE_DMA_CSR_H2H_SYNC_EN_OFFSET 0x10
-#define WLANDXE_DMA_CSR_H2H_SYNC_EN_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_PAUSED_MASK 0x8000
-#define WLANDXE_DMA_CSR_PAUSED_OFFSET 0xF
-#define WLANDXE_DMA_CSR_PAUSED_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_ECTR_EN_MASK 0x4000
-#define WLANDXE_DMA_CSR_ECTR_EN_OFFSET 0xE
-#define WLANDXE_DMA_CSR_ECTR_EN_DEFAULT 0x4000
-
-#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_MASK 0x3E00
-#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_OFFSET 0x9
-#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_DEFAULT 0xE00
-
-#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_MASK 0x1F0
-#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_OFFSET 0x4
-#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_DEFAULT 0x50
-
-#define WLANDXE_DMA_CSR_TSTMP_EN_MASK 0x8
-#define WLANDXE_DMA_CSR_TSTMP_EN_OFFSET 0x3
-#define WLANDXE_DMA_CSR_TSTMP_EN_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_RESET_MASK 0x4
-#define WLANDXE_DMA_CSR_RESET_OFFSET 0x2
-#define WLANDXE_DMA_CSR_RESET_DEFAULT 0x0
-#endif /* WCN_PRONTO */
-#define WLANDXE_DMA_CSR_PAUSE_MASK 0x2
-#define WLANDXE_DMA_CSR_PAUSE_OFFSET 0x1
-#define WLANDXE_DMA_CSR_PAUSE_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_EN_MASK 0x1
-#define WLANDXE_DMA_CSR_EN_OFFSET 0x0
-#define WLANDXE_DMA_CSR_EN_DEFAULT 0x0
-
-/* DXE CSR Master enable register value */
-#define WLANDXE_CSR_DEFAULT_ENABLE (WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK | \
- WLANDXE_DMA_CSR_ECTR_EN_MASK | \
- WLANDXE_DMA_CSR_EN_MASK)
-/* Channel CTRL Register Control mask and offset */
-#define WLANDXE_CH_CTRL_RSVD_MASK 0x80000000
-#define WLANDXE_CH_CTRL_RSVD_OFFSET 0x1F
-#define WLANDXE_CH_CTRL_RSVD_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_SWAP_MASK 0x80000000
-
-#define WLANDXE_CH_CTRL_BDT_IDX_MASK 0x60000000
-#define WLANDXE_CH_CTRL_BDT_IDX_OFFSET 0x1D
-#define WLANDXE_CH_CTRL_BDT_IDX_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_DFMT_MASK 0x10000000
-#define WLANDXE_CH_CTRL_DFMT_OFFSET 0x1C
-#define WLANDXE_CH_CTRL_DFMT_DEFAULT 0x10000000
-#define WLANDXE_CH_CTRL_DFMT_ESHORT 0x0
-#define WLANDXE_CH_CTRL_DFMT_ELONG 0x1
-
-#define WLANDXE_CH_CTRL_ABORT_MASK 0x8000000
-#define WLANDXE_CH_CTRL_ABORT_OFFSET 0x1B
-#define WLANDXE_CH_CTRL_ABORT_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_ENDIAN_MASK 0x4000000
-
-#define WLANDXE_CH_CTRL_CTR_SEL_MASK 0x3C00000
-#define WLANDXE_CH_CTRL_CTR_SEL_OFFSET 0x16
-#define WLANDXE_CH_CTRL_CTR_SEL_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_EDVEN_MASK 0x200000
-#define WLANDXE_CH_CTRL_EDVEN_OFFSET 0x15
-#define WLANDXE_CH_CTRL_EDVEN_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_EDEN_MASK 0x100000
-#define WLANDXE_CH_CTRL_EDEN_OFFSET 0x14
-#define WLANDXE_CH_CTRL_EDEN_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_INE_DONE_MASK 0x80000
-#define WLANDXE_CH_CTRL_INE_DONE_OFFSET 0x13
-#define WLANDXE_CH_CTRL_INE_DONE_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_INE_ERR_MASK 0x40000
-#define WLANDXE_CH_CTRL_INE_ERR_OFFSET 0x12
-#define WLANDXE_CH_CTRL_INE_ERR_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_INE_ED_MASK 0x20000
-#define WLANDXE_CH_CTRL_INE_ED_OFFSET 0x11
-#define WLANDXE_CH_CTRL_INE_ED_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_STOP_MASK 0x10000
-#define WLANDXE_CH_CTRL_STOP_OFFSET 0x10
-#define WLANDXE_CH_CTRL_STOP_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_PRIO_MASK 0xE000
-#define WLANDXE_CH_CTRL_PRIO_OFFSET 0xD
-#define WLANDXE_CH_CTRL_PRIO_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_BTHLD_SEL_MASK 0x1E00
-#define WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET 0x9
-#define WLANDXE_CH_CTRL_BTHLD_SEL_DEFAULT 0x600
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD0 0x0
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD1 0x1
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD2 0x2
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD3 0x3
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD4 0x4
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD5 0x5
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD6 0x6
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD7 0x7
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD8 0x8
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD9 0x9
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD10 0xA
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD11 0xB
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD12 0xC
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD13 0xD
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD14 0xE
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD15 0xF
-
-#define WLANDXE_CH_CTRL_PDU_REL_MASK 0x100
-#define WLANDXE_CH_CTRL_PDU_REL_OFFSET 0x8
-#define WLANDXE_CH_CTRL_PDU_REL_DEFAULT 0x100
-#define WLANDXE_CH_CTRL_PDU_REL_EKEEP 0x0
-#define WLANDXE_CH_CTRL_PDU_REL_ERELEASE 0x1
-
-#define WLANDXE_CH_CTRL_PIQ_MASK 0x80
-#define WLANDXE_CH_CTRL_PIQ_OFFSET 0x7
-#define WLANDXE_CH_CTRL_PIQ_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_PIQ_EFLAT 0x0
-#define WLANDXE_CH_CTRL_PIQ_EQUEUE 0x1
-
-#define WLANDXE_CH_CTRL_DIQ_MASK 0x40
-#define WLANDXE_CH_CTRL_DIQ_OFFSET 0x6
-#define WLANDXE_CH_CTRL_DIQ_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_DIQ_EFLAT 0x0
-#define WLANDXE_CH_CTRL_DIQ_EQUEUE 0x1
-
-#define WLANDXE_CH_CTRL_SIQ_MASK 0x20
-#define WLANDXE_CH_CTRL_SIQ_OFFSET 0x5
-#define WLANDXE_CH_CTRL_SIQ_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_SIQ_EFLAT 0x0
-#define WLANDXE_CH_CTRL_SIQ_EQUEUE 0x1
-
-#define WLANDXE_CH_CTRL_BDH_MASK 0x10
-#define WLANDXE_CH_CTRL_BDH_OFFSET 0x4
-#define WLANDXE_CH_CTRL_BDH_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_EOP_MASK 0x8
-#define WLANDXE_CH_CTRL_EOP_OFFSET 0x3
-#define WLANDXE_CH_CTRL_EOP_DEFAULT 0x8
-
-#define WLANDXE_CH_CTRL_XTYPE_MASK 0x6
-#define WLANDXE_CH_CTRL_XTYPE_OFFSET 0x1
-#define WLANDXE_CH_CTRL_XTYPE_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_XTYPE_EH2H 0x0
-#define WLANDXE_CH_CTRL_XTYPE_EB2B 0x1
-#define WLANDXE_CH_CTRL_XTYPE_EH2B 0x2
-#define WLANDXE_CH_CTRL_XTYPE_EB2H 0x3
-
-#define WLANDXE_CH_CTRL_DONE_MASK 0x4
-
-#define WLANDXE_CH_CTRL_ERR_MASK 0x20
-
-#define WLANDXE_CH_CTRL_MASKED_MASK 0x8
-
-#define WLANDXE_CH_CTRL_EN_MASK 0x1
-#define WLANDXE_CH_CTRL_EN_OFFSET 0x0
-#define WLANDXE_CH_CTRL_EN_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_DEFAULT 0x10000708
-
-
-#define WLANDXE_DESC_CTRL_VALID 0x00000001
-#define WLANDXE_DESC_CTRL_XTYPE_MASK 0x00000006
-#define WLANDXE_DESC_CTRL_XTYPE_H2H 0x00000000
-#define WLANDXE_DESC_CTRL_XTYPE_B2B 0x00000002
-#define WLANDXE_DESC_CTRL_XTYPE_H2B 0x00000004
-#define WLANDXE_DESC_CTRL_XTYPE_B2H 0x00000006
-#define WLANDXE_DESC_CTRL_EOP 0x00000008
-#define WLANDXE_DESC_CTRL_BDH 0x00000010
-#define WLANDXE_DESC_CTRL_SIQ 0x00000020
-#define WLANDXE_DESC_CTRL_DIQ 0x00000040
-#define WLANDXE_DESC_CTRL_PIQ 0x00000080
-#define WLANDXE_DESC_CTRL_PDU_REL 0x00000100
-#define WLANDXE_DESC_CTRL_BTHLD_SEL 0x00001E00
-#define WLANDXE_DESC_CTRL_PRIO 0x0000E000
-#define WLANDXE_DESC_CTRL_STOP 0x00010000
-#define WLANDXE_DESC_CTRL_INT 0x00020000
-#define WLANDXE_DESC_CTRL_BDT_SWAP 0x00100000
-#define WLANDXE_DESC_CTRL_ENDIANNESS 0x00200000
-#define WLANDXE_DESC_CTRL_DFMT 0x10000000
-#define WLANDXE_DESC_CTRL_RSVD 0xfffc0000
-/* CSR Register Control mask and offset */
-
-#define WLANDXE_CH_STAT_INT_DONE_MASK 0x00008000
-#define WLANDXE_CH_STAT_INT_ERR_MASK 0x00004000
-#define WLANDXE_CH_STAT_INT_ED_MASK 0x00002000
-
-#define WLANDXE_CH_STAT_MASKED_MASK 0x00000008
-#define WLANDXE_CH_STAT_ENABLED_MASK 0x00000001
-/* Till here WCNSS DXE register information
- * This is temporary definition location to make compile and unit test
- * If official msmreg.h integrated, this part will be eliminated */
-
-/* Interrupt control channel mask */
-#define WLANDXE_INT_MASK_CHAN_0 0x00000001
-#define WLANDXE_INT_MASK_CHAN_1 0x00000002
-#define WLANDXE_INT_MASK_CHAN_2 0x00000004
-#define WLANDXE_INT_MASK_CHAN_3 0x00000008
-#define WLANDXE_INT_MASK_CHAN_4 0x00000010
-#define WLANDXE_INT_MASK_CHAN_5 0x00000020
-#define WLANDXE_INT_MASK_CHAN_6 0x00000040
-
-#define WLANDXE_TX_LOW_RES_THRESHOLD (5)
-
-/* DXE Descriptor Endian swap macro */
-#ifdef WLANDXE_ENDIAN_SWAP_ENABLE
-#define WLANDXE_U32_SWAP_ENDIAN(a) (((a & 0x000000FF) << 24) | \
- ((a & 0x0000FF00) << 8) | \
- ((a & 0x00FF0000) >> 8) | \
- ((a & 0xFF000000) >> 24))
-#else
-/* If DXE HW does not need endian swap, DO NOTHING */
-#define WLANDXE_U32_SWAP_ENDIAN(a) (a)
-#endif /* WLANDXE_ENDIAN_SWAP_ENABLE */
-
-/* Log Definition will be mappped with PAL MSG */
-#define HDXE_MSG WPAL_TRACE
-#define HDXE_ASSERT(a) VOS_ASSERT(a)
-
-/*----------------------------------------------------------------------------
- * Type Declarations
- * -------------------------------------------------------------------------*/
-/* DMA Channel Q handle Method type
- * Linear handle or circular */
-typedef enum
-{
- WLANDXE_CHANNEL_HANDLE_LINEAR,
- WLANDXE_CHANNEL_HANDLE_CIRCULA
-}WLANDXE_ChannelHandleType;
-
-typedef enum
-{
- WLANDXE_TX_COMP_INT_LR_THRESHOLD,
- WLANDXE_TX_COMP_INT_PER_K_FRAMES,
- WLANDXE_TX_COMP_INT_TIMER
-} WLANDXE_TXCompIntEnableType;
-
-typedef enum
-{
- WLANDXE_SHORT_DESCRIPTOR,
- WLANDXE_LONG_DESCRIPTOR
-} WLANDXE_DescriptorType;
-
-typedef enum
-{
- WLANDXE_DMA_CHANNEL_0,
- WLANDXE_DMA_CHANNEL_1,
- WLANDXE_DMA_CHANNEL_2,
- WLANDXE_DMA_CHANNEL_3,
- WLANDXE_DMA_CHANNEL_4,
- WLANDXE_DMA_CHANNEL_5,
- WLANDXE_DMA_CHANNEL_6,
- WLANDXE_DMA_CHANNEL_MAX
-} WLANDXE_DMAChannelType;
-
-/** DXE HW Long Descriptor format */
-typedef struct
-{
- wpt_uint32 srcMemAddrL;
- wpt_uint32 srcMemAddrH;
- wpt_uint32 dstMemAddrL;
- wpt_uint32 dstMemAddrH;
- wpt_uint32 phyNextL;
- wpt_uint32 phyNextH;
-} WLANDXE_LongDesc;
-
-
-/** DXE HW Short Descriptor format */
-typedef struct tDXEShortDesc
-{
- wpt_uint32 srcMemAddrL;
- wpt_uint32 dstMemAddrL;
- wpt_uint32 phyNextL;
-} WLANDXE_ShortDesc;
-
-
-/* DXE Descriptor Data Type
- * Pick up from GEN5 */
-typedef struct
-{
- union
- {
- wpt_uint32 ctrl;
- wpt_uint32 valid :1; //0 = DMA stop, 1 = DMA continue with this descriptor
- wpt_uint32 transferType :2; //0 = Host to Host space
- wpt_uint32 eop :1; //End of Packet
- wpt_uint32 bdHandling :1; //if transferType = Host to BMU, then 0 means first 128 bytes contain BD, and 1 means create new empty BD
- wpt_uint32 siq :1; // SIQ
- wpt_uint32 diq :1; // DIQ
- wpt_uint32 pduRel :1; //0 = don't release BD and PDUs when done, 1 = release them
- wpt_uint32 bthldSel :4; //BMU Threshold Select
- wpt_uint32 prio :3; //Specifies the priority level to use for the transfer
- wpt_uint32 stopChannel :1; //1 = DMA stops processing further, channel requires re-enabling after this
- wpt_uint32 intr :1; //Interrupt on Descriptor Done
- wpt_uint32 rsvd :1; //reserved
- wpt_uint32 transferSize :14; //14 bits used - ignored for BMU transfers, only used for host to host transfers?
- } descCtrl;
- wpt_uint32 xfrSize;
- union
- {
- WLANDXE_LongDesc dxe_long_desc;
- WLANDXE_ShortDesc dxe_short_desc;
- }dxedesc;
-} WLANDXE_DescType;
-
-typedef struct
-{
- void *nextCtrlBlk;
- wpt_packet *xfrFrame;
- WLANDXE_DescType *linkedDesc;
- wpt_uint32 linkedDescPhyAddr;
- wpt_uint32 ctrlBlkOrder;
-#ifdef FEATURE_R33D
- wpt_uint32 shadowBufferVa;
-#endif /* FEATURE_R33D */
-} WLANDXE_DescCtrlBlkType;
-
-typedef struct
-{
- /* Q handle method, linear or ring */
- WLANDXE_ChannelHandleType queueMethod;
-
- /* Number of descriptors for DXE that can be queued for transfer at one time */
- wpt_uint32 nDescs;
-
- /* Maximum number of receive buffers of shared memory to use for this pipe */
- wpt_uint32 nRxBuffers;
-
- /* Reference WQ - for H2B and B2H only */
- wpt_uint32 refWQ;
-
- /* for usb only, endpoint info for CH_SADR or CH_DADR */
- wpt_uint32 refEP;
-
- /* H2B(Tx), B2H(Rx), H2H(SRAM<->HostMem R/W) */
- wpt_uint32 xfrType;
-
- /* Channel Priority 7(Highest) - 0(Lowest) */
- wpt_uint32 chPriority;
-
- /* 1 = BD attached to frames for this pipe */
- wpt_boolean bdPresent;
-
- wpt_uint32 chk_size;
-
- wpt_uint32 bmuThdSel;
-
- /* Added in Gen5 for Prefetch */
- wpt_boolean useLower4G;
-
- wpt_boolean useShortDescFmt;
- /* Till here inharited from GEN5 code */
- /* From now on, added for PRIMA */
-} WLANDXE_ChannelConfigType;
-
-typedef struct
-{
- wpt_uint32 chDXEBaseAddr;
- wpt_uint32 chDXEStatusRegAddr;
- wpt_uint32 chDXEDesclRegAddr;
- wpt_uint32 chDXEDeschRegAddr;
- wpt_uint32 chDXELstDesclRegAddr;
- wpt_uint32 chDXECtrlRegAddr;
- wpt_uint32 chDXESzRegAddr;
- wpt_uint32 chDXEDadrlRegAddr;
- wpt_uint32 chDXEDadrhRegAddr;
- wpt_uint32 chDXESadrlRegAddr;
- wpt_uint32 chDXESadrhRegAddr;
-} WLANDXE_ChannelRegisterType;
-
-typedef struct
-{
- wpt_uint32 refWQ_swapped;
- wpt_boolean chEnabled;
- wpt_boolean chConfigured;
- wpt_uint32 channel;
- wpt_uint32 chk_size_mask;
- wpt_uint32 bmuThdSel_mask;
- wpt_uint32 cw_ctrl_read;
- wpt_uint32 cw_ctrl_write;
- wpt_uint32 cw_ctrl_write_valid;
- wpt_uint32 cw_ctrl_write_eop;
- wpt_uint32 cw_ctrl_write_eop_int;
- wpt_uint32 chan_mask;
- wpt_uint32 chan_mask_read_disable;
- wpt_uint32 intMask;
-} WLANDXE_ChannelExConfigType;
-
-typedef struct
-{
- WDTS_ChannelType channelType;
- WLANDXE_DescCtrlBlkType *headCtrlBlk;
- WLANDXE_DescCtrlBlkType *tailCtrlBlk;
-#if !(defined(FEATURE_R33D) || defined(WLANDXE_TEST_CHANNEL_ENABLE))
- WLANDXE_DescType *descriptorAllocation;
-#endif
- WLANDXE_DescType *DescBottomLoc;
- wpt_uint32 descBottomLocPhyAddr;
- wpt_uint32 numDesc;
- wpt_uint32 numFreeDesc;
- wpt_uint32 numRsvdDesc;
- wpt_uint32 maxFrameSize;
- wpt_uint32 numFragmentCurrentChain;
- wpt_uint32 numFrameBeforeInt;
- wpt_uint32 numTotalFrame;
- wpt_mutex dxeChannelLock;
- wpt_boolean hitLowResource;
- WLANDXE_ChannelConfigType channelConfig;
- WLANDXE_ChannelRegisterType channelRegister;
- WLANDXE_ChannelExConfigType extraConfig;
- WLANDXE_DMAChannelType assignedDMAChannel;
- wpt_uint64 rxDoneHistogram;
- wpt_timer healthMonitorTimer;
- wpt_msg *healthMonitorMsg;
-} WLANDXE_ChannelCBType;
-
-typedef struct
-{
- WLANDXE_TXCompIntEnableType txIntEnable;
- unsigned int txLowResourceThreshold_LoPriCh;
- unsigned int txLowResourceThreshold_HiPriCh;
- unsigned int rxLowResourceThreshold;
- unsigned int txInterruptEnableFrameCount;
- unsigned int txInterruptEnablePeriod;
-} WLANDXE_TxCompIntConfigType;
-
-typedef struct
-{
- WLANDXE_ChannelCBType dxeChannel[WDTS_CHANNEL_MAX];
- WLANDXE_RxFrameReadyCbType rxReadyCB;
- WLANDXE_TxCompleteCbType txCompCB;
- WLANDXE_LowResourceCbType lowResourceCB;
- WLANDXE_TxCompIntConfigType txCompInt;
- void *clientCtxt;
- wpt_uint32 interruptPath;
- wpt_msg *rxIsrMsg;
- wpt_msg *txIsrMsg;
- wpt_msg *rxPktAvailMsg;
- volatile WLANDXE_PowerStateType hostPowerState;
- wpt_boolean rxIntDisabledByIMPS;
- wpt_boolean txIntDisabledByIMPS;
- WLANDXE_SetPowerStateCbType setPowerStateCb;
- volatile WLANDXE_RivaPowerStateType rivaPowerState;
- wpt_boolean ringNotEmpty;
- wpt_boolean txIntEnable;
- wpt_uint32 txCompletedFrames;
- wpt_uint8 ucTxMsgCnt;
- wpt_uint16 lastKickOffDxe;
- wpt_uint32 dxeCookie;
- wpt_packet *freeRXPacket;
- wpt_boolean rxPalPacketUnavailable;
- wpt_boolean driverReloadInProcessing;
- wpt_boolean smsmToggled;
- wpt_timer rxResourceAvailableTimer;
- wpt_timer dxeSSRTimer;
-} WLANDXE_CtrlBlkType;
-
-/*==========================================================================
- @ Function Name
- dxeCommonDefaultConfig
-
- @ Description
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-extern wpt_status dxeCommonDefaultConfig
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk
-);
-
-/*==========================================================================
- @ Function Name
- dxeChannelDefaultConfig
-
- @ Description
- Get defualt configuration values from pre defined structure
- All the channels must have it's own configurations
-
- @ Parameters
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- DXE host driver main control block
- WLANDXE_ChannelCBType *channelEntry
- Channel specific control block
-
- @ Return
- wpt_status
-
-===========================================================================*/
-extern wpt_status dxeChannelDefaultConfig
-(
- WLANDXE_CtrlBlkType *dxeCtrlBlk,
- WLANDXE_ChannelCBType *channelEntry
-);
-
-#endif /* WLAN_QCT_DXE_I_H */
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 7e9c869c280d..1bb4c40b5174 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -1278,28 +1278,29 @@ static VOS_STATUS hdd_roamRegisterSTA( hdd_adapter_t *pAdapter,
return( vosStatus );
}
-static void hdd_SendReAssocEvent(struct net_device *dev, hdd_adapter_t *pAdapter,
- tCsrRoamInfo *pCsrRoamInfo, v_U8_t *reqRsnIe, tANI_U32 reqRsnLength)
+static void hdd_SendReAssocEvent(struct net_device *dev,
+ hdd_adapter_t *pAdapter,
+ tCsrRoamInfo *pCsrRoamInfo, v_U8_t *reqRsnIe,
+ tANI_U32 reqRsnLength)
{
unsigned int len = 0;
u8 *pFTAssocRsp = NULL;
- hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
v_U8_t *rspRsnIe = kmalloc(IW_GENERIC_IE_MAX, GFP_KERNEL);
tANI_U32 rspRsnLength = 0;
struct ieee80211_channel *chan;
if (!rspRsnIe) {
- hddLog(LOGE, "%s: Unable to allocate RSN IE", __func__);
+ hddLog(LOGE, FL("Unable to allocate RSN IE"));
return;
}
if (pCsrRoamInfo == NULL) {
- hddLog(LOGE, "%s: Invalid CSR roam info", __func__);
+ hddLog(LOGE, FL("Invalid CSR roam info"));
goto done;
}
if (pCsrRoamInfo->nAssocRspLength == 0) {
- hddLog(LOGE, "%s: Invalid assoc response length", __func__);
+ hddLog(LOGE, FL("Invalid assoc response length"));
goto done;
}
@@ -1308,29 +1309,20 @@ static void hdd_SendReAssocEvent(struct net_device *dev, hdd_adapter_t *pAdapter
if (pFTAssocRsp == NULL)
goto done;
- //pFTAssocRsp needs to point to the IEs
+ /* pFTAssocRsp needs to point to the IEs */
pFTAssocRsp += FT_ASSOC_RSP_IES_OFFSET;
- hddLog(LOG1, "%s: AssocRsp is now at %02x%02x", __func__,
- (unsigned int)pFTAssocRsp[0],
- (unsigned int)pFTAssocRsp[1]);
-
- /* Active session count is decremented upon disconnection, but during
- * roaming, there is no disconnect indication and hence active session
- * count is not decremented.
- * After roaming is completed, active session count is incremented
- * as a part of connect indication but effectively after roaming the
- * active session count should still be the same and hence upon
- * successful reassoc decrement the active session count here */
- wlan_hdd_decr_active_session(pHddCtx, pAdapter->device_mode);
+ hddLog(LOG1, FL("AssocRsp is now at %02x%02x"),
+ (unsigned int)pFTAssocRsp[0], (unsigned int)pFTAssocRsp[1]);
- // Send the Assoc Resp, the supplicant needs this for initial Auth.
+ /* Send the Assoc Resp, the supplicant needs this for initial Auth */
len = pCsrRoamInfo->nAssocRspLength - FT_ASSOC_RSP_IES_OFFSET;
rspRsnLength = len;
memcpy(rspRsnIe, pFTAssocRsp, len);
memset(rspRsnIe + len, 0, IW_GENERIC_IE_MAX - len);
- chan = ieee80211_get_channel(pAdapter->wdev.wiphy, (int) pCsrRoamInfo->pBssDesc->channelId);
- cfg80211_roamed(dev,chan,pCsrRoamInfo->bssid,
+ chan = ieee80211_get_channel(pAdapter->wdev.wiphy,
+ (int)pCsrRoamInfo->pBssDesc->channelId);
+ cfg80211_roamed(dev, chan, pCsrRoamInfo->bssid,
reqRsnIe, reqRsnLength,
rspRsnIe, rspRsnLength,GFP_KERNEL);
done:
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index b29608b4331a..1a1f0d9465ad 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 166
+#define QWLAN_VERSION_BUILD 167
-#define QWLAN_VERSIONSTR "1.0.0.166"
+#define QWLAN_VERSIONSTR "1.0.0.167"
#ifdef QCA_WIFI_2_0
diff --git a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
index dd7b7fbddfb5..2609c35ae18d 100644
--- a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
@@ -150,10 +150,12 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p
PELOGE(limLog(pMac, LOGE,
FL("Received Deauth frame for Addr: "MAC_ADDRESS_STR" (mlm state = %s,"
- " sme state = %d systemrole = %d) with reason code %d from "
+ " sme state = %d systemrole = %d) with reason code %d [%s] from "
MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->da),
- limMlmStateStr(psessionEntry->limMlmState), psessionEntry->limSmeState,
+ limMlmStateStr(psessionEntry->limMlmState),
+ psessionEntry->limSmeState,
psessionEntry->limSystemRole, reasonCode,
+ limDot11ReasonStr(reasonCode),
MAC_ADDR_ARRAY(pHdr->sa));)
if (limCheckDisassocDeauthAckPending(pMac, (tANI_U8*)pHdr->sa))
diff --git a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
index 7d963b666aa8..5a4312ef300a 100644
--- a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
@@ -127,8 +127,9 @@ limProcessDisassocFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession
PELOG2(limLog(pMac, LOGE,
FL("Received Disassoc frame for Addr: "MAC_ADDRESS_STR"(mlm state=%s, sme state=%d),"
- "with reason code %d from "MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->da),
- limMlmStateStr(psessionEntry->limMlmState), psessionEntry->limSmeState, reasonCode,
+ "with reason code %d [%s] from "MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->da),
+ limMlmStateStr(psessionEntry->limMlmState), psessionEntry->limSmeState,
+ reasonCode, limDot11ReasonStr(reasonCode),
MAC_ADDR_ARRAY(pHdr->sa));)
/**
diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c
index 14468be14a3f..887119edbc7c 100644
--- a/CORE/MAC/src/pe/lim/limUtils.c
+++ b/CORE/MAC/src/pe/lim/limUtils.c
@@ -231,6 +231,64 @@ limGetBssidFromBD(tpAniSirGlobal pMac, tANI_U8 * pRxPacketInfo, tANI_U8 *bssId,
}
}
+
+char *
+limDot11ReasonStr(tANI_U16 reasonCode)
+{
+ switch (reasonCode)
+ {
+ case 0: return " ";
+ CASE_RETURN_STRING(eSIR_MAC_UNSPEC_FAILURE_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_PREV_AUTH_NOT_VALID_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_DEAUTH_LEAVING_BSS_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_DISASSOC_DUE_TO_INACTIVITY_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_DISASSOC_DUE_TO_DISABILITY_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_CLASS2_FRAME_FROM_NON_AUTH_STA_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_CLASS3_FRAME_FROM_NON_ASSOC_STA_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_DISASSOC_LEAVING_BSS_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_STA_NOT_PRE_AUTHENTICATED_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_PWR_CAPABILITY_BAD_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_SPRTD_CHANNELS_BAD_REASON);
+
+ CASE_RETURN_STRING(eSIR_MAC_INVALID_IE_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_MIC_FAILURE_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_4WAY_HANDSHAKE_TIMEOUT_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_GR_KEY_UPDATE_TIMEOUT_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_RSN_IE_MISMATCH_REASON);
+
+ CASE_RETURN_STRING(eSIR_MAC_INVALID_MC_CIPHER_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_INVALID_UC_CIPHER_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_INVALID_AKMP_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_UNSUPPORTED_RSN_IE_VER_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_INVALID_RSN_CAPABILITIES_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_1X_AUTH_FAILURE_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_CIPHER_SUITE_REJECTED_REASON);
+#ifdef FEATURE_WLAN_TDLS
+ CASE_RETURN_STRING(eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE);
+ CASE_RETURN_STRING(eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
+#endif
+ /* Reserved 27 - 30*/
+#ifdef WLAN_FEATURE_11W
+ CASE_RETURN_STRING(eSIR_MAC_ROBUST_MGMT_FRAMES_POLICY_VIOLATION);
+#endif
+ CASE_RETURN_STRING(eSIR_MAC_QOS_UNSPECIFIED_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_QAP_NO_BANDWIDTH_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_XS_UNACKED_FRAMES_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_BAD_TXOP_USE_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_PEER_STA_REQ_LEAVING_BSS_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_PEER_REJECT_MECHANISIM_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_MECHANISM_NOT_SETUP_REASON);
+
+ CASE_RETURN_STRING(eSIR_MAC_PEER_TIMEDOUT_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_CIPHER_NOT_SUPPORTED_REASON);
+ CASE_RETURN_STRING(eSIR_MAC_DISASSOC_DUE_TO_FTHANDOFF_REASON);
+ /* Reserved 47 - 65535 */
+ default:
+ return "Unknown";
+ }
+}
+
+
char *
limMlmStateStr(tLimMlmStates state)
{
diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h
index 9ec2556ff79c..660d495914bf 100644
--- a/CORE/MAC/src/pe/lim/limUtils.h
+++ b/CORE/MAC/src/pe/lim/limUtils.h
@@ -117,6 +117,7 @@ typedef struct op_class_map {
}op_class_map_t;
// LIM utility functions
void limGetBssidFromPkt(tpAniSirGlobal, tANI_U8 *, tANI_U8 *, tANI_U32 *);
+char * limDot11ReasonStr(tANI_U16 reasonCode);
char * limMlmStateStr(tLimMlmStates state);
char * limSmeStateStr(tLimSmeStates state);
char * limMsgStr(tANI_U32 msgType);
diff --git a/CORE/SERVICES/HIF/DXE/dmux_dxe.c b/CORE/SERVICES/HIF/DXE/dmux_dxe.c
deleted file mode 100644
index 42b25c967213..000000000000
--- a/CORE/SERVICES/HIF/DXE/dmux_dxe.c
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
- * @file dmux_dxe.c
- * @brief Provide functions to demux receive frames.
- * @details
- * This file contains functions for demuxing receive frames (from HIF_DXE) into 3 categories
- * RX data frames
- * RX management frames
- * RX messages (HTT_ISOC_T2H_*, e.g. HTT_ISOC_T2H_MSG_TYPE_PEER_INFO)
- *
- * Clients can register callbacks for each type of receive frame.
- */
-
-#include "adf_os_mem.h" /* adf_os_mem_alloc */
-#include "isoc_hw_desc.h" /* RX BD */
-
-#include "ieee80211_common.h" /* struct ieee80211_frame */
-
-#include "dmux_dxe_api.h"
-#include "dmux_dxe_internal.h"
-
-#define ATH_MODULE_NAME dmux_dxe
-#include "a_debug.h"
-
-#define DMUX_DXE_DEBUG ATH_DEBUG_MAKE_MODULE_MASK(0)
-
-#if defined(DEBUG)
-static ATH_DEBUG_MASK_DESCRIPTION g_DebugDescription[] = {
- {DMUX_DXE_DEBUG, "dmux_dxe"},
-};
-
-ATH_DEBUG_INSTANTIATE_MODULE_VAR(dmux_dxe,
- "dmux_dxe",
- "DMUX DXE",
- ATH_DEBUG_MASK_DEFAULTS | ATH_DEBUG_INFO | DMUX_DXE_DEBUG,
- ATH_DEBUG_DESCRIPTION_COUNT(g_DebugDescription),
- g_DebugDescription);
-#endif
-
-//PS TEST - need to put this in a common location
-#define HIF_DXE_RX_BUFFER_SIZE 2612
-
-enum dmux_dxe_frame_type {
- DMUX_DXE_FRAME_TYPE_DATA = 0,
- DMUX_DXE_FRAME_TYPE_MGMT = 1,
- DMUX_DXE_FRAME_TYPE_CTRL = 2,
- DMUX_DXE_FRAME_TYPE_MESSAGE = 3,
- DMUX_DXE_FRAME_TYPE_UNKNOWN = 255
-};
-
-/* Local globals */
-static struct dmux_dxe_pdev_t *g_pdev = NULL;
-
-
-#ifdef BIG_ENDIAN_HOST
-#define dmux_dxe_rx_bd_swap(rx_bd)
-#else
-static inline void dmux_dxe_rx_bd_swap(isoc_rx_bd_t *rx_bd)
-{
- isoc_hw_bd_swap_bytes32((char *) rx_bd, sizeof(*rx_bd));
-}
-#endif
-
-//static enum A_BOOL
-static A_BOOL
-dmux_dxe_validate_frame(adf_nbuf_t rx_frame)
-{
- isoc_rx_bd_t *rx_bd;
- struct ieee80211_frame *dot11frame;
- a_uint8_t mpdu_header_offset, mpdu_header_length;
- a_uint16_t mpdu_data_offset;
- a_uint16_t mpdu_length; /* entire mpdu length (header + data) */
- A_BOOL amsdu_subframe;
- A_BOOL amsdu_subframe_first;
- a_uint8_t frame_type_subtype;
-
- rx_bd = (isoc_rx_bd_t *)adf_nbuf_data(rx_frame);
-
- /* Convert to host byte format */
- dmux_dxe_rx_bd_swap(rx_bd);
-
- if (rx_bd->htt_t2h_msg) {
- //PS TEST - TODO - any special validation for HTT_T2H messages?
- return TRUE;
- }
-
- /* Validate BD */
- mpdu_header_offset = rx_bd->mpdu_header_offset;
- mpdu_header_length = rx_bd->mpdu_header_length;
- mpdu_data_offset = rx_bd->mpdu_data_offset;
- mpdu_length = rx_bd->mpdu_length;
-
- if ((mpdu_data_offset <= mpdu_header_offset) || (mpdu_length < mpdu_header_length)) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: BE header corrupt - dropping frame.\n", __FUNCTION__));
- return FALSE;
- }
-
- amsdu_subframe = rx_bd->amsdu;
- amsdu_subframe_first = rx_bd->amsdu_first;
-
- if ((mpdu_header_offset < sizeof(*rx_bd)) && (!(amsdu_subframe && !amsdu_subframe_first))) {
- /* AMSDU case, ucMPDUHOffset = 0 it should be handled separately. Drop packet */
- return FALSE;
- }
-
- /* A-MSDU frame, but not first sub-frame
- * No MPDU header, MPDU header offset is 0
- * Total frame size is actual frame size + MPDU data offset
- */
- if ((mpdu_header_offset < sizeof(*rx_bd)) && (amsdu_subframe && !amsdu_subframe_first)) {
- mpdu_header_offset = mpdu_data_offset;
- }
-
- if (HIF_DXE_RX_BUFFER_SIZE < (mpdu_length + mpdu_header_offset)) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: Invalid frame size, possible memory corruption - dropping frame.\n", __FUNCTION__));
- return FALSE;
- }
-
- /* Update RX BD */
- //PS TEST - NOTE - this is uncached memory. We might consider keeping a cached RX SW DESC
- rx_bd->mpdu_header_offset = mpdu_header_offset;
-
- /*
- * Fix HW reported frame type as typeSubtype in BD is not reliable.
- * Determine frame type (data/mgmt) from 802.11 MAC header.
- */
- frame_type_subtype = IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS;
- if (0 == rx_bd->frame_translate)
- {
- if(!amsdu_subframe)
- {
- dot11frame = (struct ieee80211_frame *)(((a_uint8_t *)rx_bd) + mpdu_header_offset);
- frame_type_subtype = dot11frame->i_fc[0];
- }
- else if(amsdu_subframe_first)
- {
- //Only the first subframe in AMSDU Contains the 80211 Header . For Following Subframes the frame_type_subtype is already initialized above
- dot11frame = (struct ieee80211_frame *)(((a_uint8_t *)rx_bd) + sizeof(*rx_bd));
- frame_type_subtype = dot11frame->i_fc[0];
- }
- }
-
- rx_bd->frame_type_subtype = frame_type_subtype;
-
- return TRUE;
-}
-
-static inline enum dmux_dxe_frame_type
-dmux_dxe_determine_frame_type(adf_nbuf_t rx_frame, E_HIFDXE_CHANNELTYPE channel_type)
-{
- isoc_rx_bd_t *rx_bd;
-
- /* DXE channel allocation
- * HIFDXE_CHANNEL_RX_LOW_PRI - data, ctrl (BAR), HTT_T2H messages
- * HIFDXE_CHANNEL_RX_HIGH_PRI - data, ctrl (BAR), HTT_T2H messages, mgmt
- */
-
- rx_bd = (isoc_rx_bd_t *)adf_nbuf_data(rx_frame);
-
- if (rx_bd->htt_t2h_msg) {
- return DMUX_DXE_FRAME_TYPE_MESSAGE;
- }
-
- switch ((rx_bd->frame_type_subtype & IEEE80211_FC0_TYPE_MASK)) {
- case IEEE80211_FC0_TYPE_DATA:
- return DMUX_DXE_FRAME_TYPE_DATA;
- case IEEE80211_FC0_TYPE_MGT:
- return DMUX_DXE_FRAME_TYPE_MGMT;
- case IEEE80211_FC0_TYPE_CTL:
- return DMUX_DXE_FRAME_TYPE_CTRL;
- default:
- return DMUX_DXE_FRAME_TYPE_UNKNOWN;
- }
-}
-
-static void
-dmux_dxe_indicate_frame_list(dmux_dxe_handle pdev, adf_nbuf_t rx_frame_list,
- enum dmux_dxe_frame_type frame_type,
- E_HIFDXE_CHANNELTYPE chan_type)
-{
- adf_nbuf_t rx_frame;
-
- switch (frame_type)
- {
- case DMUX_DXE_FRAME_TYPE_DATA:
- if (pdev->rx_data_cb) {
- pdev->rx_data_cb(pdev->rx_data_context, rx_frame_list, chan_type);
- return;
- }
- break;
- case DMUX_DXE_FRAME_TYPE_MGMT:
- if (pdev->rx_mgmt_cb) {
- pdev->rx_mgmt_cb(pdev->rx_mgmt_context, rx_frame_list);
- return;
- }
- break;
- case DMUX_DXE_FRAME_TYPE_CTRL:
- if (pdev->rx_ctrl_cb) {
- pdev->rx_ctrl_cb(pdev->rx_ctrl_context, rx_frame_list);
- return;
- }
- break;
- case DMUX_DXE_FRAME_TYPE_MESSAGE:
- if (pdev->msg_cb) {
- pdev->msg_cb( pdev->msg_context, rx_frame_list);
- return;
- }
- break;
- default:
- adf_os_assert(0);
- break;
- }
-
- /* No callback registered or unknown frame type - free frame list */
- rx_frame = rx_frame_list;
- while (rx_frame) {
- adf_nbuf_t rx_frame_next = adf_nbuf_next(rx_frame);
- adf_nbuf_set_next(rx_frame, NULL);
- adf_nbuf_free(rx_frame);
- rx_frame = rx_frame_next;
- }
-}
-
-/* RX Callback from HIF_DXE */
-static A_STATUS
-dmux_dxe_rx(void *pContext, adf_nbuf_t rx_list, E_HIFDXE_CHANNELTYPE channel_type)
-{
- dmux_dxe_handle pdev = pContext;
- adf_nbuf_t rx_frame, rx_frame_prev, indication_list;
- enum dmux_dxe_frame_type frame_type, frame_type_prev = DMUX_DXE_FRAME_TYPE_UNKNOWN;
-
- if (!pdev || !rx_list) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: Invalid handle.\n", __FUNCTION__));
- return A_EINVAL;
- }
-
- rx_frame = indication_list = rx_list;
- rx_frame_prev = NULL;
-
- while (rx_frame) {
-
- /* Validate frame */
- if (!dmux_dxe_validate_frame(rx_frame)) {
-
- /* Invalid frame - drop */
- adf_nbuf_t next = adf_nbuf_next(rx_frame);
-
- if (rx_frame_prev) {
- /* remove invalid frame from indication list */
- adf_nbuf_set_next(rx_frame_prev, next);
- } else {
- /* start of indication list -> update indication list head */
- indication_list = next;
- }
-
- adf_nbuf_free(rx_frame);
-
- /* next */
- rx_frame = next;
- continue;
- }
-
- /* Determine frame type (rx data, rx mgmt, HTT message) */
- frame_type = dmux_dxe_determine_frame_type(rx_frame, channel_type);
-
- /* If a different frame type is encountered, indicate the prior frames as a single list */
- if (rx_frame_prev && (frame_type != frame_type_prev)) {
- /* terminate list */
- adf_nbuf_set_next(rx_frame_prev, NULL);
-
- /* Indicate frames */
- dmux_dxe_indicate_frame_list(
- pdev, indication_list, frame_type_prev, channel_type);
-
- /* new indication list */
- indication_list = rx_frame;
- }
-
- /* next */
- frame_type_prev = frame_type;
- rx_frame_prev = rx_frame;
- rx_frame = adf_nbuf_next(rx_frame);
- }
-
- if (rx_frame_prev) {
- /* terminate list */
- adf_nbuf_set_next(rx_frame_prev, NULL);
-
- /* Indicate frames */
- dmux_dxe_indicate_frame_list(pdev, indication_list, frame_type_prev, channel_type);
- }
-
- return A_OK;
-}
-
-
-dmux_dxe_handle
-dmux_dxe_attach(adf_os_device_t osdev)
-{
- S_HIFDXE_CALLBACK hif_dxe_callbacks = {0};
- A_STATUS status;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- if (g_pdev) {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("%s : dmux_dxe object already allocated. Return existing object.\n", __FUNCTION__));
- adf_os_atomic_inc(&g_pdev->ref_count);
- return g_pdev;
- }
-
- g_pdev = adf_os_mem_alloc(osdev, sizeof(struct dmux_dxe_pdev_t));
- if (NULL == g_pdev) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s : dmux_dxe object allocation failure.\n", __FUNCTION__));
- return NULL;
- }
- adf_os_mem_zero(g_pdev, sizeof(*g_pdev));
-
- adf_os_atomic_init(&g_pdev->ref_count);
- adf_os_atomic_inc(&g_pdev->ref_count);
-
- /* Attach to HIF_DXE */
- g_pdev->h_hif_dxe = hif_dxe_attach(osdev);
- if (!g_pdev->h_hif_dxe) {
- goto fail;
- }
-
- /* Register RX callback with HIF_DXE */
- hif_dxe_callbacks.HifRxReadyCb = dmux_dxe_rx;
- hif_dxe_callbacks.HifRxReadyCtx = g_pdev;
- status = hif_dxe_client_registration(g_pdev->h_hif_dxe, &hif_dxe_callbacks);
- if (A_OK != status) {
- goto fail;
- }
-
- return g_pdev;
-
-fail:
- dmux_dxe_detach(g_pdev);
- return NULL;
-}
-
-void dmux_dxe_detach(dmux_dxe_handle pdev)
-{
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- if ((NULL == pdev) || (pdev != g_pdev)) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("dmux_dxe_detach: Invalid handle.\n"));
- return;
- }
-
- if (!adf_os_atomic_dec_and_test(&pdev->ref_count)) {
- /* there are other clients still using dmux_dxe */
- return;
- }
-
- if (pdev->h_hif_dxe) {
- hif_dxe_detach(pdev->h_hif_dxe);
- }
-
- /*
- * Zero out the pdev object before freeing it.
- * This will make it more obvious if anyone tries to use it
- * after it has been freed.
- */
- adf_os_mem_zero(pdev, sizeof(*pdev));
- adf_os_mem_free(pdev);
- pdev = g_pdev = NULL;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-}
-
-A_STATUS
-dmux_dxe_register_callback_rx_mgmt(
- dmux_dxe_handle pdev, dmux_dxe_mgmt_cb rx_mgmt_cb, void *rx_mgmt_context)
-{
- if ((NULL == pdev) || (pdev != g_pdev)) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: Invalid handle.\n", __FUNCTION__));
- return A_EINVAL;
- }
-
- pdev->rx_mgmt_cb = rx_mgmt_cb;
- pdev->rx_mgmt_context = rx_mgmt_context;
-
- return A_OK;
-}
-
-A_STATUS
-dmux_dxe_register_callback_rx_ctrl(
- dmux_dxe_handle pdev, dmux_dxe_ctrl_cb rx_ctrl_cb, void *rx_ctrl_context)
-{
- if ((NULL == pdev) || (pdev != g_pdev)) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: Invalid handle.\n", __FUNCTION__));
- return A_EINVAL;
- }
-
- pdev->rx_ctrl_cb = rx_ctrl_cb;
- pdev->rx_ctrl_context = rx_ctrl_context;
-
- return A_OK;
-}
-
-A_STATUS
-dmux_dxe_register_callback_rx_data(
- dmux_dxe_handle pdev, dmux_dxe_data_cb rx_data_cb, void *rx_data_context)
-{
- if ((NULL == pdev) || (pdev != g_pdev)) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: Invalid handle.\n", __FUNCTION__));
- return A_EINVAL;
- }
-
- pdev->rx_data_cb = rx_data_cb;
- pdev->rx_data_context = rx_data_context;
-
- return A_OK;
-}
-
-A_STATUS
-dmux_dxe_register_callback_msg(
- dmux_dxe_handle pdev, dmux_dxe_msg_cb msg_cb, void *msg_context)
-{
- if ((NULL == pdev) || (pdev != g_pdev)) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: Invalid handle.\n", __FUNCTION__));
- return A_EINVAL;
- }
-
- pdev->msg_cb = msg_cb;
- pdev->msg_context = msg_context;
-
- return A_OK;
-}
diff --git a/CORE/SERVICES/HIF/DXE/dmux_dxe_api.h b/CORE/SERVICES/HIF/DXE/dmux_dxe_api.h
deleted file mode 100644
index b32d838c901a..000000000000
--- a/CORE/SERVICES/HIF/DXE/dmux_dxe_api.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
- * @file dmux_dxe_api.h
- * @brief Define the API to the dmux_dxe module
- */
-#ifndef _DMUX_DXE_API__H_
-#define _DMUX_DXE_API__H_
-
-#include <adf_os_types.h> /* adf_os_device_t */
-#include <adf_nbuf.h> /* adf_nbuf_t */
-
-#include <athdefs.h> /* A_STATUS */
-
-#include "hif_dxe.h" /* E_HIFDXE_CHANNELTYPE */
-
-/* define an opaque handle to a dmux_dxe object */
-struct dmux_dxe_pdev_t;
-typedef struct dmux_dxe_pdev_t *dmux_dxe_handle;
-
-
-dmux_dxe_handle
-dmux_dxe_attach(adf_os_device_t osdev);
-
-void dmux_dxe_detach(dmux_dxe_handle pdev);
-
-
-typedef void (*dmux_dxe_ctrl_cb)(void *context, adf_nbuf_t info);
-
-/**
- * @brief
- * allow clients to register for rx control frame callbacks
- */
-A_STATUS
-dmux_dxe_register_callback_rx_ctrl(
- dmux_dxe_handle pdev, dmux_dxe_ctrl_cb rx_ctrl_cb, void *rx_ctrl_context);
-
-
-typedef void (*dmux_dxe_mgmt_cb)(void *context, adf_nbuf_t info);
-
-/**
- * @brief
- * allow clients to register for rx management frame callbacks
- */
-A_STATUS
-dmux_dxe_register_callback_rx_mgmt(
- dmux_dxe_handle pdev, dmux_dxe_mgmt_cb rx_mgmt_cb, void *rx_mgmt_context);
-
-
-typedef void
-(*dmux_dxe_data_cb)(void *context, adf_nbuf_t info, E_HIFDXE_CHANNELTYPE chan);
-
-/**
- * @brief
- * allow clients to register for rx data frame callbacks
- */
-A_STATUS
-dmux_dxe_register_callback_rx_data(
- dmux_dxe_handle pdev, dmux_dxe_data_cb rx_data_cb, void *rx_data_context);
-
-
-typedef void (*dmux_dxe_msg_cb)(void *context, adf_nbuf_t info);
-
-/**
- * @brief
- * allow clients to register for HTT T2H message callbacks
- */
-A_STATUS
-dmux_dxe_register_callback_msg(
- dmux_dxe_handle pdev, dmux_dxe_msg_cb msg_cb, void *msg_context);
-
-
-#endif /* _DMUX_DXE_API__H_ */
diff --git a/CORE/SERVICES/HIF/DXE/dmux_dxe_internal.h b/CORE/SERVICES/HIF/DXE/dmux_dxe_internal.h
deleted file mode 100644
index 59366f33a68f..000000000000
--- a/CORE/SERVICES/HIF/DXE/dmux_dxe_internal.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-#ifndef _DMUX_DXE_INTERNAL__H_
-#define _DMUX_DXE_INTERNAL__H_
-
-#include <athdefs.h> /* A_STATUS */
-#include <adf_nbuf.h> /* adf_nbuf_t */
-#include <adf_os_types.h> /* adf_os_device_t, adf_os_print */
-#include <adf_os_atomic.h>
-
-#include <hif_dxe.h> /* E_HIFDXE_CHANNELTYPE */
-
-struct dmux_dxe_pdev_t {
- adf_os_atomic_t ref_count; /* module reference count */
- hif_dxe_handle h_hif_dxe;
- dmux_dxe_data_cb rx_data_cb;
- dmux_dxe_mgmt_cb rx_mgmt_cb;
- dmux_dxe_ctrl_cb rx_ctrl_cb;
- dmux_dxe_msg_cb msg_cb; /* callback for HTT T2H message */
- void *rx_data_context;
- void *rx_mgmt_context;
- void *rx_ctrl_context;
- void *msg_context;
-};
-
-#endif /* _DMUX_DXE_INTERNAL__H_ */
diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe.c b/CORE/SERVICES/HIF/DXE/hif_dxe.c
deleted file mode 100644
index 18f9292504a5..000000000000
--- a/CORE/SERVICES/HIF/DXE/hif_dxe.c
+++ /dev/null
@@ -1,2083 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
-* @file hif_dxe.c
-* @brief Provide functions for DXE HIF module for RIVA FW.
-* @details
-* This file Implements the HIF DXE Module For RIVA Integrated WLAN Platform .
-* DXE software module communicates with the RIVA DXE HW block for data path which
-* is a DMA engine to transfer Data from Host DDR to Target DDR.
-* Provides API to :
-* - Initialize the DMA block registers, Allocate DMA Memory for Descriptors/Rx Network Packets.
-* - Send Recieve Network Packets over the DXE.
-* - Register Tx Complete, Rx and Low Resource Callbacks.
-* - Send Tx Data packets and report Rx Packets
-* - Report Available Free Slots in Tx Ring
-* - Flush Tx Packets
-* - Set DXE Power State when Host transitions in and out of Power Save
-* - Stop and Deallocate resources on Driver Unloads
-*/
-#include "adf_os_types.h"
-#include "adf_os_lock.h"
-#include "adf_os_time.h"
-#include "hif_dxe.h"
-#include "hif_dxe_hw_pvt.h"
-#include "hif_dxe_pvt.h"
-#include "hif_dxe_os.h"
-#define ATH_MODULE_NAME hif_dxe
-#include <a_debug.h>
-
-S_HIFDXE_CONTEXT * g_hif_dxe_ctx = NULL;
-
-#define HIF_DXE_DEBUG ATH_DEBUG_MAKE_MODULE_MASK(0)
-
-#if defined(DEBUG)
-static ATH_DEBUG_MASK_DESCRIPTION g_HIFDebugDescription[] = {
- {HIF_DXE_DEBUG,"hif_dxe"},
-};
-
-
-ATH_DEBUG_INSTANTIATE_MODULE_VAR(hif_dxe,
- "hif_dxe",
- "DXE HIF Host Interface",
- ATH_DEBUG_MASK_DEFAULTS | ATH_DEBUG_INFO | ATH_DEBUG_ERR | HIF_DXE_DEBUG,
- ATH_DEBUG_DESCRIPTION_COUNT(g_HIFDebugDescription),
- g_HIFDebugDescription);
-#endif
-
-//externs
-extern A_STATUS dxe_cmn_def_config(S_HIFDXE_CONTEXT * dxe_ctx);
-extern A_STATUS dxe_chan_def_config(S_HIFDXE_CONTEXT * pdxectx,WLANDXE_ChannelCBType *channelEntry);
-
-//Local Variables
-static char *channelType[HIFDXE_CHANNEL_MAX] =
-{
- "TX_LOW_PRI",
- "TX_HIGH_PRI",
- "RX_LOW_PRI",
- "RX_HIGH_PRI",
-};
-
-//Local Functions
-
-A_STATUS hif_dxe_notify_smsm(S_HIFDXE_CONTEXT *dxe_ctx,u_int8_t kickDxe,u_int8_t ringEmpty)
-{
- u_int32_t clrSt = 0;
- u_int32_t setSt = 0;
-
- if(kickDxe)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s Set Kick off DXE\n",__FUNCTION__));
- setSt |= HIFDXE_SMSM_WLAN_TX_ENABLE;
- }
- else
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s Clear Kick off DXE\n",__FUNCTION__));
- clrSt |= HIFDXE_SMSM_WLAN_TX_ENABLE;
- }
-
- if(ringEmpty)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s SMSM Tx Ring Empty\n",__FUNCTION__));
- clrSt |= HIFDXE_SMSM_WLAN_TX_RINGS_NOT_EMPTY;
- }
- else
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s SMSM Tx Ring Not Empty\n",__FUNCTION__));
- setSt |= HIFDXE_SMSM_WLAN_TX_RINGS_NOT_EMPTY;
- }
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s SMSM C : %x S : %x\n",__FUNCTION__,clrSt,setSt));
-
- hif_dxe_os_notifysmsm(dxe_ctx->hif_os_handle,clrSt, setSt);
-
- return A_OK;
-}
-
-
-void dxe_ps_complete(S_HIFDXE_CONTEXT *dxe_ctx, u_int8_t intr_based)
-{
-
-}
-
-void dxe_channel_clean_int(S_HIFDXE_CONTEXT *dxe_ctx,WLANDXE_ChannelCBType *channelEntry,u_int32_t *chstatus)
-{
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Read Channel Status Register to know why INT Happen */
- *chstatus = hif_dxe_os_readreg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXEStatusRegAddr);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,(" dxe_channel_clean_int : Channel : %d Channel Status 0x%x \n",channelEntry->channelType, *chstatus));
-
- /* Clean up all the INT within this channel */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,WLANDXE_INT_CLR_ADDRESS,(1 << channelEntry->assignedDMAChannel));
-
-
- /* Clean up Error INT Bit */
- if (WLANDXE_CH_STAT_INT_ERR_MASK & *chstatus)
- {
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,WLANDXE_INT_ERR_CLR_ADDRESS,(1 << channelEntry->assignedDMAChannel));
-
- }
-
- /* Clean up DONE INT Bit */
- if (WLANDXE_CH_STAT_INT_DONE_MASK & *chstatus)
- {
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,WLANDXE_INT_DONE_CLR_ADDRESS,(1 << channelEntry->assignedDMAChannel));
- }
-
- /* Clean up ED INT Bit */
- if (WLANDXE_CH_STAT_INT_ED_MASK & *chstatus)
- {
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,WLANDXE_INT_ED_CLR_ADDRESS,(1 << channelEntry->assignedDMAChannel));
- }
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-}
-
-A_STATUS dxe_tx_pull_frames(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channelEntry, u_int8_t flush)
-{
- A_STATUS status = A_OK;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- volatile WLANDXE_DescType *currentDesc = NULL;
- u_int32_t descCtrlValue = 0;
- u_int32_t *lowThreshold = NULL;
- adf_nbuf_t txframe_head = NULL;
- adf_nbuf_t txframe_cur = NULL;
-
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
-
- /* Sanity Check */
- if ((NULL == dxe_ctx) || (NULL == channelEntry))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_channel_start : dxe ctx/ Channel Entry is not valid"));
- return A_EINVAL;
- }
-
- channelEntry->txCompIntTracing |= 0x080000;
-
- if (NULL == dxe_ctx->hif_client_cb.HifTxCompleteCb)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_tx_complete_frames HifTxCompleteCb is not registered"));
- channelEntry->txIntTracing |= 0x080000;
- adf_os_assert(0);
- return A_ERROR;
- }
- //FIXME_RT The Spin Lock must be held only for DMA Channel operation and client cb must not be invoked under this spin lock
- adf_os_spin_lock(&channelEntry->dxeChannelLock);
-
- currentCtrlBlk = channelEntry->tailCtrlBlk;
- currentDesc = currentCtrlBlk->linkedDesc;
- if ( flush )
- {
- currentDesc->descCtrl.valid = 0;
- }
-
- channelEntry->txCompIntTracing |= 0x100000;
- channelEntry->txIntTracing |= 0x4000;
- if ( currentCtrlBlk == channelEntry->headCtrlBlk )
- {
- adf_os_spin_unlock(&channelEntry->dxeChannelLock);
- return A_OK;
- }
-
-
- while (1)
- {
- // HDXE_ASSERT(WLAN_PAL_IS_STATUS_SUCCESS(WLAN_RivaValidateDesc(currentDesc)));
- descCtrlValue = currentDesc->descCtrl.ctrl;
- if ((descCtrlValue & WLANDXE_DESC_CTRL_VALID))
- {
- /* caught up with head, bail out */
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_frames caught up with head - next DESC has VALID set \n"));
- channelEntry->txIntTracing |= 0x010000;
- channelEntry->txCompIntTracing |= 0x200000;
- break;
- }
- channelEntry->txIntTracing |= 0x8000;
- channelEntry->txCompIntTracing |= 0x400000;
-
- adf_os_assert(currentCtrlBlk->xfrFrame != NULL);
- adf_os_atomic_inc(&channelEntry->numFreeDesc);
- adf_os_atomic_dec(&channelEntry->numRsvdDesc);
-
- /* Send Frame TX Complete notification with frame start fragment location */
- if (WLANDXE_U32_SWAP_ENDIAN(descCtrlValue) & WLANDXE_DESC_CTRL_EOP)
- {
- adf_os_atomic_dec(&dxe_ctx->tx_pkts_pending);
- adf_os_atomic_dec(&channelEntry->tx_pkts_pending);
- adf_os_atomic_inc(&dxe_ctx->tx_pk_count);
- channelEntry->txIntTracing |= 0x200000;
- channelEntry->txCompIntTracing |= 0x01000000;
- //Link Completed Tx packet into Network Packet List to return to Client Tx Complete handler
- if (NULL == txframe_head)
- {
- txframe_head = currentCtrlBlk->xfrFrame;
- }
- else
- {
- //Link this frame to txframe_head
- adf_nbuf_set_next(txframe_cur,currentCtrlBlk->xfrFrame);
- }
- txframe_cur = currentCtrlBlk->xfrFrame;
-
- adf_os_atomic_set(&channelEntry->numFragmentCurrentChain, 0);
-
- }
- currentCtrlBlk = currentCtrlBlk->nextCtrlBlk;
- currentDesc = currentCtrlBlk->linkedDesc;
-
- /* Break condition
- * Head control block is the control block must be programed for the next TX
- * so, head control block is not programmed control block yet
- * if loop encounte head control block, stop to complete
- * in theory, COMP CB must be called already ??? */
- if (currentCtrlBlk == channelEntry->headCtrlBlk)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_frames: caught up with head ptr \n"));
- channelEntry->txIntTracing |= 0x040000;
- channelEntry->txCompIntTracing |= 0x02000000;
- break;
- }
- /* VALID Bit check ???? */
- }
-
- /* Tail and Head Control block must be same */
- channelEntry->tailCtrlBlk = currentCtrlBlk;
- adf_os_spin_unlock(&channelEntry->dxeChannelLock);
-
- //Invoke Client Tx Complete Handler with completed Tx packets
- if (txframe_head)
- {
- adf_nbuf_set_next(txframe_cur,NULL);
- dxe_ctx->hif_client_cb.HifTxCompleteCb(dxe_ctx->hif_client_cb.HifTxCompleteCtx,txframe_head,channelEntry->channelType,A_OK);
- }
-
- lowThreshold = channelEntry->channelType == HIFDXE_CHANNEL_TX_LOW_PRI?
- &(dxe_ctx->txCompInt.txLowResourceThreshold_LoPriCh):
- &(dxe_ctx->txCompInt.txLowResourceThreshold_HiPriCh);
-
- /* If specific channel hit low resource condition send notification to upper layer */
- if ((TRUE == channelEntry->hitLowResource) &&
- (adf_os_atomic_read(&channelEntry->numFreeDesc) > *lowThreshold))
- {
- /* Change it back if we raised it for fetching a remaining packet from TL */
- if (WLANDXE_TX_LOW_RES_THRESHOLD > *lowThreshold)
- {
- *lowThreshold = WLANDXE_TX_LOW_RES_THRESHOLD;
- }
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_frames: recovered from TX low res with free desc %d \n",adf_os_atomic_read(&channelEntry->numFreeDesc)));
-
- if (dxe_ctx->hif_client_cb.HifLowResourceCb)
- {
- dxe_ctx->hif_client_cb.HifLowResourceCb(dxe_ctx->hif_client_cb.HifLowResourceCtx,
- channelEntry->channelType,
- FALSE);
- }
- channelEntry->hitLowResource = FALSE;
- }
-
- channelEntry->txIntTracing |= 0x100000;
- channelEntry->txCompIntTracing |= 0x04000000;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-A_STATUS dxe_tx_complete_handler(void *pvcontext)
-{
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) pvcontext;
- A_STATUS status = A_OK;
- u_int32_t intSrc = 0;
- u_int32_t chStat = 0;
- WLANDXE_ChannelCBType *channelCb = NULL;
-
- u_int8_t bEnableISR = FALSE;
- static u_int32_t successiveIntWithIMPS;
- u_int8_t idx = 0;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Return from here if the RIVA is in IMPS, to avoid register access */
- if (HIF_DXE_POWER_STATE_DOWN == pdxectx->hostPowerState)
- {
- /* Disable interrupt at here,
- IMPS or IMPS Pending state should not access RIVA register */
- pdxectx->txIntDisabledByIMPS = TRUE;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_handler : Host Power State is %d , Return From Here \n",pdxectx->hostPowerState));
- return status;
- }
-
- /* Return from here if the RIVA is in IMPS, to avoid register access */
- if (HIF_DXE_POWER_STATE_IMPS == pdxectx->hostPowerState)
- {
- successiveIntWithIMPS++;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_handler IMPS TX COMP INT successiveIntWithIMPS %d \n", successiveIntWithIMPS));
- status = dxe_tx_pull_frames(pdxectx, &pdxectx->dxeChannel[HIFDXE_CHANNEL_TX_HIGH_PRI], FALSE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_tx_complete_handler Tx Completion Handling Failed on Channel : %d \n",HIFDXE_CHANNEL_TX_HIGH_PRI));
- }
-
- status = dxe_tx_pull_frames(pdxectx, &pdxectx->dxeChannel[HIFDXE_CHANNEL_TX_LOW_PRI], FALSE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_tx_complete_handler Tx Completion Handling Failed on Channel : %d \n",HIFDXE_CHANNEL_TX_HIGH_PRI));
- }
-
- if (adf_os_atomic_read(&pdxectx->tx_pkts_pending) && (successiveIntWithIMPS == 1))
- {
- status = hif_dxe_os_program_int(pdxectx->hif_os_handle,E_HIFDXE_TX_INTERRUPT,E_HIFDXE_INT_ENABLE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_tx_complete_handler : Enable TX complete interrupt FAIL! "));
- return status;
- }
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_handler TX COMP INT Enabled, remain TX frame count on ring %d\n", adf_os_atomic_read(&pdxectx->tx_pkts_pending)));
- /*Kicking the DXE after the TX Complete interrupt was enabled - to avoid
- the posibility of a race*/
- dxe_ps_complete(pdxectx, TRUE);
- }
- else
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_tx_complete_handler TX COMP INT NOT Enabled, RIVA still wake up? remain TX frame count on ring %d, successiveIntWithIMPS %d",
- adf_os_atomic_read(&pdxectx->tx_pkts_pending), successiveIntWithIMPS));
-
- }
- return status;
- }
-
- successiveIntWithIMPS = 0;
-
- /* Disable device interrupt */
- /* Read whole interrupt mask register and exclusive only this channel int */
- intSrc = hif_dxe_os_readreg(pdxectx->hif_os_handle,WLANDXE_INT_SRC_RAW_ADDRESS);
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_handler Int Src 0x%x\n", intSrc));
-
- /* Test High Priority Channel is the INT source or not */
- for (idx = HIFDXE_CHANNEL_TX_LOW_PRI; idx <= HIFDXE_CHANNEL_TX_HIGH_PRI ;idx++)
- {
- channelCb = &pdxectx->dxeChannel[idx];
- if (intSrc & (1 << channelCb->assignedDMAChannel))
- {
- dxe_channel_clean_int(pdxectx,channelCb,&chStat);
-
- if (WLANDXE_CH_STAT_INT_ERR_MASK & chStat)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_tx_complete_handler : Fatal Error DXE Channel : %d ChanState Invalid : %d",idx,chStat));
- adf_os_assert(0);
- }
- else if ((WLANDXE_CH_STAT_INT_DONE_MASK & chStat) || (WLANDXE_CH_STAT_INT_ED_MASK & chStat))
- {
- /* Handle TX complete for high priority channel */
- status = dxe_tx_pull_frames(pdxectx,channelCb, FALSE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_tx_complete_handler Tx Completion Handling Failed on Channel : %d \n",channelCb->channelType));
- }
- bEnableISR = TRUE;
- }
- else
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_handler DXE Channel : %d ChanState = %x\n",idx,chStat));
- }
-
- if (WLANDXE_CH_STAT_MASKED_MASK & chStat)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_handler DXE Channel : %d Masked Unmask it ChanState : %x!!\n",idx,chStat));
- }
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,( "dxe_tx_complete_handler DXE Channel : %d ChanState = %x RESRVD %d\n",idx,chStat,adf_os_atomic_read(&channelCb->numRsvdDesc)));
- }
- }
-
- if (bEnableISR || adf_os_atomic_read(&pdxectx->tx_pkts_pending))
- {
- status = hif_dxe_os_program_int(pdxectx->hif_os_handle,E_HIFDXE_TX_INTERRUPT,E_HIFDXE_INT_ENABLE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_tx_complete_handler : Enable TX complete interrupt FAIL! "));
- return status;
- }
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_complete_handler TX COMP INT Enabled, remaining TX frame count on ring %d\n", adf_os_atomic_read(&pdxectx->tx_pkts_pending)));
- }
-
- /*Kicking the DXE after the TX Complete interrupt was enabled - to avoid
- the posibility of a race*/
- dxe_ps_complete(pdxectx, TRUE);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-/* Fill RX ring with adf_nbufs.
-* DOES NOT KICK THE HARDWARE. This is the caller's responsibility.
-*
-* Return TRUE if at least one buffer added to ring.
-*/
-static u_int8_t dxe_rx_ring_fill_n(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channel, int32_t num)
-{
- A_STATUS status = A_OK;
- WLANDXE_DescCtrlBlkType *ctrlblk;
- volatile WLANDXE_DescType *desc = NULL;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s: num = %d\n",__FUNCTION__, num));
-
- adf_os_assert(adf_os_atomic_read(&channel->numFreeDesc) >= num);
-
- adf_os_spin_lock(&channel->dxeChannelLock);
-
- ctrlblk = channel->tailCtrlBlk;
-
- while (num > 0) {
- adf_nbuf_t rx_netbuf;
- u_int32_t paddr;
-
- /* Allocate adf_nbuf and add to rx ring */
- rx_netbuf = adf_nbuf_alloc(dxe_ctx->osdev, HIF_DXE_RX_BUFFER_SIZE, 0, 4, FALSE);
- if (!rx_netbuf) {
- /*
- * Failed to fill it to the desired level -
- * we'll start a timer and try again next time.
- * As long as enough buffers are left in the ring for
- * another A-MPDU rx, no special recovery is needed.
- */
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("dxe_rx_ring_fill_n: Failed to Retrieve Free Rx Buffers . Starting Rx Refill Timer Num Rx Desc : %d \n",adf_os_atomic_read(&channel->numFreeDesc)));
- adf_os_timer_start(&channel->rx_refill_retry_timer,
- HIF_DXE_RX_RING_REFILL_RETRY_TIME_MS);
- break;
- }
-
- status = adf_nbuf_map(dxe_ctx->osdev, rx_netbuf, ADF_OS_DMA_FROM_DEVICE);
- if (status != A_OK) {
- adf_nbuf_free(rx_netbuf);
- break;
- }
- paddr = adf_nbuf_get_frag_paddr_lo(rx_netbuf, 0);
-
- /* Update SW Control Block */
- ctrlblk->xfrFrame = rx_netbuf;
-
- /* Fill in hardware DXE descriptor */
- desc = ctrlblk->linkedDesc;
- desc->dxedesc.dxe_short_desc.dstMemAddrL = WLANDXE_U32_SWAP_ENDIAN(paddr);
- desc->descCtrl.ctrl = channel->extraConfig.cw_ctrl_read;
-
- /* Next */
- adf_os_atomic_dec(&channel->numFreeDesc);
- num--;
- ctrlblk = ctrlblk->nextCtrlBlk;
- }
-
- /* Update tail */
- channel->tailCtrlBlk = ctrlblk;
-
- adf_os_spin_unlock(&channel->dxeChannelLock);
-
- if (desc)
- {
- /* Issue a dummy read from the DXE descriptor DDR location to ensure
- * that any posted writes are reflected in memory before DXE looks at
- * the descriptor.
- */
- if (channel->extraConfig.cw_ctrl_read != desc->descCtrl.ctrl)
- {
- //HDXE_ASSERT(0);
- }
- }
-
- /* MEMORY BARRIER - forces writes to memory before hw is kicked. */
- hif_dxe_os_mem_barrier();
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-
- return desc ? TRUE : FALSE;
-}
-
-static A_BOOL dxe_rx_ring_replenish(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channel)
-{
- A_BOOL new_frame = FALSE;
-
- if (adf_os_atomic_dec_and_test(&channel->rx_refill_ref_cnt)) {
- int32_t num_to_fill;
-
- num_to_fill = adf_os_atomic_read(&channel->numFreeDesc);
- new_frame = dxe_rx_ring_fill_n(dxe_ctx, channel, num_to_fill /* okay if <= 0 */);
- }
- adf_os_atomic_inc(&channel->rx_refill_ref_cnt);
-
- return new_frame;
-}
-
-/* RX timer function (per channel) - refill RX DXE ring */
-static void dxe_rx_ring_refill_retry(void *arg)
-{
- WLANDXE_ChannelCBType *channel = (WLANDXE_ChannelCBType *)arg;
- S_HIFDXE_CONTEXT *dxe_ctx = channel->dxe_ctx;
- u_int8_t new_frame;
-
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("dxe_rx_ring_refill_retry Before Replenish NumDesc : %d",adf_os_atomic_read(&channel->numFreeDesc)));
-
- new_frame = dxe_rx_ring_replenish(channel->dxe_ctx, channel);
-
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("dxe_rx_ring_refill_retry After Replenish NumDesc : %d",adf_os_atomic_read(&channel->numFreeDesc)));
-
- if (!new_frame)
- {
- return;
- }
-
- /* New frames on RX ring => kick the hardware */
- switch (dxe_ctx->hostPowerState)
- {
- case HIF_DXE_POWER_STATE_IMPS:
- case HIF_DXE_POWER_STATE_DOWN:
- //PS TEST - will this also kick the DXE RX ring(s)?
- //PS TEST - FIGURE OUT WHAT TO DO HERE.
- dxe_ctx->rxIntDisabledByIMPS = TRUE;
- break;
- case HIF_DXE_POWER_STATE_BMPS:
- //PS TEST - TODO - kick ring. This is a timer function.
- //The power state if the chip is unknown. Need to do SMSM kick.
- break;
- case HIF_DXE_POWER_STATE_FULL:
- /* Enable RX ring i.e. kick/start the DXE channel */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle, channel->channelRegister.chDXECtrlRegAddr,
- channel->extraConfig.chan_mask);
- break;
- default:
- adf_os_assert(0);
- }
-}
-
-static inline adf_nbuf_t dxe_rx_ring_unlink_frame(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channelEntry,
- WLANDXE_DescCtrlBlkType *ctrlblk)
-{
- adf_nbuf_t rx_netbuf = ctrlblk->xfrFrame;
-
- if (rx_netbuf == NULL)
- return NULL;
-
- adf_nbuf_unmap_single(dxe_ctx->osdev, rx_netbuf, ADF_OS_DMA_FROM_DEVICE);
-
- ctrlblk->xfrFrame = NULL;
- adf_os_atomic_inc(&channelEntry->numFreeDesc);
-
- return rx_netbuf;
-}
-
-static void dxe_rx_ring_cleanup(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channelEntry)
-{
- u_int32_t idx;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk;
- adf_nbuf_t rx_netbuf;
-
- adf_os_assert((HIFDXE_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_RX_HIGH_PRI == channelEntry->channelType));
-
- currentCtrlBlk = channelEntry->headCtrlBlk;
-
- for (idx = 0; idx < channelEntry->numDesc; idx++)
- {
- rx_netbuf = dxe_rx_ring_unlink_frame(dxe_ctx, channelEntry, currentCtrlBlk);
- if (rx_netbuf)
- {
- adf_nbuf_free(rx_netbuf);
- }
-
- currentCtrlBlk = currentCtrlBlk->nextCtrlBlk;
- }
-}
-
-static adf_nbuf_t dxe_rx_ring_reap(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channelEntry)
-{
- WLANDXE_DescCtrlBlkType *ctrlblk; // sw desc
- volatile WLANDXE_DescType *desc; // hw desc
- u_int32_t descCtrl;
- adf_nbuf_t rx_buf_list_head = NULL;
- adf_nbuf_t rx_buf_prior = NULL;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- adf_os_spin_lock(&channelEntry->dxeChannelLock);
-
- ctrlblk = channelEntry->headCtrlBlk;
- desc = ctrlblk->linkedDesc;
- descCtrl = WLANDXE_U32_SWAP_ENDIAN(desc->descCtrl.ctrl);
-
- /* Process hardware RX ring */
- while (!(descCtrl & WLANDXE_DESC_CTRL_VALID))
- {
- adf_nbuf_t rx_buf;
-
- /* Remove RX frame from RX ring */
- rx_buf = dxe_rx_ring_unlink_frame(dxe_ctx, channelEntry, ctrlblk);
- if (rx_buf == NULL)
- {
- break;
- }
-
- /* Append to list of reaped RX frames */
- if (rx_buf_prior)
- {
- adf_nbuf_set_next(rx_buf_prior, rx_buf);
- }
- else
- {
- rx_buf_list_head = rx_buf;
- }
-
- rx_buf_prior = rx_buf;
- channelEntry->numTotalFrame++;
-
- /* Next */
- ctrlblk = ctrlblk->nextCtrlBlk;
- desc = ctrlblk->linkedDesc;
- descCtrl = WLANDXE_U32_SWAP_ENDIAN(desc->descCtrl.ctrl);
- }
-
- /* terminate rx buf list */
- if (rx_buf_prior)
- {
- adf_nbuf_set_next(rx_buf_prior, NULL);
- }
-
- /* update SW RX ring head */
- channelEntry->headCtrlBlk = ctrlblk;
-
- adf_os_spin_unlock(&channelEntry->dxeChannelLock);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-
- return rx_buf_list_head;
-}
-
-/*
-* Attempt to resync SW RX ring head ptr with HW RX ring head.
-*
-* This is called as part of a software workaround for a hardware bug.
-* Sometimes when Riva is powered up, the hardware RX ring head is
-* not programmed correctly.
-*/
-static A_BOOL dxe_rx_ring_resync(S_HIFDXE_CONTEXT *dxe_ctx,
- WLANDXE_ChannelCBType *channel)
-{
- WLANDXE_DescCtrlBlkType *ctrlblk;
- volatile WLANDXE_DescType *desc;
- u_int32_t desc_ctrl;
- u_int32_t desc_loop;
- u_int8_t invalidated_found = FALSE;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- adf_os_spin_lock(&channel->dxeChannelLock);
-
- ctrlblk = channel->headCtrlBlk;
- desc = ctrlblk->linkedDesc;
- desc_ctrl = desc->descCtrl.ctrl;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_INFO,("dxe_rx_ring_resync: RX ISR called but no frame handled PWS %d, channel %s\n",
- (int)dxe_ctx->hostPowerState, channelType[channel->channelType]));
-
-#if 0 //PS TEST - TODO - debug
- dxeChannelMonitor("RX Ready", channelEntry);
- dxeDescriptorDump(channelEntry, channelEntry->headCtrlBlk->linkedDesc, 0);
- dxeChannelRegisterDump(channelEntry, "RX successive empty interrupt");
- dxeChannelAllDescDump(channelEntry, channelEntry->channelType);
-#endif
-
- /* Abnormal interrupt detected, try to find invalidated descriptor
- * (i.e. hardware completed rx frame)
- * This would be the hardware head ptr.
- */
- for (desc_loop = 0; desc_loop < channel->numDesc; desc_loop++)
- {
- if (!(WLANDXE_U32_SWAP_ENDIAN(desc_ctrl) & WLANDXE_DESC_CTRL_VALID))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_rx_ring_resync: Found invalidated desc, resync SW and HW\n"));
-
- channel->headCtrlBlk = ctrlblk;
- invalidated_found = TRUE;
- break;
- }
-
- ctrlblk = ctrlblk->nextCtrlBlk;
- desc = ctrlblk->linkedDesc;
- desc_ctrl = desc->descCtrl.ctrl;
- }
-
- adf_os_spin_unlock(&channel->dxeChannelLock);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-
- return invalidated_found;
-}
-
-/* Return TRUE if RX ring has completed frames to be processed */
-static u_int8_t dxe_rx_channel_read_and_clear_intr(S_HIFDXE_CONTEXT *dxe_ctx,
- WLANDXE_ChannelCBType *channel,
- u_int32_t *chstatus)
-{
- u_int8_t channel_process = FALSE;
-
- /* Clear RX interrupt and get channel status */
- dxe_channel_clean_int(dxe_ctx, channel, chstatus);
-
- if (WLANDXE_CH_STAT_INT_ERR_MASK & *chstatus)
- {
- channel->errorIntCount++;
-#if 0 //PS TEST - TODO - debug stuff
- dxeChannelMonitor("RX High Event", channelCb);
- dxeDescriptorDump(channelCb, channelCb->headCtrlBlk->linkedDesc, 0);
- dxeChannelRegisterDump(channelCb, "RX HC error interrupt");
- dxeChannelAllDescDump(channelCb);
-#endif
- }
- else if ((WLANDXE_CH_STAT_INT_DONE_MASK | WLANDXE_CH_STAT_INT_ED_MASK | WLANDXE_CH_STAT_MASKED_MASK) & *chstatus)
- {
- channel_process = TRUE;
- }
-
- return channel_process;
-}
-
-A_STATUS dxe_rx_handler(void *pvcontext)
-{
- S_HIFDXE_CONTEXT * dxe_ctx =(S_HIFDXE_CONTEXT *) pvcontext;
- WLANDXE_ChannelCBType *channel_array[HIF_DXE_NUM_RX_CHANNEL];
- adf_nbuf_t rx_buf_list_head_array[HIF_DXE_NUM_RX_CHANNEL] = {NULL, NULL};
- u_int32_t intr_source;
- u_int32_t regValue;
- A_STATUS status = A_OK;
- u_int32_t i;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- channel_array[0] = &dxe_ctx->dxeChannel[HIFDXE_CHANNEL_RX_HIGH_PRI];
- channel_array[1] = &dxe_ctx->dxeChannel[HIFDXE_CHANNEL_RX_LOW_PRI];
-
- if ((HIF_DXE_POWER_STATE_IMPS == dxe_ctx->hostPowerState) ||
- (HIF_DXE_POWER_STATE_DOWN == dxe_ctx->hostPowerState))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_WARN,("dxe_rx_handler: Riva is in %d, Just Pull frames without any register touch\n", dxe_ctx->hostPowerState));
-
- /* Riva powered down - DO NOT TOUCH REGISTERS */
-
- /* Process RX ring(s) */
- for (i = 0; i < HIF_DXE_NUM_RX_CHANNEL; i++)
- {
- WLANDXE_ChannelCBType *channel = channel_array[i];
-
- if (!channel->extraConfig.chEnabled)
- {
- continue;
- }
-
- /* unlink RX bufs from RX ring */
- rx_buf_list_head_array[i] = dxe_rx_ring_reap(dxe_ctx, channel);
-
- if (rx_buf_list_head_array[i])
- {
- /* Refill RX ring */
- dxe_rx_ring_replenish(dxe_ctx, channel);
-
- /* Indicate RX bufs */
- dxe_ctx->hif_client_cb.HifRxReadyCb(dxe_ctx->hif_client_cb.HifRxReadyCtx,
- rx_buf_list_head_array[i],
- channel_array[i]->channelType);
- }
- }
-
- /* Interrupt will not enabled at here, it will be enabled at PS mode change */
- //PS TEST - will this also kick the DXE RX ring(s)? look at patch 1330 code
- dxe_ctx->rxIntDisabledByIMPS = TRUE;
-
- return status;
- }
-
- /* Read DXE interrupt source */
- intr_source = hif_dxe_os_readreg(dxe_ctx->hif_os_handle, WLANDXE_INT_SRC_RAW_ADDRESS);
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_rx_handler: Intr Src 0x%x\n", intr_source));
-
- /* Process RX ring(s) */
- for (i = 0; i < HIF_DXE_NUM_RX_CHANNEL; i++)
- {
- WLANDXE_ChannelCBType *channel = channel_array[i];
- u_int8_t rx_process_channel = channel->extraConfig.chEnabled;
- u_int32_t channelStat;
-
- rx_process_channel = rx_process_channel && (intr_source & (1 << channel->assignedDMAChannel));
-
- if (!rx_process_channel)
- {
- continue;
- }
-
- /* Read and Clear RX Channel interrupts */
- //PS TEST - can this be placed after filling the RX ring???? might be a race between filling ring and hw setting interrupt
- // might need to clear interrupt before kicking DXE channel
- if (!dxe_rx_channel_read_and_clear_intr(dxe_ctx, channel, &channelStat))
- {
- break;
- }
-
- /* Reap - unlink RX bufs from RX ring */
- rx_buf_list_head_array[i] = dxe_rx_ring_reap(dxe_ctx, channel);
-
- /* START - SW WAR
- * Workaround for hw and sw's head ptr out of sync after Riva power up.
- * If two successive RX interrupts with no completed frames in RX ring,
- * try to manually resync SW ring head ptr to HW ring head ptr.
- */
- if (rx_buf_list_head_array[i] == NULL && !channel->rx_prev_intr_completed_frames)
- {
- u_int8_t resync_success = dxe_rx_ring_resync(dxe_ctx, channel);
- if (resync_success)
- {
- rx_buf_list_head_array[i] = dxe_rx_ring_reap(dxe_ctx, channel);
- }
- else
- {
- adf_os_assert(resync_success);
- //PS TEST - TODO - what to do here.
- // rel1.2 code restarts the wlan driver. reset instead?
- }
- }
- channel->rx_prev_intr_completed_frames = (rx_buf_list_head_array[i] != NULL);
- /* END - SW WAR */
-
- if (rx_buf_list_head_array[i])
- {
- /* Refill RX ring */
- dxe_rx_ring_replenish(dxe_ctx, channel);
-
- /* Enable RX ring i.e. kick/start the DXE channel */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle, channel->channelRegister.chDXECtrlRegAddr,
- channel->extraConfig.chan_mask);
- }
- }
-
- /* Indicate RX bufs */
- for (i = 0; i < HIF_DXE_NUM_RX_CHANNEL; i++)
- {
- if (rx_buf_list_head_array[i])
- {
- dxe_ctx->hif_client_cb.HifRxReadyCb(dxe_ctx->hif_client_cb.HifRxReadyCtx,
- rx_buf_list_head_array[i],
- channel_array[i]->channelType);
- }
- }
-
- /* Re-enable rx interrupts */
- status = hif_dxe_os_program_int(dxe_ctx->hif_os_handle, E_HIFDXE_RX_INTERRUPT, E_HIFDXE_INT_ENABLE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_rx_handler: Enable RX Ready interrupt fail\n"));
- return status;
- }
-
- /* Let Riva go back to sleep */
- //PS TEST - TODO - this needs to be synchronized with ISR
- regValue = hif_dxe_os_readreg(dxe_ctx->hif_os_handle, WLANDXE_INT_MASK_REG_ADDRESS);
- regValue &= HIFDXE_RX_INTERRUPT_PRO_UNMASK;
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle, WLANDXE_INT_MASK_REG_ADDRESS, regValue);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-A_STATUS dxe_dma_core_start(S_HIFDXE_CONTEXT *dxe_ctx)
-{
- A_STATUS status = A_OK;
- u_int32_t registerData = 0;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
-// AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("dxe_ctx->hif_os_handle : %x \n",dxe_ctx->hif_os_handle));
-
- hif_dxe_os_dbgdump(dxe_ctx->hif_os_handle);
-
- /* START This core init is not needed for the integrated system */
- /* Reset First */
- registerData = WLANDXE_DMA_CSR_RESET_MASK;
- registerData = hif_dxe_os_readreg(dxe_ctx->hif_os_handle,WALNDEX_DMA_CSR_ADDRESS);
- registerData = WLANDXE_DMA_CSR_EN_MASK;
- registerData |= WLANDXE_DMA_CSR_ECTR_EN_MASK;
- registerData |= WLANDXE_DMA_CSR_TSTMP_EN_MASK;
- registerData |= WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK;
- //FIXME_RT Not Sure why this is hardcoded . Check with Danlin
- registerData = 0x00005c89;
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,WALNDEX_DMA_CSR_ADDRESS,registerData);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-A_STATUS dxe_channel_start(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channelEntry)
-{
- A_STATUS status = A_OK;
- u_int32_t regValue = 0;
- u_int32_t intMaskVal = 0;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity Check */
- if ((NULL == dxe_ctx) || (NULL == channelEntry))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_channel_start : dxe ctx/ Channel Entry is not valid"));
- return A_EINVAL;
- }
-
- /* Program Source address and destination adderss */
- if (!channelEntry->channelConfig.useShortDescFmt)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_channel_start Long Descriptor not support yet"));
- adf_os_assert(0);
- return A_ERROR;
- }
-
- /* Common register area */
- /* Next linked list Descriptor pointer */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXEDesclRegAddr,channelEntry->headCtrlBlk->linkedDescPhyAddr);
-
- if ((HIFDXE_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- /* Program default registers */
- /* TX DMA channel, DMA destination address is work Q */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXEDadrlRegAddr,channelEntry->channelConfig.refWQ);
- }
- else if ((HIFDXE_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
- {
- /* RX DMA channel, DMA source address is work Q */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXESadrlRegAddr,channelEntry->channelConfig.refWQ);
-
- /* RX DMA channel, Program pre allocated destination Address */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXEDadrlRegAddr,
- WLANDXE_U32_SWAP_ENDIAN(channelEntry->DescBottomLoc->dxedesc.dxe_short_desc.phyNextL));
-
- /* RX Channels, default Control registers MUST BE ENABLED */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXECtrlRegAddr,
- channelEntry->extraConfig.chan_mask);
- }
-
-
- channelEntry->extraConfig.chEnabled = TRUE;
- channelEntry->extraConfig.chConfigured = TRUE;
-
- /* Enable individual channel
- * not to break current channel setup, first read register */
- regValue = hif_dxe_os_readreg(dxe_ctx->hif_os_handle, WALNDEX_DMA_CH_EN_ADDRESS);
- /* Enable Channel specific Interrupt */
- intMaskVal = hif_dxe_os_readreg(dxe_ctx->hif_os_handle, WLANDXE_INT_MASK_REG_ADDRESS);
- intMaskVal |= channelEntry->extraConfig.intMask;
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,WLANDXE_INT_MASK_REG_ADDRESS,intMaskVal);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-
-}
-
-A_STATUS dxe_channel_stop(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channelEntry)
-{
- A_STATUS status = A_OK;
- u_int32_t intMaskVal = 0;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity Check */
- if ((NULL == dxe_ctx) || (NULL == channelEntry))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_channel_start : dxe ctx/ Channel Entry is not valid"));
- return A_EINVAL;
- }
-
- /* Maskout interrupt */
- intMaskVal = hif_dxe_os_readreg(dxe_ctx->hif_os_handle,WLANDXE_INT_MASK_REG_ADDRESS);
- intMaskVal ^= channelEntry->extraConfig.intMask;
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,WLANDXE_INT_MASK_REG_ADDRESS,intMaskVal);
-
- channelEntry->extraConfig.chEnabled = FALSE;
-
- /* Stop Channel ??? */
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-
-
-A_STATUS dxe_tx_push_frame(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channelEntry, adf_nbuf_t nbuf)
-{
- A_STATUS status = A_OK;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- WLANDXE_DescCtrlBlkType *startCtrlBlk = NULL;
- volatile WLANDXE_DescType *currentDesc = NULL;
- volatile WLANDXE_DescType *firstDesc = NULL;
- volatile WLANDXE_DescType *LastDesc = NULL;
- adf_os_dma_addr_t frag_paddr = 0;
- u_int32_t frag_bytes = 0;
- u_int32_t num_frags;
- u_int32_t frag_idx=0;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- if (HIF_DXE_POWER_STATE_BMPS == dxe_ctx->hostPowerState)
- {
- dxe_ctx->fwPowerState = HIF_DXE_FW_POWER_STATE_BMPS_UNKNOWN;
- hif_dxe_notify_smsm(dxe_ctx, FALSE, TRUE);
- }
-
- adf_os_spin_lock(&channelEntry->dxeChannelLock);
- adf_os_atomic_set(&channelEntry->numFragmentCurrentChain, 0);
- num_frags = adf_nbuf_get_num_frags(nbuf);
-
- currentCtrlBlk = channelEntry->headCtrlBlk;
- startCtrlBlk = channelEntry->headCtrlBlk;
-
- // Walk through NetBuf Physical Fragments and program DMA Descriptors
- for (frag_idx=0;frag_idx<num_frags;frag_idx++)
- {
- /* Get current descriptor pointer from current control block */
- currentDesc = currentCtrlBlk->linkedDesc;
- if (NULL == firstDesc)
- {
- firstDesc = currentCtrlBlk->linkedDesc;
- }
- /* All control block will have same palPacket Pointer
- * to make logic simpler */
- currentCtrlBlk->xfrFrame = nbuf;
-
- /* Get next fragment physical address and fragment size
- * if this is the first trial, will get first physical address
- * if no more fragment, Descriptor src address will be set as NULL, OK??? */
- frag_paddr = adf_nbuf_get_frag_paddr_lo(nbuf,frag_idx);
- frag_bytes = adf_nbuf_get_frag_len(nbuf,frag_idx);
- if ((0 == frag_paddr) ||
- (0 == frag_bytes))
- {
- continue;
- }
-
- /* This is the LAST descriptor valid for this transaction */
- LastDesc = currentCtrlBlk->linkedDesc;
-
- /* Program DXE descriptor */
- currentDesc->dxedesc.dxe_short_desc.srcMemAddrL = WLANDXE_U32_SWAP_ENDIAN(frag_paddr);
-
- /* Just normal data transfer from aCPU Flat Memory to BMU Q */
- if ((HIFDXE_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- currentDesc->dxedesc.dxe_short_desc.dstMemAddrL =
- WLANDXE_U32_SWAP_ENDIAN(channelEntry->channelConfig.refWQ);
- }
- else
- {
- /* Test specific H2H transfer, destination address already set
- * Do Nothing */
- }
- currentDesc->xfrSize = WLANDXE_U32_SWAP_ENDIAN(frag_bytes);
-
- /* Program channel control register */
- /* First frame not set VAL bit, why ??? */
- if (0 == adf_os_atomic_read(&channelEntry->numFragmentCurrentChain))
- {
- currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write;
- }
- else
- {
- currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write_valid;
- }
-
- /* Update statistics */
- adf_os_atomic_inc(&channelEntry->numFragmentCurrentChain);
- adf_os_atomic_dec(&channelEntry->numFreeDesc);
- adf_os_atomic_inc(&channelEntry->numRsvdDesc);
-
- /* Get next control block */
- currentCtrlBlk = currentCtrlBlk->nextCtrlBlk;
- }
-
- channelEntry->numTotalFrame++;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("dxe_tx_push_frame NUM TX FRAG %d, Total Frame %d\n",adf_os_atomic_read(&channelEntry->numFragmentCurrentChain), channelEntry->numTotalFrame));
-
- /* Program Channel control register
- * Set as end of packet
- * Enable interrupt also for first code lock down
- * performace optimization, this will be revisited */
- if (NULL == LastDesc)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_tx_push_frame NULL Last Descriptor, broken chain"));
- adf_os_spin_unlock(&channelEntry->dxeChannelLock);
- adf_os_assert(0);
- return A_EFAULT;
- }
- /* Now First one also Valid ????
- * this procedure will prevent over handle descriptor from previous
- * TX trigger */
- firstDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write_valid;
- LastDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write_eop_int;
-
-
- /* Update channel head as next avaliable linked slot */
- channelEntry->headCtrlBlk = currentCtrlBlk;
-
- adf_os_spin_unlock(&channelEntry->dxeChannelLock);
-
- //Ensure Above DMA Channel programming is complete before Notify DXE through SMSM
- hif_dxe_os_mem_barrier();
-
- /* If in BMPS mode no need to notify the DXE Engine, notify SMSM instead */
- if (HIF_DXE_FW_POWER_STATE_BMPS_UNKNOWN == dxe_ctx->fwPowerState)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,( "dxe_tx_push_frame SMSM_ret LO=%d HI=%d\n", adf_os_atomic_read(&dxe_ctx->dxeChannel[HIFDXE_CHANNEL_TX_LOW_PRI].numRsvdDesc),
- adf_os_atomic_read(&dxe_ctx->dxeChannel[HIFDXE_CHANNEL_TX_HIGH_PRI].numRsvdDesc )));
-
- hif_dxe_notify_smsm(dxe_ctx, TRUE, FALSE);
- return status;
- }
-
- /* If DXE use external descriptor, registers are not needed to be programmed
- * Just after finish to program descriptor, tirigger to send */
- if (channelEntry->extraConfig.chan_mask & WLANDXE_CH_CTRL_EDEN_MASK)
- {
- /* Issue a dummy read from the DXE descriptor DDR location to
- ensure that any previously posted write to the descriptor
- completes. */
- if (channelEntry->extraConfig.cw_ctrl_write_valid != firstDesc->descCtrl.ctrl)
- {
- //HDXE_ASSERT(0);
- }
-
- /* Everything is ready
- * Trigger to start DMA */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXECtrlRegAddr,
- channelEntry->extraConfig.chan_mask);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
- }
-
- /* If DXE not use external descriptor, program each registers */
- /* Circular buffer handle not need to program DESC register???
- * GEN5 code not programed RING buffer case
- * REVISIT THIS !!!!!! */
- if ((HIFDXE_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- /* Destination address, assigned Work Q */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXEDadrlRegAddr,
- channelEntry->channelConfig.refWQ);
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXEDadrhRegAddr,0);
-
- }
-
- /* Program Source address register
- * This address is already programmed into DXE Descriptor
- * But register also upadte */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXESadrlRegAddr,
- WLANDXE_U32_SWAP_ENDIAN(firstDesc->dxedesc.dxe_short_desc.srcMemAddrL));
-
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXESadrhRegAddr,0);
-
- /* Linked list Descriptor pointer */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXEDesclRegAddr,
- startCtrlBlk->linkedDescPhyAddr);
-
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXEDeschRegAddr,0);
-
- /* Transfer Size */
- frag_bytes = WLANDXE_U32_SWAP_ENDIAN(firstDesc->xfrSize);
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXESzRegAddr,
- frag_bytes);
-
-
- /* Everything is ready
- * Trigger to start DMA */
- hif_dxe_os_writereg(dxe_ctx->hif_os_handle,channelEntry->channelRegister.chDXECtrlRegAddr,
- channelEntry->extraConfig.chan_mask);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-
-}
-
-A_STATUS dxe_alloc_dma_ring(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channelEntry)
-{
- A_STATUS status = A_OK;
- u_int32_t idx;
- WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
- WLANDXE_DescCtrlBlkType *prevCtrlBlk = NULL;
-// WLANDXE_DescCtrlBlkType *nextCtrlBlk = NULL;
- volatile WLANDXE_DescType *currentDesc = NULL;
- volatile WLANDXE_DescType *prevDesc = NULL;
- adf_os_dma_addr_t physAddress;
-// adf_os_dma_addr_t desc_pool_paddr;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity check */
- if ((NULL == dxe_ctx) || (NULL == channelEntry))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_alloc_dmaring : Channel Entry / DXE Ctx is not valid \n"));
- return A_EINVAL;
- }
-
- //Allocate the Control Block Mem Pool
- channelEntry->ctrlblk_mem_pool = adf_os_mem_alloc(dxe_ctx->osdev,sizeof(WLANDXE_DescCtrlBlkType) * channelEntry->numDesc);
- if (NULL == channelEntry->ctrlblk_mem_pool)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_alloc_dmaring : ctrlblk_mem_pool Allocation Failed for channel %d",channelEntry->channelType));
- return A_NO_MEMORY;
- }
- adf_os_mem_set(channelEntry->ctrlblk_mem_pool, 0, sizeof(WLANDXE_DescCtrlBlkType)* channelEntry->numDesc);
- currentCtrlBlk = (WLANDXE_DescCtrlBlkType *)channelEntry->ctrlblk_mem_pool;
-
- //Allocate the Descriptor Block Mem Pool
- channelEntry->descblk_mem_pool.vaddr = adf_os_mem_alloc_consistent(dxe_ctx->osdev,sizeof(WLANDXE_DescType)*channelEntry->numDesc,
- &channelEntry->descblk_mem_pool.paddr,
- adf_os_get_dma_mem_context((&channelEntry->descblk_mem_pool), memctx));
- if (NULL == channelEntry->descblk_mem_pool.vaddr)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_alloc_dmaring : descblk_mem_pool Allocation Failed for channel %d",channelEntry->channelType));
- return A_NO_MEMORY;
- }
- adf_os_mem_set(channelEntry->descblk_mem_pool.vaddr, 0, sizeof(WLANDXE_DescType)* channelEntry->numDesc);
- currentDesc = (WLANDXE_DescType *)channelEntry->descblk_mem_pool.vaddr;
- physAddress = channelEntry->descblk_mem_pool.paddr;
-
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("dxe_alloc_dmaring : Allocating %d Descriptors For Channel %d\n",channelEntry->numDesc,channelEntry->channelType));
- /* Allocate pre asigned number of control blocks */
- for (idx = 0; idx < channelEntry->numDesc; idx++)
- {
- /* Initialize Control Block elements first */
- currentCtrlBlk->xfrFrame = NULL;
- currentCtrlBlk->linkedDesc = NULL;
- currentCtrlBlk->linkedDescPhyAddr = 0;
- currentCtrlBlk->ctrlBlkOrder = idx;
-
- //Initialize Desc
- //AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("dxe_alloc_dmaring : Allocated Descriptor %d VA 0x%x, PA 0x%x\n", idx,currentDesc, physAddress));
- if ((HIFDXE_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write;
- currentDesc->dxedesc.dxe_short_desc.dstMemAddrL = channelEntry->extraConfig.refWQ_swapped;
- }
- else if ((HIFDXE_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
- {
- currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_read;
- currentDesc->dxedesc.dxe_short_desc.srcMemAddrL = channelEntry->extraConfig.refWQ_swapped;
- }
-
- currentCtrlBlk->linkedDesc = currentDesc;
- currentCtrlBlk->linkedDescPhyAddr = physAddress;
-
-
- /* This is the first control block allocated
- * Next Control block is not allocated yet
- * head and tail must be first control block */
- if (0 == idx)
- {
- currentCtrlBlk->nextCtrlBlk = NULL;
- channelEntry->headCtrlBlk = currentCtrlBlk;
- channelEntry->tailCtrlBlk = currentCtrlBlk;
- currentDesc->dxedesc.dxe_short_desc.phyNextL = 0;
- channelEntry->DescBottomLoc = currentDesc;
- channelEntry->descBottomLocPhyAddr = physAddress;
- }
- /* This is not first, not last control block
- * previous control block may has next linked block */
- else if ((0 < idx) && (idx < (channelEntry->numDesc - 1)))
- {
- prevCtrlBlk->nextCtrlBlk = currentCtrlBlk;
- prevDesc->dxedesc.dxe_short_desc.phyNextL = WLANDXE_U32_SWAP_ENDIAN(physAddress);
- }
- /* This is last control block
- * next control block for the last control block is head, first control block
- * then whole linked list made RING */
- else
- {
- prevCtrlBlk->nextCtrlBlk = currentCtrlBlk;
- currentCtrlBlk->nextCtrlBlk = channelEntry->headCtrlBlk;
- prevDesc->dxedesc.dxe_short_desc.phyNextL =
- WLANDXE_U32_SWAP_ENDIAN(physAddress);
- currentDesc->dxedesc.dxe_short_desc.phyNextL =
- WLANDXE_U32_SWAP_ENDIAN(channelEntry->headCtrlBlk->linkedDescPhyAddr);
- }
-
- prevDesc = currentDesc;
- prevCtrlBlk = currentCtrlBlk;
-
- // advance to the next pre-allocated descriptor in the chunk
- adf_os_atomic_inc(&channelEntry->numFreeDesc);
- currentDesc++;
- currentCtrlBlk++;
- physAddress = physAddress + sizeof(WLANDXE_DescType);
- }
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-
-A_STATUS dxe_free_dma_ring(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *channelEntry)
-{
-// a_uint32_t idx = 0;
-// WLANDXE_DescCtrlBlkType *currentCtrlBlk = NULL;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity check */
- if ((NULL == dxe_ctx) || (NULL == channelEntry))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_free_dmaring: Channel Entry/dxe ctx is not valid \n"));
- return A_EINVAL;
- }
-
- // Free The rx Buffer pool
- if ((HIFDXE_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
- {
- dxe_rx_ring_cleanup(dxe_ctx, channelEntry );
- }
-
- if (channelEntry->ctrlblk_mem_pool)
- {
- adf_os_mem_free(channelEntry->ctrlblk_mem_pool);
- channelEntry->ctrlblk_mem_pool = NULL;
- }
-
- if (channelEntry->descblk_mem_pool.vaddr)
- {
- adf_os_mem_free_consistent(
- dxe_ctx->osdev,
- sizeof(WLANDXE_DescType)*channelEntry->numDesc, /* pool_size */
- channelEntry->descblk_mem_pool.vaddr,
- channelEntry->descblk_mem_pool.paddr,
- adf_os_get_dma_mem_context((&channelEntry->descblk_mem_pool), memctx));
- }
-
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return A_OK;
-}
-
-//End Local Functions
-
-/**
-* @ HIF DXE Attach . One Time Initialize of DXE HW / Allocate DXE SW Module Context / Alloc DXE Descriptors , Rx Buffers , Control Block /Attach OS Interrupts etc
-*
-* @param[in]dev - OS Dev Handle
-*
-* @retval hif_dxe_handle Allocates HIF DEX Context Block and returns handle for subsequent calls to DXE
-*/
-hif_dxe_handle hif_dxe_attach(adf_os_device_t dev)
-{
- A_STATUS status = A_OK;
- static S_HIFDXE_CONTEXT * dxe_ctx = NULL;
- u_int32_t idx;
- WLANDXE_ChannelCBType *currentChannel = NULL;
- int32_t smsmInitState;
- S_HIF_DXE_OS_PARAMS hif_dxe_os_params;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- if(dxe_ctx)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("%s : Hif Dxe Context Already Allocated. Return Existing.\n",__FUNCTION__));
- adf_os_atomic_inc(&dxe_ctx->ref_count);
- return dxe_ctx;
- }
-
- /* This is temporary allocation */
- dxe_ctx = adf_os_mem_alloc(dev,sizeof(S_HIFDXE_CONTEXT));
- if (NULL == dxe_ctx)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("WLANDXE_Open Control Block Alloc Fail \n"));
- return NULL;
- }
- adf_os_mem_zero(dxe_ctx, sizeof(S_HIFDXE_CONTEXT));
-
- adf_os_atomic_init(&dxe_ctx->ref_count);
- adf_os_atomic_inc(&dxe_ctx->ref_count);
-
- dxe_ctx->osdev = dev;
-
- hif_dxe_os_params.dxe_tx_cb = dxe_tx_complete_handler;
- hif_dxe_os_params.dxe_rx_cb = dxe_rx_handler;
- hif_dxe_os_params.pvcontext = dxe_ctx;
- dxe_ctx->hif_os_handle = hif_dxe_os_init(dev,&hif_dxe_os_params);
- if (NULL == dxe_ctx->hif_os_handle)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("WLANDXE_Open : hif_dxe_os_init Failure! \n"));
- adf_os_mem_free(dxe_ctx);
- return NULL;
- }
-
- status = dxe_cmn_def_config(dxe_ctx);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("WLANDXE_Open Common Configuration Fail"));
- hif_dxe_detach(dxe_ctx);
- return NULL;
- }
-
- dxe_ctx->dxeChannel[HIFDXE_CHANNEL_TX_LOW_PRI].channelType = HIFDXE_CHANNEL_TX_LOW_PRI;
- dxe_ctx->dxeChannel[HIFDXE_CHANNEL_TX_HIGH_PRI].channelType = HIFDXE_CHANNEL_TX_HIGH_PRI;
- dxe_ctx->dxeChannel[HIFDXE_CHANNEL_RX_LOW_PRI].channelType = HIFDXE_CHANNEL_RX_LOW_PRI;
- dxe_ctx->dxeChannel[HIFDXE_CHANNEL_RX_HIGH_PRI].channelType = HIFDXE_CHANNEL_RX_HIGH_PRI;
-
- for (idx = 0; idx < HIFDXE_CHANNEL_MAX; idx++)
- {
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("WLANDXE_Open Channel %d Open Start \n", idx));
- currentChannel = &dxe_ctx->dxeChannel[idx];
-
- /* Config individual channels from channel default setup table */
- status = dxe_chan_def_config(dxe_ctx,
- currentChannel);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("WLANDXE_Open Channel Basic Configuration Fail for channel %d", idx));
- hif_dxe_detach(dxe_ctx);
- return NULL;
- }
-
- adf_os_spinlock_init(&currentChannel->dxeChannelLock);
-
- /* Allocate DXE Control Block will be used by host DXE driver */
- status = dxe_alloc_dma_ring(dxe_ctx, currentChannel);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("WLANDXE_Open Alloc DXE Control Block Fail for channel %d", idx));
-
- hif_dxe_detach(dxe_ctx);
- return NULL;
- }
-
- /* RX specific attach */
- if ((HIFDXE_CHANNEL_RX_LOW_PRI == currentChannel->channelType) ||
- (HIFDXE_CHANNEL_RX_HIGH_PRI == currentChannel->channelType))
- {
- adf_os_atomic_init(&currentChannel->rx_refill_ref_cnt);
- adf_os_atomic_inc(&currentChannel->rx_refill_ref_cnt);
-
- dxe_rx_ring_fill_n(dxe_ctx, currentChannel, currentChannel->numDesc);
-
- adf_os_timer_init(dxe_ctx->osdev, &currentChannel->rx_refill_retry_timer,
- dxe_rx_ring_refill_retry, (void *)currentChannel);
- }
-
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("WLANDXE_Open Channel %d Open Success \n", idx));
- }
-
- dxe_ctx->dxeCookie = WLANDXE_CTXT_COOKIE;
- dxe_ctx->rxIntDisabledByIMPS = FALSE;
- dxe_ctx->txIntDisabledByIMPS = FALSE;
-
- /* Initializing default BMPS host power state and firmware Power state*/
- dxe_ctx->hostPowerState = HIF_DXE_POWER_STATE_BMPS;
- dxe_ctx->fwPowerState = HIF_DXE_FW_POWER_STATE_BMPS_UNKNOWN;
-
- /* Initialize SMSM state
- * Init State is
- * Clear TX Enable
- * RING EMPTY STATE */
-
- smsmInitState = hif_dxe_notify_smsm(dxe_ctx,FALSE, TRUE);
- if (0 != smsmInitState)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("SMSM Channel init fail %d", smsmInitState));
- hif_dxe_detach(dxe_ctx);
- return NULL;
- }
-
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("HIF_DXE Attach Success : \n"));
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-
- g_hif_dxe_ctx = dxe_ctx;
-
- return dxe_ctx;
-}
-
-/**
-* @ HIF DXE Start . Initialize DXE Channels For DMA
-*
-* @param[in]hif_dxe_pdev - HIF DXE Specific Context
-*
-* @retval A_STATUS
-*/
-
-A_STATUS hif_dxe_start(hif_dxe_handle hif_dxe_pdev)
-{
- A_STATUS status = A_OK;
- u_int32_t idx = 0;
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) hif_dxe_pdev;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity */
- if (NULL == pdxectx)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_start : Invalid DXE Context \n"));
- return A_EINVAL;
- }
-
- /* WLANDXE_Start called means DXE engine already initiates
- * And DXE HW is reset and init finished
- * But here to make sure HW is initialized, reset again */
- status = dxe_dma_core_start(pdxectx);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_start : DXE HW init Fail \n"));
- return status;
- }
-
- /* Individual Channel Start */
- for (idx = 0; idx < HIFDXE_CHANNEL_MAX; idx++)
- {
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("hif_dxe_start : Start DXE Channel %d \n", idx));
-
- /* Program each channel register with configuration arguments */
- //Trigger Start DMA Channel
- status = dxe_channel_start(pdxectx, &pdxectx->dxeChannel[idx]);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_start : Start DMA channel %d Fail \n", idx));
- return status;
- }
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG,("hif_dxe_start : Start DXE Channel %d SUCCESS! \n", idx));
- }
-
- //FIXME_RT Check if we need to notify hif_dxe_os to Start Routing Interrupts to us only after this point
-
- /* Enable system level ISR */
- /* Enable RX ready Interrupt at here */
- status = hif_dxe_os_program_int(pdxectx->hif_os_handle,E_HIFDXE_RX_INTERRUPT,E_HIFDXE_INT_ENABLE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_start : Enable TX complete interrupt FAIL! "));
- return status;
- }
-
- /* Disable TX ready Interrupt and Re-Enable Only when required */
- status = hif_dxe_os_program_int(pdxectx->hif_os_handle,E_HIFDXE_TX_INTERRUPT,E_HIFDXE_INT_DISABLE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_start : Enable TX complete interrupt FAIL! "));
- return status;
- }
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-/**
-* @ HIF DXE Register . Register Packet Callbacks
-*
-* @param[in]hif_dxe_pdev - HIF DXE Specific Context
-*
-* @retval A_STATUS
-*/
-A_STATUS hif_dxe_client_registration(hif_dxe_handle hif_dxe_pdev, S_HIFDXE_CALLBACK *hif_dxe_cb)
-{
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) hif_dxe_pdev;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity */
- if ((NULL == pdxectx) || (NULL == hif_dxe_cb))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_client_registration : Invalid DXE Context \n"));
- return A_EINVAL;
- }
-
- if (NULL != hif_dxe_cb->HifTxCompleteCb) {
- pdxectx->hif_client_cb.HifTxCompleteCb = hif_dxe_cb->HifTxCompleteCb;
- pdxectx->hif_client_cb.HifTxCompleteCtx = hif_dxe_cb->HifTxCompleteCtx;
- }
-
- if (NULL != hif_dxe_cb->HifRxReadyCb) {
- pdxectx->hif_client_cb.HifRxReadyCb = hif_dxe_cb->HifRxReadyCb;
- pdxectx->hif_client_cb.HifRxReadyCtx = hif_dxe_cb->HifRxReadyCtx;
- }
-
- if (NULL != hif_dxe_cb->HifLowResourceCb) {
- pdxectx->hif_client_cb.HifLowResourceCb = hif_dxe_cb->HifLowResourceCb;
- pdxectx->hif_client_cb.HifLowResourceCtx = hif_dxe_cb->HifLowResourceCtx;
- }
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return A_OK;
-}
-
-/**
-* @ HIF DXE Send . Send packet on DXE
-*
-* @param[in]hif_dxe_pdev - HIF DXE Specific Context
-* @param[in]eHifDxeChannel - DXE Channel for Send
-* @param[in]nbuf - SDU to send
-*
-* @retval A_STATUS
-*/
-A_STATUS hif_dxe_send(hif_dxe_handle hif_dxe_pdev, E_HIFDXE_CHANNELTYPE channel, adf_nbuf_t nbuf)
-{
- A_STATUS status = A_OK;
- WLANDXE_ChannelCBType *currentChannel = NULL;
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) hif_dxe_pdev;
- u_int32_t lowThreshold = 0;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity */
- if (NULL == pdxectx)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_send : Invalid DXE Context \n"));
- return A_EINVAL;
- }
-
- if (NULL == nbuf)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_send : Invalid Data packet \n"));
- return A_EINVAL;
- }
-
- if ((HIFDXE_CHANNEL_MAX <= channel))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_send : Invalid Channel \n"));
- return A_EINVAL;
- }
-
- currentChannel = &pdxectx->dxeChannel[channel];
-
-
- lowThreshold = currentChannel->channelType == HIFDXE_CHANNEL_TX_LOW_PRI?
- (pdxectx->txCompInt.txLowResourceThreshold_LoPriCh):
- (pdxectx->txCompInt.txLowResourceThreshold_HiPriCh);
-
- /* Decide have to activate TX complete event or not */
- switch (pdxectx->txCompInt.txIntEnable)
- {
- /* TX complete interrupt will be activated when low DXE resource */
- case WLANDXE_TX_COMP_INT_LR_THRESHOLD:
- if (adf_os_atomic_read(&currentChannel->numFreeDesc) <= lowThreshold)
- {
- if (pdxectx->hif_client_cb.HifLowResourceCb)
- {
- pdxectx->hif_client_cb.HifLowResourceCb(pdxectx->hif_client_cb.HifLowResourceCtx,
- channel,
- TRUE);
- }
- currentChannel->hitLowResource = TRUE;
- }
- break;
- //Do We need to support the other Interrupt Mechanisms?
-
- case WLANDXE_TX_COMP_INT_PER_K_FRAMES:
- break;
-
- /* TX complete interrupt will be activated periodically */
- case WLANDXE_TX_COMP_INT_TIMER:
- break;
- default:
- adf_os_assert(0); //Eunexpected Configuration
-
- }
-
-
- /* Update DXE descriptor, this is frame based
- * if a frame consist of N fragments, N Descriptor will be programed */
- status = dxe_tx_push_frame(pdxectx,currentChannel, nbuf);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_send : TX Push Frame failure : %d\n",status));
- return status;
- }
- adf_os_atomic_inc(&pdxectx->tx_pkts_pending);
-
- adf_os_atomic_inc(&currentChannel->tx_pkts_pending);
-
-
-#if 0
- //Try Drain Tx Queues
- currentChannel = &pdxectx->dxeChannel[HIFDXE_CHANNEL_TX_HIGH_PRI];
-
- /* Handle TX complete for high priority channel */
- status = dxe_tx_pull_frames(pdxectx, currentChannel, FALSE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_send : Tx Completion Handling Failed on Channel : %d \n",HIFDXE_CHANNEL_TX_HIGH_PRI));
- }
-
- currentChannel = &pdxectx->dxeChannel[HIFDXE_CHANNEL_TX_LOW_PRI];
-
- /* Handle TX complete for low priority channel */
- status = dxe_tx_pull_frames(pdxectx, currentChannel, FALSE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_send : Tx Completion Handling Failed on Channel : %d \n",HIFDXE_CHANNEL_TX_LOW_PRI));
- }
-#endif
- //Enable Tx Interrupt if Pkts Pending
- if (adf_os_atomic_read(&pdxectx->tx_pkts_pending))
- {
- status = hif_dxe_os_program_int(pdxectx->hif_os_handle,E_HIFDXE_TX_INTERRUPT,E_HIFDXE_INT_ENABLE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_send : Enable TX complete interrupt FAIL! "));
- return status;
- }
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("hif_dxe_send TX COMP INT Enabled, remain TX frame count on ring %d\n", adf_os_atomic_read(&pdxectx->tx_pkts_pending)));
- /*Kicking the DXE after the TX Complete interrupt was enabled - to avoid
- the posibility of a race*/
- }
-
- //Invoke PS Handler to check if SMSM Notify required
- dxe_ps_complete(pdxectx, FALSE);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-
- return status;
-}
-
-//FIXME_RT : Do We Need This
-//A_STATUS HIF_DXE_CompleteTX(void *dxe_ctx);
-
-
-/**
-* @ HIF DXE GetResources . Return Available Free Tx Slots in DXE DMA Tx Ring for specified channel
-*
-* @param[in]hif_dxe_pdev - HIF DXE Specific Context
-* @param[in]eHifDxeChannel - DXE Channel
-*
-* @retval a_uint32_t Num Available Resources
-*/
-u_int32_t hif_dxe_get_resources(hif_dxe_handle hif_dxe_pdev, E_HIFDXE_CHANNELTYPE channel)
-{
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) hif_dxe_pdev;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity */
- if (NULL == pdxectx)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_get_resources : Invalid DXE Context \n"));
- adf_os_assert(0);
- return A_EINVAL;
- }
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return adf_os_atomic_read(&pdxectx->dxeChannel[channel].numFreeDesc);
-}
-/**
-* @ HIF DXE Flush Tx Packets . Flush And return Tx Packets Pending in DMA through Tx Completion Callbacks.
-*
-* @param[in]dxe_ctx - HIF DXE Specific Context
-*
-* @retval A_STATUS
-*/
-A_STATUS hif_dxe_flush_txpackets(hif_dxe_handle hif_dxe_pdev)
-{
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) hif_dxe_pdev;
- WLANDXE_ChannelCBType *txChannel;
- A_STATUS status = A_OK;
- u_int32_t txChannelsDisableRegValue;
- u_int8_t txChannelDisableWaitLoop;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity */
- if (NULL == pdxectx)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_flush_txpackets : Invalid DXE Context \n"));
- adf_os_assert(0);
- return A_EINVAL;
- }
-
- /* To ensure DXE wake up, Sedn SMSM Notification */
- status = hif_dxe_notify_smsm(pdxectx, FALSE, FALSE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_flush_txpackets, SMSM Kick RIVA Fail %d", status));
- return status;
- }
-
- /* Disable TX Channels first */
- txChannelsDisableRegValue = hif_dxe_os_readreg(pdxectx->hif_os_handle,WALNDEX_DMA_CH_EN_ADDRESS);
- txChannelsDisableRegValue &= (~HIFDXE_TX_CHANNELS_EN_BIT_MASK);
- hif_dxe_os_writereg(pdxectx->hif_os_handle,WALNDEX_DMA_ENCH_ADDRESS, txChannelsDisableRegValue);
-
- /* Check TX channels are disabled or not
- * To flush TX channels, it should be disabled. */
- for (txChannelDisableWaitLoop = 0; txChannelDisableWaitLoop < HIFDXE_MAX_TX_CH_DISABLE_WAIT; txChannelDisableWaitLoop++)
- {
- txChannelsDisableRegValue = hif_dxe_os_readreg(pdxectx->hif_os_handle,WALNDEX_DMA_CH_EN_ADDRESS);
-
- if (0 == (txChannelsDisableRegValue & HIFDXE_TX_CHANNELS_EN_BIT_MASK))
- {
- break;
- }
- else
- {
- adf_os_udelay(1);
- }
- }
- /* MAX Time wait but could not disabled TX channel */
- if (HIFDXE_MAX_TX_CH_DISABLE_WAIT == txChannelDisableWaitLoop)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_flush_txpackets, During %d usec, failed to disable TX Channel",HIFDXE_MAX_TX_CH_DISABLE_WAIT));
- }
-
- //If Channels Could not be disabled continue to Force Pull out Tx Frames Anyway .
-
- /* Low Channel First */
- txChannel = &pdxectx->dxeChannel[HIFDXE_CHANNEL_TX_LOW_PRI];
- status = dxe_tx_pull_frames(pdxectx,txChannel, TRUE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_flush_txpackets Failed to Pull Frames from Channel : %d Status %d\n",txChannel->channelType,status));
- return status;
- }
-
- /* High Channel */
- txChannel = &pdxectx->dxeChannel[HIFDXE_CHANNEL_TX_HIGH_PRI];
- status = dxe_tx_pull_frames(pdxectx, txChannel, TRUE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_flush_txpackets, Failed to Pull Frames from Channel : %d Status %d\n",txChannel->channelType,status));
- return status;
- }
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-/**
-* @ HIF DXE Set Power State . Synchronously Set Power State relevant for DXE / Ensure No references into DXE are Outstanding
-*
-* @param[in]hif_dxe_pdev - HIF DXE Specific Context
-* @param[in]PowerState - New Power State
-*
-* @retval A_STATUS
-*/
-A_STATUS hif_dxe_set_power_state(hif_dxe_handle hif_dxe_pdev, a_uint8_t PowerState )
-{
- A_STATUS status = A_OK;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-/**
-* @ HIF DXE Stop . Stop DMA
-*
-* @param[in]hif_dxe_pdev - HIF DXE Specific Context
-*
-* @retval A_STATUS
-*/
-A_STATUS hif_dxe_stop(hif_dxe_handle hif_dxe_pdev)
-{
- A_STATUS status = A_OK;
- u_int32_t idx = 0;
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) hif_dxe_pdev;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity */
- if (NULL == pdxectx)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_stop : Invalid DXE Context \n"));
- return A_EINVAL;
- }
-
- //FIXME_RT Make sure No Outstanding References to DXE . Synchronize with dxe_stopped
- hif_dxe_os_stop(pdxectx->hif_os_handle);
-
- for (idx = 0; idx < HIFDXE_CHANNEL_MAX; idx++)
- {
- status = dxe_channel_stop(pdxectx, &pdxectx->dxeChannel[idx]);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_stop : channel %d stop failed \n",idx));
- return status;
- }
- }
-
- /* During Stop Disable interrupts For Good (INTR Disable is syncronized at Interrupt IRQL)*/
- status = hif_dxe_os_program_int(pdxectx->hif_os_handle,E_HIFDXE_TX_INTERRUPT,E_HIFDXE_INT_DISABLE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_start : Disable TX complete interrupt FAIL! "));
- }
- status = hif_dxe_os_program_int(pdxectx->hif_os_handle,E_HIFDXE_RX_INTERRUPT,E_HIFDXE_INT_DISABLE);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_start : Disable TX complete interrupt FAIL! "));
- }
-
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return status;
-}
-
-/**
- * @brief HIF DXE Read register
- *
- * @param[in] hif_dxe_pdev - HIF DXE Specific Context
- * @param[in] Addr
- *
- * @return Read Value
- */
-u_int32_t hif_dxe_readreg(hif_dxe_handle hif_dxe_pdev, u_int32_t addr)
-{
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) hif_dxe_pdev;
- return hif_dxe_os_readreg(pdxectx->hif_os_handle,addr);
-}
-
-/**
- * @brief HIF DXE Write register
- *
- * @param[in] hif_dxe_pdev - HIF DXE Specific Context
- * @param[in] Addr
- * @param[in] val
- *
- * @return void
- */
-void
-hif_dxe_writereg(hif_dxe_handle hif_dxe_pdev, u_int32_t addr, u_int32_t val)
-{
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) hif_dxe_pdev;
- hif_dxe_os_writereg(pdxectx->hif_os_handle,addr,val);
-}
-
-/**
-* @ HIF DXE Detach . UnInitialize DXE Resources / HW / Free Memory / Detach OS Interrupts etc
-*
-* @param[in]dxe_ctx - HIF DXE Specific Context
-*
-* @retval A_STATUS
-*/
-A_STATUS hif_dxe_detach(hif_dxe_handle hif_dxe_pdev)
-{
- u_int32_t idx = 0;
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) hif_dxe_pdev;
- WLANDXE_ChannelCBType *currentChannel = NULL;
- A_STATUS status;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
-
- /* Sanity */
- if (NULL == pdxectx)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_detach Invalid DXE Context \n"));
- return A_EINVAL;
- }
-
-
- if (!adf_os_atomic_dec_and_test(&pdxectx->ref_count)) {
- /* there are other clients still using dmux_dxe */
- return A_OK;
- }
-
- /*Stop DXE After making Sure OS Is DeInitialized ie No More DPC's are firing*/
- status = hif_dxe_stop(pdxectx);
- if (A_OK != status)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("hif_dxe_detach : hif_dxe_stop Failed \n"));
- }
-
- hif_dxe_os_deinit(pdxectx->hif_os_handle);
-
- for (idx = 0; idx < HIFDXE_CHANNEL_MAX; idx++)
- {
- currentChannel = &pdxectx->dxeChannel[idx];
- if (currentChannel)
- {
- adf_os_spinlock_destroy(&currentChannel->dxeChannelLock);
- dxe_free_dma_ring(pdxectx, &pdxectx->dxeChannel[idx]);
-
- /* RX specific detach */
- if ((HIFDXE_CHANNEL_RX_LOW_PRI == currentChannel->channelType) ||
- (HIFDXE_CHANNEL_RX_HIGH_PRI == currentChannel->channelType))
- {
- adf_os_timer_cancel(&currentChannel->rx_refill_retry_timer);
- adf_os_timer_free(&currentChannel->rx_refill_retry_timer);
- }
- }
- }
- adf_os_mem_free(pdxectx);
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
- return A_OK;
-}
-
-#if 0
-void hif_dxe_dump()
-{
- S_HIFDXE_CONTEXT * pdxectx =(S_HIFDXE_CONTEXT *) g_hif_dxe_ctx;
- WLANDXE_ChannelCBType *currentChannel;
- A_UINT8 idx=0;
-
- AR_DEBUG_PRINTF(HIF_DXE_DEBUG, ("+%s\n",__FUNCTION__));
- for (idx = 0; idx < HIFDXE_CHANNEL_MAX; idx++)
- {
- currentChannel = &pdxectx->dxeChannel[idx];
- if (currentChannel)
- {
- A_UINT32 regval = hif_dxe_os_readreg(pdxectx->hif_os_handle,currentChannel->channelRegister.chDXEStatusRegAddr);
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Channel Idx : %d\n",idx));
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Channel Type : %d\n",currentChannel->channelType));
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Num Desc : %d\n",currentChannel->numDesc));
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Num Free Desc : %d\n",currentChannel->numFreeDesc));
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Channel Status : 0x%x\n",regval));
- }
-
- //For Debugging Tx Stall Scenario check and print Avalibale BD's in BMU
- if(((currentChannel->channelType == HIFDXE_CHANNEL_TX_LOW_PRI) || (currentChannel->channelType == HIFDXE_CHANNEL_TX_HIGH_PRI)) &&
- currentChannel->tx_pkts_pending > HIF_DXE_TX_PENDING_DEBUG_THRESHOLD )
- {
- A_UINT32 avail_bds , bd_thres0 , regval ;
- bd_thres0 = hif_dxe_os_readreg(pdxectx->hif_os_handle, WLANDXE_BMU_PDU_THRES0);
- avail_bds = hif_dxe_os_readreg(pdxectx->hif_os_handle, WLANDXE_BMU_AVAILABLE_BD_PDU);
- if(avail_bds < ((bd_thres0 & WLANDXE_BMU_BD_THRES0_MASK) * 10))
- {
- A_UINT32 wq_addr = 0;
- A_UINT8 wq_idx = 0;
- //Currently dump only if bd's less than 10 times Threshold
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(" Channel : %d TxPending : %d Avail BD-PDU : 0x%x Threshold : 0x%x \n",idx,currentChannel->tx_pkts_pending,avail_bds,bd_thres0));
-
- for(wq_idx=0; wq_idx < 27; wq_idx++)
- {
- wq_addr = (0xFB80001c | ((wq_idx << 8) & 0xff00));
- regval = hif_dxe_os_readreg(pdxectx->hif_os_handle,wq_addr);
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("WQ8 : Addr : 0x%x 0x%x \n",wq_addr,regval));
- }
- }
- }
- }
-}
-#endif
diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe.h b/CORE/SERVICES/HIF/DXE/hif_dxe.h
deleted file mode 100644
index 687bc4d4e2ee..000000000000
--- a/CORE/SERVICES/HIF/DXE/hif_dxe.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
- * @file hif_dxe.h
- * @brief Provide functions for DXE HIF module for RIVA FW.
- * @details
- * This file Provides the HIF DXE Module API For RIVA Integrated WLAN Platform .
- * DXE software module communicates with the RIVA DXE HW block for data path which
- * is a DMA engine to transfer Data between [ Host DDR <--> Target DDR]
- * Provides API to :
- * - Initialize the DMA block registers , Allocate DMA Memory for Descriptors/Rx Network Packets.
- * - Register Tx Complete , Rx and Low Resource Callbacks.
- * - Send Tx Data packets and report Rx Packets
- * - Report Available Free Slots in Tx Ring
- * - Flush Tx Packets
- * - Set DXE Power State when Host transitions in and out of Power Save
- * - Stop DXE and Deallocate resources on Driver Unloads
- */
-#ifndef _HIF_DXE_H_
-#define _HIF_DXE_H_
-#include "adf_os_types.h"
-#include "athdefs.h"
-#include "a_types.h" // for A_BOOL/TRUE/FALSE
-#include "adf_nbuf.h" /* adf_nbuf_t */
-
-typedef void * hif_dxe_handle;
-
-typedef enum _E_HIFDXE_CHANNELTYPE
-{
- HIFDXE_CHANNEL_TX_LOW_PRI,
- HIFDXE_CHANNEL_TX_HIGH_PRI,
- HIFDXE_CHANNEL_RX_LOW_PRI,
- HIFDXE_CHANNEL_RX_HIGH_PRI,
- HIFDXE_CHANNEL_MAX
-} E_HIFDXE_CHANNELTYPE;
-
-typedef A_STATUS (*HIFDXE_TxCompleteCb)(void *pContext, adf_nbuf_t tx_list, E_HIFDXE_CHANNELTYPE channel ,A_STATUS status);
-typedef A_STATUS (*HIFDXE_RxFrameReadyCb) (void *pContext, adf_nbuf_t rx_list, E_HIFDXE_CHANNELTYPE channel);
-typedef A_STATUS (*HIFDXE_LowResourceCb)(void *pContext, E_HIFDXE_CHANNELTYPE channel, A_BOOL is_low_resource);
-
-
-typedef struct _S_HIFDXE_CALLBACK
-{
- HIFDXE_TxCompleteCb HifTxCompleteCb;
- HIFDXE_RxFrameReadyCb HifRxReadyCb;
- HIFDXE_LowResourceCb HifLowResourceCb;
- void *HifTxCompleteCtx;
- void *HifRxReadyCtx;
- void *HifLowResourceCtx;
-} S_HIFDXE_CALLBACK;
-
-
-/**
- * @ HIF DXE Attach . One Time Initialize of DXE HW / Allocate DXE SW Module Context / Alloc DXE Descriptors , Rx Buffers , Control Block /Attach OS Interrupts etc
- *
- * @param[in]dev - OS Dev Handle
- *
- * @retval hif_dxe_handle Allocates HIF DEX Context Block and returns handle for subsequent calls to DXE
- */
-hif_dxe_handle hif_dxe_attach(adf_os_device_t dev);
-
-/**
- * @ HIF DXE Start . Initialize the DMA Channels and per channel DMA Registers to Valid Values.
- *
- * @param[in]hif_dxe_pdev - HIF DXE Specific Context
- *
- * @retval A_STATUS
- */
-
-A_STATUS hif_dxe_start(hif_dxe_handle hif_dxe_pdev);
-
-/**
- * @ HIF DXE Register . Register Packet Callbacks
- *
- * @param[in]hif_dxe_pdev - HIF DXE Specific Context
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_client_registration(hif_dxe_handle hif_dxe_pdev, S_HIFDXE_CALLBACK *hif_dxe_cb);
-
-/**
- * @ HIF DXE Send . Send packet on DXE
- *
- * @param[in]hif_dxe_pdev - HIF DXE Specific Context
- * @param[in]eHifDxeChannel - DXE Channel for Send
- * @param[in]nbuf - SDU to send
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_send(hif_dxe_handle hif_dxe_pdev, E_HIFDXE_CHANNELTYPE channel, adf_nbuf_t nbuf);
-
-
-
-//FIXME_RT : Do We Need This
-//A_STATUS HIF_DXE_CompleteTX(void *hif_dxe_pdev);
-
-
-/**
- * @ HIF DXE GetResources . Return Available Free Tx Slots in DXE DMA Tx Ring for specified channel
- *
- * @param[in]hif_dxe_pdev - HIF DXE Specific Context
- * @param[in]eHifDxeChannel - DXE Channel
- *
- * @retval a_uint32_t Num Available Resources
- */
-u_int32_t hif_dxe_get_resources(hif_dxe_handle hif_dxe_pdev, E_HIFDXE_CHANNELTYPE channel);
-
-
-/**
- * @ HIF DXE Flush Tx Packets . Flush And return Tx Packets Pending in DMA through Tx Completion Callbacks.
- *
- * @param[in]hif_dxe_pdev - HIF DXE Specific Context
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_flush_packets(hif_dxe_handle hif_dxe_pdev);
-
-
-/**
- * @ HIF DXE Set Power State . Synchronously Set Power State relevant for DXE / Ensure No references into DXE are Outstanding
- *
- * @param[in]hif_dxe_pdev - HIF DXE Specific Context
- * @param[in]PowerState - New Power State
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_set_power_state(hif_dxe_handle hif_dxe_pdev, u_int8_t power_state );
-
-
-/**
- * @brief HIF DXE Read register
- *
- * @param[in] hif_dxe_pdev - HIF DXE Specific Context
- * @param[in] Addr
- *
- * @return Read Value
- */
-u_int32_t hif_dxe_readreg(hif_dxe_handle hif_dxe_pdev, u_int32_t addr);
-
-
-/**
- * @brief HIF DXE Write register
- *
- * @param[in] hif_dxe_pdev - HIF DXE Specific Context
- * @param[in] Addr
- * @param[in] val
- *
- * @return void
- */
-void
-hif_dxe_writereg(hif_dxe_handle hif_dxe_pdev, u_int32_t addr, u_int32_t val);
-
-
-/**
- * @ HIF DXE Stop . Stop DMA
- *
- * @param[in]hif_dxe_pdev - HIF DXE Specific Context
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_stop(hif_dxe_handle hif_dxe_pdev);
-
-
-/**
- * @ HIF DXE Detach . UnInitialize DXE Resources / HW / Free Memory / Detach OS Interrupts etc
- *
- * @param[in]hif_dxe_pdev - HIF DXE Specific Context
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_detach(hif_dxe_handle hif_dxe_pdev);
-
-#endif
diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe_config.c b/CORE/SERVICES/HIF/DXE/hif_dxe_config.c
deleted file mode 100644
index 5429717badc0..000000000000
--- a/CORE/SERVICES/HIF/DXE/hif_dxe_config.c
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
-* @file hif_dxe_config.c
-* @brief Provide functions for DXE HIF module DMA Channel configuration
-* @details
-* This file Implements the HIF DXE DMA Channel Configuration Values like :
-* - DMA Channel Base Addresses
-* - DMA Channel Interrupt Maskshif
-* - Provide DMA Channel to DMA Channel Configuration mapping
-* - Per Channel Config Values like : NumDesc , NumBuffers , Priority , DMA xfr direction etc
-* -
-* -
-*/
-#include "adf_os_types.h"
-#include "hif_dxe.h"
-#include "hif_dxe_hw_pvt.h"
-#include "hif_dxe_pvt.h"
-#define ATH_MODULE_NAME hif_dxe_config
-#include <a_debug.h>
-
-#define HIF_DXE_CONFIG_DEBUG ATH_DEBUG_MAKE_MODULE_MASK(0)
-
-#if defined(DEBUG)
-static ATH_DEBUG_MASK_DESCRIPTION g_HIFConfigDebugDescription[] = {
- {HIF_DXE_CONFIG_DEBUG,"hif_dxe_config"},
-};
-
-ATH_DEBUG_INSTANTIATE_MODULE_VAR(hif_dxe_config,
- "hif_dxe_config",
- "DXE HIF Config Module",
- ATH_DEBUG_MASK_DEFAULTS | ATH_DEBUG_INFO | HIF_DXE_CONFIG_DEBUG,
- ATH_DEBUG_DESCRIPTION_COUNT(g_HIFConfigDebugDescription),
- g_HIFConfigDebugDescription);
-#endif
-
-typedef struct
-{
- E_HIFDXE_CHANNELTYPE wlanChannel;
- WLANDXE_DMAChannelType DMAChannel;
- WLANDXE_ChannelConfigType *channelConfig;
-} WLANDXE_ChannelMappingType;
-
-u_int32_t channelBaseAddressList[WLANDXE_DMA_CHANNEL_MAX] =
-{
- WLANDXE_DMA_CHAN0_BASE_ADDRESS,
- WLANDXE_DMA_CHAN1_BASE_ADDRESS,
- WLANDXE_DMA_CHAN2_BASE_ADDRESS,
- WLANDXE_DMA_CHAN3_BASE_ADDRESS,
- WLANDXE_DMA_CHAN4_BASE_ADDRESS,
- WLANDXE_DMA_CHAN5_BASE_ADDRESS,
- WLANDXE_DMA_CHAN6_BASE_ADDRESS
-};
-
-u_int32_t channelInterruptMask[WLANDXE_DMA_CHANNEL_MAX] =
-{
- WLANDXE_INT_MASK_CHAN_0,
- WLANDXE_INT_MASK_CHAN_1,
- WLANDXE_INT_MASK_CHAN_2,
- WLANDXE_INT_MASK_CHAN_3,
- WLANDXE_INT_MASK_CHAN_4,
- WLANDXE_INT_MASK_CHAN_5,
- WLANDXE_INT_MASK_CHAN_6
-};
-
-WLANDXE_ChannelConfigType chanTXLowPriConfig =
-{
- /* Q handle type, Circular */
- WLANDXE_CHANNEL_HANDLE_CIRCULA,
-
- /* Number of Descriptor, NOT CLEAR YET !!! */
- HIFDXE_TX_LO_PRI_RES_NUM ,
-
- /* MAX num RX Buffer */
- 0,
-
- /* Reference WQ, TX23 */
-#ifdef HIF_DXE_TEST
- 11,
-#else
- 23,
-#endif
-
- /* USB Only, End point info */
- 0,
-
- /* Transfer Type */
- WLANDXE_DESC_CTRL_XTYPE_H2B,
-
- /* Channel Priority 7(Highest) - 0(Lowest) NOT CLEAR YET !!! */
- 4,
-
- /* BD attached to frames for this pipe */
- TRUE,
-
- /* chk_size, NOT CLEAR YET !!!*/
- 0,
-
- /* bmuThdSel, NOT CLEAR YET !!! */
- 5,
-
- /* Added in Gen5 for Prefetch, NOT CLEAR YET !!! */
- TRUE,
-
- /* Use short Descriptor */
- TRUE
-};
-
-WLANDXE_ChannelConfigType chanTXHighPriConfig =
-{
- /* Q handle type, Circular */
- WLANDXE_CHANNEL_HANDLE_CIRCULA,
-
- /* Number of Descriptor, NOT CLEAR YET !!! */
- HIFDXE_TX_HI_PRI_RES_NUM ,
-
- /* MAX num RX Buffer */
- 0,
-
- /* Reference WQ, TX23 */
- 23,
-
- /* USB Only, End point info */
- 0,
-
- /* Transfer Type */
- WLANDXE_DESC_CTRL_XTYPE_H2B,
-
- /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
- 6,
-
- /* BD attached to frames for this pipe */
- TRUE,
-
- /* chk_size, NOT CLEAR YET !!!*/
- 0,
-
- /* bmuThdSel, NOT CLEAR YET !!! */
- 7,
-
- /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
- TRUE,
-
- /* Use short Descriptor */
- TRUE
-};
-
-WLANDXE_ChannelConfigType chanRXLowPriConfig =
-{
- /* Q handle type, Circular */
- WLANDXE_CHANNEL_HANDLE_CIRCULA,
-
- /* Number of Descriptor, NOT CLEAR YET !!! */
- 256,
-
- /* MAX num RX Buffer, NOT CLEAR YET !!! */
- 1,
-
- /* Reference WQ, NOT CLEAR YET !!! */
- /* Temporary BMU Work Q 4 */
-
- 11,
-
-
- /* USB Only, End point info */
- 0,
-
- /* Transfer Type */
- WLANDXE_DESC_CTRL_XTYPE_B2H,
-
- /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
- 5,
-
- /* BD attached to frames for this pipe */
- TRUE,
-
- /* chk_size, NOT CLEAR YET !!!*/
- 0,
-
- /* bmuThdSel, NOT CLEAR YET !!! */
- 6,
-
- /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
- TRUE,
-
- /* Use short Descriptor */
- TRUE
-};
-
-WLANDXE_ChannelConfigType chanRXHighPriConfig =
-{
- /* Q handle type, Circular */
- WLANDXE_CHANNEL_HANDLE_CIRCULA,
-
- /* Number of Descriptor, NOT CLEAR YET !!! */
- 256,
-
- /* MAX num RX Buffer, NOT CLEAR YET !!! */
- 1,
-
- /* Reference WQ, RX11 */
- 4,
-
- /* USB Only, End point info */
- 0,
-
- /* Transfer Type */
- WLANDXE_DESC_CTRL_XTYPE_B2H,
-
- /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
- 6,
-
- /* BD attached to frames for this pipe */
- TRUE,
-
- /* chk_size, NOT CLEAR YET !!!*/
- 0,
-
- /* bmuThdSel, NOT CLEAR YET !!! */
- 8,
-
- /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
- TRUE,
-
- /* Use short Descriptor */
- TRUE
-};
-
-
-WLANDXE_ChannelMappingType channelList[HIFDXE_CHANNEL_MAX] =
-{
- {HIFDXE_CHANNEL_TX_LOW_PRI, WLANDXE_DMA_CHANNEL_0, &chanTXLowPriConfig},
- {HIFDXE_CHANNEL_TX_HIGH_PRI, WLANDXE_DMA_CHANNEL_4, &chanTXHighPriConfig},
- {HIFDXE_CHANNEL_RX_LOW_PRI, WLANDXE_DMA_CHANNEL_1, &chanRXLowPriConfig},
- {HIFDXE_CHANNEL_RX_HIGH_PRI, WLANDXE_DMA_CHANNEL_3, &chanRXHighPriConfig},
-};
-
-WLANDXE_TxCompIntConfigType txCompInt =
-{
- /* TX Complete Interrupt enable method */
- WLANDXE_TX_COMP_INT_PER_K_FRAMES,
-
- /* TX Low Resource remaining resource threshold for Low Pri Ch */
- WLANDXE_TX_LOW_RES_THRESHOLD,
-
- /* TX Low Resource remaining resource threshold for High Pri Ch */
- WLANDXE_TX_LOW_RES_THRESHOLD,
-
- /* RX Low Resource remaining resource threshold */
- 5,
-
- /* Per K frame enable Interrupt */
- /*WLANDXE_HI_PRI_RES_NUM*/ 5,
-
- /* Periodic timer msec */
- 10
-};
-
-A_STATUS dxe_cmn_def_config(S_HIFDXE_CONTEXT * dxe_ctx)
-{
- A_MEMCPY(&dxe_ctx->txCompInt,&txCompInt,sizeof(WLANDXE_TxCompIntConfigType));
- return A_OK;
-}
-
-
-A_STATUS dxe_chan_def_config(S_HIFDXE_CONTEXT * pdxectx,WLANDXE_ChannelCBType *channelEntry)
-{
- A_STATUS status = A_OK;
- u_int32_t baseAddress;
- u_int32_t dxeControlRead = 0;
- u_int32_t dxeControlWrite = 0;
- u_int32_t dxeControlWriteValid = 0;
- u_int32_t dxeControlWriteEop = 0;
- u_int32_t dxeControlWriteEopInt = 0;
- u_int32_t idx;
- WLANDXE_ChannelMappingType *mappedChannel = NULL;
-
- /* Sanity */
- if ((NULL == pdxectx) || (NULL == channelEntry))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_chan_def_config : Invalid DXE Context / DMA Channel Entry \n"));
- return A_EINVAL;
- }
-
- for(idx = 0; idx < HIFDXE_CHANNEL_MAX; idx++)
- {
- if(channelEntry->channelType == channelList[idx].wlanChannel)
- {
- mappedChannel = &channelList[idx];
- break;
- }
- }
-
- if((NULL == mappedChannel) || (HIFDXE_CHANNEL_MAX == idx))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("dxe_chan_def_config : Failed to map channel \n"));
- return A_EINVAL;
- }
-
- A_MEMCPY(&channelEntry->channelConfig,mappedChannel->channelConfig,sizeof(WLANDXE_ChannelConfigType));
-
- baseAddress = channelBaseAddressList[mappedChannel->DMAChannel];
- channelEntry->channelRegister.chDXEBaseAddr = baseAddress;
- channelEntry->channelRegister.chDXEStatusRegAddr = baseAddress + WLANDXE_DMA_CH_STATUS_REG;
- channelEntry->channelRegister.chDXEDesclRegAddr = baseAddress + WLANDXE_DMA_CH_DESCL_REG;
- channelEntry->channelRegister.chDXEDeschRegAddr = baseAddress + WLANDXE_DMA_CH_DESCH_REG;
- channelEntry->channelRegister.chDXELstDesclRegAddr = baseAddress + WLANDXE_DMA_CH_LST_DESCL_REG;
- channelEntry->channelRegister.chDXECtrlRegAddr = baseAddress + WLANDXE_DMA_CH_CTRL_REG;
- channelEntry->channelRegister.chDXESzRegAddr = baseAddress + WLANDXE_DMA_CH_SZ_REG;
- channelEntry->channelRegister.chDXEDadrlRegAddr = baseAddress + WLANDXE_DMA_CH_DADRL_REG;
- channelEntry->channelRegister.chDXEDadrhRegAddr = baseAddress + WLANDXE_DMA_CH_DADRH_REG;
- channelEntry->channelRegister.chDXESadrlRegAddr = baseAddress + WLANDXE_DMA_CH_SADRL_REG;
- channelEntry->channelRegister.chDXESadrhRegAddr = baseAddress + WLANDXE_DMA_CH_SADRH_REG;
-
- /* Channel Mask?
- * This value will control channel control register.
- * This register will be set to trigger actual DMA transfer activate
- * CH_N_CTRL */
- channelEntry->extraConfig.chan_mask = 0;
- /* Check VAL bit before processing descriptor */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EDVEN_MASK;
- /* Use External Descriptor Linked List */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EDEN_MASK;
- /* Enable Channel Interrupt on error */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_INE_ERR_MASK;
- /* Enable INT after XFER done */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_INE_DONE_MASK;
- /* Enable INT External Descriptor */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_INE_ED_MASK;
- /* Set Channel This is not channel, event counter, somthing wrong */
- channelEntry->extraConfig.chan_mask |=
- mappedChannel->DMAChannel << WLANDXE_CH_CTRL_CTR_SEL_OFFSET;
- /* Transfer Type */
- channelEntry->extraConfig.chan_mask |= mappedChannel->channelConfig->xfrType;
- /* Use Short Descriptor, THIS LOOKS SOME WIERD, REVISIT */
- if(!channelEntry->channelConfig.useShortDescFmt)
- {
- channelEntry->extraConfig.chan_mask |= WLANDXE_DESC_CTRL_DFMT;
- }
- /* TX Channel, Set DIQ bit, Clear SIQ bit since source is not WQ */
- if((HIFDXE_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_DIQ_MASK;
- }
- /* RX Channel, Set SIQ bit, Clear DIQ bit since source is not WQ */
- else if((HIFDXE_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
- {
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_SIQ_MASK;
- }
- else
- {
- /* This is test H2H channel, TX, RX not use work Q
- * Do Nothing */
- }
- /* Frame Contents Swap */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_SWAP_MASK;
- /* Host System Using Little Endian */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_ENDIAN_MASK;
- /* BMU Threshold select */
- channelEntry->extraConfig.chan_mask |=
- channelEntry->channelConfig.bmuThdSel << WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET;
- /* EOP for control register ??? */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EOP_MASK;
- /* Channel Priority */
- channelEntry->extraConfig.chan_mask |= channelEntry->channelConfig.chPriority << WLANDXE_CH_CTRL_PRIO_OFFSET;
- /* PDU REL */
- channelEntry->extraConfig.chan_mask |= WLANDXE_DESC_CTRL_PDU_REL;
- /* Disable DMA transfer on this channel */
- channelEntry->extraConfig.chan_mask_read_disable = channelEntry->extraConfig.chan_mask;
- /* Enable DMA transfer on this channel */
- channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EN_MASK;
- /* Channel Mask done */
-
- /* Control Read
- * Default Descriptor control Word value for RX ready DXE descriptor
- * DXE engine will reference this value before DMA transfer */
- dxeControlRead = 0;
- /* Source is a Queue ID, not flat memory address */
- dxeControlRead |= WLANDXE_DESC_CTRL_SIQ;
- /* Transfer direction is BMU 2 Host */
- dxeControlRead |= WLANDXE_DESC_CTRL_XTYPE_B2H;
- /* End of Packet, RX is single fragment */
- dxeControlRead |= WLANDXE_DESC_CTRL_EOP;
- /* BD Present, default YES, B2H case it must be 0 to insert BD */
- if(!channelEntry->channelConfig.bdPresent)
- {
- dxeControlRead |= WLANDXE_DESC_CTRL_BDH;
- }
- /* Channel Priority */
- dxeControlRead |= channelEntry->channelConfig.chPriority << WLANDXE_CH_CTRL_PRIO_OFFSET;
- /* BMU Threshold select, only used H2B, not this case??? */
- dxeControlRead |= channelEntry->channelConfig.bmuThdSel << WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET;
- /* PDU Release, Release BD/PDU when DMA done */
- dxeControlRead |= WLANDXE_DESC_CTRL_PDU_REL;
- /* Use Short Descriptor, THIS LOOKS SOME WIERD, REVISIT */
- if(!channelEntry->channelConfig.useShortDescFmt)
- {
- dxeControlRead |= WLANDXE_DESC_CTRL_DFMT;
- }
- /* Interrupt on Descriptor done */
- dxeControlRead |= WLANDXE_DESC_CTRL_INT;
- /* For ready status, this Control WORD must be VALID */
- dxeControlRead |= WLANDXE_DESC_CTRL_VALID;
- /* Frame Contents Swap */
- dxeControlRead |= WLANDXE_DESC_CTRL_BDT_SWAP;
- /* Host Little Endian */
- if((HIFDXE_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
- (HIFDXE_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
- {
- dxeControlRead |= WLANDXE_DESC_CTRL_ENDIANNESS;
- }
-
- /* SWAP if needed */
- channelEntry->extraConfig.cw_ctrl_read = WLANDXE_U32_SWAP_ENDIAN(dxeControlRead);
- /* Control Read Done */
-
- /* Control Write
- * Write into DXE descriptor control word to TX frame
- * DXE engine will reference this word to contorl TX DMA channel */
- channelEntry->extraConfig.cw_ctrl_write = 0;
- /* Transfer type, from Host 2 BMU */
- dxeControlWrite |= mappedChannel->channelConfig->xfrType;
- /* BD Present, this looks some weird ??? */
- if(!channelEntry->channelConfig.bdPresent)
- {
- dxeControlWrite |= WLANDXE_DESC_CTRL_BDH;
- }
- /* Channel Priority */
- dxeControlWrite |= channelEntry->channelConfig.chPriority << WLANDXE_CH_CTRL_PRIO_OFFSET;
- /* Use Short Descriptor, THIS LOOKS SOME WIERD, REVISIT */
- if(!channelEntry->channelConfig.useShortDescFmt)
- {
- dxeControlWrite |= WLANDXE_DESC_CTRL_DFMT;
- }
- /* BMU Threshold select, only used H2B, not this case??? */
- dxeControlWrite |= channelEntry->channelConfig.bmuThdSel << WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET;
- /* Destination is WQ */
- dxeControlWrite |= WLANDXE_DESC_CTRL_DIQ;
- /* Frame Contents Swap */
- dxeControlWrite |= WLANDXE_DESC_CTRL_BDT_SWAP;
- /* Host Little Endian */
- dxeControlWrite |= WLANDXE_DESC_CTRL_ENDIANNESS;
- /* Interrupt Enable */
- dxeControlWrite |= WLANDXE_DESC_CTRL_INT;
-
- dxeControlWriteValid = dxeControlWrite | WLANDXE_DESC_CTRL_VALID;
- dxeControlWriteEop = dxeControlWriteValid | WLANDXE_DESC_CTRL_EOP;
- dxeControlWriteEopInt = dxeControlWriteEop | WLANDXE_DESC_CTRL_INT;
-
- /* DXE Descriptor must has Endian swapped value */
- channelEntry->extraConfig.cw_ctrl_write = WLANDXE_U32_SWAP_ENDIAN(dxeControlWrite);
- /* Control Write DONE */
-
- /* Control Write include VAL bit
- * This Control word used to set valid bit and
- * trigger DMA transfer for specific descriptor */
- channelEntry->extraConfig.cw_ctrl_write_valid =
- WLANDXE_U32_SWAP_ENDIAN(dxeControlWriteValid);
-
- /* Control Write include EOP
- * End of Packet */
- channelEntry->extraConfig.cw_ctrl_write_eop =
- WLANDXE_U32_SWAP_ENDIAN(dxeControlWriteEop);
-
- /* Control Write include EOP and INT
- * indicate End Of Packet and generate interrupt on descriptor Done */
- channelEntry->extraConfig.cw_ctrl_write_eop_int =
- WLANDXE_U32_SWAP_ENDIAN(dxeControlWriteEopInt);
-
-
- /* size mask???? */
- channelEntry->extraConfig.chk_size_mask =
- mappedChannel->channelConfig->chk_size << 10;
-
- channelEntry->extraConfig.refWQ_swapped =
- WLANDXE_U32_SWAP_ENDIAN(channelEntry->channelConfig.refWQ);
-
- /* Set Channel specific Interrupt mask */
- channelEntry->extraConfig.intMask = channelInterruptMask[mappedChannel->DMAChannel];
-
-
- channelEntry->numDesc = mappedChannel->channelConfig->nDescs;
- channelEntry->assignedDMAChannel = mappedChannel->DMAChannel;
- adf_os_atomic_set(&channelEntry->numFreeDesc, 0);
- adf_os_atomic_set(&channelEntry->numRsvdDesc, 0);
- adf_os_atomic_set(&channelEntry->numFragmentCurrentChain, 0);
- channelEntry->numTotalFrame = 0;
- channelEntry->hitLowResource = FALSE;
- return status;
-}
diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe_hw_pvt.h b/CORE/SERVICES/HIF/DXE/hif_dxe_hw_pvt.h
deleted file mode 100644
index ef971b80c2e1..000000000000
--- a/CORE/SERVICES/HIF/DXE/hif_dxe_hw_pvt.h
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
- * @file hif_dxe_desc_pvt.h
- * @brief Defines DXE HW Descriptor Structure Format
- * @details
- * This file Provides the HIF DXE HW Descriptor Definitions/ DMA Channel Structure / DMA Control And Data Descriptors.
- * DXE software module communicates with the RIVA DXE HW block for data path which
- * is a DMA engine to transfer Data from Host DDR to Target DDR.
- */
-#ifndef _HIF_DXE_DESC_PVT_H_
-#define _HIF_DXE_DESC_PVT_H_
-#include <athdefs.h>
-#include <adf_os_atomic.h>
-/*----------------------------------------------------------------------------
- * Preprocessor Definitions and Constants
- * -------------------------------------------------------------------------*/
-#define WLANDXE_CTXT_COOKIE 0xC00CC111
-
-
-/* From here RIVA DXE register information
- * This is temporary definition location to make compile and unit test
- * If official msmreg.h integrated, this part will be eliminated */
-/* Start with base address */
-
-
-#define WLANDXE_BMU_BD_THRES0_MASK 0x000007ff
-
-#ifdef QCA_ISOC_PRONTO
-
-#define WLANDXE_CCU_DXE_INT_SELECT 0xfb2050dc
-#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0xfb2050e0
-#define WLANDXE_CCU_ASIC_INT_ENABLE 0xfb2050e4
-#define WLANDXE_RIVA_BASE_ADDRESS 0xfb000000
-#define WLANDXE_BMU_AVAILABLE_BD_PDU 0xfb080084
-#define WLANDXE_BMU_PDU_THRES0 0xfb080014
-#else
-
-#define WLANDXE_CCU_DXE_INT_SELECT 0x03200b10
-#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0x03200b14
-#define WLANDXE_CCU_ASIC_INT_ENABLE 0x03200b18
-#define WLANDXE_RIVA_BASE_ADDRESS 0x03000000
-#define WLANDXE_BMU_AVAILABLE_BD_PDU 0x03080084
-#define WLANDXE_BMU_PDU_THRES0 0x03080014
-#endif //QCA_ISOC_PRONTO
-
-#define WLANDXE_REGISTER_BASE_ADDRESS WLANDXE_RIVA_BASE_ADDRESS + 0x202000
-
-/* Common over the channels register addresses */
-#define WALNDEX_DMA_CSR_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x00
-#define WALNDEX_DMA_ENCH_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x04
-#define WALNDEX_DMA_CH_EN_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x08
-#define WALNDEX_DMA_CH_DONE_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x0C
-#define WALNDEX_DMA_CH_ERR_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x10
-#define WALNDEX_DMA_CH_STOP_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x14
-
-/* Interrupt Control register address */
-#define WLANDXE_INT_MASK_REG_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x18
-#define WLANDXE_INT_SRC_MSKD_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x1C
-#define WLANDXE_INT_SRC_RAW_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x20
-#define WLANDXE_INT_ED_SRC_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x24
-#define WLANDXE_INT_DONE_SRC_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x28
-#define WLANDXE_INT_ERR_SRC_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x2C
-#define WLANDXE_INT_CLR_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x30
-#define WLANDXE_INT_ED_CLR_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x34
-#define WLANDXE_INT_DONE_CLR_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x38
-#define WLANDXE_INT_ERR_CLR_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x3C
-
-#define WLANDXE_DMA_CH_PRES_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x40
-#define WLANDXE_ARB_CH_MSK_CLR_ADDRRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x74
-
-/* Channel Counter register */
-#define WLANDXE_DMA_COUNTER_0 WLANDXE_REGISTER_BASE_ADDRESS + 0x200
-#define WLANDXE_DMA_COUNTER_1 WLANDXE_REGISTER_BASE_ADDRESS + 0x204
-#define WLANDXE_DMA_COUNTER_2 WLANDXE_REGISTER_BASE_ADDRESS + 0x208
-#define WLANDXE_DMA_COUNTER_3 WLANDXE_REGISTER_BASE_ADDRESS + 0x20C
-#define WLANDXE_DMA_COUNTER_4 WLANDXE_REGISTER_BASE_ADDRESS + 0x210
-#define WLANDXE_DMA_COUNTER_5 WLANDXE_REGISTER_BASE_ADDRESS + 0x214
-#define WLANDXE_DMA_COUNTER_6 WLANDXE_REGISTER_BASE_ADDRESS + 0x218
-
-#define WLANDXE_ENGINE_STAT_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x64
-#define WLANDXE_BMU_SB_QDAT_AV_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x5c
-
-/* Channel Base address */
-#define WLANDXE_DMA_CHAN0_BASE_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x400
-#define WLANDXE_DMA_CHAN1_BASE_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x440
-#define WLANDXE_DMA_CHAN2_BASE_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x480
-#define WLANDXE_DMA_CHAN3_BASE_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x4C0
-#define WLANDXE_DMA_CHAN4_BASE_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x500
-#define WLANDXE_DMA_CHAN5_BASE_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x540
-#define WLANDXE_DMA_CHAN6_BASE_ADDRESS WLANDXE_REGISTER_BASE_ADDRESS + 0x580
-
-/* Channel specific register offset */
-#define WLANDXE_DMA_CH_CTRL_REG 0x0000
-#define WLANDXE_DMA_CH_STATUS_REG 0x0004
-#define WLANDXE_DMA_CH_SZ_REG 0x0008
-#define WLANDXE_DMA_CH_SADRL_REG 0x000C
-#define WLANDXE_DMA_CH_SADRH_REG 0x0010
-#define WLANDXE_DMA_CH_DADRL_REG 0x0014
-#define WLANDXE_DMA_CH_DADRH_REG 0x0018
-#define WLANDXE_DMA_CH_DESCL_REG 0x001C
-#define WLANDXE_DMA_CH_DESCH_REG 0x0020
-#define WLANDXE_DMA_CH_LST_DESCL_REG 0x0024
-#define WLANDXE_DMA_CH_LST_DESCH_REG 0x0028
-#define WLANDXE_DMA_CH_BD_REG 0x002C
-#define WLANDXE_DMA_CH_HEAD_REG 0x0030
-#define WLANDXE_DMA_CH_TAIL_REG 0x0034
-#define WLANDXE_DMA_CH_PDU_REG 0x0038
-#define WLANDXE_DMA_CH_TSTMP_REG 0x003C
-
-/* Common CSR Register Contorol mask and offset */
-#define WLANDXE_DMA_CSR_RESERVED_MASK 0xFFFE0000
-#define WLANDXE_DMA_CSR_RESERVED_OFFSET 0x11
-#define WLANDXE_DMA_CSR_RESERVED_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK 0x10000
-#define WLANDXE_DMA_CSR_H2H_SYNC_EN_OFFSET 0x10
-#define WLANDXE_DMA_CSR_H2H_SYNC_EN_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_PAUSED_MASK 0x8000
-#define WLANDXE_DMA_CSR_PAUSED_OFFSET 0xF
-#define WLANDXE_DMA_CSR_PAUSED_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_ECTR_EN_MASK 0x4000
-#define WLANDXE_DMA_CSR_ECTR_EN_OFFSET 0xE
-#define WLANDXE_DMA_CSR_ECTR_EN_DEFAULT 0x4000
-
-#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_MASK 0x3E00
-#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_OFFSET 0x9
-#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_DEFAULT 0xE00
-
-#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_MASK 0x1F0
-#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_OFFSET 0x4
-#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_DEFAULT 0x50
-
-#define WLANDXE_DMA_CSR_TSTMP_EN_MASK 0x8
-#define WLANDXE_DMA_CSR_TSTMP_EN_OFFSET 0x3
-#define WLANDXE_DMA_CSR_TSTMP_EN_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_RESET_MASK 0x4
-#define WLANDXE_DMA_CSR_RESET_OFFSET 0x2
-#define WLANDXE_DMA_CSR_RESET_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_PAUSE_MASK 0x2
-#define WLANDXE_DMA_CSR_PAUSE_OFFSET 0x1
-#define WLANDXE_DMA_CSR_PAUSE_DEFAULT 0x0
-
-#define WLANDXE_DMA_CSR_EN_MASK 0x1
-#define WLANDXE_DMA_CSR_EN_OFFSET 0x0
-#define WLANDXE_DMA_CSR_EN_DEFAULT 0x0
-#define WLANDXE_DMA_CSR_DEFAULT 0x4E50
-
-/* Channel CTRL Register Control mask and offset */
-#define WLANDXE_CH_CTRL_RSVD_MASK 0x80000000
-#define WLANDXE_CH_CTRL_RSVD_OFFSET 0x1F
-#define WLANDXE_CH_CTRL_RSVD_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_SWAP_MASK 0x80000000
-
-#define WLANDXE_CH_CTRL_BDT_IDX_MASK 0x60000000
-#define WLANDXE_CH_CTRL_BDT_IDX_OFFSET 0x1D
-#define WLANDXE_CH_CTRL_BDT_IDX_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_DFMT_MASK 0x10000000
-#define WLANDXE_CH_CTRL_DFMT_OFFSET 0x1C
-#define WLANDXE_CH_CTRL_DFMT_DEFAULT 0x10000000
-#define WLANDXE_CH_CTRL_DFMT_ESHORT 0x0
-#define WLANDXE_CH_CTRL_DFMT_ELONG 0x1
-
-#define WLANDXE_CH_CTRL_ABORT_MASK 0x8000000
-#define WLANDXE_CH_CTRL_ABORT_OFFSET 0x1B
-#define WLANDXE_CH_CTRL_ABORT_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_ENDIAN_MASK 0x4000000
-
-#define WLANDXE_CH_CTRL_CTR_SEL_MASK 0x3C00000
-#define WLANDXE_CH_CTRL_CTR_SEL_OFFSET 0x16
-#define WLANDXE_CH_CTRL_CTR_SEL_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_EDVEN_MASK 0x200000
-#define WLANDXE_CH_CTRL_EDVEN_OFFSET 0x15
-#define WLANDXE_CH_CTRL_EDVEN_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_EDEN_MASK 0x100000
-#define WLANDXE_CH_CTRL_EDEN_OFFSET 0x14
-#define WLANDXE_CH_CTRL_EDEN_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_INE_DONE_MASK 0x80000
-#define WLANDXE_CH_CTRL_INE_DONE_OFFSET 0x13
-#define WLANDXE_CH_CTRL_INE_DONE_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_INE_ERR_MASK 0x40000
-#define WLANDXE_CH_CTRL_INE_ERR_OFFSET 0x12
-#define WLANDXE_CH_CTRL_INE_ERR_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_INE_ED_MASK 0x20000
-#define WLANDXE_CH_CTRL_INE_ED_OFFSET 0x11
-#define WLANDXE_CH_CTRL_INE_ED_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_STOP_MASK 0x10000
-#define WLANDXE_CH_CTRL_STOP_OFFSET 0x10
-#define WLANDXE_CH_CTRL_STOP_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_PRIO_MASK 0xE000
-#define WLANDXE_CH_CTRL_PRIO_OFFSET 0xD
-#define WLANDXE_CH_CTRL_PRIO_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_BTHLD_SEL_MASK 0x1E00
-#define WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET 0x9
-#define WLANDXE_CH_CTRL_BTHLD_SEL_DEFAULT 0x600
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD0 0x0
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD1 0x1
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD2 0x2
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD3 0x3
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD4 0x4
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD5 0x5
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD6 0x6
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD7 0x7
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD8 0x8
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD9 0x9
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD10 0xA
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD11 0xB
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD12 0xC
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD13 0xD
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD14 0xE
-#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD15 0xF
-
-#define WLANDXE_CH_CTRL_PDU_REL_MASK 0x100
-#define WLANDXE_CH_CTRL_PDU_REL_OFFSET 0x8
-#define WLANDXE_CH_CTRL_PDU_REL_DEFAULT 0x100
-#define WLANDXE_CH_CTRL_PDU_REL_EKEEP 0x0
-#define WLANDXE_CH_CTRL_PDU_REL_ERELEASE 0x1
-
-#define WLANDXE_CH_CTRL_PIQ_MASK 0x80
-#define WLANDXE_CH_CTRL_PIQ_OFFSET 0x7
-#define WLANDXE_CH_CTRL_PIQ_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_PIQ_EFLAT 0x0
-#define WLANDXE_CH_CTRL_PIQ_EQUEUE 0x1
-
-#define WLANDXE_CH_CTRL_DIQ_MASK 0x40
-#define WLANDXE_CH_CTRL_DIQ_OFFSET 0x6
-#define WLANDXE_CH_CTRL_DIQ_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_DIQ_EFLAT 0x0
-#define WLANDXE_CH_CTRL_DIQ_EQUEUE 0x1
-
-#define WLANDXE_CH_CTRL_SIQ_MASK 0x20
-#define WLANDXE_CH_CTRL_SIQ_OFFSET 0x5
-#define WLANDXE_CH_CTRL_SIQ_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_SIQ_EFLAT 0x0
-#define WLANDXE_CH_CTRL_SIQ_EQUEUE 0x1
-
-#define WLANDXE_CH_CTRL_BDH_MASK 0x10
-#define WLANDXE_CH_CTRL_BDH_OFFSET 0x4
-#define WLANDXE_CH_CTRL_BDH_DEFAULT 0x0
-
-#define WLANDXE_CH_CTRL_EOP_MASK 0x8
-#define WLANDXE_CH_CTRL_EOP_OFFSET 0x3
-#define WLANDXE_CH_CTRL_EOP_DEFAULT 0x8
-
-#define WLANDXE_CH_CTRL_XTYPE_MASK 0x6
-#define WLANDXE_CH_CTRL_XTYPE_OFFSET 0x1
-#define WLANDXE_CH_CTRL_XTYPE_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_XTYPE_EH2H 0x0
-#define WLANDXE_CH_CTRL_XTYPE_EB2B 0x1
-#define WLANDXE_CH_CTRL_XTYPE_EH2B 0x2
-#define WLANDXE_CH_CTRL_XTYPE_EB2H 0x3
-
-#define WLANDXE_CH_CTRL_DONE_MASK 0x4
-
-#define WLANDXE_CH_CTRL_ERR_MASK 0x20
-
-#define WLANDXE_CH_CTRL_MASKED_MASK 0x8
-
-#define WLANDXE_CH_CTRL_EN_MASK 0x1
-#define WLANDXE_CH_CTRL_EN_OFFSET 0x0
-#define WLANDXE_CH_CTRL_EN_DEFAULT 0x0
-#define WLANDXE_CH_CTRL_DEFAULT 0x10000708
-
-
-#define WLANDXE_DESC_CTRL_VALID 0x00000001
-#define WLANDXE_DESC_CTRL_XTYPE_MASK 0x00000006
-#define WLANDXE_DESC_CTRL_XTYPE_H2H 0x00000000
-#define WLANDXE_DESC_CTRL_XTYPE_B2B 0x00000002
-#define WLANDXE_DESC_CTRL_XTYPE_H2B 0x00000004
-#define WLANDXE_DESC_CTRL_XTYPE_B2H 0x00000006
-#define WLANDXE_DESC_CTRL_EOP 0x00000008
-#define WLANDXE_DESC_CTRL_BDH 0x00000010
-#define WLANDXE_DESC_CTRL_SIQ 0x00000020
-#define WLANDXE_DESC_CTRL_DIQ 0x00000040
-#define WLANDXE_DESC_CTRL_PIQ 0x00000080
-#define WLANDXE_DESC_CTRL_PDU_REL 0x00000100
-#define WLANDXE_DESC_CTRL_BTHLD_SEL 0x00001E00
-#define WLANDXE_DESC_CTRL_PRIO 0x0000E000
-#define WLANDXE_DESC_CTRL_STOP 0x00010000
-#define WLANDXE_DESC_CTRL_INT 0x00020000
-#define WLANDXE_DESC_CTRL_BDT_SWAP 0x00100000
-#define WLANDXE_DESC_CTRL_ENDIANNESS 0x00200000
-#define WLANDXE_DESC_CTRL_DFMT 0x10000000
-#define WLANDXE_DESC_CTRL_RSVD 0xfffc0000
-/* CSR Register Control mask and offset */
-
-#define WLANDXE_CH_STAT_INT_DONE_MASK 0x00008000
-#define WLANDXE_CH_STAT_INT_ERR_MASK 0x00004000
-#define WLANDXE_CH_STAT_INT_ED_MASK 0x00002000
-
-#define WLANDXE_CH_STAT_MASKED_MASK 0x00000008
-/* Till here RIVA DXE register information
- * This is temporary definition location to make compile and unit test
- * If official msmreg.h integrated, this part will be eliminated */
-
-/* Interrupt control channel mask */
-#define WLANDXE_INT_MASK_CHAN_0 0x00000001
-#define WLANDXE_INT_MASK_CHAN_1 0x00000002
-#define WLANDXE_INT_MASK_CHAN_2 0x00000004
-#define WLANDXE_INT_MASK_CHAN_3 0x00000008
-#define WLANDXE_INT_MASK_CHAN_4 0x00000010
-#define WLANDXE_INT_MASK_CHAN_5 0x00000020
-#define WLANDXE_INT_MASK_CHAN_6 0x00000040
-
-/** DXE HW Long Descriptor format */
-typedef struct
-{
- adf_os_dma_addr_t srcMemAddrL;
- adf_os_dma_addr_t srcMemAddrH;
- adf_os_dma_addr_t dstMemAddrL;
- adf_os_dma_addr_t dstMemAddrH;
- adf_os_dma_addr_t phyNextL;
- adf_os_dma_addr_t phyNextH;
-} WLANDXE_LongDesc;
-
-
-/** DXE HW Short Descriptor format */
-typedef struct tDXEShortDesc
-{
- adf_os_dma_addr_t srcMemAddrL;
- adf_os_dma_addr_t dstMemAddrL;
- adf_os_dma_addr_t phyNextL;
-} WLANDXE_ShortDesc;
-
-
-/* DXE Descriptor Data Type
- * Pick up from GEN5 */
-//FIXME_RT Check if this Needs to be byte packed
-typedef struct
-{
- union
- {
- u_int32_t ctrl;
- u_int32_t valid :1; //0 = DMA stop, 1 = DMA continue with this descriptor
- u_int32_t transferType :2; //0 = Host to Host space
- u_int32_t eop :1; //End of Packet
- u_int32_t bdHandling :1; //if transferType = Host to BMU, then 0 means first 128 bytes contain BD, and 1 means create new empty BD
- u_int32_t siq :1; // SIQ
- u_int32_t diq :1; // DIQ
- u_int32_t pduRel :1; //0 = don't release BD and PDUs when done, 1 = release them
- u_int32_t bthldSel :4; //BMU Threshold Select
- u_int32_t prio :3; //Specifies the priority level to use for the transfer
- u_int32_t stopChannel :1; //1 = DMA stops processing further, channel requires re-enabling after this
- u_int32_t intr :1; //Interrupt on Descriptor Done
- u_int32_t rsvd :1; //reserved
- u_int32_t transferSize :14; //14 bits used - ignored for BMU transfers, only used for host to host transfers?
- } descCtrl;
- u_int32_t xfrSize;
- union
- {
- WLANDXE_LongDesc dxe_long_desc;
- WLANDXE_ShortDesc dxe_short_desc;
- }dxedesc;
-} WLANDXE_DescType;
-
-#endif
diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe_os.h b/CORE/SERVICES/HIF/DXE/hif_dxe_os.h
deleted file mode 100644
index 3d3412681881..000000000000
--- a/CORE/SERVICES/HIF/DXE/hif_dxe_os.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
- * @file hif_dxe_os.h
- * @brief Provide OS Specific Shim Layer API for DXE HIF module.
- * @details
- * This file Provides the OS Specific Layer API for HIF DXE Module.
- * DXE software module communicates with this API for Windows OS specific Initialization
- * Provides API For :
- * 1. OS Initialization required for DXE Module
- * 2. Read/Write DXE registers in OS Specific Manner
- * 3. Allocate/Free DMA Memory for DXE Descriptors
- * 4. Communicate with SMSM Driver
- * 5. Other
- */
-#ifndef _HIF_DXE_OS_H_
-#define _HIF_DXE_OS_H_
-
-#include "adf_os_types.h"
-#include "athdefs.h"
-#include "a_debug.h"
-
-struct _S_HIF_DXE_OSCONTEXT;
-typedef struct _S_HIF_DXE_OSCONTEXT * hif_dxe_oshandle;
-
-typedef enum _E_DXE_INTTYPE
-{
- E_HIFDXE_TX_INTERRUPT,
- E_HIFDXE_RX_INTERRUPT
-}E_DXE_INTTYPE;
-
-typedef enum _E_DXE_INT_ACTION
-{
- E_HIFDXE_INT_ENABLE,
- E_HIFDXE_INT_DISABLE,
- E_HIFDXE_INT_ACTIVATE,
- E_HIFDXE_INT_DEACTIVATE
-}E_DXE_INT_ACTION;
-
-typedef A_STATUS (*hif_dxe_os_cb)(void *ctx);
-
-
-
-typedef struct _S_HIF_DXE_OS_PARAMS
-{
- hif_dxe_os_cb dxe_tx_cb;
- hif_dxe_os_cb dxe_rx_cb;
- void *pvcontext;
-}S_HIF_DXE_OS_PARAMS;
-
-#define HIFDXE_SMSM_WLAN_TX_ENABLE 0x00000400
-#define HIFDXE_SMSM_WLAN_TX_RINGS_NOT_EMPTY 0x00000200
-
-A_STATUS ol_ath_dxe_initialize(void* Adapter);
-
-
-/**
- * @ HIF OS Init Dxe
- *
- * @param[in/out] osdev OS Specific Context
- *
- * @retval hif_dxe_oshandle Returns OS Specific Allocation Handle
- */
-hif_dxe_oshandle hif_dxe_os_init(adf_os_device_t osdev,
- S_HIF_DXE_OS_PARAMS *params);
-
-
-/**
- * @ HIF OS DeInit Dxe
- *
- * @param[in]hif_dxe_osdev OS Specific Context
- *
- * @retval void
- */
-void hif_dxe_os_deinit(hif_dxe_oshandle hif_dxe_osdev);
-
-/**
- * @ HIF OS Enable / Disable TXRX Interrupt
- *
- * @param[in]hif_dxe_osdev - OS Specific Context
- * @param[in]eIntType
- * @param[in]bEnable
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_os_program_int(hif_dxe_oshandle hif_dxe_osdev ,
- E_DXE_INTTYPE eIntType , E_DXE_INT_ACTION eAction);
-
-
-/**
- * @ HIF OS Notify SMSM
- *
- * @param[in]hif_dxe_osdev - OS Specific Context
- * @param[in]clrSt
- * @param[in]setSt
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_os_notifysmsm(hif_dxe_oshandle hif_dxe_osdev,
- u_int32_t clrSt, u_int32_t setSt);
-
-/**
- * @brief HIF Os Read register
- *
- * @param[in] OS Context
- * @param[in] Addr
- *
- * @return Read Value
- */
-u_int32_t
-hif_dxe_os_readreg(hif_dxe_oshandle hif_dxe_osdev, u_int32_t addr);
-
-
-/**
- * @brief HIF Os Write register
- *
- * @param[in] OS Context
- * @param[in] Addr
- * @param[in] val
- *
- * @return void
- */
-void
-hif_dxe_os_writereg(hif_dxe_oshandle hif_dxe_osdev, u_int32_t addr,
- u_int32_t val);
-
-/**
- * @brief HIF Mem Barrier
- *
- * @param[in] void
- *
- * @return void
- */
-void hif_dxe_os_mem_barrier(void);
-
-void hif_dxe_os_dbgdump(hif_dxe_oshandle hif_dxe_osdev);
-
-void hif_dxe_os_stop(hif_dxe_oshandle hif_dxe_osdev);
-
-#endif /* _HIF_DXE_OS_H_ */ \ No newline at end of file
diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe_pvt.h b/CORE/SERVICES/HIF/DXE/hif_dxe_pvt.h
deleted file mode 100644
index ccc484c55632..000000000000
--- a/CORE/SERVICES/HIF/DXE/hif_dxe_pvt.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
- * @file hif_dxe_pvt.h
- * @brief Defines Software Structures used by DXE
- * @details
- * This file Provides the HIF DXE Software Structures.
- * DXE software module communicates with the RIVA DXE HW block for data path which
- * is a DMA engine to transfer Data from Host DDR to Target DDR.
- */
-#ifndef _HIF_DXE_PVT_H_
-#define _HIF_DXE_PVT_H_
-#include <adf_os_types.h>
-#include <adf_os_atomic.h>
-#include <adf_os_lock.h>
-#include <adf_nbuf.h> /* adf_nbuf_t */
-#include <adf_os_timer.h>
-#include "hif_dxe.h"
-#include "hif_dxe_os.h"
-
-
-/* DXE Descriptor Endian swap macro */
-#ifdef WLANDXE_ENDIAN_SWAP_ENABLE
-#define WLANDXE_U32_SWAP_ENDIAN(a) (((a & 0x000000FF) << 24) | \
- ((a & 0x0000FF00) << 8) | \
- ((a & 0x00FF0000) >> 8) | \
- ((a & 0xFF000000) >> 24))
-#else
-/* If DXE HW does not need endian swap, DO NOTHING */
-#define WLANDXE_U32_SWAP_ENDIAN(a) (a)
-#endif /* WLANDXE_ENDIAN_SWAP_ENABLE */
-
-#define TX_INT_SELECT(ch) (1L << ch)
-#define RX_INT_SELECT(ch) (1L << (ch + 16))
-
-/** Map logical channel to DXE channel */
-#define CH_TX_LOW_PRI (0)
-#define CH_TX_HIGH_PRI (4)
-#define CH_RX_LOW_PRI (1)
-#define CH_RX_HIGH_PRI (3)
-
-#define HIF_DXE_TX_PENDING_DEBUG_THRESHOLD 5
-// Number of resources which are allocated from ACPI table for RIVA
-#define HIFDXE_NUM_OS_MEM_RES (1) // memory 0x03000000 - 0x04000000
-#define HIFDXE_NUM_INTR_RES (2) // TX complete(235) and RX ready(234)
-
-#define HIFDXE_RX_INTERRUPT_PRO_MASK 0x20
-#define HIFDXE_TX_INTERRUPT_PRO_MASK 0x40
-#define HIFDXE_RX_INTERRUPT_PRO_UNMASK 0x5F
-#define HIFDXE_TX_INTERRUPT_PRO_UNMASK 0x3F
-#define HIFDXE_TX_CHANNELS_EN_BIT_MASK 0x11
-//FIXME_RT Check This Wait Duration
-#define HIFDXE_MAX_TX_CH_DISABLE_WAIT 500 /* MAX 500 usec wait */
-
-
-/*
- * The DXE low-priority channel should be able to accept at least
- * as many fragm ents as would be present in a maximum-sized A-MPDU
- * (64 frames x number of fragments per frame).
- * A small additional margin is provded.
- */
-#define HIFDXE_TX_MAX_FRMS 64
-#define HIFDXE_TX_AVG_FRAGS_PER_FRAME 5 /* avg for windows */
-#define HIFDXE_TX_LO_PRI_RES_MARGIN 30
-#define HIFDXE_TX_LO_PRI_RES_NUM (HIFDXE_TX_MAX_FRMS * HIFDXE_TX_AVG_FRAGS_PER_FRAME + HIFDXE_TX_LO_PRI_RES_MARGIN)
-
-
-/*The maximum number of packets that can be chained in dxe for the HI
- priority channel */
-#define HIFDXE_TX_HI_PRI_RES_NUM 10
-
-#define WLANDXE_TX_LOW_RES_THRESHOLD (5)
-
-#define HIF_DXE_NUM_RX_CHANNEL 2
-#define HIF_DXE_RX_BUFFER_SIZE 2612
-#define HIF_DXE_RX_RING_REFILL_RETRY_TIME_MS 50
-
-/*----------------------------------------------------------------------------
- * Type Declarations
- * -------------------------------------------------------------------------*/
-/* DMA Channel Q handle Method type
- * Linear handle or circular */
-typedef enum
-{
- WLANDXE_CHANNEL_HANDLE_LINEAR,
- WLANDXE_CHANNEL_HANDLE_CIRCULA
-}WLANDXE_ChannelHandleType;
-
-typedef enum
-{
- WLANDXE_TX_COMP_INT_LR_THRESHOLD,
- WLANDXE_TX_COMP_INT_PER_K_FRAMES,
- WLANDXE_TX_COMP_INT_TIMER
-} WLANDXE_TXCompIntEnableType;
-
-typedef enum
-{
- WLANDXE_SHORT_DESCRIPTOR,
- WLANDXE_LONG_DESCRIPTOR
-} WLANDXE_DescriptorType;
-
-typedef enum
-{
- WLANDXE_DMA_CHANNEL_0,
- WLANDXE_DMA_CHANNEL_1,
- WLANDXE_DMA_CHANNEL_2,
- WLANDXE_DMA_CHANNEL_3,
- WLANDXE_DMA_CHANNEL_4,
- WLANDXE_DMA_CHANNEL_5,
- WLANDXE_DMA_CHANNEL_6,
- WLANDXE_DMA_CHANNEL_MAX
-} WLANDXE_DMAChannelType;
-
-typedef struct _WLANDXE_DescCtrlBlkType {
- struct _WLANDXE_DescCtrlBlkType *nextCtrlBlk;
- adf_nbuf_t xfrFrame;
- volatile WLANDXE_DescType *linkedDesc;
- adf_os_dma_addr_t linkedDescPhyAddr;
- A_UINT32 ctrlBlkOrder;
-} WLANDXE_DescCtrlBlkType;
-
-typedef struct
-{
- /* Q handle method, linear or ring */
- WLANDXE_ChannelHandleType queueMethod;
-
- /* Number of descriptors for DXE that can be queued for transfer at one time */
- u_int32_t nDescs;
-
- /* Maximum number of receive buffers of shared memory to use for this pipe */
- u_int32_t nRxBuffers;
-
- /* Reference WQ - for H2B and B2H only */
- u_int32_t refWQ;
-
- /* for usb only, endpoint info for CH_SADR or CH_DADR */
- u_int32_t refEP;
-
- /* H2B(Tx), B2H(Rx), H2H(SRAM<->HostMem R/W) */
- u_int32_t xfrType;
-
- /* Channel Priority 7(Highest) - 0(Lowest) */
- u_int32_t chPriority;
-
- /* 1 = BD attached to frames for this pipe */
- u_int8_t bdPresent;
-
- u_int32_t chk_size;
-
- u_int32_t bmuThdSel;
-
- /* Added in Gen5 for Prefetch */
- u_int8_t useLower4G;
-
- u_int8_t useShortDescFmt;
- /* Till here inharited from GEN5 code */
- /* From now on, added for PRIMA */
-} WLANDXE_ChannelConfigType;
-
-typedef struct
-{
- u_int32_t chDXEBaseAddr;
- u_int32_t chDXEStatusRegAddr;
- u_int32_t chDXEDesclRegAddr;
- u_int32_t chDXEDeschRegAddr;
- u_int32_t chDXELstDesclRegAddr;
- u_int32_t chDXECtrlRegAddr;
- u_int32_t chDXESzRegAddr;
- u_int32_t chDXEDadrlRegAddr;
- u_int32_t chDXEDadrhRegAddr;
- u_int32_t chDXESadrlRegAddr;
- u_int32_t chDXESadrhRegAddr;
-} WLANDXE_ChannelRegisterType;
-
-typedef struct
-{
- u_int32_t refWQ_swapped;
- u_int8_t chEnabled;
- u_int8_t chConfigured;
- u_int32_t channel;
- u_int32_t chk_size_mask;
- u_int32_t bmuThdSel_mask;
- u_int32_t cw_ctrl_read;
- u_int32_t cw_ctrl_write;
- u_int32_t cw_ctrl_write_valid;
- u_int32_t cw_ctrl_write_eop;
- u_int32_t cw_ctrl_write_eop_int;
- u_int32_t chan_mask;
- u_int32_t chan_mask_read_disable;
- u_int32_t intMask;
-} WLANDXE_ChannelExConfigType;
-
-typedef enum
-{
- HIF_DXE_POWER_STATE_FULL,
- HIF_DXE_POWER_STATE_IMPS,
- HIF_DXE_POWER_STATE_BMPS,
- HIF_DXE_POWER_STATE_BMPS_PENDING,
- HIF_DXE_POWER_STATE_DOWN,
- HIF_DXE_POWER_STATE_MAX
-} E_DXE_HOST_PS_TYPE;
-
-typedef enum
-{
- HIF_DXE_FW_POWER_STATE_ACTIVE,
- HIF_DXE_FW_POWER_STATE_IMPS_UNKNOWN,
- HIF_DXE_FW_POWER_STATE_BMPS_UNKNOWN,
- HIF_DXE_FW_POWER_STATE_DOWN_UNKNOWN,
- HIF_DXE_FW_POWER_STATE_MAX
-} E_DXE_FIRMWARE_PS_TYPE;
-
-
-typedef struct
-{
- struct _S_HIFDXE_CONTEXT *dxe_ctx; // back pointer to DXE context
- E_HIFDXE_CHANNELTYPE channelType;
- WLANDXE_DescCtrlBlkType *headCtrlBlk;
- WLANDXE_DescCtrlBlkType *tailCtrlBlk;
- struct
- {
- void *vaddr;
- adf_os_dma_addr_t paddr;
- adf_os_dma_mem_context(memctx);
- } descblk_mem_pool;
- void *ctrlblk_mem_pool; //Memory Pool For per Descriptor Control Block
- volatile WLANDXE_DescType *DescBottomLoc;
- adf_os_dma_addr_t descBottomLocPhyAddr;
- u_int32_t numDesc;
- adf_os_atomic_t numFreeDesc;
- adf_os_atomic_t numRsvdDesc;
- u_int32_t maxFrameSize;
- adf_os_atomic_t numFragmentCurrentChain;
- u_int32_t numFramePrevious;
- u_int32_t numTotalFrame;
- adf_os_atomic_t tx_pkts_pending;
- adf_os_spinlock_t dxeChannelLock; //Per Channel Spin Lock for Synchronization at DISPATCH LEVEL
- u_int8_t hitLowResource;
- WLANDXE_ChannelConfigType channelConfig;
- WLANDXE_ChannelRegisterType channelRegister;
- WLANDXE_ChannelExConfigType extraConfig;
- WLANDXE_DMAChannelType assignedDMAChannel;
- u_int32_t txIntTracing;
- u_int32_t txCompIntTracing;
- u_int32_t errorIntCount;
- adf_os_atomic_t rx_refill_ref_cnt;
- u_int8_t rx_prev_intr_completed_frames;
- adf_os_timer_t rx_refill_retry_timer;
-} WLANDXE_ChannelCBType;
-
-typedef struct
-{
- WLANDXE_TXCompIntEnableType txIntEnable;
- u_int32_t txLowResourceThreshold_LoPriCh;
- u_int32_t txLowResourceThreshold_HiPriCh;
- u_int32_t rxLowResourceThreshold;
- u_int32_t txInterruptEnableFrameCount;
- u_int32_t txInterruptEnablePeriod;
-} WLANDXE_TxCompIntConfigType;
-
-typedef struct _S_HIFDXE_CONTEXT
-{
- adf_os_device_t osdev;
- WLANDXE_ChannelCBType dxeChannel[HIFDXE_CHANNEL_MAX];
- u_int8_t rxIntDisabledByIMPS;
- u_int8_t txIntDisabledByIMPS;
- u_int32_t dxeCookie;
- hif_dxe_oshandle hif_os_handle;
- WLANDXE_TxCompIntConfigType txCompInt;
- adf_os_atomic_t tx_pkts_pending;
- S_HIFDXE_CALLBACK hif_client_cb;
- volatile E_DXE_HOST_PS_TYPE hostPowerState;
- volatile E_DXE_FIRMWARE_PS_TYPE fwPowerState;
- adf_os_atomic_t ref_count;
- adf_os_atomic_t tx_pk_count;
-
-
-//Do Not Need These variables . Check and clean.
-#ifdef FIXME_RT
- u_int32_t interruptPath;
- WLANDXE_SetPowerStateCbType setPowerStateCb;
- u_int8_t ucTxMsgCnt;
- u_int16_t lastKickOffDxe;
- u_int32_t dxeFlushTxFrames;
-#endif
-} S_HIFDXE_CONTEXT;
-#endif
diff --git a/CORE/SERVICES/HIF/DXE/linux/hif_dxe_os.c b/CORE/SERVICES/HIF/DXE/linux/hif_dxe_os.c
deleted file mode 100644
index 8deb89ca1fc5..000000000000
--- a/CORE/SERVICES/HIF/DXE/linux/hif_dxe_os.c
+++ /dev/null
@@ -1,822 +0,0 @@
-/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**========================================================================
-
- \file hif_dxe_os.c
- \brief Implementation of WMA
- Provide Linux OS Specific Shim Layer Implementation for
- DXE HIF module.
-
- This file Provides the Linux OS Specific Layer API for
- HIF DXE Module.
-
- DXE software module communicates with this layer
- for Linux Specific Functionality
-
- Implements :
- 1. Linux OS Initialization required for DXE Module
- - Get hold of and Initialize DXE OS Resources(
- Interrupt , Shared memory)/SMSM Device
- - Register ISR/Tasklets for TXRX Interrupts
- - Enable/Disable TXRX Interrupts
- - DMA Adapter Registration / Initialization
- 2. Read/Write DXE registers in Windows Platform Specific Manner
- 3. Allocate/Free DMA Memory for DXE Descriptors
-
- ========================================================================*/
-/**=========================================================================
- EDIT HISTORY FOR FILE
-
-
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
-
- $Header:$ $DateTime: $ $Author: $
-
-
- when who what, where, why
- -------- --- -----------------------------------------
- 05/03/2013 Ganesh Created module for HIF Dxe Linux Specific
- Babu
- ==========================================================================*/
-
-#include "adf_os_types.h"
-#include "adf_os_lock.h"
-#include "adf_os_mem.h"
-#include "athdefs.h"
-#include "a_debug.h"
-#include "hif_dxe_os.h"
-#include "hif_dxe_ospvt.h"
-#include "hif_dxe.h"
-#include "hif_dxe_hw_pvt.h"
-#include "hif_dxe_pvt.h"
-#include <mach/msm_smsm.h>
-#include "vos_threads.h"
-
-#define ATH_MODULE_NAME hif_dxe_linuxos
-
-#define HIF_DXE_LINUXOS_DEBUG ATH_DEBUG_MAKE_MODULE_MASK(0)
-
-#if defined(DEBUG)
-static ATH_DEBUG_MASK_DESCRIPTION g_HIFOSDebugDescription[] = {
- {HIF_DXE_LINUXOS_DEBUG,"hif_dxe_linuxos"},
-};
-
-ATH_DEBUG_INSTANTIATE_MODULE_VAR(hif_dxe_linuxos,
- "hif_dxe_linuxos",
- "DXE HIF Linux OS Shim Interface",
- ATH_DEBUG_MASK_DEFAULTS | ATH_DEBUG_INFO | HIF_DXE_LINUXOS_DEBUG,
- ATH_DEBUG_DESCRIPTION_COUNT(g_HIFOSDebugDescription),
- g_HIFOSDebugDescription);
-#endif
-
-irqreturn_t hif_dxe_os_tx_isr(int irq,void* pSrvcCtx);
-irqreturn_t hif_dxe_os_rx_isr(int irq,void* pSrvcCtx);
-
-
-/**
- * @ HIF OS Enable Tx Interrupt
- *
- * @param[in/out] osdev OS Specific Context
- *
- * @retval TRUE/FALSE [Success/Fail]
- */
-unsigned char hif_dxe_os_enable_tx_intr(void* pctx)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = pctx;
- u_int32_t val;
- int ret;
-
- /* Enable Tx IRQ at OS level */
- if(!hif_dxeos_ctx->bTxRegistered)
- {
- ret = request_irq(hif_dxeos_ctx->tx_irq, hif_dxe_os_tx_isr,
- IRQF_TRIGGER_HIGH, "wcnss_wlan", hif_dxeos_ctx);
-
- if(ret)
- {
- /* TX IRQ request failed */
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
- ("hif_dxe_os_enable_tx_interrupt : "
- "TX IRQ request failed\n"));
-
- return FALSE;
- }
-
- hif_dxeos_ctx->bTxRegistered = TRUE;
- hif_dxeos_ctx->bTxIntEnabled = TRUE;
-
- enable_irq_wake(hif_dxeos_ctx->tx_irq);
- }
- else if(!hif_dxeos_ctx->bTxIntEnabled)
- {
- hif_dxeos_ctx->bTxIntEnabled = TRUE;
- enable_irq(hif_dxeos_ctx->tx_irq);
- }
-
- /* Enable Tx Channel Interrupt */
- val = TX_INT_SELECT(CH_TX_LOW_PRI) | TX_INT_SELECT(CH_TX_HIGH_PRI) |
- DXE_READ_REG(hif_dxeos_ctx,WLANDXE_CCU_DXE_INT_SELECT);
-
- DXE_WRITE_REG(hif_dxeos_ctx,WLANDXE_CCU_DXE_INT_SELECT,val);
-
- return TRUE;
-}
-
-/**
- * @ HIF OS Disable Tx Interrupt
- *
- * @param[in/out] osdev OS Specific Context
- *
- * @retval void
- */
-unsigned char hif_dxe_os_disable_tx_intr(void* pctx)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = pctx;
- u_int32_t val = 0;
-
- /* Disable Tx Channel Interrupt */
- val = ~TX_INT_SELECT(CH_TX_LOW_PRI) & ~TX_INT_SELECT(CH_TX_HIGH_PRI) &
- DXE_READ_REG(hif_dxeos_ctx,WLANDXE_CCU_DXE_INT_SELECT);
-
- DXE_WRITE_REG(hif_dxeos_ctx,WLANDXE_CCU_DXE_INT_SELECT,val);
-
- /* Disable Tx Irq at OS level */
- disable_irq_nosync(hif_dxeos_ctx->tx_irq);
-
- hif_dxeos_ctx->bTxIntEnabled = FALSE;
-
- return TRUE;
-}
-
-/**
- * @ HIF OS Enable Rx Interrupt
- *
- * @param[in/out] osdev OS Specific Context
- *
- * @retval TRUE/FALSE [Success/Fail]
- */
-unsigned char hif_dxe_os_enable_rx_intr(void* pctx)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = pctx;
- u_int32_t val = 0;
- int ret = 0;
-
- /* Enable Rx IRQ at OS level */
- if(!hif_dxeos_ctx->bRxRegistered)
- {
- ret = request_irq(hif_dxeos_ctx->rx_irq, hif_dxe_os_rx_isr,
- IRQF_TRIGGER_HIGH, "wcnss_wlan", hif_dxeos_ctx);
-
- if(ret)
- {
- /* RX IRQ request failed */
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
- ("hif_dxe_os_enable_tx_interrupt :"
- "RX IRQ request failed\n"));
-
- return FALSE;
- }
-
- hif_dxeos_ctx->bRxRegistered = TRUE;
- hif_dxeos_ctx->bRxIntEnabled = TRUE;
-
- enable_irq_wake(hif_dxeos_ctx->rx_irq);
- }
- else if(!hif_dxeos_ctx->bRxIntEnabled)
- {
- hif_dxeos_ctx->bRxIntEnabled = TRUE;
- enable_irq(hif_dxeos_ctx->rx_irq);
- }
-
- /* Enable Rx Channel Interrupt */
- val = RX_INT_SELECT(CH_RX_LOW_PRI) | RX_INT_SELECT(CH_RX_HIGH_PRI) |
- DXE_READ_REG(hif_dxeos_ctx,WLANDXE_CCU_DXE_INT_SELECT);
-
- DXE_WRITE_REG(hif_dxeos_ctx,WLANDXE_CCU_DXE_INT_SELECT,val);
-
- return TRUE;
-}
-
-/**
- * @ HIF OS Disable Rx Interrupt
- *
- * @param[in/out] osdev OS Specific Context
- *
- * @retval void
- */
-unsigned char hif_dxe_os_disable_rx_intr(void* pctx)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = pctx;
- u_int32_t val = 0;
-
- /* Disable Rx Channel Interrupt */
- val = ~RX_INT_SELECT(CH_RX_LOW_PRI) & ~RX_INT_SELECT(CH_RX_HIGH_PRI) &
- DXE_READ_REG(hif_dxeos_ctx,WLANDXE_CCU_DXE_INT_SELECT);
-
- DXE_WRITE_REG(hif_dxeos_ctx,WLANDXE_CCU_DXE_INT_SELECT,val);
-
- /* Disable Rx Irq at OS level */
- disable_irq_nosync(hif_dxeos_ctx->rx_irq);
-
- hif_dxeos_ctx->bRxIntEnabled = FALSE;
-
- return TRUE;
-}
-
-/**
- @brief hif_dxe_os_tx_isr is the interrupt service routine which handles
- the DXE TX Complete interrupt
-
- hif_dxe_os_tx_isr is registered with the Operating System to handle the
- DXE TX Complete interrupt during system initialization. When a DXE
- TX Complete interrupt occurs, it is dispatched to the handler which
- had previously been registered via wpalRegisterInterrupt.
-
- @param dev_id: User-supplied data passed back via the ISR
-
- @return void
- */
-irqreturn_t hif_dxe_os_tx_isr(int irq,void* pSrvcCtx)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = (S_HIF_DXE_OSCONTEXT *)pSrvcCtx;
- u_int32_t val = 0;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s \n",__FUNCTION__));
-
- if ((NULL == hif_dxeos_ctx) ||
- (NULL == hif_dxeos_ctx->dxe_hif_params.dxe_tx_cb) ||
- (FALSE == hif_dxeos_ctx->bTxIntEnabled))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "%s : Tx Intr Not Initalized "
- "or Enabled \n",__FUNCTION__));
-
- /* Whether we can return without Setting Processing Bit ???*/
- return IRQ_HANDLED;
- }
-
- /*
- Set Interrupt processing bit
- During this bit set, WLAN HW may not power collapse
- */
- val = DXE_READ_REG(hif_dxeos_ctx,WLANDXE_INT_MASK_REG_ADDRESS);
- val |= HIFDXE_TX_INTERRUPT_PRO_MASK;
- DXE_WRITE_REG(hif_dxeos_ctx,WLANDXE_INT_MASK_REG_ADDRESS, val);
-
- /* Disable TX Complete Interrupt at here */
- hif_dxe_os_disable_tx_intr(hif_dxeos_ctx);
-
- /* Deferred the processing to Tasklet */
- tasklet_schedule(&hif_dxeos_ctx->hif_dxe_tx_tasklet);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s \n",__FUNCTION__));
- return IRQ_HANDLED;
-}
-
-
-/**
- @brief hif_dxe_tx_tasklet_proc
-
- Function which actually does the DXE TX Complete Processing.
- This tasklet is scheduled from hif_dxe_os_tx_isr.
-
- @param dev_id: User-supplied data passed back via the ISR
-
- @return void
- */
-void hif_dxe_os_tx_processing(unsigned long DeferredContext)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = (S_HIF_DXE_OSCONTEXT *)DeferredContext;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s \n",__FUNCTION__));
-
- adf_os_atomic_inc(&hif_dxeos_ctx->ref_count);
-
- /* Call the Dxe Tx Callback */
- if ((NULL != hif_dxeos_ctx) &&
- (NULL != hif_dxeos_ctx->dxe_hif_params.dxe_tx_cb))
- {
- hif_dxeos_ctx->dxe_hif_params.dxe_tx_cb(
- hif_dxeos_ctx->dxe_hif_params.pvcontext);
- }
-
- adf_os_atomic_dec(&hif_dxeos_ctx->ref_count);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-}
-
-/**
- @brief hif_dxe_rx_tasklet_proc
-
- Function which actually does the DXE Rx Data Avail Processing.
- This tasklet is scheduled from hif_dxe_os_rx_isr.
-
- @param dev_id: User-supplied data passed back via the ISR
-
- @return void
- */
-void hif_dxe_os_rx_processing(unsigned long DeferredContext)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx =
- (S_HIF_DXE_OSCONTEXT *)DeferredContext;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s \n",__FUNCTION__));
-
- adf_os_atomic_inc(&hif_dxeos_ctx->ref_count);
-
- /* Call the Dxe Rx Callback */
- if ((NULL != hif_dxeos_ctx) && (
- NULL != hif_dxeos_ctx->dxe_hif_params.dxe_rx_cb))
- {
- hif_dxeos_ctx->dxe_hif_params.dxe_rx_cb(
- hif_dxeos_ctx->dxe_hif_params.pvcontext);
- }
-
- adf_os_atomic_dec(&hif_dxeos_ctx->ref_count);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-}
-
-/**
- @brief hif_dxe_os_rx_isr is the interrupt service routine which handles
- the DXE RX Available interrupt
-
- hif_dxe_os_rx_isr is registered with the Operating System to handle the
- DXE RX Available interrupt during system initalization. When a DXE
- RX Available interrupt occurs, it is dispatched to the handler which
- had previously been registered via wpalRegisterInterrupt.
-
- @param irq: Enumeration of the interrupt that occurred
- @param dev_id: User-supplied data passed back via the ISR
-
- @see hif_dxe_os_enable_rx_intr
-
- @return IRQ_HANDLED since it is a dedicated interrupt
- */
-irqreturn_t hif_dxe_os_rx_isr(int irq, void* pSrvcCtx)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx =
- (S_HIF_DXE_OSCONTEXT *)pSrvcCtx;
- u_int32_t val = 0;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s \n",__FUNCTION__));
-
- if ((NULL == hif_dxeos_ctx) ||
- (NULL == hif_dxeos_ctx->dxe_hif_params.dxe_rx_cb) ||
- (FALSE == hif_dxeos_ctx->bRxIntEnabled))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
- ("%s : Rx Intr Not Initalized or "
- "Enabled \n",__FUNCTION__));
-
- /* Whether we can return without Setting Processing Bit ???*/
- return IRQ_HANDLED;
- }
-
- /*
- Set Interrupt processing bit
- During this bit set, WLAN HW may not power collapse
- */
- val = DXE_READ_REG(hif_dxeos_ctx,WLANDXE_INT_MASK_REG_ADDRESS);
- val |= HIFDXE_RX_INTERRUPT_PRO_MASK;
- DXE_WRITE_REG(hif_dxeos_ctx,WLANDXE_INT_MASK_REG_ADDRESS, val);
-
- /* Disable RX Complete Interrupt at here */
- hif_dxe_os_disable_rx_intr(hif_dxeos_ctx);
-
- /* Deferred the processing to Tasklet */
- tasklet_schedule(&hif_dxeos_ctx->hif_dxe_rx_tasklet);
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s \n",__FUNCTION__));
-
- return IRQ_HANDLED;
-}
-
-A_STATUS ol_ath_dxe_initialize(void* Adapter)
-{
- //gpAdapter = (PADAPTER)Adapter;
- /* To Do */
- return A_OK;
-}
-
-
-/**
- * @ HIF OS Init Dxe
- *
- * @param[in/out] osdev OS Specific Context
- *
- * @retval hif_dxe_oshandle Returns OS Specific Allocation Handle
- */
-hif_dxe_oshandle hif_dxe_os_init(adf_os_device_t osdev ,
- S_HIF_DXE_OS_PARAMS *hif_dxe_os_params)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = NULL;
- struct device *wcnss_device;
-
- if (NULL == osdev->dev)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "hif_dxe_os_init : Invalid Dev - Null\n"));
- return NULL;
- }
-
- /* Get the parent dev ????????? Need to check */
- wcnss_device = osdev->dev;
-
- hif_dxeos_ctx = (S_HIF_DXE_OSCONTEXT *)
- adf_os_mem_alloc(osdev,sizeof(S_HIF_DXE_OSCONTEXT));
-
- if (NULL == hif_dxeos_ctx)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "hif_dxe_os_init : Failed To "
- "Allocate Memory for hif_dxeos_ctx \n"));
- return NULL;
- }
-
- adf_os_mem_set(hif_dxeos_ctx, 0, sizeof(S_HIF_DXE_OSCONTEXT));
- hif_dxeos_ctx->dxe_unloaded = 0;
- adf_os_mem_copy(&hif_dxeos_ctx->dxe_hif_params,
- hif_dxe_os_params,sizeof(S_HIF_DXE_OS_PARAMS));
-
- do
- {
- /* Get the WCNSS Memory Map */
- hif_dxeos_ctx->wcnss_memory =
- wcnss_wlan_get_memory_map(wcnss_device);
-
- if (NULL == hif_dxeos_ctx->wcnss_memory)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "hif_dxe_os_init : WCNSS memory map "
- "unavailable\n"));
- break;
- }
-
- /* Get the wcnss Tx Irq */
- hif_dxeos_ctx->tx_irq =
- wcnss_wlan_get_dxe_tx_irq(wcnss_device);
-
- if (0 > hif_dxeos_ctx->tx_irq)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "hif_dxe_os_init : "
- "WCNSS TX IRQ unavailable\n"));
- break;
- }
-
- /* Get the wcnss Rx Irq */
- hif_dxeos_ctx->rx_irq =
- wcnss_wlan_get_dxe_rx_irq(wcnss_device);
-
- if (0 > hif_dxeos_ctx->tx_irq)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "hif_dxe_os_init :"
- "WCNSS RX IRQ unavailable\n"));
- break;
- }
-
- /*
- note the we don't invoke request_mem_region().
- the memory described by wcnss_memory encompases the entire
- register space (including BT and FM) and we do not want
- exclusive access to that memory
- */
- hif_dxeos_ctx->mmio = ioremap(
- hif_dxeos_ctx->wcnss_memory->start,
- resource_size(
- hif_dxeos_ctx->wcnss_memory));
-
- if (NULL == hif_dxeos_ctx->mmio)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "hif_dxe_os_init : "
- "IO Memory Mapping Failed\n"));
- break;
- }
-
- /* Initialize Hif Dxe Tx Tasklet */
- tasklet_init(&hif_dxeos_ctx->hif_dxe_tx_tasklet,
- hif_dxe_os_tx_processing,
- (unsigned long)hif_dxeos_ctx);
-
- /* Initialize Hif Dxe Rx Tasklet */
- tasklet_init(&hif_dxeos_ctx->hif_dxe_rx_tasklet,
- hif_dxe_os_rx_processing,
- (unsigned long)hif_dxeos_ctx);
-
- /* successfully allocated environment, memory and IRQs */
- return hif_dxeos_ctx;
-
- }while(0);
-
- hif_dxe_os_deinit(hif_dxeos_ctx);
-
- return NULL;
-}
-
-
-/**
- * @ HIF OS DeInit Dxe
- *
- * @param[in]hif_dxe_osdev OS Specific Context
- *
- * @retval void
- */
-void hif_dxe_os_deinit(hif_dxe_oshandle hif_dxe_osdev)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = hif_dxe_osdev;
-
- if ((NULL == hif_dxeos_ctx))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "%s : Invalid DXE Context\n",__FUNCTION__));
- return;
- }
-
- /* Free up registered Tx IRQ */
- if(hif_dxeos_ctx->bTxRegistered)
- {
- free_irq(hif_dxeos_ctx->tx_irq, hif_dxeos_ctx);
-
- /* Kill the Tx Tasklet */
- tasklet_kill(&hif_dxeos_ctx->hif_dxe_tx_tasklet);
- }
-
- /* Free up registered Rx IRQ */
- if(hif_dxeos_ctx->bRxRegistered)
- {
- free_irq(hif_dxeos_ctx->rx_irq, hif_dxeos_ctx);
-
- /* Kill the Rx Tasklet */
- tasklet_kill(&hif_dxeos_ctx->hif_dxe_rx_tasklet);
- }
-
- /* Unmap the IO Mapping */
- iounmap(hif_dxeos_ctx->mmio);
-
- /* Free up the allocated memory */
- adf_os_mem_free(hif_dxeos_ctx);
- hif_dxeos_ctx = NULL;
-}
-
-/**
- * @ HIF Dxe OS Specific Initialization
- *
- * @param[in]hif_dxe_osdev - OS Specific Context
- * @param[in]eIntType
- * @param[in]bEnable
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_os_program_int(hif_dxe_oshandle hif_dxe_osdev ,
- E_DXE_INTTYPE eIntType ,
- E_DXE_INT_ACTION eAction)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = hif_dxe_osdev;
-
- switch (eIntType)
- {
- case E_HIFDXE_TX_INTERRUPT:
- {
- if (eAction == E_HIFDXE_INT_ENABLE)
- {
- if(FALSE ==
- hif_dxe_os_enable_tx_intr
- (hif_dxeos_ctx))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "%s : Enable Tx "
- "Intr Failed\n",__FUNCTION__));
- return A_ERROR;
- }
- }
- else if (eAction == E_HIFDXE_INT_DISABLE)
- {
- if(FALSE ==
- hif_dxe_os_disable_tx_intr
- (hif_dxeos_ctx))
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "%s : Disable Tx "
- "Intr Failed\n",__FUNCTION__));
- return A_ERROR;
- }
- }
- else if (eAction == E_HIFDXE_INT_ACTIVATE)
- {
- /* To Do */
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "%s : E_HIFDXE_INT_ACTIVATE "
- "Not Supported\n",__FUNCTION__));
- }
- else if (eAction == E_HIFDXE_INT_DEACTIVATE)
- {
- /* To Do */
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("%s : "
- "E_HIFDXE_INT_DEACTIVATE "
- "Not Supported\n",__FUNCTION__));
- }
- }
- break;
- case E_HIFDXE_RX_INTERRUPT:
- {
- if (eAction == E_HIFDXE_INT_ENABLE)
- {
- if(FALSE ==
- hif_dxe_os_enable_rx_intr(
- hif_dxeos_ctx))
- {
- return A_ERROR;
- }
- }
- else if (eAction == E_HIFDXE_INT_DISABLE)
- {
- if(FALSE ==
- hif_dxe_os_disable_rx_intr(
- hif_dxeos_ctx))
- {
- return A_ERROR;
- }
- }
- else if (eAction == E_HIFDXE_INT_ACTIVATE)
- {
- /* To Do */
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "%s : E_HIFDXE_INT_ACTIVATE "
- "Not Supported\n",__FUNCTION__));
- }
- else if (eAction == E_HIFDXE_INT_DEACTIVATE)
- {
- /* To Do */
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(
- "%s : E_HIFDXE_INT_DEACTIVATE "
- "Not Supported\n",__FUNCTION__));
- }
- }
- break;
- }
- return A_OK;
-}
-
-/**
- * @ HIF OS Notify SMSM
- *
- * @param[in]hif_dxe_osdev - OS Specific Context
- * @param[in]clrSt
- * @param[in]setSt
- *
- * @retval A_STATUS
- */
-A_STATUS hif_dxe_os_notifysmsm(hif_dxe_oshandle hif_dxe_osdev,
- u_int32_t clrSt, u_int32_t setSt)
-{
- int rc;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, (
- "+%s Clear : 0x%x Set : 0x%x\n",__FUNCTION__,(
- unsigned int)clrSt,(unsigned int)setSt));
-
- rc = smsm_change_state(SMSM_APPS_STATE, clrSt, setSt);
-
- if(0 != rc)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("%s : smsm_change_state Failed\n"
- ,__FUNCTION__));
- return A_ERROR;
- }
-
- return A_OK;
-}
-
-/**
- * @brief HIF OS Read register
- *
- * @param[in] OS Context
- * @param[in] Addr
- *
- * @return Read Value
- */
-u_int32_t hif_dxe_os_readreg(hif_dxe_oshandle hif_dxe_osdev, u_int32_t addr)
-{
- u_int32_t val = 0;
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = hif_dxe_osdev;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s osdev : 0x%x mem : 0x%x addr : "
- "0x%x\n",__FUNCTION__,(unsigned int)hif_dxeos_ctx,
- (unsigned int)(hif_dxeos_ctx->mmio),(
- unsigned int)addr));
-
- val = readl_relaxed(hif_dxeos_ctx->mmio + (
- addr - WLANDXE_RIVA_BASE_ADDRESS));
- rmb();
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-
- return val;
-}
-
-/**
- * @brief HIF OS Write register
- *
- * @param[in] OS Context
- * @param[in] Addr
- * @param[in] val
- *
- * @return Read Value
- */
-void hif_dxe_os_writereg(hif_dxe_oshandle hif_dxe_osdev,
- u_int32_t addr, u_int32_t val)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = hif_dxe_osdev;
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s osdev : 0x%x mem : 0x%x "
- "addr : 0x%x\n",__FUNCTION__,(unsigned int)hif_dxeos_ctx,
- (unsigned int)hif_dxeos_ctx->mmio,(unsigned int)addr));
-
- wmb();
- writel_relaxed(val, hif_dxeos_ctx->mmio +
- (addr - WLANDXE_RIVA_BASE_ADDRESS));
-
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__));
-}
-
-/**
- * @brief HIF Mem Barrier
- *
- * @param[in] void
- *
- * @return void
- */
-void hif_dxe_os_mem_barrier(void)
-{
- /* Memory Barrier */
- mb();
-}
-
-#define DXE_STOP_WAIT_CNT 10
-#define DXE_STOP_WAIT_SLEEP_UNIT_MS 100
-/**
- * @brief Notify HIF DXE OS Layer Of Stop
- *
- * @param[in] OS Context
- *
- * @return void
- */
-void hif_dxe_os_stop(hif_dxe_oshandle hif_dxe_osdev)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = hif_dxe_osdev;
- u_int8_t max_wait_cnt = DXE_STOP_WAIT_CNT;
-
- /* Wait For DXE Reference to complete (1 sec max)*/
- while (adf_os_atomic_read(&(hif_dxeos_ctx->ref_count))
- && (max_wait_cnt)) {
- vos_sleep(DXE_STOP_WAIT_SLEEP_UNIT_MS);
- max_wait_cnt--;
- }
-}
-
-/**
- * @brief HIF DXE OS Layer Dump for Debug
- *
- * @param[in] OS Context
- *
- * @return void
- */
-void hif_dxe_os_dbgdump(hif_dxe_oshandle hif_dxe_osdev)
-{
- S_HIF_DXE_OSCONTEXT * hif_dxeos_ctx = hif_dxe_osdev;
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("hif_dxeos_ctx->mem : %x \n",(
- unsigned int)hif_dxeos_ctx->mmio));
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("hif_dxeos_ctx->mem_phy_start : %x \n",(
- unsigned int)hif_dxeos_ctx->wcnss_memory->start));
- AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("hif_dxeos_ctx->mem_phy_end : %x \n",(
- unsigned int)hif_dxeos_ctx->wcnss_memory->end));
-}
diff --git a/CORE/SERVICES/HIF/DXE/linux/hif_dxe_ospvt.h b/CORE/SERVICES/HIF/DXE/linux/hif_dxe_ospvt.h
deleted file mode 100644
index 2f6fa1d0f94c..000000000000
--- a/CORE/SERVICES/HIF/DXE/linux/hif_dxe_ospvt.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**========================================================================
-
- \file hif_dxe_ospvt.h
- \brief OS Private Layer used by Linux DXE OS Specific Module
-
- ========================================================================*/
-/**=========================================================================
- EDIT HISTORY FOR FILE
-
-
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
-
- $Header:$ $DateTime: $ $Author: $
-
-
- when who what, where, why
- -------- --- -----------------------------------------
- 05/03/2013 Ganesh Created module for HIF Dxe Linux Specific
- Babu
- ==========================================================================*/
-
-#ifndef _HIF_DXE_PVTOS_H_
-#define _HIF_DXE_PVTOS_H_
-#include <linux/irqreturn.h>
-#include <linux/interrupt.h>
-#include <linux/io.h>
-#include "athdefs.h"
-#include "adf_os_types.h"
-#include "adf_os_atomic.h"
-#include <linux/wcnss_wlan.h>
-
-
-#define DXE_READ_REG(ctx,addr) hif_dxe_os_readreg(ctx,addr)
-#define DXE_WRITE_REG(ctx,addr,val) hif_dxe_os_writereg(ctx,addr,val)
-
-
-typedef struct _S_HIF_DXE_OSCONTEXT
-{
- struct resource *wcnss_memory;
- void __iomem *mmio;
-
- /***************************************/
- /* Tx Irq related Params */
- /***************************************/
-
- int tx_irq;
-
- /* Whether Tx Irq is registered with the OS or not */
- unsigned char bTxRegistered;
-
- /* Tasklet to do the Tx Processing */
- struct tasklet_struct hif_dxe_tx_tasklet;
-
-
- /***************************************/
- /* Rx Irq related Params */
- /***************************************/
-
- int rx_irq;
-
- /* Whether Rx Irq is registered with the OS or not */
- unsigned char bRxRegistered;
-
- /* Tasklet to do the Rx Processing */
- struct tasklet_struct hif_dxe_rx_tasklet;
-
- unsigned char bTxIntEnabled , bRxIntEnabled;
- S_HIF_DXE_OS_PARAMS dxe_hif_params;
- adf_os_atomic_t ref_count;
-
- /* Currently not used. Is it required ??? */
- unsigned long dxe_unloaded;
-}S_HIF_DXE_OSCONTEXT;
-#endif
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 2dd18d0a9fc5..5c23554e488c 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -362,9 +362,6 @@ typedef struct
tANI_U8 wdaMaxSta;
tWdaTimers wdaTimers;
- /* STA, AP, IBSS, MULTI-BSS etc.*/
- tBssSystemRole wdaGlobalSystemRole;
-
/* driver mode, PRODUCTION or FTM */
tDriverType driverMode;
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
deleted file mode 100644
index 142c577e203d..000000000000
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ /dev/null
@@ -1,15069 +0,0 @@
-/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-
-/*===========================================================================
- W L A N _ Q C T _ WDA . C
- OVERVIEW:
- This software unit holds the implementation of the WLAN Transport Layer.
- The functions externalized by this module are to be called ONLY by other
- WLAN modules that properly register with the Transport Layer initially.
- DEPENDENCIES:
- Are listed for each API below.
-===========================================================================*/
-/*===========================================================================
- EDIT HISTORY FOR FILE
-
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
-
- $Header$$DateTime$$Author$
-
- when who what, where, why
----------- --- -------------------------------------------------
-10/05/2011 haparna Adding support for Keep Alive Feature
-2010-12-30 smiryala UMAC convergence changes
-2010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
-===========================================================================*/
-#include "vos_mq.h"
-#include "vos_api.h"
-#include "vos_packet.h"
-#include "vos_nvitem.h"
-#include "sirApi.h"
-#include "wlan_qct_pal_packet.h"
-#include "wlan_qct_wda.h"
-#include "wlan_qct_wda_msg.h"
-#include "wlan_qct_wdi_cfg.h"
-#include "wlan_qct_wdi.h"
-#include "wlan_qct_wdi_ds.h"
-#include "wlan_hal_cfg.h"
-/**********************/
-#include "wniApi.h"
-#include "cfgApi.h"
-#include "limApi.h"
-#include "wlan_qct_tl.h"
-#include "wlan_qct_tli_ba.h"
-#include "limUtils.h"
-#include "btcApi.h"
-#include "vos_sched.h"
-#include "pttMsgApi.h"
-#include "wlan_qct_sys.h"
-
-/* 11A Channel list to decode RX BD channel information */
-static const tANI_U8 abChannel[]= {36,40,44,48,52,56,60,64,100,104,108,112,116,
- 120,124,128,132,136,140,149,153,157,161,165};
-
-#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
-static const tANI_U8 aUnsortedChannelList[]= {52,56,60,64,100,104,108,112,116,
- 120,124,128,132,136,140,36,40,44,48,149,153,157,161,165};
-#endif
-
-/* Used MACRO's */
-/* Get WDA context from vOSS module */
-#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
-#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
-#define WDA_BA_TX_FRM_THRESHOLD (5)
-#define CONVERT_WDI2SIR_STATUS(x) \
- ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
-
-#define IS_WDI_STATUS_FAILURE(status) \
- ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
-#define CONVERT_WDI2VOS_STATUS(x) \
- ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
-
-/* macro's for acessing TL API/data structures */
-#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
-#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
-#define WDA_GET_BA_TXFLAG(a, b, c) \
- (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
-
-#define WDA_SET_BA_TXFLAG(a, b, c) \
- (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
-
-#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
- (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
-#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
- WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
-/* timer related Macros */
-#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
- tx_timer_create(a, b, c, d, e, f, g)
-#define WDA_START_TIMER(a) tx_timer_activate(a)
-#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
-#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
-#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
-
-#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
- ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
-#define WDA_BA_MAX_WINSIZE (64)
-#define WDA_INVALID_KEY_INDEX 0xFF
-#define WDA_NUM_PWR_SAVE_CFG 11
-#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
-#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
-
-#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
-
-#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
-#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
- ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
- (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
-
-#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
-#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
-#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
-
-/* extern declarations */
-extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
-extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
-
-/* forward declarations */
-void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
- void *pBodyptr, tANI_U32 bodyVal) ;
-VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
- WDI_StartReqParamsType *wdiStartParams ) ;
-VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
-VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
-
-extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
- void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
-void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
- tANI_U32 *pConfig) ;
-void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
- WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
-void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
- WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
-void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
- void* pUserData ) ;
-static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
-static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
-void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
-void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
-void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
-#ifdef WLAN_FEATURE_VOWIFI_11R
-VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
-#endif /* WLAN_FEATURE_VOWIFI_11R */
-
-void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
-void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
-VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
-#ifdef FEATURE_WLAN_SCAN_PNO
-static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
-static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
-static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
-#endif // FEATURE_WLAN_SCAN_PNO
-#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
-VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
-void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
-void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
-void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
-#endif
-#ifdef WLAN_FEATURE_PACKET_FILTERING
-static VOS_STATUS WDA_Process8023MulticastListReq (
- tWDA_CbContext *pWDA,
- tSirRcvFltMcAddrList *pRcvFltMcAddrLis
- );
-static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
- tWDA_CbContext *pWDA,
- tSirRcvPktFilterCfgType *pRcvPktFilterCfg
- );
-static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
- tWDA_CbContext *pWDA,
- tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
- );
-static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
- tWDA_CbContext *pWDA,
- tSirRcvFltPktClearParam *pRcvFltPktClearParam
- );
-#endif // WLAN_FEATURE_PACKET_FILTERING
-VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
-static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
- tpTxControlParams pTxCtrlParam);
-VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
- v_U8_t *pDefaultKeyId,
- v_U8_t *pNumKeys,
- WDI_KeysType *pWdiKeys );
-
-#ifdef WLAN_FEATURE_GTK_OFFLOAD
-static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
-static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
-#endif // WLAN_FEATURE_GTK_OFFLOAD
-
-VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
- tAniSetTmLevelReq *setTmLevelReq);
-#ifdef WLAN_FEATURE_11AC
-VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
- tUpdateVHTOpMode *pData);
-#endif
-
-#ifdef FEATURE_WLAN_LPHB
-VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
- tSirLPHBReq *pData);
-#endif /* FEATURE_WLAN_LPHB */
-
-/*
- * FUNCTION: WDA_open
- * Allocate the WDA context
- */
-VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
- wda_tgt_cfg_cb pTgtUpdateCB, tMacOpenParameters *pMacParams)
-{
- tWDA_CbContext *wdaContext;
- VOS_STATUS status;
- WDI_DeviceCapabilityType wdiDevCapability = {0} ;
- /* Allocate WDA context */
- status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
- (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- return VOS_STATUS_E_NOMEM;
- }
- /*__asm int 3;*/
- vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
-
- /* Initialize data structures */
- wdaContext->pVosContext = pVosContext;
- wdaContext->wdaState = WDA_INIT_STATE;
- wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
-
- /* Initialize WDA-WDI synchronization event */
- status = vos_event_init(&wdaContext->wdaWdiEvent);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDI Sync Event init failed - status = %d", status);
- goto error;
- }
- /* Init Frame transfer event */
- status = vos_event_init(&wdaContext->txFrameEvent);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS Mgmt Frame Event init failed - status = %d", status);
- goto error;
- }
- status = vos_event_init(&wdaContext->suspendDataTxEvent);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS suspend data tx Event init failed - status = %d", status);
- goto error;
- }
- status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS wait On Wdi Ind Event init failed - status = %d", status);
- goto error;
- }
- vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
- wdaContext->driverMode = pMacParams->driverType;
- if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
- &wdiDevCapability, pMacParams->driverType))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDI Init failed" );
- goto error;
- }
- else
- {
- pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
- pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
- pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
- /* update max STA in WDA used for BA */
- wdaContext->wdaMaxSta = pMacParams->maxStation;
- /* store the frameTransRequired flag in wdaContext, to send this to HAL
- * in WDA_Start
- */
- wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
- }
- return status;
-
-error:
- vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
- return VOS_STATUS_E_FAILURE;
-}
-
-/*
- * FUNCTION: WDA_preStart
- * Trigger DAL-AL to start CFG download
- */
-VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
-{
- VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
- vos_msg_t wdaMsg = {0} ;
- /*
- * trigger CFG download in WDA by sending WDA_CFG_DNLD message
- */
- wdaMsg.type = WNI_CFG_DNLD_REQ ;
- wdaMsg.bodyptr = NULL;
- wdaMsg.bodyval = 0;
- /* post the message.. */
- vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
- if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
- {
- vosStatus = VOS_STATUS_E_BADMSG;
- }
- return( vosStatus );
-}
-/*
- * FUNCTION: WDA_wdiStartCallback
- * Once WDI_Start is finished, WDI start callback will be called by WDI
- * to indicate completion of WDI_Start.
- */
-void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
- void *pVosContext)
-{
- tWDA_CbContext *wdaContext;
- VOS_STATUS status;
- if (NULL == pVosContext)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: Invoked with invalid pVosContext", __func__ );
- return;
- }
- wdaContext = VOS_GET_WDA_CTXT(pVosContext);
- if (NULL == wdaContext)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: Invoked with invalid wdaContext", __func__ );
- return;
- }
- if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: WDI_Start() failure reported", __func__ );
- }
- else
- {
- wdaContext->wdaState = WDA_START_STATE;
- }
- /* extract and save version information from the Start Response */
- wdaContext->wcnssWlanCompiledVersion.major =
- wdiRspParams->wlanCompiledVersion.major;
- wdaContext->wcnssWlanCompiledVersion.minor =
- wdiRspParams->wlanCompiledVersion.minor;
- wdaContext->wcnssWlanCompiledVersion.version =
- wdiRspParams->wlanCompiledVersion.version;
- wdaContext->wcnssWlanCompiledVersion.revision =
- wdiRspParams->wlanCompiledVersion.revision;
- wdaContext->wcnssWlanReportedVersion.major =
- wdiRspParams->wlanReportedVersion.major;
- wdaContext->wcnssWlanReportedVersion.minor =
- wdiRspParams->wlanReportedVersion.minor;
- wdaContext->wcnssWlanReportedVersion.version =
- wdiRspParams->wlanReportedVersion.version;
- wdaContext->wcnssWlanReportedVersion.revision =
- wdiRspParams->wlanReportedVersion.revision;
- wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
- wdiRspParams->wcnssSoftwareVersion,
- sizeof(wdaContext->wcnssSoftwareVersionString));
- wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
- wdiRspParams->wcnssHardwareVersion,
- sizeof(wdaContext->wcnssHardwareVersionString));
- /* Notify WDA_start that WDI_Start has completed */
- status = vos_event_set(&wdaContext->wdaWdiEvent);
- if (VOS_STATUS_SUCCESS != status)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: Unable to unblock WDA_start", __func__ );
- }
- return;
-}
-
-/*
- * FUNCTION: WDA_start
- * Prepare TLV configuration and call WDI_Start.
- */
-VOS_STATUS WDA_start(v_PVOID_t pVosContext)
-{
- tWDA_CbContext *wdaContext;
- VOS_STATUS status;
- WDI_Status wdiStatus;
- WDI_StartReqParamsType wdiStartParam;
- if (NULL == pVosContext)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid pVosContext", __func__ );
- return VOS_STATUS_E_FAILURE;
- }
- wdaContext = VOS_GET_WDA_CTXT(pVosContext);
- if (NULL == wdaContext)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid wdaContext", __func__ );
- return VOS_STATUS_E_FAILURE;
- }
- /* Non-FTM mode, WDA status for START must be INIT
- * FTM mode, WDA Status for START can be INIT or STOP */
- if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
- (WDA_STOP_STATE != wdaContext->wdaState) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked from wrong state %d",
- __func__, wdaContext->wdaState );
- return VOS_STATUS_E_FAILURE;
- }
- /* initialize the wdiStartParam. Note that we can create this on
- the stack since we won't exit until WDI_Start() completes or
- times out */
- vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
- wdiStartParam.wdiDriverType = wdaContext->driverMode;
- /* prepare the config TLV for the WDI */
- status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
- if ( !VOS_IS_STATUS_SUCCESS(status) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Unable to prepare Config TLV", __func__ );
- return VOS_STATUS_E_FAILURE;
- }
- /* note from here onwards if an error occurs we must
- reclaim the config TLV buffer */
- wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
- wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
- wdiStartParam.wdiReqStatusCB = NULL;
- /* initialize the WDA-WDI synchronization event */
- vos_event_reset(&wdaContext->wdaWdiEvent);
- /* call WDI start */
- wdiStatus = WDI_Start(&wdiStartParam,
- (WDI_StartRspCb)WDA_wdiStartCallback,
- (v_VOID_t *)pVosContext);
- if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: WDI Start failed", __func__ );
- vos_mem_free(wdiStartParam.pConfigBuffer);
- return VOS_STATUS_E_FAILURE;
- }
- /* wait for WDI start to invoke our callback */
- status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
- WDA_WDI_START_TIMEOUT );
- if ( !VOS_IS_STATUS_SUCCESS(status) )
- {
- if ( VOS_STATUS_E_TIMEOUT == status )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Timeout occurred during WDI_Start", __func__ );
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Error %d while waiting for WDI_Start",
- __func__, status);
- }
- vos_mem_free(wdiStartParam.pConfigBuffer);
- return VOS_STATUS_E_FAILURE;
- }
- /* WDI_Start() has completed so we can resume our work */
- /* we no longer need the config TLV */
- vos_mem_free(wdiStartParam.pConfigBuffer);
- /* if we are not in the START state then WDI_Start() failed */
- if (WDA_START_STATE != wdaContext->wdaState)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: WDI_Start() failure detected", __func__ );
- return VOS_STATUS_E_FAILURE;
- }
- /* FTM mode does not need to monitor BA activity */
- if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
- {
- status = wdaCreateTimers(wdaContext) ;
- if(VOS_STATUS_SUCCESS == status)
- {
- wdaContext->wdaTimersCreated = VOS_TRUE;
- }
- }
- else
- {
- vos_event_init(&wdaContext->ftmStopDoneEvent);
- }
- return status;
-}
-
-/*
- * FUNCTION: WDA_prepareConfigTLV
- * Function to prepare CFG for DAL(WDA)
- */
-VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
- WDI_StartReqParamsType *wdiStartParams )
-{
- /* get pMac to acess CFG data base */
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
- tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
- tHalCfg *tlvStruct = NULL ;
- tANI_U8 *tlvStructStart = NULL ;
- tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
- v_PVOID_t *configParam;
- tANI_U32 configParamSize;
- tANI_U32 *configDataValue;
- WDI_WlanVersionType wcnssCompiledApiVersion;
- tANI_U8 i;
-
- if ((NULL == pMac)||(NULL == wdaContext))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid wdaContext or pMac", __func__ );
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
- WNI_CFG_STA_ID_LEN +
- WNI_CFG_EDCA_WME_ACBK_LEN +
- WNI_CFG_EDCA_WME_ACBE_LEN +
- WNI_CFG_EDCA_WME_ACVI_LEN +
- WNI_CFG_EDCA_WME_ACVO_LEN +
- + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
- /* malloc memory for all configs in one shot */
- configParam = vos_mem_malloc(configParamSize);
-
- if(NULL == configParam )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:configParam is NULL", __func__);
- VOS_ASSERT(0) ;
- return VOS_STATUS_E_NOMEM;
- }
- vos_mem_set(configParam, configParamSize, 0);
- wdiStartParams->pConfigBuffer = configParam;
- tlvStruct = (tHalCfg *)configParam;
- tlvStructStart = (tANI_U8 *)configParam;
- /* TODO: Remove Later */
- /* QWLAN_HAL_CFG_STA_ID */
- tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
- configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
- if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
- eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_STA_ID");
- goto handle_failure;
- }
- tlvStruct->length = strLength ;
- /* calculate the pad bytes to have the CFG in aligned format */
- tlvStruct->padBytes = ALIGNED_WORD_SIZE -
- (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
- /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
- tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
- tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
- eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
- tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
-
- /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
- tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
- /* QWLAN_HAL_CFG_CAL_PERIOD */
- tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_CAL_PERIOD");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
- /* QWLAN_HAL_CFG_CAL_CONTROL */
- tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_CAL_CONTROL");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
- /* QWLAN_HAL_CFG_PROXIMITY */
- tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_PROXIMITY");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_NETWORK_DENSITY */
- tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_NETWORK_DENSITY");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
- /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
- tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
- eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
- /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
- tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_RTS_THRESHOLD */
- tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
- eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_RTS_THRESHOLD");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
- /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
- tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
- eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
- tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
- eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
- tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
- tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
-
- /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
- tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
- /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
- tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
-
- /* QWLAN_HAL_CFG_FIXED_RATE */
- tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_FIXED_RATE");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
-
- /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
- tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
-
- /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
- tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
- tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
- tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
- /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
- tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
- /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
- tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
-
- /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
- tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
-
- /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
- tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
- /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
- tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
- eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
-
- /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
- tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
- /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
- tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
- /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
- tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
- /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
- tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
-
- /* QWLAN_HAL_CFG_STATS_PERIOD */
- tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
- eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_STATS_PERIOD");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length);
- /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
- tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
- eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
- tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
- sizeof(tANI_U32));
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_DTIM_PERIOD */
- tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_DTIM_PERIOD");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
- tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
- strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
- &strLength) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
- goto handle_failure;
- }
- tlvStruct->length = strLength;
- /* calculate the pad bytes to have the CFG in aligned format */
- tlvStruct->padBytes = ALIGNED_WORD_SIZE -
- (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
- /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
- tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
- strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
- &strLength) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
- goto handle_failure;
- }
- tlvStruct->length = strLength;
- /* calculate the pad bytes to have the CFG in aligned format */
- tlvStruct->padBytes = ALIGNED_WORD_SIZE -
- (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
- /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
- tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
- strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
- &strLength) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
- goto handle_failure;
- }
- tlvStruct->length = strLength;
- /* calculate the pad bytes to have the CFG in aligned format */
- tlvStruct->padBytes = ALIGNED_WORD_SIZE -
- (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
- /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
- tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
- strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
- &strLength) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
- goto handle_failure;
- }
- tlvStruct->length = strLength;
- /* calculate the pad bytes to have the CFG in aligned format */
- tlvStruct->padBytes = ALIGNED_WORD_SIZE -
- (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
- /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
- tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
- tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
- tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
- tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
- tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
- tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
- tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
- tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
- tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
- tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
- tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
- * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
- * into FW, so the parameters are added here.
- */
- /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
- tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
- {
- /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
- tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
- tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
- tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
- tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- }
-
- /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
- tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
- {
- /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
- tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- }
-
- /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
- tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
- tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
- *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
- wcnssCompiledApiVersion.minor,
- wcnssCompiledApiVersion.version,
- wcnssCompiledApiVersion.revision);
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
- tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
- goto handle_failure;
- }
-
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
- tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
- goto handle_failure;
- }
-
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
- tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
- goto handle_failure;
- }
-
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
- tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
- goto handle_failure;
- }
-
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-#ifdef WLAN_SOFTAP_VSTA_FEATURE
- tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
- goto handle_failure;
- }
-
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-#endif
-
- /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
- tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
-
- if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
- goto handle_failure;
- }
-
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
-/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
- tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
- goto handle_failure;
- }
-
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-#ifdef FEATURE_WLAN_TDLS
- /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
- tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
- tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
- tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
- /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
- tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
- tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
-
- if (wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
-#endif
-
- /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
- tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
- goto handle_failure;
- }
-
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
- tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
- != eSIR_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length));
-
- /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
- tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
- goto handle_failure;
- }
-
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
- tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
- configDataValue ) != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
- goto handle_failure;
- }
- tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length) ;
-
- wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
-#ifdef WLAN_DEBUG
- {
- int i;
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "****** Dumping CFG TLV ***** ");
- for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%02x %02x %02x %02x %02x %02x %02x %02x",
- tlvStructStart[i],
- tlvStructStart[i+1],
- tlvStructStart[i+2],
- tlvStructStart[i+3],
- tlvStructStart[i+4],
- tlvStructStart[i+5],
- tlvStructStart[i+6],
- tlvStructStart[i+7]);
- }
- /* Dump the bytes in the last line*/
- for (; i < wdiStartParams->usConfigBufferLen; i++)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%02x ",tlvStructStart[i]);
- }
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "**************************** ");
- }
-#endif
- return VOS_STATUS_SUCCESS ;
-handle_failure:
- vos_mem_free(configParam);
- return VOS_STATUS_E_FAILURE;
-}
-/*
- * FUNCTION: WDA_wdiCompleteCB
- * call the voss call back function
- */
-void WDA_stopCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *wdaContext;
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
-
- if (NULL == wdaContext)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid wdaContext", __func__ );
- return ;
- }
-
- /* free the config structure */
- if(pWdaParams->wdaWdiApiMsgParam != NULL)
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- }
- vos_mem_free(pWdaParams);
-
- if(WDI_STATUS_SUCCESS != status)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDI stop callback returned failure" );
- VOS_ASSERT(0) ;
- }
- else
- {
- wdaContext->wdaState = WDA_STOP_STATE;
- }
-
- /* FTM Driver stop procedure should be synced.
- * Stop and Close will happen on same context */
- if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
- {
- if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "%s: FTM Stop Event Set Fail", __func__);
- VOS_ASSERT(0);
- }
- }
-
- /* Indicate VOSS about the start complete */
- vos_WDAComplete_cback(wdaContext->pVosContext);
-
- return ;
-}
-/*
- * FUNCTION: WDA_stop
- * call WDI_stop
- */
-VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
-{
- WDI_Status wdiStatus;
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_StopReqParamsType *wdiStopReq;
- tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
- tWDA_ReqParams *pWdaParams ;
-
- if (NULL == pWDA)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid pWDA", __func__ );
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- if (pWDA->wdiFailed == true)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: WDI in failed state", __func__ );
- return VOS_STATUS_E_ALREADY;
- }
-
- /* FTM mode stay START_STATE */
- if( (WDA_READY_STATE != pWDA->wdaState) &&
- (WDA_INIT_STATE != pWDA->wdaState) &&
- (WDA_START_STATE != pWDA->wdaState) )
- {
- VOS_ASSERT(0);
- }
- wdiStopReq = (WDI_StopReqParamsType *)
- vos_mem_malloc(sizeof(WDI_StopReqParamsType));
- if(NULL == wdiStopReq)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- wdiStopReq->wdiStopReason = reason;
- wdiStopReq->wdiReqStatusCB = NULL;
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiStopReq);
- return VOS_STATUS_E_NOMEM;
- }
-
- if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
- (VOS_TRUE == pWDA->wdaTimersCreated))
- {
- wdaDestroyTimers(pWDA);
- pWDA->wdaTimersCreated = VOS_FALSE;
- }
-
- pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
- pWdaParams->wdaMsgParam = NULL;
- pWdaParams->pWdaContext = pWDA;
-
- /* call WDI stop */
- wdiStatus = WDI_Stop(wdiStopReq,
- (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
-
- if (IS_WDI_STATUS_FAILURE(wdiStatus) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "error in WDA Stop" );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- status = VOS_STATUS_E_FAILURE;
- }
-
- /* FTM Driver stop procedure should be synced.
- * Stop and Close will happen on same context */
- if (eDRIVER_TYPE_MFG == pWDA->driverMode)
- {
- status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
- WDI_RESPONSE_TIMEOUT);
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "%s: FTM Stop Timepoout", __func__);
- VOS_ASSERT(0);
- vos_event_reset(&pWDA->ftmStopDoneEvent);
- }
- }
- return status;
-}
-/*
- * FUNCTION: WDA_close
- * call WDI_close and free the WDA context
- */
-VOS_STATUS WDA_close(v_PVOID_t pVosContext)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- VOS_STATUS vstatus;
- tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
- if (NULL == wdaContext)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid wdaContext", __func__ );
- return VOS_STATUS_E_FAILURE;
- }
- if((WDA_INIT_STATE != wdaContext->wdaState) &&
- (WDA_STOP_STATE != wdaContext->wdaState))
- {
- VOS_ASSERT(0);
- }
- /*call WDI close*/
- wstatus = WDI_Close();
- if ( wstatus != WDI_STATUS_SUCCESS )
- {
- status = VOS_STATUS_E_FAILURE;
- }
- wdaContext->wdaState = WDA_CLOSE_STATE;
- /* Destroy the events */
- vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
- if(!VOS_IS_STATUS_SUCCESS(vstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDI Sync Event destroy failed - status = %d", status);
- status = VOS_STATUS_E_FAILURE;
- }
-
- vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
- if(!VOS_IS_STATUS_SUCCESS(vstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS Event destroy failed - status = %d", status);
- status = VOS_STATUS_E_FAILURE;
- }
- vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
- if(!VOS_IS_STATUS_SUCCESS(vstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS Event destroy failed - status = %d", status);
- status = VOS_STATUS_E_FAILURE;
- }
- vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
- if(!VOS_IS_STATUS_SUCCESS(vstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS Event destroy failed - status = %d", status);
- status = VOS_STATUS_E_FAILURE;
- }
- /* free WDA context */
- vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
- if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "error in WDA close " );
- status = VOS_STATUS_E_FAILURE;
- }
- return status;
-}
-/*
- * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
- * returns 1 if the compiled version is greater than or equal to the input version
- */
-
-uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
- tSirVersionType compiledVersion;
- status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
- if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
- ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
- ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
- (compiledVersion.revision >= revision)))
- return 1;
- else
- return 0;
-}
-/*
- * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
- * returns 1 if the compiled version is greater than or equal to the input version
- */
-uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
- tSirVersionType reportedVersion;
- status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
- if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
- ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
- ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
- (reportedVersion.revision >= revision)))
- return 1;
- else
- return 0;
-}
-/*
- * FUNCTION: WDA_GetWcnssWlanCompiledVersion
- * Returns the version of the WCNSS WLAN API with which the HOST
- * device driver was compiled
- */
-VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
- tSirVersionType *pVersion)
-{
- tWDA_CbContext *pWDA;
- if ((NULL == pvosGCtx) || (NULL == pVersion))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid parameter", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
- if (NULL == pWDA )
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid WDA context", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- *pVersion = pWDA->wcnssWlanCompiledVersion;
- return VOS_STATUS_SUCCESS;
-}
-/*
- * FUNCTION: WDA_GetWcnssWlanReportedVersion
- * Returns the version of the WCNSS WLAN API with which the WCNSS
- * device driver was compiled
- */
-VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
- tSirVersionType *pVersion)
-{
- tWDA_CbContext *pWDA;
- if ((NULL == pvosGCtx) || (NULL == pVersion))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid parameter", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
- if (NULL == pWDA )
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid WDA context", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- *pVersion = pWDA->wcnssWlanReportedVersion;
- return VOS_STATUS_SUCCESS;
-}
-/*
- * FUNCTION: WDA_GetWcnssSoftwareVersion
- * Returns the WCNSS Software version string
- */
-VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
- tANI_U8 *pVersion,
- tANI_U32 versionBufferSize)
-{
- tWDA_CbContext *pWDA;
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s: Entered", __func__);
- if ((NULL == pvosGCtx) || (NULL == pVersion))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid parameter", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
- if (NULL == pWDA )
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid WDA context", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
- return VOS_STATUS_SUCCESS;
-}
-/*
- * FUNCTION: WDA_GetWcnssHardwareVersion
- * Returns the WCNSS Hardware version string
- */
-VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
- tANI_U8 *pVersion,
- tANI_U32 versionBufferSize)
-{
- tWDA_CbContext *pWDA;
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s: Entered", __func__);
- if ((NULL == pvosGCtx) || (NULL == pVersion))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid parameter", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
- if (NULL == pWDA )
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid WDA context", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
- return VOS_STATUS_SUCCESS;
-}
-/*
- * FUNCTION: WDA_WniCfgDnld
- * Trigger CFG Download
- */
-VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
-{
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
- VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
- v_VOID_t *pFileImage = NULL;
- v_SIZE_t cbFileImageSize = 0;
- v_VOID_t *pCfgBinary = NULL;
- v_SIZE_t cbCfgBinarySize = 0;
- v_BOOL_t bStatus = VOS_FALSE;
-
- if (NULL == pMac )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid MAC context ", __func__ );
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- /* get the number of bytes in the CFG Binary... */
- vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
- &cbFileImageSize );
- if ( VOS_STATUS_E_NOMEM != vosStatus )
- {
- VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
- "Error obtaining binary size" );
- goto fail;
- }
- // malloc a buffer to read in the Configuration binary file.
- pFileImage = vos_mem_malloc( cbFileImageSize );
- if ( NULL == pFileImage )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to allocate memory for the CFG binary [size= %d bytes]",
- cbFileImageSize );
- vosStatus = VOS_STATUS_E_NOMEM;
- goto fail;
- }
-
- /* Get the entire CFG file image... */
- vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
- &cbFileImageSize );
- if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
- cbFileImageSize );
- goto fail;
- }
-
- /*
- * Validate the binary image. This function will return a pointer
- * and length where the CFG binary is located within the binary image file.
- */
- bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
- &pCfgBinary, &cbCfgBinarySize );
- if ( VOS_FALSE == bStatus )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Error: Cannot find STA CFG in binary image file" );
- vosStatus = VOS_STATUS_E_FAILURE;
- goto fail;
- }
- /*
- * TODO: call the config download function
- * for now calling the existing cfg download API
- */
- processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
- vosStatus = VOS_STATUS_SUCCESS;
-
- /* fall through to clean up and return success */
-
-fail:
- vos_mem_free( pFileImage );
- return vosStatus;
-}
-/* -----------------------------------------------------------------
- * WDI interface
- * -----------------------------------------------------------------
- */
-/*
- * FUNCTION: WDA_suspendDataTxCallback
- * call back function called from TL after suspend Transmission
- */
-VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
- v_U8_t* ucSTAId,
- VOS_STATUS vosStatus)
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s: Entered " ,__func__);
- if (NULL == pWDA )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid WDA context ", __func__ );
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- if(VOS_IS_STATUS_SUCCESS(vosStatus))
- {
- pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
- }
- else
- {
- pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
- }
- /* Trigger the event to bring the WDA TL suspend function to come
- * out of wait*/
- vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
- if(!VOS_IS_STATUS_SUCCESS(vosStatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "NEW VOS Event Set failed - status = %d", vosStatus);
- }
- /* If TL suspended had timedout before this callback was called, resume back
- * TL.*/
- if (pWDA->txSuspendTimedOut)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Late TLSuspendCallback, resuming TL back again");
- WDA_ResumeDataTx(pWDA);
- pWDA->txSuspendTimedOut = FALSE;
- }
- return VOS_STATUS_SUCCESS;
-}
-/*
- * FUNCTION: WDA_suspendDataTx
- * Update TL to suspend the data Transmission
- */
-VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
-{
- VOS_STATUS status = VOS_STATUS_E_FAILURE;
- tANI_U8 eventIdx = 0;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s: Entered " ,__func__);
- pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
- if (pWDA->txSuspendTimedOut)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "TL suspend timedout previously, CB not called yet");
- return status;
- }
- /* Reset the event to be not signalled */
- status = vos_event_reset(&pWDA->suspendDataTxEvent);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS Event reset failed - status = %d",status);
- return VOS_STATUS_E_FAILURE;
- }
- /*Indicate TL to suspend transmission for all Sta Id */
- status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
- WDA_SuspendDataTxCallback);
- if(status != VOS_STATUS_SUCCESS)
- {
- return status;
- }
- /* Wait for the event to be set by the TL, to get the response of
- * suspending the TX queues, this event should be set by the Callback
- * function called by TL*/
- status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
- WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Status %d when waiting for Suspend Data TX Event",
- __func__, status);
- /* Set this flag to true when TL suspend times out, so that when TL
- * suspend eventually happens and calls the callback, TL can be resumed
- * right away by looking at this flag when true.*/
- pWDA->txSuspendTimedOut = TRUE;
- }
- else
- {
- pWDA->txSuspendTimedOut = FALSE;
- }
- if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
- {
- status = VOS_STATUS_SUCCESS;
- }
- return status;
-}
-/*
- * FUNCTION: WDA_resumeDataTx
- * Update TL to resume the data Transmission
- */
-VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s: Entered " ,__func__);
-
- status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
- return status;
-}
-/*
- * FUNCTION: WDA_InitScanReqCallback
- * Trigger Init SCAN callback
- */
-void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tInitScanParams *pWDA_ScanParam ;
- VOS_STATUS status;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
- if(NULL == pWDA_ScanParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWDA_ScanParam received NULL", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return ;
- }
- if(WDI_STATUS_SUCCESS != wdiStatus)
- {
- status = WDA_ResumeDataTx(pWDA) ;
- if(VOS_STATUS_SUCCESS != status)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s error in Resume Tx ", __func__ );
- }
- }
- /* free WDI command buffer */
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
-
- /* assign status to scan params */
- /* without converting the Status to Failure or Success Just
- pass the same status to lim */
- pWDA_ScanParam->status = wdiStatus ;
- /* send SCAN RSP message back to PE */
- WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessInitScanReq
- * Trigger Init SCAN in DAL
- */
-VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
- tInitScanParams *initScanParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_InitScanReqParamsType *wdiInitScanParam =
- (WDI_InitScanReqParamsType *)vos_mem_malloc(
- sizeof(WDI_InitScanReqParamsType)) ;
- tWDA_ReqParams *pWdaParams;
- tANI_U8 i = 0;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiInitScanParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiInitScanParam);
- return VOS_STATUS_E_NOMEM;
- }
-
- /* Copy init Scan params to WDI structure */
- wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
- vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
- sizeof(tSirMacAddr)) ;
- wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
- wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
- wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
- wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
- wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
- wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
- initScanParams->scanEntry.activeBSScnt ;
- for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
- {
- wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
- initScanParams->scanEntry.bssIdx[i] ;
- }
-
- /* if Frame length, copy macMgmtHdr or WDI structure */
- if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
- {
- vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
- &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
- }
- wdiInitScanParam->wdiReqStatusCB = NULL ;
-
- /* Store Init Req pointer, as this will be used for response */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = initScanParams;
- pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
- /* first try to suspend TX */
- status = WDA_SuspendDataTx(pWDA) ;
- if(WDI_STATUS_SUCCESS != status)
- {
- goto handleWdiFailure;
- }
- /* call DAL API to pass init scan request to DAL */
- status = WDI_InitScanReq(wdiInitScanParam,
- WDA_InitScanReqCallback, pWdaParams) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "error in WDA Init Scan, Resume Tx " );
- status = WDA_ResumeDataTx(pWDA) ;
- VOS_ASSERT(0) ;
-
- goto handleWdiFailure;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-handleWdiFailure:
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in WDI Api, free all the memory " );
- /* free WDI command buffer */
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- /* send Failure to PE */
- initScanParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-/*
- * FUNCTION: WDA_StartScanReqCallback
- * send Start SCAN RSP back to PE
- */
-void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tStartScanParams *pWDA_ScanParam;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
- if(NULL == pWDA_ScanParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWDA_ScanParam received NULL", __func__);
- VOS_ASSERT(0) ;
- vos_mem_free(pWdaParams);
- return ;
- }
- if(NULL == pWdaParams->wdaWdiApiMsgParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: wdaWdiApiMsgParam is NULL", __func__);
- VOS_ASSERT(0) ;
- vos_mem_free(pWdaParams);
- return ;
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
-
- /* assign status to scan params */
- pWDA_ScanParam->status = pScanRsp->wdiStatus ;
- /* send SCAN RSP message back to PE */
- WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessStartScanReq
- * Trigger start SCAN in WDI
- */
-VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
- tStartScanParams *startScanParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_StartScanReqParamsType *wdiStartScanParams =
- (WDI_StartScanReqParamsType *)vos_mem_malloc(
- sizeof(WDI_StartScanReqParamsType)) ;
- tWDA_ReqParams *pWdaParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiStartScanParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiStartScanParams);
- return VOS_STATUS_E_NOMEM;
- }
- /* Copy init Scan params to WDI structure */
- wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
- wdiStartScanParams->wdiReqStatusCB = NULL ;
-
- /* Store Init Req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = startScanParams;
- pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
- /* call DAL API to pass init scan request to DAL */
- status = WDI_StartScanReq(wdiStartScanParams,
- WDA_StartScanReqCallback, pWdaParams) ;
- /* failure returned by WDI API */
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Start Scan WDI API, free all the memory "
- "It should be due to previous abort scan." );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- startScanParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_EndScanReqCallback
- * END SCAN callback
- */
-void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tEndScanParams *endScanParam;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
- if(NULL == endScanParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: endScanParam received NULL", __func__);
- VOS_ASSERT(0) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return ;
- }
-
- /* Free WDI command buffer */
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- /* assign status to scan params */
- endScanParam->status = status ;
- /* send response back to PE */
- WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessEndScanReq
- * Trigger END SCAN in WDI
- */
-VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
- tEndScanParams *endScanParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_EndScanReqParamsType *wdiEndScanParams =
- (WDI_EndScanReqParamsType *)vos_mem_malloc(
- sizeof(WDI_EndScanReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiEndScanParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiEndScanParams);
- return VOS_STATUS_E_NOMEM;
- }
- /* Copy init Scan params to WDI structure */
- wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
- wdiEndScanParams->wdiReqStatusCB = NULL ;
- /* Store Init Req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = endScanParams;
- pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
- /* call DAL API to pass init scan request to DAL */
- status = WDI_EndScanReq(wdiEndScanParams,
- WDA_EndScanReqCallback, pWdaParams) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in End Scan WDI API, free all the memory "
- "It should be due to previous abort scan." );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- endScanParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_FinishScanReqCallback
- * Trigger Finish SCAN callback
- */
-void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tFinishScanParams *finishScanParam;
- VOS_STATUS status;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
- if(NULL == finishScanParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: finishScanParam is NULL", __func__);
- VOS_ASSERT(0) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return ;
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- /*
- * Now Resume TX, if we reached here means, TX is already suspended, we
- * have to resume it unconditionaly
- */
- status = WDA_ResumeDataTx(pWDA) ;
-
- if(VOS_STATUS_SUCCESS != status)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s error in Resume Tx ", __func__ );
- }
- finishScanParam->status = wdiStatus ;
- WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessFinshScanReq
- * Trigger Finish SCAN in WDI
- */
-VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
- tFinishScanParams *finishScanParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_FinishScanReqParamsType *wdiFinishScanParams =
- (WDI_FinishScanReqParamsType *)vos_mem_malloc(
- sizeof(WDI_FinishScanReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- tANI_U8 i = 0;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiFinishScanParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiFinishScanParams);
- return VOS_STATUS_E_NOMEM;
- }
- /* Copy init Scan params to WDI structure */
- wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
- vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
- finishScanParams->bssid, sizeof(tSirMacAddr)) ;
- wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
- wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
- wdiFinishScanParams->wdiReqInfo.ucFrameLength =
- finishScanParams->frameLength ;
- wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
- finishScanParams->currentOperChannel ;
- wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
- wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
- finishScanParams->scanEntry.activeBSScnt ;
- for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
- {
- wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
- finishScanParams->scanEntry.bssIdx[i] ;
- }
-
-
- /* if Frame length, copy macMgmtHdr ro WDI structure */
- if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
- {
- vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
- &finishScanParams->macMgmtHdr,
- sizeof(WDI_MacMgmtHdr)) ;
- }
- wdiFinishScanParams->wdiReqStatusCB = NULL ;
- /* Store Init Req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = finishScanParams;
- pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
- /* call DAL API to pass init scan request to DAL */
- status = WDI_FinishScanReq(wdiFinishScanParams,
- WDA_FinishScanReqCallback, pWdaParams) ;
-
-
- /*
- * WDI API returns failure..
- */
- if(IS_WDI_STATUS_FAILURE( status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Finish Scan WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- finishScanParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*---------------------------------------------------------------------
- * ASSOC API's
- *---------------------------------------------------------------------
- */
-/*
- * FUNCTION: WDA_JoinReqCallback
- * Trigger Init SCAN callback
- */
-void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tSwitchChannelParams *joinReqParam;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams) ;
- /* reset macBSSID */
- vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
- /* reset macSTASelf */
- vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
- joinReqParam->status = status ;
- WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessJoinReq
- * Trigger Join REQ in WDI
- */
-VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
- tSwitchChannelParams* joinReqParam)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_JoinReqParamsType *wdiJoinReqParam =
- (WDI_JoinReqParamsType *)vos_mem_malloc(
- sizeof(WDI_JoinReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiJoinReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(joinReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiJoinReqParam);
- vos_mem_free(joinReqParam);
- return VOS_STATUS_E_NOMEM;
- }
-
- /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
- if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
- WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: received join request when BSSID or self-STA is NULL "
- " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
- __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
- WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
- VOS_ASSERT(0);
- vos_mem_free(wdiJoinReqParam);
- vos_mem_free(pWdaParams);
- joinReqParam->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
- return VOS_STATUS_E_INVAL;
- }
-
- /* copy the BSSID for pWDA */
- vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
- sizeof(tSirMacAddr)) ;
- vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
- pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
- wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
- joinReqParam->channelNumber ;
-#ifdef WLAN_FEATURE_VOWIFI
- wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
- joinReqParam->maxTxPower ;
-#else
- wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
- joinReqParam->localPowerConstraint ;
-#endif
- wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
- joinReqParam->secondaryChannelOffset ;
- wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
-
- wdiJoinReqParam->wdiReqStatusCB = NULL ;
- /* Store Init Req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = joinReqParam;
- pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
- status = WDI_JoinReq(wdiJoinReqParam,
- (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Join WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- joinReqParam->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_SwitchChannelReqCallback
- * send Switch channel RSP back to PE
- */
-void WDA_SwitchChannelReqCallback(
- WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
- tWDA_CbContext *pWDA;
- tSwitchChannelParams *pSwitchChanParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
-
-#ifdef WLAN_FEATURE_VOWIFI
- pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
-#endif
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- pSwitchChanParams->status =
- wdiSwitchChanRsp->wdiStatus ;
- WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessChannelSwitchReq
- * Request to WDI to switch channel REQ params.
- */
-VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
- tSwitchChannelParams *pSwitchChanParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_SwitchChReqParamsType *wdiSwitchChanParam =
- (WDI_SwitchChReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SwitchChReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiSwitchChanParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiSwitchChanParam);
- return VOS_STATUS_E_NOMEM;
- }
- wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
-#ifndef WLAN_FEATURE_VOWIFI
- wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
- pSwitchChanParams->localPowerConstraint;
-#endif
- wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
- pSwitchChanParams->secondaryChannelOffset;
- wdiSwitchChanParam->wdiReqStatusCB = NULL ;
- /* Store req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pSwitchChanParams;
- pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
-#ifdef WLAN_FEATURE_VOWIFI
- wdiSwitchChanParam->wdiChInfo.cMaxTxPower
- = pSwitchChanParams->maxTxPower;
- vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
- pSwitchChanParams ->selfStaMacAddr,
- sizeof(tSirMacAddr));
-#endif
- vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
- pSwitchChanParams->bssId,
- sizeof(tSirMacAddr));
-
- status = WDI_SwitchChReq(wdiSwitchChanParam,
- (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in process channel switch Req WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- pSwitchChanParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_ConfigBssReqCallback
- * config BSS Req Callback, called by WDI
- */
-void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
- ,void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tAddBssParams *configBssReqParam;
- tAddStaParams *staConfigBssParam;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
- staConfigBssParam = &configBssReqParam->staContext ;
- configBssReqParam->status =
- wdiConfigBssRsp->wdiStatus;
- if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
- {
- vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
- sizeof(tSirMacAddr));
- configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
- configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
- configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
-
- if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
- {
- if(configBssReqParam->bssType == eSIR_IBSS_MODE)
- {
- pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
- staConfigBssParam->staType = STA_ENTRY_BSSID;
- }
- else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
- (staConfigBssParam->staType == STA_ENTRY_SELF))
- {
- /* This is the 1st add BSS Req for the BTAMP STA */
- pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
- staConfigBssParam->staType = STA_ENTRY_BSSID;
- }
- else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
- (staConfigBssParam->staType == STA_ENTRY_PEER))
- {
- /* This is the 2nd ADD BSS Request that is sent
- * on the BTAMP STA side. The Sta type is
- * set to STA_ENTRY_PEER here.*/
- pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
- }
- else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
- (staConfigBssParam->staType == STA_ENTRY_SELF))
- {
- /* statype is already set by PE.
- * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
- pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
- staConfigBssParam->staType = STA_ENTRY_BSSID;
- }
- else
- {
- pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
- staConfigBssParam->staType = STA_ENTRY_PEER;
- }
- }
- else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
- {
- pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
- staConfigBssParam->staType = STA_ENTRY_SELF;
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Invalid operation mode specified");
- VOS_ASSERT(0);
- }
-
- staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
- staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
- staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
- staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
- vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
- sizeof(tSirMacAddr));
- staConfigBssParam->txChannelWidthSet =
- configBssReqParam->txChannelWidthSet;
- if(staConfigBssParam->staType == STA_ENTRY_PEER &&
- staConfigBssParam->htCapable)
- {
- pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
- wdiConfigBssRsp->ucBSSIdx;
- pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
- WDA_VALID_STA_INDEX ;
- }
- if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
- wdiConfigBssRsp->ucBSSIdx,
- wdiConfigBssRsp->ucSTAIdx))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: fail to set STA idx associated with BSS index", __func__);
- VOS_ASSERT(0) ;
- }
- if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: add BSS into mempool fail", __func__);
- VOS_ASSERT(0) ;
- }
-#ifdef WLAN_FEATURE_VOWIFI
- configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
-#endif
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_UpdateEdcaParamsForAC
- * Update WDI EDCA params with PE edca params
- */
-void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
- WDI_EdcaParamRecord *wdiEdcaParam,
- tSirMacEdcaParamRecord *macEdcaParam)
-{
- wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
- wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
- wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
- wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
- wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
- wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
-}
-/*
- * FUNCTION: WDA_ProcessConfigBssReq
- * Configure BSS before starting Assoc with AP
- */
-VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
- tAddBssParams* configBssReqParam)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if (NULL == configBssReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: configBssReqParam is NULL", __func__);
- return VOS_STATUS_E_INVAL;
- }
-
- wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
- sizeof(WDI_ConfigBSSReqParamsType)) ;
-
- if(NULL == wdiConfigBssReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiConfigBssReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
- vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
- WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
- configBssReqParam) ;
- /* Store Init Req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = configBssReqParam;
- pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
- status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
- (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Config BSS WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- configBssReqParam->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#ifdef ENABLE_HAL_COMBINED_MESSAGES
-/*
- * FUNCTION: WDA_PostAssocReqCallback
- * Post ASSOC req callback, send RSP back to PE
- */
-void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
- void* pUserData)
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
- tPostAssocParams *postAssocReqParam =
- (tPostAssocParams *)pWDA->wdaMsgParam ;
- /*STA context within the BSS Params*/
- tAddStaParams *staPostAssocParam =
- &postAssocReqParam->addBssParams.staContext ;
- /*STA Params for self STA*/
- tAddStaParams *selfStaPostAssocParam =
- &postAssocReqParam->addStaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- postAssocReqParam->status =
- wdiPostAssocRsp->wdiStatus ;
- if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
- {
- staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
- vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
- sizeof(tSirMacAddr)) ;
- staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
- staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
- staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
- selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
- }
- vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
- pWDA->wdaWdiApiMsgParam = NULL;
- pWDA->wdaMsgParam = NULL;
- WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessPostAssocReq
- * Trigger POST ASSOC processing in WDI
- */
-VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
- tPostAssocParams *postAssocReqParam)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
-
- WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
- (WDI_PostAssocReqParamsType *)vos_mem_malloc(
- sizeof(WDI_PostAssocReqParamsType)) ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
-
- if(NULL == wdiPostAssocReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
-
- /* update BSS params into WDI structure */
- WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
- &postAssocReqParam->addBssParams) ;
- /* update STA params into WDI structure */
- WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
- &postAssocReqParam->addStaParams) ;
-
- wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
- postAssocReqParam->addBssParams.highPerformance;
- WDA_UpdateEdcaParamsForAC(pWDA,
- &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
- &postAssocReqParam->addBssParams.acbe);
- WDA_UpdateEdcaParamsForAC(pWDA,
- &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
- &postAssocReqParam->addBssParams.acbk);
- WDA_UpdateEdcaParamsForAC(pWDA,
- &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
- &postAssocReqParam->addBssParams.acvi);
- WDA_UpdateEdcaParamsForAC(pWDA,
- &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
- &postAssocReqParam->addBssParams.acvo);
- /* Store Init Req pointer, as this will be used for response */
- pWDA->wdaMsgParam = (void *)postAssocReqParam ;
- /* store Params pass it to WDI */
- pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
- status = WDI_PostAssocReq(wdiPostAssocReqParam,
- (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Post Assoc WDI API, free all the memory " );
- vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
- pWDA->wdaWdiApiMsgParam = NULL;
- pWDA->wdaMsgParam = NULL;
- postAssocReqParam->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#endif
-/*
- * FUNCTION: WDA_AddStaReqCallback
- * ADD STA req callback, send RSP back to PE
- */
-void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tAddStaParams *addStaReqParam;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
- addStaReqParam->status =
- wdiConfigStaRsp->wdiStatus ;
- if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
- {
- addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
- /*TODO: UMAC structure doesn't have these fields*/
- /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
- addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
- addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
- addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
- addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
- /* update staIndex as valid index for BA if STA is HT capable*/
-#ifdef FEATURE_WLAN_TDLS
- if( (addStaReqParam->staType == STA_ENTRY_PEER ||
- addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
-#else
- if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
-#endif
- {
- pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
- wdiConfigStaRsp->ucBssIdx;
- pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
- WDA_VALID_STA_INDEX ;
- }
- if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: add STA into mempool fail", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams) ;
- WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ConfigStaReq
- * Trigger Config STA processing in WDI
- */
-VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
- tAddStaParams *addStaReqParam)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
- (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
- sizeof(WDI_ConfigSTAReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiConfigStaReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiConfigStaReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
- /* update STA params into WDI structure */
- WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
- addStaReqParam) ;
- /* Store Init Req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = addStaReqParam;
- pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
- status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
- (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Config STA WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- addStaReqParam->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_DelBSSReqCallback
- * Dens DEL BSS RSP back to PE
- */
-void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tDeleteBssParams *delBssReqParam;
- tANI_U8 staIdx,tid;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
- delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
- if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
- {
- vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
- sizeof(tSirMacAddr)) ;
- }
- if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Get STA index from BSS index Fail", __func__);
- VOS_ASSERT(0) ;
- }
- if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: DEL STA from MemPool Fail", __func__);
- VOS_ASSERT(0) ;
- }
- if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Clear STA index form table Fail", __func__);
- VOS_ASSERT(0) ;
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- /* reset the the system role*/
- pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
-
- /* Reset the BA related information */
- for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
- {
- if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
- {
- pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
- pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
- /* Reset framesTxed counters here */
- for(tid = 0; tid < STACFG_MAX_TC; tid++)
- {
- pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
- }
- }
- }
- WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessDelBssReq
- * Init DEL BSS req with WDI
- */
-VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
- tDeleteBssParams *delBssParam)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_DelBSSReqParamsType *wdiDelBssReqParam =
- (WDI_DelBSSReqParamsType *)vos_mem_malloc(
- sizeof(WDI_DelBSSReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiDelBssReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiDelBssReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
- wdiDelBssReqParam->wdiReqStatusCB = NULL ;
-
- /* Store Init Req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = delBssParam;
- pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
- status = WDI_DelBSSReq(wdiDelBssReqParam,
- (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Del BSS WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- delBssParam->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_DelSTAReqCallback
- * Dens DEL STA RSP back to PE
- */
-void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tDeleteStaParams *delStaReqParam;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
- delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
- if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
- {
- if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: DEL STA from MemPool Fail", __func__);
- VOS_ASSERT(0) ;
- }
- delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- /*Reset the BA information corresponding to this STAIdx */
- pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
- WDA_INVALID_STA_INDEX;
- pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
-
- WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessDelStaReq
- * Init DEL STA req with WDI
- */
-VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
- tDeleteStaParams *delStaParam)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_DelSTAReqParamsType *wdiDelStaReqParam =
- (WDI_DelSTAReqParamsType *)vos_mem_malloc(
- sizeof(WDI_DelSTAReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiDelStaReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiDelStaReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
- wdiDelStaReqParam->wdiReqStatusCB = NULL ;
- /* Store Init Req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = delStaParam;
- pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
- status = WDI_DelSTAReq(wdiDelStaReqParam,
- (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Del STA WDI API, free all the memory status = %d",
- status );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- delStaParam->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tAddStaSelfParams *pAddStaSelfRsp = NULL;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
- vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
- pwdiAddSTASelfRsp->macSelfSta,
- sizeof(pAddStaSelfRsp->selfMacAddr));
- WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessAddStaSelfReq
- *
- */
-VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
- (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
- sizeof(WDI_AddSTASelfReqParamsType)) ;
- tWDA_ReqParams *pWdaParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if( NULL == wdiAddStaSelfReq )
- {
- VOS_ASSERT( 0 );
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Unable to allocate memory " ,__func__);
- return( VOS_STATUS_E_NOMEM );
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if( NULL == pWdaParams )
- {
- VOS_ASSERT( 0 );
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Unable to allocate memory " ,__func__);
- vos_mem_free(wdiAddStaSelfReq) ;
- return( VOS_STATUS_E_NOMEM );
- }
- wdiAddStaSelfReq->wdiReqStatusCB = NULL;
- vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
- wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
- /* Store Init Req pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pAddStaSelfReq;
- pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
- wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Add Self Sta Request API, free all the memory status = %d",
- wstatus );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- pAddStaSelfReq->status = eSIR_FAILURE ;
- WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
- }
- return status;
-}
-/*
- * FUNCTION: WDA_DelSTASelfRespCallback
- *
- */
-void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
- wdiDelStaSelfRspParams , void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tDelStaSelfParams *delStaSelfParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if (NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid pWdaParams pointer", __func__);
- VOS_ASSERT(0);
- return;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
- delStaSelfParams->status =
- wdiDelStaSelfRspParams->wdiStatus ;
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_DelSTASelfReqCallback
- *
- */
-void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tDelStaSelfParams *delStaSelfParams;
-
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d pWdaParams: %p",
- __func__, wdiStatus, pWdaParams);
-
- if (NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid pWdaParams pointer", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
-
- delStaSelfParams->status = wdiStatus ;
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
- }
-
- return ;
-}
-
-/*
- * FUNCTION: WDA_DelSTASelfReq
- * Trigger Config STA processing in WDI
- */
-VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
- tDelStaSelfParams* pDelStaSelfReqParam)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- tWDA_ReqParams *pWdaParams = NULL;
- WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
- (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
- sizeof(WDI_DelSTASelfReqParamsType)) ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if( NULL == wdiDelStaSelfReq )
- {
- VOS_ASSERT( 0 );
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Unable to allocate memory " ,__func__);
- return( VOS_STATUS_E_NOMEM );
- }
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if( NULL == pWdaParams )
- {
- VOS_ASSERT( 0 );
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Unable to allocate memory " ,__func__);
- vos_mem_free(wdiDelStaSelfReq) ;
- return( VOS_STATUS_E_NOMEM );
- }
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
- vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
- pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
-
- wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
- wdiDelStaSelfReq->pUserData = pWdaParams;
-
- wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
- (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "Failure in Del Sta Self REQ WDI API, free all the memory " );
- VOS_ASSERT(0);
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- pDelStaSelfReqParam->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
- }
- return status;
-}
-
-/*
- * FUNCTION: WDA_SendMsg
- * Send Message back to PE
- */
-void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
- void *pBodyptr, tANI_U32 bodyVal)
-{
- tSirMsgQ msg = {0} ;
- tANI_U32 status = VOS_STATUS_SUCCESS ;
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
- msg.type = msgType;
- msg.bodyval = bodyVal;
- msg.bodyptr = pBodyptr;
- status = limPostMsgApi(pMac, &msg);
- if (VOS_STATUS_SUCCESS != status)
- {
- if(NULL != pBodyptr)
- {
- vos_mem_free(pBodyptr);
- }
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: limPostMsgApi is failed " ,__func__);
- VOS_ASSERT(0) ;
- }
- return ;
-}
-/*
- * FUNCTION: WDA_UpdateBSSParams
- * Translated WDA/PE BSS info into WDI BSS info..
- */
-void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
- WDI_ConfigBSSReqInfoType *wdiBssParams,
- tAddBssParams *wdaBssParams)
-{
- v_U8_t keyIndex = 0;
- /* copy bssReq Params to WDI structure */
- vos_mem_copy(wdiBssParams->macBSSID,
- wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
- vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
- sizeof(tSirMacAddr)) ;
- wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
- wdiBssParams->ucOperMode = wdaBssParams->operMode ;
- wdiBssParams->wdiNWType = wdaBssParams->nwType ;
- wdiBssParams->ucShortSlotTimeSupported =
- wdaBssParams->shortSlotTimeSupported ;
- wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
- wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
- wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
- wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
- wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
-
- wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
- wdiBssParams->ucTXOPProtectionFullSupport =
- wdaBssParams->fLsigTXOPProtectionFullSupport ;
- wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
- wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
- wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
- wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
- wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
- wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
- wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
-
- wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
-
- /* copy SSID into WDI structure */
- wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
- vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
- wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
- WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
- &wdaBssParams->staContext) ;
- wdiBssParams->wdiAction = wdaBssParams->updateBss;
-#ifdef WLAN_FEATURE_VOWIFI
- wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
-#endif
- wdiBssParams->ucPersona = wdaBssParams->halPersona;
- wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
-#ifdef WLAN_FEATURE_VOWIFI_11R
- wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
- if(wdiBssParams->bExtSetStaKeyParamValid)
- {
- /* copy set STA key params to WDI structure */
- wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
- wdaBssParams->extSetStaKeyParam.staIdx;
- wdiBssParams->wdiExtSetKeyParam.wdiEncType =
- wdaBssParams->extSetStaKeyParam.encType;
- wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
- wdaBssParams->extSetStaKeyParam.wepType;
- wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
- wdaBssParams->extSetStaKeyParam.defWEPIdx;
- if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
- {
- if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
- (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
- (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
- {
- WDA_GetWepKeysFromCfg( pWDA,
- &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
- &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
- wdiBssParams->wdiExtSetKeyParam.wdiKey );
- }
- else
- {
- for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
- keyIndex++)
- {
- wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
- wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
- wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
- wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
- wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
- wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
- vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
- wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
- wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
- wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
- wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
- wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
- vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
- wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
- }
- wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
- SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
- }
- }
- wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
- }
- else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
- {
- vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
- sizeof(wdaBssParams->extSetStaKeyParam) );
- }
-#endif /*WLAN_FEATURE_VOWIFI_11R*/
-#ifdef WLAN_FEATURE_11AC
- wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
- wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
-#endif
-
- return ;
-}
-/*
- * FUNCTION: WDA_UpdateSTAParams
- * Translated WDA/PE BSS info into WDI BSS info..
- */
-void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
- WDI_ConfigStaReqInfoType *wdiStaParams,
- tAddStaParams *wdaStaParams)
-{
- tANI_U8 i = 0;
- /* Update STA params */
- vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
- sizeof(tSirMacAddr)) ;
- wdiStaParams->usAssocId = wdaStaParams->assocId;
- wdiStaParams->wdiSTAType = wdaStaParams->staType;
- wdiStaParams->staIdx = wdaStaParams->staIdx;
-
- wdiStaParams->ucShortPreambleSupported =
- wdaStaParams->shortPreambleSupported;
- vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
- sizeof(tSirMacAddr)) ;
- wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
-
- wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
-
- wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
- wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
- wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
- wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
- wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
- wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
- wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
-
- wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
- wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
- wdiStaParams->wdiSupportedRates.opRateMode =
- wdaStaParams->supportedRates.opRateMode;
- for(i = 0;i < WDI_NUM_11B_RATES;i++)
- {
- wdiStaParams->wdiSupportedRates.llbRates[i] =
- wdaStaParams->supportedRates.llbRates[i];
- }
- for(i = 0;i < WDI_NUM_11A_RATES;i++)
- {
- wdiStaParams->wdiSupportedRates.llaRates[i] =
- wdaStaParams->supportedRates.llaRates[i];
- }
- for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
- {
- wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
- wdaStaParams->supportedRates.aniLegacyRates[i];
- }
- wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
- wdaStaParams->supportedRates.aniEnhancedRateBitmap;
-#ifdef WLAN_FEATURE_11AC
- wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
- wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
- wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
- wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
-#endif
- for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
- {
- wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
- wdaStaParams->supportedRates.supportedMCSSet[i];
- }
- wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
- wdaStaParams->supportedRates.rxHighestDataRate;
-
- wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
-
- wdiStaParams->wdiAction = wdaStaParams->updateSta;
-
- wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
- wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
- wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
-
- wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
- wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
- wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
- wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
- wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
-#ifdef WLAN_FEATURE_11AC
- wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
- wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
- wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
-#endif
- wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
- wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
- return ;
-}
-/*
- * -------------------------------------------------------------------------
- * CFG update to WDI
- * -------------------------------------------------------------------------
- */
-
- /*
- * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
- * Convert the WNI CFG ID to HAL CFG ID
- */
-static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
-{
- switch(wniCfgId)
- {
- case WNI_CFG_STA_ID:
- return QWLAN_HAL_CFG_STA_ID;
- case WNI_CFG_CURRENT_TX_ANTENNA:
- return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
- case WNI_CFG_CURRENT_RX_ANTENNA:
- return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
- case WNI_CFG_LOW_GAIN_OVERRIDE:
- return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
- case WNI_CFG_POWER_STATE_PER_CHAIN:
- return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
- case WNI_CFG_CAL_PERIOD:
- return QWLAN_HAL_CFG_CAL_PERIOD;
- case WNI_CFG_CAL_CONTROL:
- return QWLAN_HAL_CFG_CAL_CONTROL;
- case WNI_CFG_PROXIMITY:
- return QWLAN_HAL_CFG_PROXIMITY;
- case WNI_CFG_NETWORK_DENSITY:
- return QWLAN_HAL_CFG_NETWORK_DENSITY;
- case WNI_CFG_MAX_MEDIUM_TIME:
- return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
- case WNI_CFG_MAX_MPDUS_IN_AMPDU:
- return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
- case WNI_CFG_RTS_THRESHOLD:
- return QWLAN_HAL_CFG_RTS_THRESHOLD;
- case WNI_CFG_SHORT_RETRY_LIMIT:
- return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
- case WNI_CFG_LONG_RETRY_LIMIT:
- return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
- case WNI_CFG_FRAGMENTATION_THRESHOLD:
- return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
- case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
- return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
- case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
- return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
- case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
- return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
- case WNI_CFG_FIXED_RATE:
- return QWLAN_HAL_CFG_FIXED_RATE;
- case WNI_CFG_RETRYRATE_POLICY:
- return QWLAN_HAL_CFG_RETRYRATE_POLICY;
- case WNI_CFG_RETRYRATE_SECONDARY:
- return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
- case WNI_CFG_RETRYRATE_TERTIARY:
- return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
- case WNI_CFG_FORCE_POLICY_PROTECTION:
- return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
- case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
- return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
- case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
- return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
- case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
- return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
- case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
- return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
- case WNI_CFG_MAX_BA_SESSIONS:
- return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
- case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
- return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
- case WNI_CFG_PS_ENABLE_BCN_FILTER:
- return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
- case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
- return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
- case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
- return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
- case WNI_CFG_STATS_PERIOD:
- return QWLAN_HAL_CFG_STATS_PERIOD;
- case WNI_CFG_CFP_MAX_DURATION:
- return QWLAN_HAL_CFG_CFP_MAX_DURATION;
-#if 0 /*This is not part of CFG*/
- case WNI_CFG_FRAME_TRANS_ENABLED:
- return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
-#endif
- case WNI_CFG_DTIM_PERIOD:
- return QWLAN_HAL_CFG_DTIM_PERIOD;
- case WNI_CFG_EDCA_WME_ACBK:
- return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
- case WNI_CFG_EDCA_WME_ACBE:
- return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
- case WNI_CFG_EDCA_WME_ACVI:
- return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
- case WNI_CFG_EDCA_WME_ACVO:
- return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
-#if 0
- case WNI_CFG_TELE_BCN_WAKEUP_EN:
- return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
- case WNI_CFG_TELE_BCN_TRANS_LI:
- return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
- case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
- return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
- case WNI_CFG_TELE_BCN_MAX_LI:
- return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
- case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
- return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
-#endif
- case WNI_CFG_ENABLE_CLOSE_LOOP:
- return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
- case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
- return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
- default:
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
- wniCfgId);
- return VOS_STATUS_E_INVAL;
- }
- }
-}
-/*
- * FUNCTION: WDA_UpdateCfgCallback
- *
- */
-void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
- WDI_UpdateCfgReqParamsType *wdiCfgParam =
- (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- /*
- * currently there is no response message is expected between PE and
- * WDA, Failure return from WDI is a ASSERT condition
- */
- if(WDI_STATUS_SUCCESS != wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: CFG (%d) config failure", __func__,
- ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
- }
-
- vos_mem_free(wdiCfgParam->pConfigBuffer) ;
- vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
- pWDA->wdaWdiCfgApiMsgParam = NULL;
- return ;
-}
-/*
- * FUNCTION: WDA_UpdateCfg
- *
- */
-VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
-{
-
- WDI_Status status = WDI_STATUS_SUCCESS ;
- tANI_U32 val =0;
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
- tHalCfg *configData;
- WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
- tANI_U8 *configDataValue;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if (NULL == pMac )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid MAC context ", __func__ );
- return VOS_STATUS_E_FAILURE;
- }
- if(WDA_START_STATE != pWDA->wdaState)
- {
- return VOS_STATUS_E_FAILURE;
- }
-
- if(NULL != pWDA->wdaWdiCfgApiMsgParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
-
- wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
- sizeof(WDI_UpdateCfgReqParamsType)) ;
- if(NULL == wdiCfgReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
- sizeof(tANI_U32)) ;
- if(NULL == wdiCfgReqParam->pConfigBuffer)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(wdiCfgReqParam);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- /*convert the WNI CFG Id to HAL CFG Id*/
- ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
- WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
-
- /*TODO: revisit this for handling string parameters */
- if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
- &val) != eSIR_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to cfg get id %d", cfgParam->bodyval);
- vos_mem_free(wdiCfgReqParam->pConfigBuffer);
- vos_mem_free(wdiCfgReqParam);
- return eSIR_FAILURE;
- }
- ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
- configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
- configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
- vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
- wdiCfgReqParam->wdiReqStatusCB = NULL ;
-
- /* store Params pass it to WDI */
- pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
-#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
- status = WDI_UpdateCfgReq(wdiCfgReqParam,
- (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Update CFG WDI API, free all the memory " );
- vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
- vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
- pWDA->wdaWdiCfgApiMsgParam = NULL;
- /* Failure is not expected */
- VOS_ASSERT(0) ;
- }
-#else
- vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
- vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
- pWDA->wdaWdiCfgApiMsgParam = NULL;
-#endif
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
- v_U8_t *pDefaultKeyId,
- v_U8_t *pNumKeys,
- WDI_KeysType *pWdiKeys )
-{
- v_U32_t i, j, defKeyId = 0;
- v_U32_t val = SIR_MAC_KEY_LENGTH;
- VOS_STATUS status = WDI_STATUS_SUCCESS;
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
- if (NULL == pMac )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid MAC context ", __func__ );
- return VOS_STATUS_E_FAILURE;
- }
- if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
- &defKeyId ))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
- }
-
- *pDefaultKeyId = (v_U8_t)defKeyId;
- /* Need to extract ALL of the configured WEP Keys */
- for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
- {
- val = SIR_MAC_KEY_LENGTH;
- if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
- (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
- pWdiKeys[j].key,
- &val ))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WEP Key index [%d] may not configured in CFG",i);
- }
- else
- {
- pWdiKeys[j].keyId = (tANI_U8) i;
- /*
- * Actually, a DC (Don't Care) because
- * this is determined (and set) by PE/MLME
- */
- pWdiKeys[j].unicast = 0;
- /*
- * Another DC (Don't Care)
- */
- pWdiKeys[j].keyDirection = eSIR_TX_RX;
- /* Another DC (Don't Care). Unused for WEP */
- pWdiKeys[j].paeRole = 0;
- /* Determined from wlan_cfgGetStr() above.*/
- pWdiKeys[j].keyLength = (tANI_U16) val;
- j++;
- *pNumKeys = (tANI_U8) j;
- }
- }
- return status;
-}
-/*
- * FUNCTION: WDA_SetBssKeyReqCallback
- * send SET BSS key RSP back to PE
- */
-void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tSetBssKeyParams *setBssKeyParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- setBssKeyParams->status = status ;
- WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessSetBssKeyReq
- * Request to WDI for programming the BSS key( key for
- * broadcast/multicast frames Encryption)
- */
-VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
- tSetBssKeyParams *setBssKeyParams )
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
- (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SetBSSKeyReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- v_U8_t keyIndex;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiSetBssKeyParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiSetBssKeyParam);
- return VOS_STATUS_E_NOMEM;
- }
- vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
- /* copy set BSS params to WDI structure */
- wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
- wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
- wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
- if(setBssKeyParams->encType != eSIR_ED_NONE)
- {
- if( setBssKeyParams->numKeys == 0 &&
- (( setBssKeyParams->encType == eSIR_ED_WEP40)||
- setBssKeyParams->encType == eSIR_ED_WEP104))
- {
- tANI_U8 defaultKeyId = 0;
- WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
- &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
- wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
- }
- else
- {
- for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
- {
- wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
- setBssKeyParams->key[keyIndex].keyId;
- wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
- setBssKeyParams->key[keyIndex].unicast;
- wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
- setBssKeyParams->key[keyIndex].keyDirection;
- vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
- setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
- wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
- setBssKeyParams->key[keyIndex].paeRole;
- wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
- setBssKeyParams->key[keyIndex].keyLength;
- vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
- setBssKeyParams->key[keyIndex].key,
- SIR_MAC_MAX_KEY_LENGTH);
- }
- }
- }
- wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
- setBssKeyParams->singleTidRc;
- wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
- /* Store set key pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = setBssKeyParams;
- pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
- status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
- (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set BSS Key Req WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- setBssKeyParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_RemoveBssKeyReqCallback
- * send SET BSS key RSP back to PE
- */
-void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tRemoveBssKeyParams *removeBssKeyParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- removeBssKeyParams->status = status ;
- WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessRemoveBssKeyReq
- * Request to WDI to remove the BSS key( key for broadcast/multicast
- * frames Encryption)
- */
-VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
- tRemoveBssKeyParams *removeBssKeyParams )
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
- (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
- sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiRemoveBssKeyParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiRemoveBssKeyParam);
- return VOS_STATUS_E_NOMEM;
- }
- /* copy Remove BSS key params to WDI structure*/
- wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
- wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
- wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
- wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
- wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
- /* Store remove key pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = removeBssKeyParams;
- pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
- status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
- (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Remove BSS Key Req WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- removeBssKeyParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_SetBssKeyReqCallback
- * send SET BSS key RSP back to PE
- */
-void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tSetStaKeyParams *setStaKeyParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
- ,"%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- setStaKeyParams->status = status ;
- WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessSetStaKeyReq
- * Request to WDI for programming the STA key( key for Unicast frames
- * Encryption)
- */
-VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
- tSetStaKeyParams *setStaKeyParams )
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
- (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SetSTAKeyReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- v_U8_t keyIndex;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiSetStaKeyParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiSetStaKeyParam);
- return VOS_STATUS_E_NOMEM;
- }
- vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
- vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
- /* copy set STA key params to WDI structure */
- wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
- wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
- wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
- wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
- if(setStaKeyParams->encType != eSIR_ED_NONE)
- {
- if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
- (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
- (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
- {
- WDA_GetWepKeysFromCfg( pWDA,
- &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
- &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
- }
- else
- {
- for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
- keyIndex++)
- {
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
- setStaKeyParams->key[keyIndex].keyId;
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
- setStaKeyParams->key[keyIndex].unicast;
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
- setStaKeyParams->key[keyIndex].keyDirection;
- vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
- setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
- setStaKeyParams->key[keyIndex].paeRole;
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
- setStaKeyParams->key[keyIndex].keyLength;
- vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
- setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
- /* set default index to index which have key direction as WDI_TX_DEFAULT */
- if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
- {
- wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
- }
- }
- wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
- SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
- }
- }
- wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
- wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
- /* Store set key pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = setStaKeyParams;
- pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
- status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
- (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in set STA Key Req WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- setStaKeyParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_SetBcastStaKeyReqCallback
- * send SET Bcast STA key RSP back to PE
- */
-void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tSetStaKeyParams *setStaKeyParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- setStaKeyParams->status = status ;
- WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessSetBcastStaKeyReq
- * Request to WDI for programming the Bcast STA key( key for Broadcast frames
- * Encryption)
- */
-VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
- tSetStaKeyParams *setStaKeyParams )
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
- (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SetSTAKeyReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- v_U8_t keyIndex;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiSetStaKeyParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiSetStaKeyParam);
- return VOS_STATUS_E_NOMEM;
- }
- vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
- vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
- /* copy set STA key params to WDI structure */
- wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
- wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
- wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
- wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
- if(setStaKeyParams->encType != eSIR_ED_NONE)
- {
- for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
- keyIndex++)
- {
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
- setStaKeyParams->key[keyIndex].keyId;
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
- setStaKeyParams->key[keyIndex].unicast;
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
- setStaKeyParams->key[keyIndex].keyDirection;
- vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
- setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
- setStaKeyParams->key[keyIndex].paeRole;
- wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
- setStaKeyParams->key[keyIndex].keyLength;
- vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
- setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
- }
- wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
- SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
- }
- wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
- /* Store set key pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = setStaKeyParams;
- pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
- status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
- (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in set BCAST STA Key Req WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- setStaKeyParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_RemoveStaKeyReqCallback
- * send SET BSS key RSP back to PE
- */
-void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tRemoveStaKeyParams *removeStaKeyParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- removeStaKeyParams->status = status ;
- WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessRemoveStaKeyReq
- * Request to WDI to remove the STA key( key for Unicast frames Encryption)
- */
-VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
- tRemoveStaKeyParams *removeStaKeyParams )
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
- (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
- sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiRemoveStaKeyParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiRemoveStaKeyParam);
- return VOS_STATUS_E_NOMEM;
- }
- /* copy remove STA key params to WDI structure*/
- wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
- wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
- wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
- wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
- wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
- /* Store remove key pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = removeStaKeyParams;
- pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
- status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
- (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in remove STA Key Req WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- removeStaKeyParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_IsHandleSetLinkStateReq
- * Update the WDA state and return the status to handle this message or not
- */
-WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
- tWDA_CbContext *pWDA,
- tLinkStateParams *linkStateParams)
-{
- WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
- switch(linkStateParams->state)
- {
- case eSIR_LINK_PREASSOC_STATE:
- case eSIR_LINK_BTAMP_PREASSOC_STATE:
- /*
- * set the WDA state to PRE ASSOC
- * copy the BSSID into pWDA to use it in join request and return,
- * No need to handle these messages.
- */
- if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
- {
- vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
- sizeof(tSirMacAddr));
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: BSSID in set link state is NULL ", __func__);
- VOS_ASSERT(0);
- }
-
- if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
- {
- vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
- sizeof(tSirMacAddr));
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
- "%s: self mac address in set link state is NULL ", __func__);
- VOS_ASSERT(0);
- }
-
- /* UMAC is issuing the setlink state with PREASSOC twice (before set
- *channel and after ) so reset the WDA state to ready when the second
- * time UMAC issue the link state with PREASSOC
- */
- if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
- {
- /* RESET WDA state back to WDA_READY_STATE */
- pWDA->wdaState = WDA_READY_STATE;
- }
- else
- {
- pWDA->wdaState = WDA_PRE_ASSOC_STATE;
- }
- //populate linkState info in WDACbCtxt
- pWDA->linkState = linkStateParams->state;
- break;
- case eSIR_LINK_DOWN_STATE:
- status = WDA_IGNORE_SET_LINK_STATE;
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_DEBUG,
- "Ignoring DOWN link state in WDA");
- break;
- default:
- if(pWDA->wdaState != WDA_READY_STATE)
- {
- /*If WDA_SET_LINK_STATE is recieved with any other link state apart
- *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
- *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
- *error cases) so reset the WDA state to WDA_READY_STATE to avoid
- *the ASSERT in WDA_Stop during module unload.*/
- if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
- {
- pWDA->wdaState = WDA_READY_STATE;
- /* Don't ignore the set link in this case*/
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Set link state called when WDA is not in READY STATE " );
- status = WDA_IGNORE_SET_LINK_STATE;
- }
- }
- break;
- }
-
- return status;
-}
-/*
- * FUNCTION: WDA_SetLinkStateCallback
- * call back function for set link state from WDI
- */
-void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
-{
- tWDA_CbContext *pWDA;
- tLinkStateParams *linkStateParams;
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
- /*
- * In STA mode start the BA activity check timer after association
- * and in AP mode start BA activity check timer after BSS start */
- if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
- status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
- (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
- ((status == WDI_STATUS_SUCCESS) &&
- (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
- {
- WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
- }
- WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
- /*
- * No respone required for WDA_SET_LINK_STATE so free the request
- * param here
- */
- if( pWdaParams != NULL )
- {
- if( pWdaParams->wdaWdiApiMsgParam != NULL )
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- }
- vos_mem_free(pWdaParams);
- }
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessSetLinkState
- * Request to WDI to set the link status.
- */
-VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
- tLinkStateParams *linkStateParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
- (WDI_SetLinkReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SetLinkReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- tpAniSirGlobal pMac;
- pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
-
- if(NULL == pMac)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pMac is NULL", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiSetLinkStateParam);
- return VOS_STATUS_E_FAILURE;
- }
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiSetLinkStateParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiSetLinkStateParam);
- return VOS_STATUS_E_NOMEM;
- }
- if(WDA_IGNORE_SET_LINK_STATE ==
- WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
- {
- status = WDI_STATUS_E_FAILURE;
- }
- else
- {
- vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
- linkStateParams->bssid, sizeof(tSirMacAddr));
- vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
- linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
- wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
- wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
- pWdaParams->pWdaContext = pWDA;
- /* Store remove key pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)linkStateParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
- /* Stop Timer only other than GO role and concurrent session */
- if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
- && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
- (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
- {
- WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
- }
- status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
- (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in set link state Req WDI API, free all the memory " );
- }
- }
- if(IS_WDI_STATUS_FAILURE(status))
- {
- vos_mem_free(wdiSetLinkStateParam) ;
- WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_GetStatsReqParamsCallback
- * send the response to PE with Stats received from WDI
- */
-void WDA_GetStatsReqParamsCallback(
- WDI_GetStatsRspParamsType *wdiGetStatsRsp,
- void* pUserData)
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
- tAniGetPEStatsRsp *pGetPEStatsRspParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- pGetPEStatsRspParams =
- (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
- (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
-
- if(NULL == pGetPEStatsRspParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return;
- }
- vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
- pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
- pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
- (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
-
- //Fill the Session Id Properly in PE
- pGetPEStatsRspParams->sessionId = 0;
- pGetPEStatsRspParams->rc =
- wdiGetStatsRsp->wdiStatus;
- pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
- pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
- vos_mem_copy( pGetPEStatsRspParams + 1,
- wdiGetStatsRsp + 1,
- wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
- /* send response to UMAC*/
- WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
-
- return;
-}
-
-/*
- * FUNCTION: WDA_ProcessGetStatsReq
- * Request to WDI to get the statistics
- */
-VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
- tAniGetPEStatsReq *pGetStatsParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_GetStatsReqParamsType wdiGetStatsParam;
- tAniGetPEStatsRsp *pGetPEStatsRspParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
- pGetStatsParams->staId;
- wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
- pGetStatsParams->statsMask;
- wdiGetStatsParam.wdiReqStatusCB = NULL ;
- status = WDI_GetStatsReq(&wdiGetStatsParam,
- (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Get Stats Req WDI API, free all the memory " );
- pGetPEStatsRspParams =
- (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
- if(NULL == pGetPEStatsRspParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pGetStatsParams);
- return VOS_STATUS_E_NOMEM;
- }
- pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
- pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
- pGetPEStatsRspParams->staId = pGetStatsParams->staId;
- pGetPEStatsRspParams->rc = eSIR_FAILURE;
- WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
- (void *)pGetPEStatsRspParams, 0) ;
- }
- /* Free the request message */
- vos_mem_free(pGetStatsParams);
- return CONVERT_WDI2VOS_STATUS(status);
-}
-
-#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
-/*
- * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
- * send the response to PE with roam Rssi received from WDI
- */
-void WDA_GetRoamRssiReqParamsCallback(
- WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA = NULL;
- tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
- tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
-
- if(NULL == pGetRoamRssiReqParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pGetRoamRssiReqParams received NULL", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return ;
- }
- pGetRoamRssiRspParams =
- (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
-
- if(NULL == pGetRoamRssiRspParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return;
- }
- vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
- pGetRoamRssiRspParams->rc =
- wdiGetRoamRssiRsp->wdiStatus;
- pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
- pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
-
- /* Assign get roam rssi req (backup) in to the response */
- pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
-
- /* free WDI command buffer */
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- /* send response to UMAC*/
- WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
-
- return;
-}
-
-
-
-/*
- * FUNCTION: WDA_ProcessGetRoamRssiReq
- * Request to WDI to get the statistics
- */
-VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
- tAniGetRssiReq *pGetRoamRssiParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
- tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
- tWDA_ReqParams *pWdaParams = NULL;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
- pGetRoamRssiParams->staId;
- wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- /* Store Init Req pointer, as this will be used for response */
- pWdaParams->pWdaContext = pWDA;
-
- /* Take Get roam Rssi req backup as it stores the callback to be called after
- receiving the response */
- pWdaParams->wdaMsgParam = pGetRoamRssiParams;
- pWdaParams->wdaWdiApiMsgParam = NULL;
-
- status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
- (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
- pGetRoamRssiRspParams =
- (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
- if(NULL == pGetRoamRssiRspParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pGetRoamRssiParams);
- vos_mem_free(pWdaParams);
- return VOS_STATUS_E_NOMEM;
- }
- pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
- pGetRoamRssiRspParams->rc = eSIR_FAILURE;
- pGetRoamRssiRspParams->rssi = 0;
- pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
- WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
- (void *)pGetRoamRssiRspParams, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status);
-}
-#endif
-
-
-/*
- * FUNCTION: WDA_UpdateEDCAParamCallback
- * call back function for Update EDCA params from WDI
- */
-void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tEdcaParams *pEdcaParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- vos_mem_free(pEdcaParams);
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessUpdateEDCAParamReq
- * Request to WDI to Update the EDCA params.
- */
-VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
- tEdcaParams *pEdcaParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_UpdateEDCAParamsType *wdiEdcaParam =
- (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
- sizeof(WDI_UpdateEDCAParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiEdcaParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pEdcaParams);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiEdcaParam);
- vos_mem_free(pEdcaParams);
- return VOS_STATUS_E_NOMEM;
- }
- wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
- /*
- Since firmware is not using highperformance flag, we have removed
- this flag from wdiEDCAInfo structure to match sizeof the structure
- between host and firmware.In future if we are planning to use
- highperformance flag then Please define this flag in wdiEDCAInfo
- structure, update it here and send it to firmware. i.e.
- Following is the original line which we removed as part of the fix
- wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
- pEdcaParams->highPerformance;
- */
- WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
- &pEdcaParams->acbe);
- WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
- &pEdcaParams->acbk);
- WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
- &pEdcaParams->acvi);
- WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
- &pEdcaParams->acvo);
- wdiEdcaParam->wdiReqStatusCB = NULL ;
- pWdaParams->pWdaContext = pWDA;
- /* Store remove key pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
- status = WDI_UpdateEDCAParams(wdiEdcaParam,
- (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Update EDCA Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- vos_mem_free(pEdcaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_AddBAReqCallback
- * send ADD BA RSP back to PE
- */
-void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tAddBAParams *pAddBAReqParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
- WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessAddBAReq
- * Request to WDI to Update the ADDBA REQ params.
- */
-VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
- tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
-{
- WDI_Status wstatus;
- WDI_AddBAReqParamsType *wdiAddBAReqParam =
- (WDI_AddBAReqParamsType *)vos_mem_malloc(
- sizeof(WDI_AddBAReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiAddBAReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiAddBAReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- do
- {
- WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
- wdiAddBaInfo->ucSTAIdx = staIdx ;
- wdiAddBaInfo->ucBaSessionID = baSessionID ;
- wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
- } while(0) ;
- wdiAddBAReqParam->wdiReqStatusCB = NULL ;
- pWdaParams->pWdaContext = pWDA;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
- pWdaParams->wdaMsgParam = pAddBAReqParams;
- wstatus = WDI_AddBAReq(wdiAddBAReqParam,
- (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in ADD BA REQ Params WDI API, free all the memory" );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- pAddBAReqParams->status = eSIR_FAILURE;
- WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
- }
- return status;
-}
-/*
- * FUNCTION: WDA_AddBASessionReqCallback
- * send ADD BA SESSION RSP back to PE/(or TL)
- */
-void WDA_AddBASessionReqCallback(
- WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS ;
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tAddBAParams *pAddBAReqParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
- if( NULL == pAddBAReqParams )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pAddBAReqParams received NULL " ,__func__);
- VOS_ASSERT( 0 );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- return ;
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- /*
- * if WDA in update TL state, update TL with BA session parama and send
- * another request to HAL(/WDI) (ADD_BA_REQ)
- */
-
- if((VOS_STATUS_SUCCESS ==
- CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
- (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
- {
- /* Update TL with BA info received from HAL/WDI */
- status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
- wdiAddBaSession->usBaSessionID,
- wdiAddBaSession->ucSTAIdx,
- wdiAddBaSession->ucBaTID,
- wdiAddBaSession->ucBaBufferSize,
- wdiAddBaSession->ucWinSize,
- wdiAddBaSession->usBaSSN );
- WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
- wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
- }
- else
- {
- pAddBAReqParams->status =
- CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
-
- /* Setting Flag to indicate that Set BA is success */
- if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
- {
- tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
- tANI_U8 tid = wdiAddBaSession->ucBaTID;
- WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
- }
- WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
- }
- /*Reset the WDA state to READY */
- pWDA->wdaState = WDA_READY_STATE;
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessAddBASessionReq
- * Request to WDI to Update the ADDBA REQ params.
- */
-VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
- tAddBAParams *pAddBAReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
- (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
- sizeof(WDI_AddBASessionReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- WLANTL_STAStateType tlSTAState = 0;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiAddBASessionReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiAddBASessionReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- /*
- * Populate ADD BA parameters and pass these paarmeters to WDI.
- * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
- * the state to track if these is BA recipient case or BA initiator
- * case.
- */
- do
- {
- WDI_AddBASessionReqinfoType *wdiBAInfoType =
- &wdiAddBASessionReqParam->wdiBASessionInfoType ;
- /* vos_mem_copy(wdiBAInfoType->macBSSID,
- pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
- wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
- vos_mem_copy(wdiBAInfoType->macPeerAddr,
- pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
- wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
- wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
- wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
- wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
- wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
- wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
- /* check the BA direction and update state accordingly */
- (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
- ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
- : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
-
- }while(0) ;
- wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
- pWdaParams->pWdaContext = pWDA;
- /* Store ADD BA pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
-
- /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
- the peer thinks that we already setup TDLS link, and send us ADDBA request packet
- */
- if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
- ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
- status = WDI_STATUS_E_NOT_ALLOWED;
- pAddBAReqParams->status =
- CONVERT_WDI2SIR_STATUS(status) ;
- WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
- /*Reset the WDA state to READY */
- pWDA->wdaState = WDA_READY_STATE;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
-
- return CONVERT_WDI2VOS_STATUS(status) ;
- }
-
- status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
- (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Send ADD BA failure response to PE");
- pAddBAReqParams->status =
- CONVERT_WDI2SIR_STATUS(status) ;
- WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
- /*Reset the WDA state to READY */
- pWDA->wdaState = WDA_READY_STATE;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_DelBANotifyTL
- * send DEL BA IND to TL
- */
-void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
- tDelBAParams *pDelBAReqParams)
-{
- tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
- //tSirMsgQ msg;
- vos_msg_t vosMsg;
- VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
- if(NULL == pDelBAInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0) ;
- return;
- }
- pDelBAInd->mesgType = WDA_DELETEBA_IND;
- pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
- pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
- pDelBAInd->mesgLen = sizeof( tDelBAInd );
-
-
- vosMsg.type = WDA_DELETEBA_IND;
- vosMsg.bodyptr = pDelBAInd;
- vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
- if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
- {
- vosStatus = VOS_STATUS_E_BADMSG;
- }
-}
-/*
- * FUNCTION: WDA_DelBAReqCallback
- * send DEL BA RSP back to PE
- */
-void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tDelBAParams *pDelBAReqParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
- /* Notify TL about DEL BA in case of recipinet */
- if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
- (eBA_RECIPIENT == pDelBAReqParams->baDirection))
- {
- WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
- }
- /*
- * No respone required for WDA_DELBA_IND so just free the request
- * param here
- */
- vos_mem_free(pDelBAReqParams);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessDelBAReq
- * Request to WDI to Update the DELBA REQ params.
- */
-VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
- tDelBAParams *pDelBAReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_DelBAReqParamsType *wdiDelBAReqParam =
- (WDI_DelBAReqParamsType *)vos_mem_malloc(
- sizeof(WDI_DelBAReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- tANI_U16 staIdx = 0;
- tANI_U8 tid = 0;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiDelBAReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiDelBAReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
- wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
- wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
- wdiDelBAReqParam->wdiReqStatusCB = NULL ;
- pWdaParams->pWdaContext = pWDA;
- /* Store DEL BA pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
- /* if BA exchange over the air is failed, clear this tid in BaBitmap
- * maintained in WDA, so that WDA can retry for another BA session
- */
- staIdx = pDelBAReqParams->staIdx;
- tid = pDelBAReqParams->baTID;
- WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
- status = WDI_DelBAReq(wdiDelBAReqParam,
- (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in DEL BA REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_AddTSReqCallback
- * send ADD TS RSP back to PE
- */
-void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tAddTsParams *pAddTsReqParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
- pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
-
- pAddTsReqParams->status = status ;
- WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessAddTSReq
- * Request to WDI to Update the ADD TS REQ params.
- */
-VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
- tAddTsParams *pAddTsReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_AddTSReqParamsType *wdiAddTSReqParam =
- (WDI_AddTSReqParamsType *)vos_mem_malloc(
- sizeof(WDI_AddTSReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiAddTSReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiAddTSReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
- wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
- //TS IE
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
- pAddTsReqParams->tspec.length;
-
- //TS IE : TS INFO : TRAFFIC
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
- pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
- pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
- pAddTsReqParams->tspec.tsinfo.traffic.psb;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
- pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
- pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
- pAddTsReqParams->tspec.tsinfo.traffic.direction;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
- pAddTsReqParams->tspec.tsinfo.traffic.tsid;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
- pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
-
- //TS IE : TS INFO : SCHEDULE
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
- pAddTsReqParams->tspec.tsinfo.schedule.schedule;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
- pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
- //TS IE
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
- pAddTsReqParams->tspec.nomMsduSz;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
- pAddTsReqParams->tspec.maxMsduSz;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
- pAddTsReqParams->tspec.minSvcInterval;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
- pAddTsReqParams->tspec.maxSvcInterval;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
- pAddTsReqParams->tspec.inactInterval;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
- pAddTsReqParams->tspec.suspendInterval;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
- pAddTsReqParams->tspec.svcStartTime;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
- pAddTsReqParams->tspec.minDataRate;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
- pAddTsReqParams->tspec.meanDataRate;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
- pAddTsReqParams->tspec.peakDataRate;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
- pAddTsReqParams->tspec.maxBurstSz;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
- pAddTsReqParams->tspec.delayBound;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
- pAddTsReqParams->tspec.minPhyRate;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
- pAddTsReqParams->tspec.surplusBw;
- wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
- pAddTsReqParams->tspec.mediumTime;
- /* TODO: tAddTsParams doesn't have the following fields */
-#if 0
- wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
- wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
- wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
- wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
-#endif
- wdiAddTSReqParam->wdiReqStatusCB = NULL ;
-
- pWdaParams->pWdaContext = pWDA;
- /* Store ADD TS pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
- status = WDI_AddTSReq(wdiAddTSReqParam,
- (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in ADD TS REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- pAddTsReqParams->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-/*
- * FUNCTION: WDA_DelTSReqCallback
- * send DEL TS RSP back to PE
- */
-void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams);
- /*
- * No respone required for WDA_DEL_TS_REQ so just free the request
- * param here
- */
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessDelTSReq
- * Request to WDI to Update the DELTS REQ params.
- */
-VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
- tDelTsParams *pDelTSReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_DelTSReqParamsType *wdiDelTSReqParam =
- (WDI_DelTSReqParamsType *)vos_mem_malloc(
- sizeof(WDI_DelTSReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiDelTSReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiDelTSReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
- pDelTSReqParams->bssId, sizeof(tSirMacAddr));
- wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
- wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
- wdiDelTSReqParam->wdiReqStatusCB = NULL ;
- pWdaParams->pWdaContext = pWDA;
- /* Store DEL TS pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
- status = WDI_DelTSReq(wdiDelTSReqParam,
- (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in DEL TS REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_UpdateBeaconParamsCallback
- * Free the memory. No need to send any response to PE in this case
- */
-void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams);
- /*
- * No respone required for WDA_UPDATE_BEACON_IND so just free the request
- * param here
- */
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessUpdateBeaconParams
- * Request to WDI to send the beacon parameters to HAL to update the Hardware
- */
-VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
- tUpdateBeaconParams *pUpdateBeaconParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
- (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
- sizeof(WDI_UpdateBeaconParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiUpdateBeaconParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiUpdateBeaconParams);
- return VOS_STATUS_E_NOMEM;
- }
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
- pUpdateBeaconParams->bssIdx;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
- pUpdateBeaconParams->fShortPreamble;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
- pUpdateBeaconParams->fShortSlotTime;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
- pUpdateBeaconParams->beaconInterval;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
- pUpdateBeaconParams->llaCoexist;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
- pUpdateBeaconParams->llbCoexist;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
- pUpdateBeaconParams->llgCoexist;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
- pUpdateBeaconParams->ht20MhzCoexist;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
- pUpdateBeaconParams->llnNonGFCoexist;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
- pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
- pUpdateBeaconParams->fRIFSMode;
- wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
- pUpdateBeaconParams->paramChangeBitmap;
- wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
-
- pWdaParams->pWdaContext = pWDA;
- /* Store UpdateBeacon Req pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
- status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
- (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#ifdef FEATURE_WLAN_ESE
-/*
- * FUNCTION: WDA_TSMStatsReqCallback
- * send TSM Stats RSP back to PE
- */
-void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA = NULL;
- tpAniGetTsmStatsRsp pTsmRspParams = NULL;
- tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ Entering: %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
- pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
- if(NULL == pGetTsmStatsReqParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pGetTsmStatsReqParams received NULL", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return;
- }
- pTsmRspParams =
- (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
- if( NULL == pTsmRspParams )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pTsmRspParams received NULL " ,__func__);
- VOS_ASSERT( 0 );
- return ;
- }
-
- vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
- pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
- pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
-
- pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
- vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
- pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
- sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
- sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
- pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
- pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
- pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
- pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
- pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
-
- /* Assign get tsm stats req req (backup) in to the response */
- pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
- /* free WDI command buffer */
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
-
- WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
- return ;
-}
-
-
-/*
- * FUNCTION: WDA_ProcessTsmStatsReq
- * Request to WDI to get the TSM Stats params.
- */
-VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
- tpAniGetTsmStatsReq pTsmStats)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
- tWDA_ReqParams *pWdaParams = NULL;
- tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> Entering: %s " ,__func__);
- wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
- sizeof(WDI_TSMStatsReqParamsType));
- if(NULL == wdiTSMReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiTSMReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
- vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
- pTsmStats->bssId,
- sizeof(wpt_macAddr));
- wdiTSMReqParam->wdiReqStatusCB = NULL ;
-
- pWdaParams->pWdaContext = pWDA;
- /* Store TSM Stats pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pTsmStats ;
- pWdaParams->wdaWdiApiMsgParam = NULL ;
- status = WDI_TSMStatsReq(wdiTSMReqParam,
- (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in TSM STATS REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams);
- pGetTsmStatsRspParams =
- (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
- if(NULL == pGetTsmStatsRspParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pTsmStats);
- return VOS_STATUS_E_NOMEM;
- }
- pGetTsmStatsRspParams->staId = pTsmStats->staId;
- pGetTsmStatsRspParams->rc = eSIR_FAILURE;
- pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
- WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void*)pGetTsmStatsRspParams, 0);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#endif
-/*
- * FUNCTION: WDA_SendBeaconParamsCallback
- * No need to send any response to PE in this case
- */
-void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
-{
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessSendBeacon
- * Request to WDI to send the beacon template to HAL to update the TPE memory and
- * start beacon trasmission
- */
-VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
- tSendbeaconParams *pSendbeaconParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_SendBeaconParamsType wdiSendBeaconReqParam;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
- pSendbeaconParams->bssId, sizeof(tSirMacAddr));
- wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
- pSendbeaconParams->beaconLength;
- wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
- pSendbeaconParams->timIeOffset;
- /* p2pIeOffset should be atleast greater than timIeOffset */
- if ((pSendbeaconParams->p2pIeOffset != 0) &&
- (pSendbeaconParams->p2pIeOffset <
- pSendbeaconParams->timIeOffset))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
- VOS_ASSERT( 0 );
- return WDI_STATUS_E_FAILURE;
- }
- wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
- pSendbeaconParams->p2pIeOffset;
- /* Copy the beacon template to local buffer */
- vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
- pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
- wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
-
- status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
- (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in SEND BEACON REQ Params WDI API" );
- }
- vos_mem_free(pSendbeaconParams);
- return CONVERT_WDI2VOS_STATUS(status);
-}
-/*
- * FUNCTION: WDA_UpdateProbeRspParamsCallback
- * No need to send any response to PE in this case
- */
-void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
-{
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
- * Request to WDI to send the probe response template to HAL to update the TPE memory and
- * send probe response
- */
-VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
- tSendProbeRespParams *pSendProbeRspParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
- vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
-
- if (!wdiSendProbeRspParam)
- return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
-
- /*Copy update probe response parameters*/
- vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
- pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
- wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
- pSendProbeRspParams->probeRespTemplateLen;
- /* Copy the Probe Response template to local buffer */
- vos_mem_copy(
- wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
- pSendProbeRspParams->pProbeRespTemplate,
- pSendProbeRspParams->probeRespTemplateLen);
- vos_mem_copy(
- wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
- pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
- WDI_PROBE_REQ_BITMAP_IE_LEN);
-
- wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
-
- status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
- (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in SEND Probe RSP Params WDI API" );
- }
- vos_mem_free(pSendProbeRspParams);
- vos_mem_free(wdiSendProbeRspParam);
- return CONVERT_WDI2VOS_STATUS(status);
-}
-#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
-/*
- * FUNCTION: WDA_SetMaxTxPowerCallBack
- * send the response to PE with power value received from WDI
- */
-void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA = NULL;
- tMaxTxPowerParams *pMaxTxPowerParams = NULL;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
- pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
- if( NULL == pMaxTxPowerParams )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pMaxTxPowerParams received NULL " ,__func__);
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return ;
- }
-
-
- /*need to free memory for the pointers used in the
- WDA Process.Set Max Tx Power Req function*/
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
-
-
- /* send response to UMAC*/
- WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessSetMaxTxPowerReq
- * Request to WDI to send set Max Tx Power Request
- */
- VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
- tMaxTxPowerParams *MaxTxPowerParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
- tWDA_ReqParams *pWdaParams = NULL;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
-
- wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
- sizeof(WDI_SetMaxTxPowerParamsType));
- if(NULL == wdiSetMaxTxPowerParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(wdiSetMaxTxPowerParams);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- /* Copy.Max.Tx.Power Params to WDI structure */
- vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
- MaxTxPowerParams->bssId,
- sizeof(tSirMacAddr));
- vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
- MaxTxPowerParams->selfStaMacAddr,
- sizeof(tSirMacAddr));
- wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
- MaxTxPowerParams->power;
- wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
- status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
- (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- /* send response to UMAC*/
- WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status);
-
-}
-#endif
-
-/*
- * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
- * send the response to PE with power value received from WDI
- */
-void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
- *pwdiSetMaxTxPowerPerBandRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA = NULL;
- tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
-
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s ", __func__);
- if (NULL == pWdaParams)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return ;
- }
- pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
- pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
- if ( NULL == pMxTxPwrPerBandParams )
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pMxTxPwrPerBandParams received NULL ", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return;
- }
-
- /*need to free memory for the pointers used in the
- WDA Process.Set Max Tx Power Req function*/
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
-
- /* send response to UMAC*/
- WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
- pMxTxPwrPerBandParams, 0);
-
- return;
-}
-
-/*
- * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
- * Request to WDI to send set Max Tx Power Per band Request
- */
- VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
- tMaxTxPowerPerBandParams
- *MaxTxPowerPerBandParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
- tWDA_ReqParams *pWdaParams = NULL;
-
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s ", __func__);
-
- wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
- sizeof(WDI_SetMaxTxPowerPerBandParamsType));
-
- if (NULL == wdiSetMxTxPwrPerBandParams)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
- if (NULL == pWdaParams)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(wdiSetMxTxPwrPerBandParams);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
- wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
- MaxTxPowerPerBandParams->bandInfo;
- wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
- MaxTxPowerPerBandParams->power;
- wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
- status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
- WDA_SetMaxTxPowerPerBandCallBack,
- pWdaParams);
- if (IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in SET MAX TX Power REQ Params WDI API,"
- " free all the memory");
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- /* send response to UMAC*/
- WDA_SendMsg(pWDA,
- WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
- MaxTxPowerPerBandParams, 0);
- }
- return CONVERT_WDI2VOS_STATUS(status);
-}
-
-/*
- * FUNCTION: WDA_SetTxPowerCallBack
- * send the response to PE with power value received from WDI
- */
-void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA = NULL;
- tSirSetTxPowerReq *pTxPowerParams = NULL;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s ", __func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
- if(NULL == pTxPowerParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pTxPowerParams received NULL " ,__func__);
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return ;
- }
-
- /*need to free memory for the pointers used in the
- WDA Process.Set Max Tx Power Req function*/
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
-
- /* send response to UMAC*/
- WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
- return;
-}
-
-/*
- * FUNCTION: WDA_ProcessSetTxPowerReq
- * Request to WDI to send set Tx Power Request
- */
- VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
- tSirSetTxPowerReq *txPowerParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
- tWDA_ReqParams *pWdaParams = NULL;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s ", __func__);
-
- wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
- sizeof(WDI_SetTxPowerParamsType));
- if(NULL == wdiSetTxPowerParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(wdiSetTxPowerParams);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
- txPowerParams->bssIdx;
- wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
- txPowerParams->mwPower;
- wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = (void *)txPowerParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
- status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
- (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in SET TX Power REQ Params WDI API, free all the memory ");
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- /* send response to UMAC*/
- WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status);
-}
-
-/*
- * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
- * Free the memory. No need to send any response to PE in this case
- */
-void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams);
-
- /*
- * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
- * so just free the request param here
- */
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessSetP2PGONOAReq
- * Request to WDI to set the P2P Group Owner Notice of Absence Req
- */
-VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
- tP2pPsParams *pP2pPsConfigParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
- (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SetP2PGONOAReqParamsType)) ;
- tWDA_ReqParams *pWdaParams = NULL;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiSetP2PGONOAReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(pP2pPsConfigParams);
- vos_mem_free(wdiSetP2PGONOAReqParam);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
- pP2pPsConfigParams->opp_ps;
- wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
- pP2pPsConfigParams->ctWindow;
- wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
- pP2pPsConfigParams->count;
- wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
- pP2pPsConfigParams->duration;
- wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
- pP2pPsConfigParams->interval;
- wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
- pP2pPsConfigParams->single_noa_duration;
- wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
- pP2pPsConfigParams->psSelection;
-
- wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
- /* Store msg pointer from PE, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
-
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
- pWdaParams->pWdaContext = pWDA;
-
- status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
- (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status);
-
-}
-
-#ifdef FEATURE_WLAN_TDLS
-/*
- * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
- * Free the memory. No need to send any response to PE in this case
- */
-void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA = NULL;
- tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
-
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
- if( NULL == pTdlsLinkEstablishParams )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pTdlsLinkEstablishParams "
- "received NULL " ,__func__);
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- return ;
- }
- pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
- wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- /* send response to UMAC*/
- WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
-
- return ;
-}
-
-VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
- tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
- (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
- tWDA_ReqParams *pWdaParams = NULL;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiSetTDLSLinkEstablishReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(pTdlsLinkEstablishParams);
- vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
- pTdlsLinkEstablishParams->staIdx;
- wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
- pTdlsLinkEstablishParams->isResponder;
- wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
- pTdlsLinkEstablishParams->uapsdQueues;
- wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
- pTdlsLinkEstablishParams->maxSp;
- wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
- pTdlsLinkEstablishParams->isBufsta;
- wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
- pTdlsLinkEstablishParams->isOffChannelSupported;
-
- vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
- pTdlsLinkEstablishParams->validChannels,
- pTdlsLinkEstablishParams->validChannelsLen);
-
- wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
- pTdlsLinkEstablishParams->validChannelsLen;
-
- vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
- pTdlsLinkEstablishParams->validOperClasses,
- pTdlsLinkEstablishParams->validOperClassesLen);
- wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
- pTdlsLinkEstablishParams->validOperClassesLen;
-
- wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
- /* Store msg pointer from PE, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
- pWdaParams->pWdaContext = pWDA;
-
- status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
- (WDI_SetTDLSLinkEstablishReqParamsRspCb)
- WDA_SetTDLSLinkEstablishReqParamsCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status);
-}
-#endif
-
-
-#ifdef WLAN_FEATURE_VOWIFI_11R
-/*
- * FUNCTION: WDA_AggrAddTSReqCallback
- * send ADD AGGREGATED TS RSP back to PE
- */
-void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
- tWDA_CbContext *pWDA;
- tAggrAddTsParams *pAggrAddTsReqParams;
- int i;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- pWDA = pWdaParams->pWdaContext;
- pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
-
- for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
- {
- pAggrAddTsReqParams->status[i] = (status) ;
- }
- WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- return ;
-}/* WLAN_FEATURE_VOWIFI_11R */
-/*
- * FUNCTION: WDA_ProcessAddTSReq
- * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
- */
-VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
- tAggrAddTsParams *pAggrAddTsReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- int i;
- WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
- tWDA_ReqParams *pWdaParams = NULL;
-
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
- sizeof(WDI_AggrAddTSReqParamsType)) ;
- if(NULL == wdiAggrAddTSReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(pAggrAddTsReqParams);
- vos_mem_free(wdiAggrAddTSReqParam);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
- pAggrAddTsReqParams->tspecIdx;
- for( i = 0; i < WDI_MAX_NO_AC; i++ )
- {
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
- pAggrAddTsReqParams->tspec[i].length;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
- pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
- pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
- pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
- pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
- pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
- pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
- pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
- pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
- pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
- pAggrAddTsReqParams->tspec[i].nomMsduSz;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
- pAggrAddTsReqParams->tspec[i].maxMsduSz;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
- pAggrAddTsReqParams->tspec[i].minSvcInterval;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
- pAggrAddTsReqParams->tspec[i].maxSvcInterval;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
- pAggrAddTsReqParams->tspec[i].inactInterval;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
- pAggrAddTsReqParams->tspec[i].suspendInterval;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
- pAggrAddTsReqParams->tspec[i].svcStartTime;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
- pAggrAddTsReqParams->tspec[i].minDataRate;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
- pAggrAddTsReqParams->tspec[i].meanDataRate;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
- pAggrAddTsReqParams->tspec[i].peakDataRate;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
- pAggrAddTsReqParams->tspec[i].maxBurstSz;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
- pAggrAddTsReqParams->tspec[i].delayBound;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
- pAggrAddTsReqParams->tspec[i].minPhyRate;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
- pAggrAddTsReqParams->tspec[i].surplusBw;
- wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
- pAggrAddTsReqParams->tspec[i].mediumTime;
- }
-
- /* TODO: tAggrAddTsParams doesn't have the following fields */
-#if 0
- wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
- wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
- wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
- wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
-#endif
- wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
-
- /* Store ADD TS pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
-
- pWdaParams->pWdaContext = pWDA;
-
- status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
- (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in ADD TS REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
-
- /* send the failure response back to PE*/
- for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
- {
- pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
- }
-
- WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
- (void *)pAggrAddTsReqParams , 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#endif
-/*
- * FUNCTION: WDA_EnterImpsReqCallback
- * send Enter IMPS RSP back to PE
- */
-void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessEnterImpsReq
- * Request to WDI to Enter IMPS power state.
- */
-VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Enter IMPS REQ WDI API, free all the memory " );
- WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_ExitImpsReqCallback
- * send Exit IMPS RSP back to PE
- */
-void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessExitImpsReq
- * Request to WDI to Exit IMPS power state.
- */
-VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Exit IMPS REQ WDI API, free all the memory " );
- WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_EnterBmpsRespCallback
- * send Enter BMPS RSP back to PE
- */
-void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tEnterBmpsParams *pEnterBmpsRspParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
-
- pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
- pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams) ;
- WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
-
- return ;
-}
-/*
- * FUNCTION: WDA_EnterBmpsReqCallback
- * Free memory and send Enter BMPS RSP back to PE.
- * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tEnterBmpsParams *pEnterBmpsRspParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
- pEnterBmpsRspParams->status = wdiStatus;
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessEnterBmpsReq
- * Request to WDI to Enter BMPS power state.
- */
-VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
- tEnterBmpsParams *pEnterBmpsReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
- tWDA_ReqParams *pWdaParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: invalid param", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
- if (NULL == wdiEnterBmpsReqParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
- CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
- if (NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiEnterBmpsReqParams);
- WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
- CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
- return VOS_STATUS_E_NOMEM;
- }
- wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
- wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
- wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
- wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
- // For ESE and 11R Roaming
- wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
- wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
- wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
- wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
- wdiEnterBmpsReqParams->pUserData = pWdaParams;
-
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
- pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
- pWdaParams->pWdaContext = pWDA;
- status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
- (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
- if (IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Enter BMPS REQ WDI API, free all the memory" );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
- }
- return CONVERT_WDI2VOS_STATUS(status);
-}
-
-
-static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
- WDI_Status wdiStatus,
- tExitBmpsParams *pExitBmpsReqParams)
-{
- pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
-
- WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
-}
-
-
-/*
- * FUNCTION: WDA_ExitBmpsRespCallback
- * send Exit BMPS RSP back to PE
- */
-void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tExitBmpsParams *pExitBmpsRspParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
-
- pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
- pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ExitBmpsReqCallback
- * Free memory and send Exit BMPS RSP back to PE.
- * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tExitBmpsParams *pExitBmpsRspParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
- pExitBmpsRspParams->status = wdiStatus;
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessExitBmpsReq
- * Request to WDI to Exit BMPS power state.
- */
-VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
- tExitBmpsParams *pExitBmpsReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
- (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
- sizeof(WDI_ExitBmpsReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiExitBmpsReqParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiExitBmpsReqParams);
- return VOS_STATUS_E_NOMEM;
- }
- wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
-
- wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
-
- wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
- wdiExitBmpsReqParams->pUserData = pWdaParams;
-
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pExitBmpsReqParams;
- status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
- (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Exit BMPS REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_EnterUapsdRespCallback
- * send Enter UAPSD RSP back to PE
- */
-void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tUapsdParams *pEnterUapsdRsqParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
-
- pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
- pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_EnterUapsdReqCallback
- * Free memory and send Enter UAPSD RSP back to PE.
- * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tUapsdParams *pEnterUapsdRsqParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
- pEnterUapsdRsqParams->status = wdiStatus;
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessEnterUapsdReq
- * Request to WDI to Enter UAPSD power state.
- */
-VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
- tUapsdParams *pEnterUapsdReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
- (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
- sizeof(WDI_EnterUapsdReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiEnterUapsdReqParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiEnterUapsdReqParams);
- return VOS_STATUS_E_NOMEM;
- }
- wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
- pEnterUapsdReqParams->beDeliveryEnabled;
- wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
- pEnterUapsdReqParams->beTriggerEnabled;
- wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
- pEnterUapsdReqParams->bkDeliveryEnabled;
- wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
- pEnterUapsdReqParams->bkTriggerEnabled;
- wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
- pEnterUapsdReqParams->viDeliveryEnabled;
- wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
- pEnterUapsdReqParams->viTriggerEnabled;
- wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
- pEnterUapsdReqParams->voDeliveryEnabled;
- wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
- pEnterUapsdReqParams->voTriggerEnabled;
- wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
-
- wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
- wdiEnterUapsdReqParams->pUserData = pWdaParams;
-
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
- status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
- (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Enter UAPSD REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_ExitUapsdRespCallback
- * send Exit UAPSD RSP back to PE
- */
-void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
-{
-
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tExitUapsdParams *pExitUapsdRspParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
-
- pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
- pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ExitUapsdReqCallback
- * Free memory and send Exit UAPSD RSP back to PE.
- * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tExitUapsdParams *pExitUapsdRspParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
- pExitUapsdRspParams->status = wdiStatus;
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessExitUapsdReq
- * Request to WDI to Exit UAPSD power state.
- */
-VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
- tExitUapsdParams *pExitUapsdParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- tWDA_ReqParams *pWdaParams ;
- WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
- (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
- sizeof(WDI_ExitUapsdReqParamsType)) ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
-
- if(NULL == wdiExitUapsdReqParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiExitUapsdReqParams);
- return VOS_STATUS_E_NOMEM;
- }
-
- wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
- wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
- wdiExitUapsdReqParams->pUserData = pWdaParams;
-
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pExitUapsdParams;
-
- status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Exit UAPSD REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-/*
- * FUNCTION: WDA_SetPwrSaveCfgReqCallback
- *
- */
-void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- if( pWdaParams != NULL )
- {
- if( pWdaParams->wdaWdiApiMsgParam != NULL )
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- }
- if( pWdaParams->wdaMsgParam != NULL )
- {
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- }
- vos_mem_free(pWdaParams) ;
- }
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
- * Request to WDI to set the power save params at start.
- */
-VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
- tSirPowerSaveCfg *pPowerSaveCfg)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- tHalCfg *tlvStruct = NULL ;
- tANI_U8 *tlvStructStart = NULL ;
- v_PVOID_t *configParam;
- tANI_U32 configParamSize;
- tANI_U32 *configDataValue;
- WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
- tWDA_ReqParams *pWdaParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: invalid param", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pPowerSaveCfg);
- return VOS_STATUS_E_FAILURE;
- }
- wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
- if (NULL == wdiPowerSaveCfg)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pPowerSaveCfg);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiPowerSaveCfg);
- vos_mem_free(pPowerSaveCfg);
- return VOS_STATUS_E_NOMEM;
- }
- configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
- configParam = vos_mem_malloc(configParamSize);
- if(NULL == configParam)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams);
- vos_mem_free(wdiPowerSaveCfg);
- vos_mem_free(pPowerSaveCfg);
- return VOS_STATUS_E_NOMEM;
- }
- vos_mem_set(configParam, configParamSize, 0);
- wdiPowerSaveCfg->pConfigBuffer = configParam;
- tlvStruct = (tHalCfg *)configParam;
- tlvStructStart = (tANI_U8 *)configParam;
- /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
- tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
- tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
- tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
- tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
- tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
- tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
- tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
- tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
- tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
- tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
- tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
- tlvStruct->length = sizeof(tANI_U32);
- configDataValue = (tANI_U32 *)(tlvStruct + 1);
- *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
- tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
- + sizeof(tHalCfg) + tlvStruct->length)) ;
- wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
- wdiPowerSaveCfg->wdiReqStatusCB = NULL;
- /* store Params pass it to WDI */
- pWdaParams->wdaMsgParam = configParam;
- pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
- pWdaParams->pWdaContext = pWDA;
- status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
- (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- }
- vos_mem_free(pPowerSaveCfg);
- return CONVERT_WDI2VOS_STATUS(status);
-}
-/*
- * FUNCTION: WDA_SetUapsdAcParamsRespCallback
- *
- */
-void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
-
- return ;
-}
-/*
- * FUNCTION: WDA_SetUapsdAcParamsReqCallback
- * Free memory.
- * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_SetUapsdAcParamsReq
- * Request to WDI to set the UAPSD params for an ac (sta mode).
- */
-VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
- tUapsdInfo *pUapsdInfo)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- tWDA_CbContext *pWDA = NULL ;
- WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
- (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiUapsdParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiUapsdParams);
- return VOS_STATUS_E_NOMEM;
- }
- wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
- wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
- wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
- wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
- wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
- wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
- wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
- wdiUapsdParams->pUserData = pWdaParams;
-
- pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pUapsdInfo;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
- status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
- (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set UAPSD params REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- }
- if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
- return VOS_STATUS_SUCCESS;
- else
- return VOS_STATUS_E_FAILURE;
-
-}
-/*
- * FUNCTION: WDA_ClearUapsdAcParamsReq
- * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
- * decided that the if the UPASD parameters change, FW would get a exit UAPSD
- * and again enter the UPASD with the modified params. Hence the disable
- * function was kept empty.
- *
- */
-VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
-{
- /* do nothing */
- return VOS_STATUS_SUCCESS;
-}
-/*
- * FUNCTION: WDA_UpdateUapsdParamsRespCallback
- *
- */
-void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
-
- //print a msg, nothing else to do
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_UpdateUapsdParamsRespCallback invoked " );
- return ;
-}
-/*
- * FUNCTION: WDA_UpdateUapsdParamsReqCallback
- * Free memory.
- * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_UpdateUapsdParamsReq
- * Request to WDI to update UAPSD params (in softAP mode) for a station.
- */
-VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
- tUpdateUapsdParams* pUpdateUapsdInfo)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
- (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
- sizeof(WDI_UpdateUapsdReqParamsType)) ;
- tWDA_ReqParams *pWdaParams = NULL;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiUpdateUapsdParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
- wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
- wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
- wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
- wdiUpdateUapsdParams->pUserData = pWdaParams;
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pUpdateUapsdInfo);
- vos_mem_free(wdiUpdateUapsdParams);
- return VOS_STATUS_E_NOMEM;
- }
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
- pWdaParams->pWdaContext = pWDA;
-
- wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
- (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
- pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set UAPSD params REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return status;
-}
-/*
- * FUNCTION: WDA_ConfigureRxpFilterRespCallback
- *
- */
-void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(WDI_STATUS_SUCCESS != wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: RXP config filter failure", __func__ );
- }
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- return ;
-}
-/*
- * FUNCTION: WDA_ConfigureRxpFilterReqCallback
- * Free memory.
- * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessConfigureRxpFilterReq
- *
- */
-VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
- tSirWlanSetRxpFilters *pWlanSuspendParam)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
- (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
- sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiRxpFilterParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pWlanSuspendParam);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiRxpFilterParams);
- vos_mem_free(pWlanSuspendParam);
- return VOS_STATUS_E_NOMEM;
- }
- wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
- pWlanSuspendParam->setMcstBcstFilter;
- wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
- pWlanSuspendParam->configuredMcstBcstFilterSetting;
-
- wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
- wdiRxpFilterParams->pUserData = pWdaParams;
-
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pWlanSuspendParam;
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
- wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
- (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in configure RXP filter REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return status;
-}
-/*
- * FUNCTION: WDA_WdiIndicationCallback
- *
- */
-void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
- void* pUserData)
-{
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-}
-/*
- * FUNCTION: WDA_ProcessWlanSuspendInd
- *
- */
-VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
- tSirWlanSuspendParam *pWlanSuspendParam)
-{
- WDI_Status wdiStatus;
- WDI_SuspendParamsType wdiSuspendParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
- pWlanSuspendParam->configuredMcstBcstFilterSetting;
- wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
- wdiSuspendParams.pUserData = pWDA;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
- wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
- if(WDI_STATUS_PENDING == wdiStatus)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Pending received for %s:%d ",__func__,__LINE__ );
- }
- else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in %s:%d ",__func__,__LINE__ );
- }
- vos_mem_free(pWlanSuspendParam);
- return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
-}
-
-#ifdef WLAN_FEATURE_11W
-/*
- * FUNCTION: WDA_ProcessExcludeUnecryptInd
- *
- */
-VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
- tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
-{
- WDI_Status wdiStatus;
- WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s ", __func__);
-
- wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
- vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
- sizeof(tSirMacAddr));
-
- wdiExclUnencryptParams.wdiReqStatusCB = NULL;
- wdiExclUnencryptParams.pUserData = pWDA;
-
- wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
- if(WDI_STATUS_PENDING == wdiStatus)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Pending received for %s:%d ", __func__, __LINE__ );
- }
- else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in %s:%d ", __func__, __LINE__ );
- }
- vos_mem_free(pExclUnencryptParam);
- return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
-}
-#endif
-
-/*
- * FUNCTION: WDA_ProcessWlanResumeCallback
- *
- */
-void WDA_ProcessWlanResumeCallback(
- WDI_SuspendResumeRspParamsType *resumeRspParams,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Process Wlan Resume failure", __func__ );
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessWlanResumeReq
- *
- */
-VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
- tSirWlanResumeParam *pWlanResumeParam)
-{
- WDI_Status wdiStatus;
- WDI_ResumeParamsType *wdiResumeParams =
- (WDI_ResumeParamsType *)vos_mem_malloc(
- sizeof(WDI_ResumeParamsType) ) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiResumeParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiResumeParams);
- return VOS_STATUS_E_NOMEM;
- }
- wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
- pWlanResumeParam->configuredMcstBcstFilterSetting;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
- wdiResumeParams->wdiReqStatusCB = NULL;
- pWdaParams->wdaMsgParam = pWlanResumeParam;
- pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
- pWdaParams->pWdaContext = pWDA;
- wdiStatus = WDI_HostResumeReq(wdiResumeParams,
- (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Host Resume REQ WDI API, free all the memory " );
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
-}
-
-/*
- * FUNCTION: WDA_SetBeaconFilterRespCallback
- *
- */
-void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- /*
- * No respone required for SetBeaconFilter req so just free the request
- * param here
- */
-
- return ;
-}
-/*
- * FUNCTION: WDA_SetBeaconFilterReqCallback
- * Free memory.
- * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_SetBeaconFilterReq
- * Request to WDI to send the beacon filtering related information.
- */
-VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
- tBeaconFilterMsg* pBeaconFilterInfo)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- tANI_U8 *dstPtr, *srcPtr;
- tANI_U8 filterLength;
- WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
- (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
- sizeof(WDI_BeaconFilterReqParamsType) ) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiBeaconFilterInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiBeaconFilterInfo);
- return VOS_STATUS_E_NOMEM;
- }
- wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
- pBeaconFilterInfo->beaconInterval;
- wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
- pBeaconFilterInfo->capabilityInfo;
- wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
- pBeaconFilterInfo->capabilityMask;
- wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
-
- //Fill the BssIdx
- wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
-
- //Fill structure with info contained in the beaconFilterTable
- dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
- srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
- filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
- if(WDI_BEACON_FILTER_LEN < filterLength)
- {
- filterLength = WDI_BEACON_FILTER_LEN;
- }
- vos_mem_copy(dstPtr, srcPtr, filterLength);
- wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
- wdiBeaconFilterInfo->pUserData = pWdaParams;
-
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pBeaconFilterInfo;
-
- status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
- (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_RemBeaconFilterRespCallback
- *
- */
-void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
-
- //print a msg, nothing else to do
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_RemBeaconFilterRespCallback invoked " );
- return ;
-}
-/*
- * FUNCTION: WDA_RemBeaconFilterReqCallback
- * Free memory.
- * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
- // TODO: PE does not have this feature for now implemented,
- // but the support for removing beacon filter exists between
- // HAL and FW. This function can be called whenever PE defines
- // a new message for beacon filter removal
-/*
- * FUNCTION: WDA_RemBeaconFilterReq
- * Request to WDI to send the removal of beacon filtering related information.
- */
-VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
- tRemBeaconFilterMsg* pBeaconFilterInfo)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
- (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
- sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
- tWDA_ReqParams *pWdaParams ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiBeaconFilterInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiBeaconFilterInfo);
- vos_mem_free(pBeaconFilterInfo);
- return VOS_STATUS_E_NOMEM;
- }
-
- wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
- pBeaconFilterInfo->ucIeCount;
- //Fill structure with info contained in the ucRemIeId
- vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
- pBeaconFilterInfo->ucRemIeId,
- wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
- wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
- wdiBeaconFilterInfo->pUserData = pWdaParams;
-
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pBeaconFilterInfo;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
-
- pWdaParams->pWdaContext = pWDA;
-
- wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
- (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return status;
-}
-/*
- * FUNCTION: WDA_SetRSSIThresholdsRespCallback
- *
- */
-void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- return ;
-}
-/*
- * FUNCTION: WDA_SetRSSIThresholdsReqCallback
- * Free memory.
- * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_SetRSSIThresholdsReq
- * Request to WDI to set the RSSI thresholds (sta mode).
- */
-VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- tWDA_CbContext *pWDA = NULL ;
- v_PVOID_t pVosContext = NULL;
- WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
- (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiRSSIThresholdsInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiRSSIThresholdsInfo);
- return VOS_STATUS_E_NOMEM;
- }
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
- wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
- wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
- wdiRSSIThresholdsInfo->pUserData = pWdaParams;
- pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
- pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
-
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pBmpsThresholds;
- wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
- (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- return status;
-
-}/*WDA_SetRSSIThresholdsReq*/
-/*
- * FUNCTION: WDA_HostOffloadRespCallback
- *
- */
-void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams) ;
-
- //print a msg, nothing else to do
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_HostOffloadRespCallback invoked " );
- return ;
-}
-/*
- * FUNCTION: WDA_HostOffloadReqCallback
- * Free memory.
- * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid pWdaParams pointer", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessHostOffloadReq
- * Request to WDI to set the filter to minimize unnecessary host wakeup due
- * to broadcast traffic (sta mode).
- */
-VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
- tSirHostOffloadReq *pHostOffloadParams)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
- (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
- sizeof(WDI_HostOffloadReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
-
- if(NULL == wdiHostOffloadInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiHostOffloadInfo);
- vos_mem_free(pHostOffloadParams);
- return VOS_STATUS_E_NOMEM;
- }
-
- wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
- pHostOffloadParams->offloadType;
- wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
- pHostOffloadParams->enableOrDisable;
-
- vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
- pHostOffloadParams->bssId, sizeof(wpt_macAddr));
-
- switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
- {
- case SIR_IPV4_ARP_REPLY_OFFLOAD:
- vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
- pHostOffloadParams->params.hostIpv4Addr,
- 4);
- break;
- case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
- vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
- pHostOffloadParams->params.hostIpv6Addr,
- 16);
- break;
- case SIR_IPV6_NS_OFFLOAD:
- vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
- pHostOffloadParams->params.hostIpv6Addr,
- 16);
-
-#ifdef WLAN_NS_OFFLOAD
- if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
- {
- vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
- pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
- 16);
- wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
- }
- else
- {
- wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
- }
-
- vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
- pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
- 16);
- vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
- pHostOffloadParams->nsOffloadInfo.selfMacAddr,
- 6);
-
- //Only two are supported so let's go through them without a loop
- if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
- {
- vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
- pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
- 16);
- wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
- }
- else
- {
- wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
- }
-
- if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
- {
- vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
- pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
- 16);
- wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
- }
- else
- {
- wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
- }
- wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
- pHostOffloadParams->nsOffloadInfo.slotIdx;
- break;
-#endif //WLAN_NS_OFFLOAD
- default:
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "No Handling for Offload Type %x in WDA "
- , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
- //WDA_VOS_ASSERT(0) ;
- }
- }
- wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
- wdiHostOffloadInfo->pUserData = pWdaParams;
-
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pHostOffloadParams;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
- pWdaParams->pWdaContext = pWDA;
-
-
- wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
- (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in host offload REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- return status;
-
-}/*WDA_HostOffloadReq*/
-/*
- * FUNCTION: WDA_KeepAliveRespCallback
- *
- */
-void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
-
- //print a msg, nothing else to do
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_KeepAliveRespCallback invoked " );
- return ;
-}
-/*
- * FUNCTION: WDA_KeepAliveReqCallback
- * Free memory.
- * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessKeepAliveReq
- * Request to WDI to send Keep Alive packets to minimize unnecessary host
- * wakeup due to broadcast traffic (sta mode).
- */
-VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
- tSirKeepAliveReq *pKeepAliveParams)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
- (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
- sizeof(WDI_KeepAliveReqParamsType)) ;
- tWDA_ReqParams *pWdaParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiKeepAliveInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pKeepAliveParams);
- return VOS_STATUS_E_NOMEM;
- }
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiKeepAliveInfo);
- vos_mem_free(pKeepAliveParams);
- return VOS_STATUS_E_NOMEM;
- }
-
- wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
- pKeepAliveParams->packetType;
- wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
- pKeepAliveParams->timePeriod;
-
- vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
- pKeepAliveParams->bssId,
- sizeof(wpt_macAddr));
-
- if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
- {
- vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
- pKeepAliveParams->hostIpv4Addr,
- SIR_IPV4_ADDR_LEN);
- vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
- pKeepAliveParams->destIpv4Addr,
- SIR_IPV4_ADDR_LEN);
- vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
- pKeepAliveParams->destMacAddr,
- SIR_MAC_ADDR_LEN);
- }
- else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
- {
- vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
- SIR_IPV4_ADDR_LEN,
- 0);
- vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
- SIR_IPV4_ADDR_LEN,
- 0);
- vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
- SIR_MAC_ADDR_LEN,
- 0);
- }
- wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
- wdiKeepAliveInfo->pUserData = pWdaParams;
-
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pKeepAliveParams;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
- pWdaParams->pWdaContext = pWDA;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
- wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA DMAC : %d:%d:%d:%d:%d:%d",
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
- wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "TimePeriod %d PacketType %d",
- wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
- wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
- wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
- (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Keep Alive REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return status;
-
-}/*WDA_KeepAliveReq*/
-/*
- * FUNCTION: WDA_WowlAddBcPtrnRespCallback
- *
- */
-void WDA_WowlAddBcPtrnRespCallback(
- WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams) ;
- return ;
-}
-/*
- * FUNCTION: WDA_WowlAddBcPtrnReqCallback
- * Free memory.
- * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-
-/*
- * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
- * Request to WDI to add WOWL Bcast pattern
- */
-VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
- tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
- (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
- sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiWowlAddBcPtrnInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiWowlAddBcPtrnInfo);
- return VOS_STATUS_E_NOMEM;
- }
- wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
- pWowlAddBcPtrnParams->ucPatternId;
- wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
- pWowlAddBcPtrnParams->ucPatternByteOffset;
- wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
- pWowlAddBcPtrnParams->ucPatternMaskSize;
- wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
- pWowlAddBcPtrnParams->ucPatternSize;
- if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
- {
- vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
- pWowlAddBcPtrnParams->ucPattern,
- wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
- vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
- pWowlAddBcPtrnParams->ucPatternMask,
- wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
- }
- else
- {
- vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
- pWowlAddBcPtrnParams->ucPattern,
- WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
- vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
- pWowlAddBcPtrnParams->ucPatternMask,
- WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
-
- vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
- pWowlAddBcPtrnParams->ucPatternExt,
- wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
- vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
- pWowlAddBcPtrnParams->ucPatternMaskExt,
- wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
- }
-
- vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
- pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
-
- wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
- wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
- wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
- (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- return status;
-
-}/*WDA_ProcessWowlAddBcPtrnReq*/
-/*
- * FUNCTION: WDA_WowlDelBcPtrnRespCallback
- *
- */
-void WDA_WowlDelBcPtrnRespCallback(
- WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams) ;
- return ;
-}
-/*
- * FUNCTION: WDA_WowlDelBcPtrnReqCallback
- * Free memory.
- * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
- * Request to WDI to delete WOWL Bcast pattern
- */
-VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
- tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
- (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
- sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiWowlDelBcPtrnInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiWowlDelBcPtrnInfo);
- return VOS_STATUS_E_NOMEM;
- }
- wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
- pWowlDelBcPtrnParams->ucPatternId;
-
- vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
- pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
-
- wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
- wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
- wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
- (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- return status;
-
-}/*WDA_ProcessWowlDelBcPtrnReq*/
-/*
- * FUNCTION: WDA_WowlEnterRespCallback
- *
- */
-void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tSirHalWowlEnterParams *pWowlEnterParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
- pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
-
- pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- pWowlEnterParams->status =
- (pwdiWowlEnterRspParam->status);
- WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_WowlEnterReqCallback
- * Free memory and send WOWL Enter RSP back to PE.
- * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tSirHalWowlEnterParams *pWowlEnterParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
- pWowlEnterParams->status = wdiStatus;
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessWowlEnterReq
- * Request to WDI to enter WOWL
- */
-VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
- tSirHalWowlEnterParams *pWowlEnterParams)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
- (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
- sizeof(WDI_WowlEnterReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiWowlEnterInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiWowlEnterInfo);
- return VOS_STATUS_E_NOMEM;
- }
-
- vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
-
- vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
- pWowlEnterParams->magicPtrn,
- sizeof(tSirMacAddr));
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
- pWowlEnterParams->ucMagicPktEnable;
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
- pWowlEnterParams->ucPatternFilteringEnable;
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
- pWowlEnterParams->ucUcastPatternFilteringEnable;
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
- pWowlEnterParams->ucWowChnlSwitchRcv;
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
- pWowlEnterParams->ucWowDeauthRcv;
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
- pWowlEnterParams->ucWowDisassocRcv;
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
- pWowlEnterParams->ucWowMaxMissedBeacons;
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
- pWowlEnterParams->ucWowMaxSleepUsec;
-#ifdef WLAN_WAKEUP_EVENTS
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
- pWowlEnterParams->ucWoWEAPIDRequestEnable;
-
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
- pWowlEnterParams->ucWoWEAPOL4WayEnable;
-
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
- pWowlEnterParams->ucWowNetScanOffloadMatch;
-
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
- pWowlEnterParams->ucWowGTKRekeyError;
-
- wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
- pWowlEnterParams->ucWoWBSSConnLoss;
-#endif // WLAN_WAKEUP_EVENTS
-
- wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
- pWowlEnterParams->bssIdx;
-
- wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
- wdiWowlEnterInfo->pUserData = pWdaParams;
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pWowlEnterParams;
- wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
- (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Wowl enter REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- return status;
-
-}/*WDA_ProcessWowlEnterReq*/
-/*
- * FUNCTION: WDA_WowlExitRespCallback
- *
- */
-void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tSirHalWowlExitParams *pWowlExitParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
- pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
-
- pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
- pWowlExitParams->status = (pwdiWowlExitRsp->status);
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_WowlExitReqCallback
- * Free memory and send WOWL Exit RSP back to PE.
- * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tSirHalWowlExitParams *pWowlExitParams;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
- pWowlExitParams->status = wdiStatus;
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessWowlExitReq
- * Request to WDI to add WOWL Bcast pattern
- */
-VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
- tSirHalWowlExitParams *pWowlExitParams)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_WowlExitReqParamsType *wdiWowlExitInfo =
- (WDI_WowlExitReqParamsType *)vos_mem_malloc(
- sizeof(WDI_WowlExitReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiWowlExitInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiWowlExitInfo);
- return VOS_STATUS_E_NOMEM;
- }
-
- wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
- pWowlExitParams->bssIdx;
-
- wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
- wdiWowlExitInfo->pUserData = pWdaParams;
-
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pWowlExitParams;
-
- wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
- (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Wowl exit REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- return status;
-}/*WDA_ProcessWowlExitReq*/
-/*
- * FUNCTION: WDA_IsHwFrameTxTranslationCapable
- * Request to WDI to determine whether a given station is capable of
- * using HW-based frame translation
- */
-v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
- tANI_U8 staIdx)
-{
- return WDI_IsHwFrameTxTranslationCapable(staIdx);
-}
-/*
- * FUNCTION: WDA_NvDownloadReqCallback
- * send NV Download RSP back to PE
- */
-void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
- void* pUserData)
-{
-
- tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- pWDA = pWdaParams->pWdaContext;
-
- /*Cleaning */
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
-
- vos_WDAComplete_cback(pWDA->pVosContext);
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessNvDownloadReq
- * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
- */
-VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
-{
- /* Initialize the local Variables*/
- tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
- v_VOID_t *pNvBuffer=NULL;
- v_SIZE_t bufferSize = 0;
- WDI_Status status = WDI_STATUS_E_FAILURE;
- WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
- tWDA_ReqParams *pWdaParams ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == pWDA)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pWDA is NULL", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
-
- /* Get the NV structure base address and size from VOS */
- vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
-
- wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
- sizeof(WDI_NvDownloadReqParamsType)) ;
- if(NULL == wdiNvDownloadReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- /* Copy Params to wdiNvDownloadReqParam*/
- wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
- wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiNvDownloadReqParam);
- return VOS_STATUS_E_NOMEM;
- }
-
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
- pWdaParams->wdaMsgParam = NULL;
- pWdaParams->pWdaContext = pWDA;
-
-
- wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
-
- status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
- (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in NV Download REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_FlushAcReqCallback
- * send Flush AC RSP back to TL
- */
-void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
-{
- vos_msg_t wdaMsg = {0} ;
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tFlushACReq *pFlushACReqParams;
- tFlushACRsp *pFlushACRspParams;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
- pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
- if(NULL == pFlushACRspParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pWdaParams);
- return ;
- }
- vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
- pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
- pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
- pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
- pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
- pFlushACRspParams->status = (status) ;
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
- wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
- wdaMsg.bodyptr = (void *)pFlushACRspParams;
- // POST message to TL
- vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
-
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessFlushAcReq
- * Request to WDI to Update the DELBA REQ params.
- */
-VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
- tFlushACReq *pFlushAcReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
- (WDI_FlushAcReqParamsType *)vos_mem_malloc(
- sizeof(WDI_FlushAcReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- if(NULL == wdiFlushAcReqParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiFlushAcReqParam);
- return VOS_STATUS_E_NOMEM;
- }
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
- wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
- wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
- wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
- /* Store Flush AC pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pFlushAcReqParams;
- pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
- status = WDI_FlushAcReq(wdiFlushAcReqParam,
- (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Flush AC REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- //TODO: respond to TL with failure
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_BtAmpEventRespCallback
- *
- */
-void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
- if(BTAMP_EVENT_CONNECTION_TERMINATED ==
- wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
- {
- pWDA->wdaAmpSessionOn = VOS_FALSE;
- }
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- /*
- * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
- * param here
- */
- return ;
-}
-/*
- * FUNCTION: WDA_BtAmpEventReqCallback
- * Free memory.
- * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
-
- if(BTAMP_EVENT_CONNECTION_TERMINATED ==
- wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
- {
- pWDA->wdaAmpSessionOn = VOS_FALSE;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessBtAmpEventReq
- * Request to WDI to Update with BT AMP events.
- */
-VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
- tSmeBtAmpEvent *pBtAmpEventParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
- (WDI_BtAmpEventParamsType *)vos_mem_malloc(
- sizeof(WDI_BtAmpEventParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiBtAmpEventParam)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiBtAmpEventParam);
- return VOS_STATUS_E_NOMEM;
- }
- wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
- pBtAmpEventParams->btAmpEventType;
- wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
- wdiBtAmpEventParam->pUserData = pWdaParams;
- /* Store BT AMP event pointer, as this will be used for response */
- /* store Params pass it to WDI */
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pBtAmpEventParams;
- pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
- status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
- (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in BT AMP event REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
- {
- pWDA->wdaAmpSessionOn = VOS_TRUE;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-/*
- * FUNCTION: WDA_FTMCommandReqCallback
- * Handle FTM CMD response came from HAL
- * Route responce to HDD FTM
- */
-void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
- void *usrData)
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
- if((NULL == pWDA) || (NULL == ftmCmdRspData))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
- return;
- }
- /* Release Current FTM Command Request */
- vos_mem_free(pWDA->wdaFTMCmdReq);
- pWDA->wdaFTMCmdReq = NULL;
- /* Post FTM Responce to HDD FTM */
- wlan_sys_ftm(ftmCmdRspData);
- return;
-}
-/*
- * FUNCTION: WDA_ProcessFTMCommand
- * Send FTM command to WDI
- */
-VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
- tPttMsgbuffer *pPTTFtmCmd)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_FTMCommandReqType *ftmCMDReq = NULL;
- ftmCMDReq = (WDI_FTMCommandReqType *)
- vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
- if(NULL == ftmCMDReq)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA FTM Command buffer alloc fail");
- return VOS_STATUS_E_NOMEM;
- }
- ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
- ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
- pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
- /* Send command to WDI */
- status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
- return status;
-}
-#ifdef FEATURE_OEM_DATA_SUPPORT
-/*
- * FUNCTION: WDA_StartOemDataReqCallback
- *
- */
-void WDA_StartOemDataReqCallback(
- WDI_oemDataRspParamsType *wdiOemDataRspParams,
- void* pUserData)
-{
- VOS_STATUS status = VOS_STATUS_E_FAILURE;
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tStartOemDataRsp *pOemDataRspParams = NULL ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
-
- if(NULL == pWDA)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pWDA is NULL", __func__);
- VOS_ASSERT(0);
- return ;
- }
-
- /*
- * Allocate memory for response params sent to PE
- */
- pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
-
- // Check if memory is allocated for OemdataMeasRsp Params.
- if(NULL == pOemDataRspParams)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "OEM DATA WDA callback alloc fail");
- VOS_ASSERT(0) ;
- return;
- }
-
- // Free the memory allocated during request.
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams) ;
-
- /*
- * Now go ahead and copy other stuff for PE in incase of success only
- * Also, here success always means that we have atleast one BSSID.
- */
- vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
-
- //enable Tx
- status = WDA_ResumeDataTx(pWDA);
- if(status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
- }
- WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
- return ;
-}
-/*
- * FUNCTION: WDA_ProcessStartOemDataReq
- * Send Start Oem Data Req to WDI
- */
-VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
- tStartOemDataReq *pOemDataReqParams)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
- tWDA_ReqParams *pWdaParams ;
-
- wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
-
- if(NULL == wdiOemDataReqParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
- pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
- vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
- pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
-
- wdiOemDataReqParams->wdiReqStatusCB = NULL;
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(wdiOemDataReqParams);
- vos_mem_free(pOemDataReqParams);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- pWdaParams->pWdaContext = (void*)pWDA;
- pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
- pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
-
- status = WDI_StartOemDataReq(wdiOemDataReqParams,
- (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#endif /* FEATURE_OEM_DATA_SUPPORT */
-/*
- * FUNCTION: WDA_SetTxPerTrackingRespCallback
- *
- */
-void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
-
- return ;
-}
-/*
- * FUNCTION: WDA_SetTxPerTrackingReqCallback
- * Free memory.
- * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-#ifdef WLAN_FEATURE_GTK_OFFLOAD
-/*
- * FUNCTION: WDA_GTKOffloadRespCallback
- *
- */
-void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- //print a msg, nothing else to do
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_GTKOffloadRespCallback invoked " );
-
- return ;
-}
-/*
- * FUNCTION: WDA_GTKOffloadReqCallback
- * Free memory.
- * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessGTKOffloadReq
- * Request to WDI to set the filter to minimize unnecessary host wakeup due
- * to broadcast traffic (sta mode).
- */
-VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
- tpSirGtkOffloadParams pGtkOffloadParams)
-{
- WDI_Status status = WDI_STATUS_E_FAILURE;
- WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
- (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
- sizeof(WDI_GtkOffloadReqMsg)) ;
- tWDA_ReqParams *pWdaParams ;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
-
- if(NULL == wdiGtkOffloadReqMsg)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiGtkOffloadReqMsg);
- return VOS_STATUS_E_NOMEM;
- }
-
- //
- // Fill wdiGtkOffloadInfo from pGtkOffloadParams
- //
-
- vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
- pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
-
- wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
- // Copy KCK
- vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
- // Copy KEK
- vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
- // Copy KeyReplayCounter
- vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
- &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
-
- wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
- wdiGtkOffloadReqMsg->pUserData = pWdaParams;
-
-
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pGtkOffloadParams;
-
- status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-/*
- * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
- *
- */
-void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
- void * pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
- tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
- vos_msg_t vosMsg;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
- pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
-
- // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
- vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
-
- /* Message Header */
- pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
- pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
-
- pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
- pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
- pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
- pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
- pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
-
- vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
- pwdiGtkOffloadGetInfoRsparams->bssId,
- sizeof (wpt_macAddr));
- /* VOS message wrapper */
- vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
- vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
- vosMsg.bodyval = 0;
-
- if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
- {
- /* free the mem and return */
- vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
- }
-
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- return;
-}
-/*
- * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
- * Free memory and send RSP back to SME.
- * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- vos_msg_t vosMsg;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- /* VOS message wrapper */
- vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
- vosMsg.bodyptr = NULL;
- vosMsg.bodyval = 0;
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
- }
-
- return;
-}
-#endif
-
-/*
- * FUNCTION: WDA_ProcessSetTxPerTrackingReq
- * Request to WDI to set Tx Per Tracking configurations
- */
-VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- WDI_Status wstatus;
- WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
- (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
- sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == pwdiSetTxPerTrackingReqParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(pTxPerTrackingParams);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(pwdiSetTxPerTrackingReqParams);
- vos_mem_free(pTxPerTrackingParams);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
- pTxPerTrackingParams->ucTxPerTrackingEnable;
- pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
- pTxPerTrackingParams->ucTxPerTrackingPeriod;
- pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
- pTxPerTrackingParams->ucTxPerTrackingRatio;
- pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
- pTxPerTrackingParams->uTxPerTrackingWatermark;
- pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
- pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
- /* Store param pointer as passed in by caller */
- /* store Params pass it to WDI
- Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
- pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pTxPerTrackingParams;
- wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
- (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(wstatus))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set Tx PER REQ WDI API, free all the memory " );
- status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- return status;
-
-}/*WDA_ProcessSetTxPerTrackingReq*/
-/*
- * FUNCTION: WDA_HALDumpCmdCallback
- * Send the VOS complete .
- */
-void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
- void* pUserData)
-{
- tANI_U8 *buffer = NULL;
- tWDA_CbContext *pWDA = NULL;
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- pWDA = pWdaParams->pWdaContext;
- buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
- if(wdiRspParams->usBufferLen > 0)
- {
- /*Copy the Resp data to UMAC supplied buffer*/
- vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
- }
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams);
-
- /* Indicate VOSS about the start complete */
- vos_WDAComplete_cback(pWDA->pVosContext);
- return ;
-}
-
-/*
- * FUNCTION: WDA_ProcessHALDumpCmdReq
- * Send Dump command to WDI
- */
-VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
- tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
- tANI_U32 arg4, tANI_U8 *pBuffer)
-{
- WDI_Status status = WDI_STATUS_SUCCESS;
- WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
- WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
- tWDA_ReqParams *pWdaParams ;
- pVosContextType pVosContext = NULL;
- VOS_STATUS vStatus;
- pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
- (void *)pMac);
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- return VOS_STATUS_E_NOMEM;
- }
- /* Allocate memory WDI request structure*/
- wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
- vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
- if(NULL == wdiHALDumpCmdReqParam)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA HAL DUMP Command buffer alloc fail");
- vos_mem_free(pWdaParams);
- return WDI_STATUS_E_FAILURE;
- }
- wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
- /* Extract the arguments */
- wdiHalDumpCmdInfo->command = cmd;
- wdiHalDumpCmdInfo->argument1 = arg1;
- wdiHalDumpCmdInfo->argument2 = arg2;
- wdiHalDumpCmdInfo->argument3 = arg3;
- wdiHalDumpCmdInfo->argument4 = arg4;
- wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
- pWdaParams->pWdaContext = pVosContext->pWDAContext;
-
- /* Response message will be passed through the buffer */
- pWdaParams->wdaMsgParam = (void *)pBuffer;
-
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
- /* Send command to WDI */
- status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
- vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
- if ( vStatus != VOS_STATUS_SUCCESS )
- {
- if ( vStatus == VOS_STATUS_E_TIMEOUT )
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "%s: WDA_HALDUMP reporting other error",__func__);
- }
- VOS_ASSERT(0);
- }
- return status;
-}
-#ifdef WLAN_FEATURE_GTK_OFFLOAD
-/*
- * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
- * Request to WDI to get GTK Offload Information
- */
-VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
- tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
-{
- WDI_Status status = WDI_STATUS_E_FAILURE;
- WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
- (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
- tWDA_ReqParams *pWdaParams ;
-
- if(NULL == pwdiGtkOffloadGetInfoReqMsg)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
- return VOS_STATUS_E_NOMEM;
- }
-
- pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
- pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
-
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
-
- vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
- pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
-
- status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(status))
- {
- /* failure returned by WDI API */
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
- }
-
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#endif // WLAN_FEATURE_GTK_OFFLOAD
-
-/*
- * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
- *
- */
-VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
- tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
-{
- WDI_Status wdiStatus;
- WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
-
- addPeriodicTxPtrnParams =
- vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
-
- if (NULL == addPeriodicTxPtrnParams)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
- __func__);
-
- return VOS_STATUS_E_NOMEM;
- }
-
- vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
- pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
-
- addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
- addPeriodicTxPtrnParams->pUserData = pWDA;
-
- wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
-
- if (WDI_STATUS_PENDING == wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Pending received for %s:%d", __func__, __LINE__ );
- }
- else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in %s:%d", __func__, __LINE__ );
- }
-
- vos_mem_free(addPeriodicTxPtrnParams);
-
- return CONVERT_WDI2VOS_STATUS(wdiStatus);
-}
-
-/*
- * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
- *
- */
-VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
- tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
-{
- WDI_Status wdiStatus;
- WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
-
- delPeriodicTxPtrnParams =
- vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
-
- if (NULL == delPeriodicTxPtrnParams)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
- __func__);
-
- return VOS_STATUS_E_NOMEM;
- }
-
- vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
- pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
-
- delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
- delPeriodicTxPtrnParams->pUserData = pWDA;
-
- wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
-
- if (WDI_STATUS_PENDING == wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Pending received for %s:%d", __func__, __LINE__ );
- }
- else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in %s:%d", __func__, __LINE__ );
- }
-
- vos_mem_free(delPeriodicTxPtrnParams);
-
- return CONVERT_WDI2VOS_STATUS(wdiStatus);
-}
-
-/*
- * FUNCTION: WDA_ProcessRateUpdateInd
- *
- */
-VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
- tSirRateUpdateInd *pRateUpdateParams)
-{
- WDI_Status wdiStatus;
- WDI_RateUpdateIndParams rateUpdateParams;
-
- vos_mem_copy(rateUpdateParams.bssid,
- pRateUpdateParams->bssid, sizeof(tSirMacAddr));
-
- rateUpdateParams.ucastDataRateTxFlag =
- pRateUpdateParams->ucastDataRateTxFlag;
- rateUpdateParams.reliableMcastDataRateTxFlag =
- pRateUpdateParams->reliableMcastDataRateTxFlag;
- rateUpdateParams.mcastDataRate24GHzTxFlag =
- pRateUpdateParams->mcastDataRate24GHzTxFlag;
- rateUpdateParams.mcastDataRate5GHzTxFlag =
- pRateUpdateParams->mcastDataRate5GHzTxFlag;
-
- rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
- rateUpdateParams.reliableMcastDataRate =
- pRateUpdateParams->reliableMcastDataRate;
- rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
- rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
-
- rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
- rateUpdateParams.pUserData = pWDA;
-
- wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
-
- if (WDI_STATUS_PENDING == wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Pending received for %s:%d", __func__, __LINE__ );
- }
- else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in %s:%d", __func__, __LINE__ );
- }
-
- vos_mem_free(pRateUpdateParams);
-
- return CONVERT_WDI2VOS_STATUS(wdiStatus);
-}
-
-
-#ifdef FEATURE_WLAN_BATCH_SCAN
-/*
- * FUNCTION: WDA_ProcessStopBatchScanInd
- *
- * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
- *
- * PARAM:
- * pWDA: pointer to WDA context
- * pReq: pointer to stop batch scan request
- */
-VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
- tSirStopBatchScanInd *pReq)
-{
- WDI_Status wdiStatus;
- WDI_StopBatchScanIndType wdiReq;
-
- wdiReq.param = pReq->param;
-
- wdiStatus = WDI_StopBatchScanInd(&wdiReq);
-
- if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
- }
-
- vos_mem_free(pReq);
-
- return CONVERT_WDI2VOS_STATUS(wdiStatus);
-}
-/*==========================================================================
- FUNCTION WDA_ProcessTriggerBatchScanResultInd
-
- DESCRIPTION
- API to pull batch scan result from FW
-
- PARAMETERS
- pWDA: Pointer to WDA context
- pGetBatchScanReq: Pointer to get batch scan result indication
-
- RETURN VALUE
- NONE
-
-===========================================================================*/
-VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
- tSirTriggerBatchScanResultInd *pReq)
-{
- WDI_Status wdiStatus;
- WDI_TriggerBatchScanResultIndType wdiReq;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
- "------> %s " ,__func__);
-
- wdiReq.param = pReq->param;
-
- wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
-
- if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Trigger batch scan result ind failed %s:%d",
- __func__, wdiStatus);
- }
-
- vos_mem_free(pReq);
-
- return CONVERT_WDI2VOS_STATUS(wdiStatus);
-}
-
-/*==========================================================================
- FUNCTION WDA_SetBatchScanRespCallback
-
- DESCRIPTION
- API to process set batch scan response from FW
-
- PARAMETERS
- pRsp: Pointer to set batch scan response
- pUserData: Pointer to user data
-
- RETURN VALUE
- NONE
-
-===========================================================================*/
-void WDA_SetBatchScanRespCallback
-(
- WDI_SetBatchScanRspType *pRsp,
- void* pUserData
-)
-{
- tSirSetBatchScanRsp *pHddSetBatchScanRsp;
- tpAniSirGlobal pMac;
- void *pCallbackContext;
- tWDA_CbContext *pWDA = NULL ;
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
- "<------ %s " ,__func__);
- if (NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- /*extract WDA context*/
- pWDA = pWdaParams->pWdaContext;
- if (NULL == pWDA)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pWDA is NULL can't invole HDD callback",
- __func__);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- VOS_ASSERT(0);
- return;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
-
- pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
- if (NULL == pMac)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pMac is NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pHddSetBatchScanRsp =
- (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
- if (NULL == pHddSetBatchScanRsp)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
-
- pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
- /*call hdd callback with set batch scan response data*/
- if(pMac->pmc.setBatchScanReqCallback)
- {
- pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:HDD callback is null", __func__);
- VOS_ASSERT(0);
- }
-
- vos_mem_free(pHddSetBatchScanRsp);
- return ;
-}
-
-/*==========================================================================
- FUNCTION WDA_ProcessSetBatchScanReq
-
- DESCRIPTION
- API to send set batch scan request to WDI
-
- PARAMETERS
- pWDA: Pointer to WDA context
- pSetBatchScanReq: Pointer to set batch scan req
-
- RETURN VALUE
- NONE
-
-===========================================================================*/
-VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
- tSirSetBatchScanReq *pSetBatchScanReq)
-{
- WDI_Status status;
- tWDA_ReqParams *pWdaParams ;
- WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
- "------> %s " ,__func__);
-
- pWdiSetBatchScanReq =
- (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
- if (NULL == pWdiSetBatchScanReq)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(pSetBatchScanReq);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
- if (NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pSetBatchScanReq);
- vos_mem_free(pWdiSetBatchScanReq);
- return VOS_STATUS_E_NOMEM;
- }
-
- pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
- pWdiSetBatchScanReq->numberOfScansToBatch =
- pSetBatchScanReq->numberOfScansToBatch;
- pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
- pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
- pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
-
- pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = pSetBatchScanReq;
-
- status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
- (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
- if (IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set Batch Scan REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status);
-}
-
-#endif
-
-/*
- * -------------------------------------------------------------------------
- * DATA interface with WDI for Mgmt Frames
- * -------------------------------------------------------------------------
- */
-/*
- * FUNCTION: WDA_TxComplete
- * Callback function for the WDA_TxPacket
- */
-VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
- VOS_STATUS status )
-{
-
- tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
- tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
- tANI_U32 uUserData;
-
- if(NULL == wdaContext)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pWDA is NULL",
- __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
-
- /*Check if frame was timed out or not*/
- vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
- (v_PVOID_t)&uUserData);
-
- if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
- {
- /*Discard frame - no further processing is needed*/
- vos_pkt_return_packet(pData);
- return VOS_STATUS_SUCCESS;
- }
-
- /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
- if( NULL!=wdaContext->pTxCbFunc)
- {
- /*check if packet is freed already*/
- if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
- {
- wdaContext->pTxCbFunc(pMac, pData, 1);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
- "%s:packet (%p) is already freed",
- __func__, pData);
- //Return from here since we reaching here because the packet already timeout
- return status;
- }
- }
-
- /*
- * Trigger the event to bring the HAL TL Tx complete function to come
- * out of wait
- * Let the coe above to complete the packet first. When this event is set,
- * the thread waiting for the event may run and set Vospacket_freed causing the original
- * packet not being freed.
- */
- status = vos_event_set(&wdaContext->txFrameEvent);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "NEW VOS Event Set failed - status = %d", status);
- }
- return status;
-}
-/*
- * FUNCTION: WDA_TxPacket
- * Forward TX management frame to WDI
- */
-VOS_STATUS WDA_TxPacket(void *pWDA_handle,
- void *pFrmBuf,
- tANI_U16 frmLen,
- eFrameType frmType,
- eFrameTxDir txDir,
- tANI_U8 tid,
- pWDATxRxCompFunc pCompFunc,
- void *pData,
- pWDAAckFnTxComp pAckTxComp,
- tANI_U8 txFlag,
- tANI_U8 sessionId )
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)(pWDA_handle);
- VOS_STATUS status = VOS_STATUS_SUCCESS ;
- tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
- tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
- tANI_U8 eventIdx = 0;
- tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
- tpAniSirGlobal pMac;
- if((NULL == pWDA)||(NULL == pFrmBuf))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pWDA %p or pFrmBuf %p is NULL",
- __func__,pWDA,pFrmBuf);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
- "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
- pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
- if(NULL == pMac)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pMac is NULL", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
-
-
-
- /* store the call back function in WDA context */
- pWDA->pTxCbFunc = pCompFunc;
- /* store the call back for the function of ackTxComplete */
- if( pAckTxComp )
- {
- if( NULL != pWDA->pAckTxCbFunc )
- {
- /* Already TxComp is active no need to active again */
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "There is already one request pending for tx complete");
- pWDA->pAckTxCbFunc( pMac, 0);
- pWDA->pAckTxCbFunc = NULL;
-
- if( VOS_STATUS_SUCCESS !=
- WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Tx Complete timeout Timer Stop Failed ");
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Tx Complete timeout Timer Stop Success ");
- }
- }
-
- txFlag |= HAL_TXCOMP_REQUESTED_MASK;
- pWDA->pAckTxCbFunc = pAckTxComp;
- if( VOS_STATUS_SUCCESS !=
- WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Tx Complete Timer Start Failed ");
- pWDA->pAckTxCbFunc = NULL;
- return eHAL_STATUS_FAILURE;
- }
- }
- /* Reset the event to be not signalled */
- status = vos_event_reset(&pWDA->txFrameEvent);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS Event reset failed - status = %d",status);
- pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf, 1);
- if( pAckTxComp )
- {
- pWDA->pAckTxCbFunc = NULL;
- if( VOS_STATUS_SUCCESS !=
- WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Tx Complete timeout Timer Stop Failed ");
- }
- }
- return VOS_STATUS_E_FAILURE;
- }
-
- /* If Peer Sta mask is set don't overwrite to self sta */
- if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
- {
- txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
- }
- else
- {
- /* Get system role, use the self station if in unknown role or STA role */
- systemRole = wdaGetGlobalSystemRole(pMac);
- if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
- (( eSYSTEM_STA_ROLE == systemRole )
-#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
- && frmType == HAL_TXRX_FRM_802_11_MGMT
-#endif
- ))
- {
- txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
- }
- }
-
- /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
- disassoc frame reaches the HW, HAL has already deleted the peer station */
- if ((pFc->type == SIR_MAC_MGMT_FRAME))
- {
- if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
- (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
- {
- /*Send Probe request frames on self sta idx*/
- txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
- }
- /* Since we donot want probe responses to be retried, send probe responses
- through the NO_ACK queues */
- if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
- {
- //probe response is sent out using self station and no retries options.
- txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
- }
- if(VOS_TRUE == pWDA->wdaAmpSessionOn)
- {
- txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
- }
- }
- vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
-
- /*Set frame tag to 0
- We will use the WDA user data in order to tag a frame as expired*/
- vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
- (v_PVOID_t)0);
-
-
- if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
- frmLen, ucTypeSubType, tid,
- WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Sending Mgmt Frame failed - status = %d", status);
- pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf, 1);
- vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
- if( pAckTxComp )
- {
- pWDA->pAckTxCbFunc = NULL;
- if( VOS_STATUS_SUCCESS !=
- WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Tx Complete timeout Timer Stop Failed ");
- }
- }
- return VOS_STATUS_E_FAILURE;
- }
- /*
- * Wait for the event to be set by the TL, to get the response of TX
- * complete, this event should be set by the Callback function called by TL
- */
- status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
- &eventIdx);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Status %d when waiting for TX Frame Event",
- __func__, status);
- pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
- after the packet gets completed(packet freed once)*/
-
- /* TX MGMT fail with COMP timeout, try to detect DXE stall */
- WDA_TransportChannelDebug(pMac, 1, 0);
-
- /*Tag Frame as timed out for later deletion*/
- vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
- (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
-
- /* check whether the packet was freed already,so need not free again when
- * TL calls the WDA_Txcomplete routine
- */
- vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
- /*if(vos_atomic_set(uintptr_t *)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
- {
- pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
- } */
-
- if( pAckTxComp )
- {
- pWDA->pAckTxCbFunc = NULL;
- if( VOS_STATUS_SUCCESS !=
- WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Tx Complete timeout Timer Stop Failed ");
- }
- }
- status = VOS_STATUS_E_FAILURE;
- }
-#ifdef WLAN_DUMP_MGMTFRAMES
- if (VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s() TX packet : SubType %d", __func__,pFc->subType);
- VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- pData, frmLen);
- }
-#endif
-
- return status;
-}
-/*
- * FUNCTION: WDA_ProcessDHCPStartInd
- * Forward DHCP Start to WDI
- */
-static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
- tAniDHCPInd *dhcpStartInd)
-{
- WDI_Status status;
- WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
- if (NULL == wdiDHCPInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(dhcpStartInd);
- return VOS_STATUS_E_NOMEM;
- }
-
- wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
- vos_mem_copy(wdiDHCPInd->adapterMacAddr, dhcpStartInd->adapterMacAddr,
- sizeof(tSirMacAddr));
- vos_mem_copy(wdiDHCPInd->peerMacAddr, dhcpStartInd->peerMacAddr,
- sizeof(tSirMacAddr));
-
- status = WDI_dhcpStartInd(wdiDHCPInd);
-
- if (IS_WDI_STATUS_FAILURE(status))
- {
- vos_mem_free(wdiDHCPInd);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "DHCP Start Indication failed");
- }
- vos_mem_free(dhcpStartInd);
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
- /*
- * FUNCTION: WDA_ProcessDHCPStopInd
- * Forward DHCP Stop to WDI
- */
- static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
- tAniDHCPInd *dhcpStopInd)
- {
- WDI_Status status;
- WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
- if (NULL == wdiDHCPInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(dhcpStopInd);
- return VOS_STATUS_E_NOMEM;
- }
- wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
- vos_mem_copy(wdiDHCPInd->adapterMacAddr, dhcpStopInd->adapterMacAddr, sizeof(tSirMacAddr));
- vos_mem_copy(wdiDHCPInd->peerMacAddr, dhcpStopInd->peerMacAddr, sizeof(tSirMacAddr));
- status = WDI_dhcpStopInd(wdiDHCPInd);
- if (IS_WDI_STATUS_FAILURE(status))
- {
- vos_mem_free(wdiDHCPInd);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "DHCP Start Indication failed");
- }
- vos_mem_free(dhcpStopInd);
- return CONVERT_WDI2VOS_STATUS(status) ;
- }
-
-/*
- * FUNCTION: WDA_McProcessMsg
- * Trigger DAL-AL to start CFG download
- */
-VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tWDA_CbContext *pWDA = NULL ;
- if(NULL == pMsg)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pMsg is NULL", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
- "=========> %s msgType: %x " ,__func__, pMsg->type);
-
- pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
- if(NULL == pWDA )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pWDA is NULL", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pMsg->bodyptr);
- return VOS_STATUS_E_FAILURE;
- }
- /* Process all the WDA messages.. */
- switch( pMsg->type )
- {
- case WNI_CFG_DNLD_REQ:
- {
- status = WDA_WniCfgDnld(pWDA);
- /* call WDA complete event if config download success */
- if( VOS_IS_STATUS_SUCCESS(status) )
- {
- vos_WDAComplete_cback(pVosContext);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA Config Download failure" );
- }
- break ;
- }
- /*
- * Init SCAN request from PE, convert it into DAL format
- * and send it to DAL
- */
- case WDA_INIT_SCAN_REQ:
- {
- WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
- break ;
- }
- /* start SCAN request from PE */
- case WDA_START_SCAN_REQ:
- {
- WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
- break ;
- }
- /* end SCAN request from PE */
- case WDA_END_SCAN_REQ:
- {
- WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
- break ;
- }
- /* end SCAN request from PE */
- case WDA_FINISH_SCAN_REQ:
- {
- WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
- break ;
- }
- /* join request from PE */
- case WDA_CHNL_SWITCH_REQ:
- {
- if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
- {
- WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
- }
- else
- {
- WDA_ProcessChannelSwitchReq(pWDA,
- (tSwitchChannelParams*)pMsg->bodyptr) ;
- }
- break ;
- }
- /* ADD BSS request from PE */
- case WDA_ADD_BSS_REQ:
- {
- WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
- break ;
- }
- case WDA_ADD_STA_REQ:
- {
- WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
- break ;
- }
- case WDA_DELETE_BSS_REQ:
- {
- WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
- break ;
- }
- case WDA_DELETE_STA_REQ:
- {
- WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
- break ;
- }
- case WDA_CONFIG_PARAM_UPDATE_REQ:
- {
- WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
- break ;
- }
- case WDA_SET_BSSKEY_REQ:
- {
- WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
- break ;
- }
- case WDA_SET_STAKEY_REQ:
- {
- WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
- break ;
- }
- case WDA_SET_STA_BCASTKEY_REQ:
- {
- WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
- break ;
- }
- case WDA_REMOVE_BSSKEY_REQ:
- {
- WDA_ProcessRemoveBssKeyReq(pWDA,
- (tRemoveBssKeyParams *)pMsg->bodyptr);
- break ;
- }
- case WDA_REMOVE_STAKEY_REQ:
- {
- WDA_ProcessRemoveStaKeyReq(pWDA,
- (tRemoveStaKeyParams *)pMsg->bodyptr);
- break ;
- }
- case WDA_REMOVE_STA_BCASTKEY_REQ:
- {
- /* TODO: currently UMAC is not sending this request, Add the code for
- handling this request when UMAC supports */
- break;
- }
-#ifdef FEATURE_WLAN_ESE
- case WDA_TSM_STATS_REQ:
- {
- WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
- break;
- }
-#endif
- case WDA_UPDATE_EDCA_PROFILE_IND:
- {
- WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
- break;
- }
- case WDA_ADD_TS_REQ:
- {
- WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
- break;
- }
- case WDA_DEL_TS_REQ:
- {
- WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
- break;
- }
- case WDA_ADDBA_REQ:
- {
- WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
- break;
- }
- case WDA_DELBA_IND:
- {
- WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
- break;
- }
- case WDA_SET_LINK_STATE:
- {
- WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
- break;
- }
- case WDA_GET_STATISTICS_REQ:
- {
- WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
- break;
- }
-#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
- case WDA_GET_ROAM_RSSI_REQ:
- {
- WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
- break;
- }
-#endif
- case WDA_PWR_SAVE_CFG:
- {
- if(pWDA->wdaState == WDA_READY_STATE)
- {
- WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
- }
- else
- {
- if(NULL != pMsg->bodyptr)
- {
- vos_mem_free(pMsg->bodyptr);
- }
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
- }
- break;
- }
- case WDA_ENTER_IMPS_REQ:
- {
- if(pWDA->wdaState == WDA_READY_STATE)
- {
- WDA_ProcessEnterImpsReq(pWDA);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
- }
- break;
- }
- case WDA_EXIT_IMPS_REQ:
- {
- if(pWDA->wdaState == WDA_READY_STATE)
- {
- WDA_ProcessExitImpsReq(pWDA);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
- }
- break;
- }
- case WDA_ENTER_BMPS_REQ:
- {
- if(pWDA->wdaState == WDA_READY_STATE)
- {
- WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
- }
- break;
- }
- case WDA_EXIT_BMPS_REQ:
- {
- if(pWDA->wdaState == WDA_READY_STATE)
- {
- WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
- }
- break;
- }
- case WDA_ENTER_UAPSD_REQ:
- {
- if(pWDA->wdaState == WDA_READY_STATE)
- {
- WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
- }
- break;
- }
- case WDA_EXIT_UAPSD_REQ:
- {
- if(pWDA->wdaState == WDA_READY_STATE)
- {
- WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
- }
- break;
- }
- case WDA_UPDATE_UAPSD_IND:
- {
- if(pWDA->wdaState == WDA_READY_STATE)
- {
- WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
- }
- break;
- }
- case WDA_REGISTER_PE_CALLBACK :
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
- "Handling msg type WDA_REGISTER_PE_CALLBACK " );
- /*TODO: store the PE callback */
- /* Do Nothing? MSG Body should be freed at here */
- if(NULL != pMsg->bodyptr)
- {
- vos_mem_free(pMsg->bodyptr);
- }
- break;
- }
- case WDA_SYS_READY_IND :
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
- "Handling msg type WDA_SYS_READY_IND " );
- pWDA->wdaState = WDA_READY_STATE;
- if(NULL != pMsg->bodyptr)
- {
- vos_mem_free(pMsg->bodyptr);
- }
- break;
- }
- case WDA_BEACON_FILTER_IND :
- {
- WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
- break;
- }
- case WDA_BTC_SET_CFG:
- {
- /*TODO: handle this while dealing with BTC */
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
- "Handling msg type WDA_BTC_SET_CFG " );
- /* Do Nothing? MSG Body should be freed at here */
- if(NULL != pMsg->bodyptr)
- {
- vos_mem_free(pMsg->bodyptr);
- }
- break;
- }
- case WDA_SIGNAL_BT_EVENT:
- {
- /*TODO: handle this while dealing with BTC */
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
- "Handling msg type WDA_SIGNAL_BT_EVENT " );
- /* Do Nothing? MSG Body should be freed at here */
- if(NULL != pMsg->bodyptr)
- {
- vos_mem_free(pMsg->bodyptr);
- }
- break;
- }
- case WDA_CFG_RXP_FILTER_REQ:
- {
- WDA_ProcessConfigureRxpFilterReq(pWDA,
- (tSirWlanSetRxpFilters *)pMsg->bodyptr);
- break;
- }
- case WDA_SET_HOST_OFFLOAD:
- {
- WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
- break;
- }
- case WDA_SET_KEEP_ALIVE:
- {
- WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
- break;
- }
-#ifdef WLAN_NS_OFFLOAD
- case WDA_SET_NS_OFFLOAD:
- {
- WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
- break;
- }
-#endif //WLAN_NS_OFFLOAD
- case WDA_ADD_STA_SELF_REQ:
- {
- WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
- break;
- }
- case WDA_DEL_STA_SELF_REQ:
- {
- WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
- break;
- }
- case WDA_WOWL_ADD_BCAST_PTRN:
- {
- WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
- break;
- }
- case WDA_WOWL_DEL_BCAST_PTRN:
- {
- WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
- break;
- }
- case WDA_WOWL_ENTER_REQ:
- {
- WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
- break;
- }
- case WDA_WOWL_EXIT_REQ:
- {
- WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
- break;
- }
- case WDA_TL_FLUSH_AC_REQ:
- {
- WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
- break;
- }
- case WDA_SIGNAL_BTAMP_EVENT:
- {
- WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
- break;
- }
-#ifdef WDA_UT
- case WDA_WDI_EVENT_MSG:
- {
- WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
- break ;
- }
-#endif
- case WDA_UPDATE_BEACON_IND:
- {
- WDA_ProcessUpdateBeaconParams(pWDA,
- (tUpdateBeaconParams *)pMsg->bodyptr);
- break;
- }
- case WDA_SEND_BEACON_REQ:
- {
- WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
- break;
- }
- case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
- {
- WDA_ProcessUpdateProbeRspTemplate(pWDA,
- (tSendProbeRespParams *)pMsg->bodyptr);
- break;
- }
-#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
- case WDA_SET_MAX_TX_POWER_REQ:
- {
- WDA_ProcessSetMaxTxPowerReq(pWDA,
- (tMaxTxPowerParams *)pMsg->bodyptr);
- break;
- }
-#endif
- case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
- {
- WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
- pMsg->bodyptr);
- break;
- }
- case WDA_SET_TX_POWER_REQ:
- {
- WDA_ProcessSetTxPowerReq(pWDA,
- (tSirSetTxPowerReq *)pMsg->bodyptr);
- break;
- }
- case WDA_SET_P2P_GO_NOA_REQ:
- {
- WDA_ProcessSetP2PGONOAReq(pWDA,
- (tP2pPsParams *)pMsg->bodyptr);
- break;
- }
- /* timer related messages */
- case WDA_TIMER_BA_ACTIVITY_REQ:
- {
- WDA_BaCheckActivity(pWDA) ;
- break ;
- }
-
- /* timer related messages */
- case WDA_TIMER_TRAFFIC_STATS_IND:
- {
- WDA_TimerTrafficStatsInd(pWDA);
- break;
- }
-#ifdef WLAN_FEATURE_VOWIFI_11R
- case WDA_AGGR_QOS_REQ:
- {
- WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
- break;
- }
-#endif /* WLAN_FEATURE_VOWIFI_11R */
- case WDA_FTM_CMD_REQ:
- {
- WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
- break ;
- }
-#ifdef FEATURE_OEM_DATA_SUPPORT
- case WDA_START_OEM_DATA_REQ:
- {
- WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
- break;
- }
-#endif /* FEATURE_OEM_DATA_SUPPORT */
- /* Tx Complete Time out Indication */
- case WDA_TX_COMPLETE_TIMEOUT_IND:
- {
- WDA_ProcessTxCompleteTimeOutInd(pWDA);
- break;
- }
- case WDA_WLAN_SUSPEND_IND:
- {
- WDA_ProcessWlanSuspendInd(pWDA,
- (tSirWlanSuspendParam *)pMsg->bodyptr) ;
- break;
- }
- case WDA_WLAN_RESUME_REQ:
- {
- WDA_ProcessWlanResumeReq(pWDA,
- (tSirWlanResumeParam *)pMsg->bodyptr) ;
- break;
- }
-
- case WDA_UPDATE_CF_IND:
- {
- vos_mem_free((v_VOID_t*)pMsg->bodyptr);
- pMsg->bodyptr = NULL;
- break;
- }
-#ifdef FEATURE_WLAN_SCAN_PNO
- case WDA_SET_PNO_REQ:
- {
- WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
- break;
- }
- case WDA_UPDATE_SCAN_PARAMS_REQ:
- {
- WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
- break;
- }
- case WDA_SET_RSSI_FILTER_REQ:
- {
- WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
- break;
- }
-#endif // FEATURE_WLAN_SCAN_PNO
-#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
- case WDA_ROAM_SCAN_OFFLOAD_REQ:
- {
- WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
- break;
- }
-#endif
- case WDA_SET_TX_PER_TRACKING_REQ:
- {
- WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
- break;
- }
-
-#ifdef WLAN_FEATURE_PACKET_FILTERING
- case WDA_8023_MULTICAST_LIST_REQ:
- {
- WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
- break;
- }
- case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
- {
- WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
- break;
- }
- case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
- {
- WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
- break;
- }
- case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
- {
- WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
- break;
- }
-#endif // WLAN_FEATURE_PACKET_FILTERING
-
-
- case WDA_TRANSMISSION_CONTROL_IND:
- {
- WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
- break;
- }
- case WDA_SET_POWER_PARAMS_REQ:
- {
- WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
- break;
- }
-#ifdef WLAN_FEATURE_GTK_OFFLOAD
- case WDA_GTK_OFFLOAD_REQ:
- {
- WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
- break;
- }
-
- case WDA_GTK_OFFLOAD_GETINFO_REQ:
- {
- WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
- break;
- }
-#endif //WLAN_FEATURE_GTK_OFFLOAD
-
- case WDA_SET_TM_LEVEL_REQ:
- {
- WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
- break;
- }
-#ifdef WLAN_FEATURE_11AC
- case WDA_UPDATE_OP_MODE:
- {
- if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
- {
- if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
- WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
- else
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- " VHT OpMode Feature is Not Supported");
- }
- else
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- " 11AC Feature is Not Supported");
- break;
- }
-#endif
-#ifdef WLAN_FEATURE_11W
- case WDA_EXCLUDE_UNENCRYPTED_IND:
- {
- WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
- break;
- }
-#endif
-#ifdef FEATURE_WLAN_TDLS
- case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
- {
- WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
- break;
- }
-#endif
- case WDA_DHCP_START_IND:
- {
- WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
- break;
- }
- case WDA_DHCP_STOP_IND:
- {
- WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
- break;
- }
-#ifdef FEATURE_WLAN_LPHB
- case WDA_LPHB_CONF_REQ:
- {
- WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
- break;
- }
-#endif
- case WDA_ADD_PERIODIC_TX_PTRN_IND:
- {
- WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
- (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
- break;
- }
- case WDA_DEL_PERIODIC_TX_PTRN_IND:
- {
- WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
- (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
- break;
- }
- case WDA_RATE_UPDATE_IND:
- {
- WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
- break;
- }
-
-#ifdef FEATURE_WLAN_BATCH_SCAN
- case WDA_SET_BATCH_SCAN_REQ:
- {
- WDA_ProcessSetBatchScanReq(pWDA,
- (tSirSetBatchScanReq *)pMsg->bodyptr);
- break;
- }
- case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
- {
- WDA_ProcessTriggerBatchScanResultInd(pWDA,
- (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
- break;
- }
- case WDA_STOP_BATCH_SCAN_IND:
- {
- WDA_ProcessStopBatchScanInd(pWDA,
- (tSirStopBatchScanInd *)pMsg->bodyptr);
- break;
- }
-#endif
-
- default:
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "No Handling for msg type %x in WDA "
- ,pMsg->type);
- /* Do Nothing? MSG Body should be freed at here */
- if(NULL != pMsg->bodyptr)
- {
- vos_mem_free(pMsg->bodyptr);
- }
- //WDA_VOS_ASSERT(0) ;
- }
- }
- return status ;
-}
-
-/*
- * FUNCTION: WDA_LowLevelIndCallback
- * IND API callback from WDI, send Ind to PE
- */
-void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
- void* pUserData )
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
-#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
- tSirRSSINotification rssiNotification;
-#endif
- if(NULL == pWDA)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pWDA is NULL", __func__);
- VOS_ASSERT(0);
- return ;
- }
-
- switch(wdiLowLevelInd->wdiIndicationType)
- {
- case WDI_RSSI_NOTIFICATION_IND:
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
-#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
- rssiNotification.bReserved =
- wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
- rssiNotification.bRssiThres1NegCross =
- wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
- rssiNotification.bRssiThres1PosCross =
- wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
- rssiNotification.bRssiThres2NegCross =
- wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
- rssiNotification.bRssiThres2PosCross =
- wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
- rssiNotification.bRssiThres3NegCross =
- wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
- rssiNotification.bRssiThres3PosCross =
- wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
- rssiNotification.avgRssi = (v_S7_t)
- ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
- WLANTL_BMPSRSSIRegionChangedNotification(
- pWDA->pVosContext,
- &rssiNotification);
-#endif
- break ;
- }
- case WDI_MISSED_BEACON_IND:
- {
- tpSirSmeMissedBeaconInd pMissBeacInd =
- (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Received WDI_MISSED_BEACON_IND from WDI ");
- /* send IND to PE */
- if(NULL == pMissBeacInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- break;
- }
- pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
- pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
- pMissBeacInd->bssIdx =
- wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
- WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
- break ;
- }
- case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
- {
- /* TODO: Decode Ind and send Ind to PE */
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
- break ;
- }
-
- case WDI_MIC_FAILURE_IND:
- {
- tpSirSmeMicFailureInd pMicInd =
- (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
-
- if(NULL == pMicInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- break;
- }
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Received WDI_MIC_FAILURE_IND from WDI ");
- pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
- pMicInd->length = sizeof(tSirSmeMicFailureInd);
- vos_mem_copy(pMicInd->bssId,
- wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
- sizeof(tSirMacAddr));
- vos_mem_copy(pMicInd->info.srcMacAddr,
- wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
- sizeof(tSirMacAddr));
- vos_mem_copy(pMicInd->info.taMacAddr,
- wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
- sizeof(tSirMacAddr));
- vos_mem_copy(pMicInd->info.dstMacAddr,
- wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
- sizeof(tSirMacAddr));
- vos_mem_copy(pMicInd->info.rxMacAddr,
- wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
- sizeof(tSirMacAddr));
- pMicInd->info.multicast =
- wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
- pMicInd->info.keyId=
- wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
- pMicInd->info.IV1=
- wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
- vos_mem_copy(pMicInd->info.TSC,
- wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
- WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
- (void *)pMicInd , 0) ;
- break ;
- }
- case WDI_FATAL_ERROR_IND:
- {
- pWDA->wdiFailed = true;
- /* TODO: Decode Ind and send Ind to PE */
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Received WDI_FATAL_ERROR_IND from WDI ");
- break ;
- }
- case WDI_DEL_STA_IND:
- {
- tpDeleteStaContext pDelSTACtx =
- (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Received WDI_DEL_STA_IND from WDI ");
- if(NULL == pDelSTACtx)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- break;
- }
- vos_mem_copy(pDelSTACtx->addr2,
- wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
- sizeof(tSirMacAddr));
- vos_mem_copy(pDelSTACtx->bssId,
- wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
- sizeof(tSirMacAddr));
- pDelSTACtx->assocId =
- wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
- pDelSTACtx->reasonCode =
- wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
- pDelSTACtx->staId =
- wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
- WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
- (void *)pDelSTACtx , 0) ;
- break ;
- }
- case WDI_COEX_IND:
- {
- tANI_U32 index;
- vos_msg_t vosMsg;
- tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
- if(NULL == pSmeCoexInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
- break;
- }
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Received WDI_COEX_IND from WDI ");
- /* Message Header */
- pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
- pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
- /* Info from WDI Indication */
- pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
- for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
- {
- pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
- }
- /* VOS message wrapper */
- vosMsg.type = eWNI_SME_COEX_IND;
- vosMsg.bodyptr = (void *)pSmeCoexInd;
- vosMsg.bodyval = 0;
- /* Send message to SME */
- if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
- {
- /* free the mem and return */
- vos_mem_free((v_VOID_t *)pSmeCoexInd);
- }
- else
- {
- /* DEBUG */
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
- pSmeCoexInd->coexIndType,
- pSmeCoexInd->coexIndData[0],
- pSmeCoexInd->coexIndData[1],
- pSmeCoexInd->coexIndData[2],
- pSmeCoexInd->coexIndData[3]);
- }
- break;
- }
- case WDI_TX_COMPLETE_IND:
- {
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
- /* Calling TxCompleteAck Indication from wda context*/
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Complete Indication received from HAL");
- if( pWDA->pAckTxCbFunc )
- {
- if( VOS_STATUS_SUCCESS !=
- WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Tx Complete timeout Timer Stop Failed ");
- }
- pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
- pWDA->pAckTxCbFunc = NULL;
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Tx Complete Indication is received after timeout ");
- }
- break;
- }
- case WDI_P2P_NOA_START_IND :
- {
- tSirP2PNoaStart *pP2pNoaStart =
- (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
-
- if (NULL == pP2pNoaStart)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Memory allocation failure, "
- "WDI_P2P_NOA_START_IND not forwarded");
- break;
- }
- pP2pNoaStart->status =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
- pP2pNoaStart->bssIdx =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
- WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
- (void *)pP2pNoaStart , 0) ;
- break;
- }
-
-#ifdef FEATURE_WLAN_TDLS
- case WDI_TDLS_IND :
- {
- tSirTdlsInd *pTdlsInd =
- (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
-
- if (NULL == pTdlsInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Memory allocation failure, "
- "WDI_TDLS_IND not forwarded");
- break;
- }
- pTdlsInd->status =
- wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
- pTdlsInd->assocId =
- wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
- pTdlsInd->staIdx =
- wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
- pTdlsInd->reasonCode =
- wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
- WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
- (void *)pTdlsInd , 0) ;
- break;
- }
-#endif
- case WDI_P2P_NOA_ATTR_IND :
- {
- tSirP2PNoaAttr *pP2pNoaAttr =
- (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Received WDI_P2P_NOA_ATTR_IND from WDI");
- if (NULL == pP2pNoaAttr)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Memory allocation failure, "
- "WDI_P2P_NOA_ATTR_IND not forwarded");
- break;
- }
- pP2pNoaAttr->index =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
- pP2pNoaAttr->oppPsFlag =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
- pP2pNoaAttr->ctWin =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
-
- pP2pNoaAttr->uNoa1IntervalCnt =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
- pP2pNoaAttr->uNoa1Duration =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
- pP2pNoaAttr->uNoa1Interval =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
- pP2pNoaAttr->uNoa1StartTime =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
- pP2pNoaAttr->uNoa2IntervalCnt =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
- pP2pNoaAttr->uNoa2Duration =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
- pP2pNoaAttr->uNoa2Interval =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
- pP2pNoaAttr->uNoa2StartTime =
- wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
- WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
- (void *)pP2pNoaAttr , 0) ;
- break;
- }
-#ifdef FEATURE_WLAN_SCAN_PNO
- case WDI_PREF_NETWORK_FOUND_IND:
- {
- vos_msg_t vosMsg;
- v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
- tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
- (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
- if (NULL == pPrefNetworkFoundInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Memory allocation failure, "
- "WDI_PREF_NETWORK_FOUND_IND not forwarded");
- if (NULL !=
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
- {
- wpalMemoryFree(
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
- );
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
- }
- break;
- }
- /* Message Header */
- pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
- pPrefNetworkFoundInd->mesgLen = size;
-
- /* Info from WDI Indication */
- pPrefNetworkFoundInd->ssId.length =
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
- vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
- vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
- pPrefNetworkFoundInd->ssId.length);
- if (NULL !=
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
- {
- pPrefNetworkFoundInd->frameLength =
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
- vos_mem_copy( pPrefNetworkFoundInd->data,
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
- pPrefNetworkFoundInd->frameLength);
- wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
- wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
- }
- else
- {
- pPrefNetworkFoundInd->frameLength = 0;
- }
- pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
- /* VOS message wrapper */
- vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
- vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
- vosMsg.bodyval = 0;
- /* Send message to SME */
- if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
- {
- /* free the mem and return */
- vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
- }
- break;
- }
-#endif // FEATURE_WLAN_SCAN_PNO
-
-#ifdef WLAN_WAKEUP_EVENTS
- case WDI_WAKE_REASON_IND:
- {
- vos_msg_t vosMsg;
- tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
- + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
- tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
- wdiLowLevelInd->wdiIndicationType,
- wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
- wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
- wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
-
- if (NULL == pWakeReasonInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Memory allocation failure, "
- "WDI_WAKE_REASON_IND not forwarded");
- break;
- }
-
- vos_mem_zero(pWakeReasonInd, allocSize);
-
- /* Message Header */
- pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
- pWakeReasonInd->mesgLen = allocSize;
-
- /* Info from WDI Indication */
- // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
- pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
- pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
- pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
- pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
- vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
- &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
- wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
-
- /* VOS message wrapper */
- vosMsg.type = eWNI_SME_WAKE_REASON_IND;
- vosMsg.bodyptr = (void *) pWakeReasonInd;
- vosMsg.bodyval = 0;
-
- /* Send message to SME */
- if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
- {
- /* free the mem and return */
- vos_mem_free((v_VOID_t *) pWakeReasonInd);
- }
-
- break;
- }
-#endif // WLAN_WAKEUP_EVENTS
-
- case WDI_TX_PER_HIT_IND:
- {
- vos_msg_t vosMsg;
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
- /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
- /* VOS message wrapper */
- vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
- vosMsg.bodyptr = NULL;
- vosMsg.bodyval = 0;
- /* Send message to SME */
- if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
- }
- break;
- }
-#ifdef FEATURE_WLAN_LPHB
- case WDI_LPHB_IND:
- {
- vos_msg_t vosMsg;
- tSirLPHBInd *lphbInd;
-
- lphbInd =
- (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
- if (NULL == lphbInd)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: LPHB IND buffer alloc Fail", __func__);
- return ;
- }
-
- lphbInd->sessionIdx =
- wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
- lphbInd->protocolType =
- wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
- lphbInd->eventReason =
- wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
-
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Get WDI_LPHB_IND bssIdx %d",
- wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
-
- vosMsg.type = eWNI_SME_LPHB_IND;
- vosMsg.bodyptr = lphbInd;
- vosMsg.bodyval = 0;
- /* Send message to SME */
- if (VOS_STATUS_SUCCESS !=
- vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
- "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
- vos_mem_free(lphbInd);
- }
- break;
- }
-#endif /* FEATURE_WLAN_LPHB */
- case WDI_PERIODIC_TX_PTRN_FW_IND:
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
- "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
- (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
- (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
- (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
- (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
-
- break;
- }
-
- case WDI_IBSS_PEER_INACTIVITY_IND:
- {
- tSirIbssPeerInactivityInd *pIbssInd =
- (tSirIbssPeerInactivityInd *)
- vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
-
- if (NULL == pIbssInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Memory allocation failure, "
- "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
- break;
- }
-
- pIbssInd->bssIdx =
- wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
- pIbssInd->staIdx =
- wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
- vos_mem_copy(pIbssInd->peerAddr,
- wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
- sizeof(tSirMacAddr));
- WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
- break;
- }
-
-#ifdef FEATURE_WLAN_BATCH_SCAN
- case WDI_BATCH_SCAN_RESULT_IND:
- {
- void *pBatchScanResult;
- void *pCallbackContext;
- tpAniSirGlobal pMac;
-
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
- "Received WDI_BATCHSCAN_RESULT_IND from FW");
-
- /*sanity check*/
- if(NULL == pWDA)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pWDA is NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pBatchScanResult =
- (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
- if (NULL == pBatchScanResult)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:Batch scan result from FW is null can't invoke HDD callback",
- __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
- if (NULL == pMac)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pMac is NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
- /*call hdd callback with set batch scan response data*/
- if(pMac->pmc.batchScanResultCallback)
- {
- pMac->pmc.batchScanResultCallback(pCallbackContext,
- pBatchScanResult);
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:HDD callback is null", __func__);
- VOS_ASSERT(0);
- }
- break;
- }
-#endif
-
- default:
- {
- /* TODO error */
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Received UNKNOWN Indication from WDI ");
- }
- }
- return ;
-}
-
-/*
- * BA related processing in WDA.
- */
-void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
- {
- tANI_U8 i = 0 ;
- tBaActivityInd *baActivityInd = NULL ;
- tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
- tANI_U8 allocSize = sizeof(tBaActivityInd)
- + sizeof(tAddBaCandidate) * (baCandidateCount) ;
- WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
- tAddBaCandidate *baCandidate = NULL ;
- baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
- if(NULL == baActivityInd)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0) ;
- return;
- }
- vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
- sizeof(tSirMacAddr)) ;
- baActivityInd->baCandidateCnt = baCandidateCount ;
-
- wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
- baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
-
- for(i = 0 ; i < baCandidateCount ; i++)
- {
- tANI_U8 tid = 0 ;
- vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
- sizeof(tSirMacAddr)) ;
- for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
- {
- baCandidate->baInfo[tid].fBaEnable =
- wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
- baCandidate->baInfo[tid].startingSeqNum =
- wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
- }
- wdiBaCandidate++ ;
- baCandidate++ ;
- }
- WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "BA Trigger RSP with Failure received ");
- }
- return ;
-}
-
-
-/*
- * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
- * during MCC
- */
-void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
-{
- wpt_uint32 enabled;
- v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
- tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
-
- if (NULL == pMac )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid MAC context ", __func__ );
- VOS_ASSERT(0);
- return;
- }
-
- if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
- != eSIR_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
- return;
- }
-
- if(!enabled)
- {
- return;
- }
-
- if(NULL == pWDA)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:WDA context is NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(activate)
- {
- if( VOS_STATUS_SUCCESS !=
- WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Traffic Stats Timer Start Failed ");
- return;
- }
- WDI_DS_ActivateTrafficStats();
- }
- else
- {
- WDI_DS_DeactivateTrafficStats();
- WDI_DS_ClearTrafficStats();
-
- if( VOS_STATUS_SUCCESS !=
- WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Traffic Stats Timer Stop Failed ");
- return;
- }
- }
-}
-
-/*
- * Traffic Stats Timer handler
- */
-void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
-{
- WDI_Status wdiStatus;
- WDI_TrafficStatsType *pWdiTrafficStats = NULL;
- WDI_TrafficStatsIndType trafficStatsIndParams;
- wpt_uint32 length, enabled;
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
-
- if (NULL == pMac )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid MAC context ", __func__ );
- VOS_ASSERT(0);
- return;
- }
-
- if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
- return;
- }
-
- if(!enabled)
- {
- WDI_DS_DeactivateTrafficStats();
- return;
- }
-
- WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
-
- if(pWdiTrafficStats != NULL)
- {
- trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
- trafficStatsIndParams.length = length;
- trafficStatsIndParams.duration =
- pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
- trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
- trafficStatsIndParams.pUserData = pWDA;
-
- wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
-
- if(WDI_STATUS_PENDING == wdiStatus)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Pending received for %s:%d ",__func__,__LINE__ );
- }
- else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in %s:%d ",__func__,__LINE__ );
- }
-
- WDI_DS_ClearTrafficStats();
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
- "pWdiTrafficStats is Null");
- }
-
- if( VOS_STATUS_SUCCESS !=
- WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
- "Traffic Stats Timer Start Failed ");
- return;
- }
-}
-
-/*
- * BA Activity check timer handler
- */
-void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
-{
- tANI_U8 curSta = 0 ;
- tANI_U8 tid = 0 ;
- tANI_U8 size = 0 ;
- tANI_U8 baCandidateCount = 0 ;
- tANI_U8 newBaCandidate = 0 ;
- WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
-
- if(NULL == pWDA)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:pWDA is NULL", __func__);
- VOS_ASSERT(0);
- return ;
- }
- if(WDA_MAX_STA < pWDA->wdaMaxSta)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Inconsistent STA entries in WDA");
- VOS_ASSERT(0) ;
- }
- /* walk through all STA entries and find out TX packet count */
- for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
- {
-#ifdef WLAN_SOFTAP_VSTA_FEATURE
- // We can only do BA on "hard" STAs.
- if (!(IS_HWSTA_IDX(curSta)))
- {
- continue;
- }
-#endif //WLAN_SOFTAP_VSTA_FEATURE
- for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
- {
- WLANTL_STAStateType tlSTAState ;
- tANI_U32 txPktCount = 0 ;
- tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
- if((WDA_VALID_STA_INDEX == validStaIndex) &&
- (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
- curSta, &tlSTAState)) &&
- (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
- curSta, tid, &txPktCount)))
- {
-#if 0
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
- "************* %d:%d, %d ",curSta, txPktCount,
- pWDA->wdaStaInfo[curSta].framesTxed[tid]);
-#endif
- if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
- && (WLANTL_STA_AUTHENTICATED == tlSTAState)
- && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
- curSta, tid)))
- {
- /* get prepare for sending message to HAL */
- //baCandidate[baCandidateCount].staIdx = curSta ;
- baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
- newBaCandidate = WDA_ENABLE_BA ;
- }
- pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
- }
- }
- /* fill the entry for all the sta with given TID's */
- if(WDA_ENABLE_BA == newBaCandidate)
- {
- /* move to next BA candidate */
- baCandidate[baCandidateCount].ucSTAIdx = curSta ;
- size += sizeof(WDI_TriggerBAReqCandidateType) ;
- baCandidateCount++ ;
- newBaCandidate = WDA_DISABLE_BA ;
- }
- }
- /* prepare and send message to hal */
- if( 0 < baCandidateCount)
- {
- WDI_Status status = WDI_STATUS_SUCCESS ;
- WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
- tWDA_ReqParams *pWdaParams =
- (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0) ;
- return;
- }
- wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
- vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
- if(NULL == wdiTriggerBaReq)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0) ;
- vos_mem_free(pWdaParams);
- return;
- }
- do
- {
- WDI_TriggerBAReqinfoType *triggerBaInfo =
- &wdiTriggerBaReq->wdiTriggerBAInfoType ;
- triggerBaInfo->usBACandidateCnt = baCandidateCount ;
- /* TEMP_FIX: Need to see if WDI need check for assoc session for
- * for each request */
- triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
- triggerBaInfo->ucBASessionID = 0;
- vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
- } while(0) ;
- wdiTriggerBaReq->wdiReqStatusCB = NULL ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
- pWdaParams->wdaMsgParam = NULL;
- status = WDI_TriggerBAReq(wdiTriggerBaReq,
- WDA_TriggerBaReqCallback, pWdaParams) ;
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Trigger BA REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
- "There is no TID for initiating BA");
- }
- if( VOS_STATUS_SUCCESS !=
- WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "BA Activity Timer Stop Failed ");
- return ;
- }
- if( VOS_STATUS_SUCCESS !=
- WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "BA Activity Timer Start Failed ");
- return;
- }
- return ;
-}
-/*
- * WDA common routine to create timer used by WDA.
- */
-static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS ;
- tANI_U32 val = 0 ;
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
-
- if(NULL == pMac)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:MAC context is NULL", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
- != eSIR_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
- return VOS_STATUS_E_FAILURE;
- }
- val = SYS_MS_TO_TICKS(val) ;
-
- /* BA activity check timer */
- status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
- "BA Activity Check timer", WDA_TimerHandler,
- WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
- if(status != TX_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to create BA activity timer");
- return VOS_STATUS_E_FAILURE ;
- }
- val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
- /* Tx Complete Timeout timer */
- status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
- "Tx Complete Check timer", WDA_TimerHandler,
- WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
- if(status != TX_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to create Tx Complete Timeout timer");
- /* Destroy timer of BA activity check timer */
- status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
- if(status != TX_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to Destroy BA activity timer");
- return VOS_STATUS_E_FAILURE ;
- }
- return VOS_STATUS_E_FAILURE ;
- }
-
- val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
-
- /* Traffic Stats timer */
- status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
- "Traffic Stats timer", WDA_TimerHandler,
- WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
- if(status != TX_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to create traffic stats timer");
- /* Destroy timer of BA activity check timer */
- status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
- if(status != TX_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to Destroy BA activity timer");
- }
- /* Destroy timer of tx complete timer */
- status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
- if(status != TX_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to Tx complete timer");
- }
- return VOS_STATUS_E_FAILURE ;
- }
- return VOS_STATUS_SUCCESS ;
-}
-/*
- * WDA common routine to destroy timer used by WDA.
- */
-static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS ;
- status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
- if(status != TX_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to Destroy Tx Complete Timeout timer");
- return eSIR_FAILURE ;
- }
- status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
- if(status != TX_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to Destroy BA activity timer");
- return eSIR_FAILURE ;
- }
- status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
- if(status != TX_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Unable to Destroy traffic stats timer");
- return eSIR_FAILURE ;
- }
- return eSIR_SUCCESS ;
-}
-/*
- * WDA timer handler.
- */
-void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
-{
- VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
- vos_msg_t wdaMsg = {0} ;
- /*
- * trigger CFG download in WDA by sending WDA_CFG_DNLD message
- */
- wdaMsg.type = timerInfo ;
- wdaMsg.bodyptr = NULL;
- wdaMsg.bodyval = 0;
- /* post the message.. */
- vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
- if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
- {
- vosStatus = VOS_STATUS_E_BADMSG;
- }
-}
-/*
- * WDA Tx Complete timeout Indication.
- */
-void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
-{
- tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
- if( pWDA->pAckTxCbFunc )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "TxComplete timer expired");
- pWDA->pAckTxCbFunc( pMac, 0);
- pWDA->pAckTxCbFunc = NULL;
- }
- else
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "There is no request pending for TxComplete and wait timer expired");
- }
-}
-/*
- * WDA Set REG Domain to VOS NV
- */
-eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
- tAniBool sendRegHint)
-{
- if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
- {
- return eHAL_STATUS_INVALID_PARAMETER;
- }
- return eHAL_STATUS_SUCCESS;
-}
-
-#ifdef FEATURE_WLAN_SCAN_PNO
-/*
- * FUNCTION: WDA_PNOScanRespCallback
- *
- */
-void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
-
- return ;
-}
-/*
- * FUNCTION: WDA_PNOScanReqCallback
- * Free memory.
- * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_UpdateScanParamsRespCallback
- *
- */
-void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
-
- return ;
-}
-/*
- * FUNCTION: WDA_UpdateScanParamsReqCallback
- * Free memory.
- * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessSetPreferredNetworkList
- * Request to WDI to set Preferred Network List.Offload
- */
-VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
- tSirPNOScanReq *pPNOScanReqParams)
-{
- WDI_Status status;
- WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
- (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- v_U8_t i;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == pwdiPNOScanReqInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pwdiPNOScanReqInfo);
- return VOS_STATUS_E_NOMEM;
- }
- //
- // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
- //
- pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
- pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
- pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
- ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
- pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
- for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
- {
- vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
- &pPNOScanReqParams->aNetworks[i],
- sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
- }
- /*Scan timer intervals*/
- vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
- &pPNOScanReqParams->scanTimers,
- sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
- /*Probe template for 2.4GHz band*/
- pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
- (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
- pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
- vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
- pPNOScanReqParams->p24GProbeTemplate,
- pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
- /*Probe template for 5GHz band*/
- pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
- (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
- pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
- vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
- pPNOScanReqParams->p5GProbeTemplate,
- pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
- pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
- pwdiPNOScanReqInfo->pUserData = pWdaParams;
-
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pPNOScanReqParams;
- status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
- (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set PNO REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- pWdaParams->wdaWdiApiMsgParam = NULL;
- pWdaParams->wdaMsgParam = NULL;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
-
-void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
-{
- /*Convert the CSR Auth types to WDI Auth types */
- switch (csrAuthType)
- {
- case eCSR_AUTH_TYPE_OPEN_SYSTEM:
- *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
- break;
-#ifdef FEATURE_WLAN_ESE
- case eCSR_AUTH_TYPE_CCKM_WPA:
- *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
- break;
-#endif
- case eCSR_AUTH_TYPE_WPA:
- *AuthType = eWDA_AUTH_TYPE_WPA;
- break;
- case eCSR_AUTH_TYPE_WPA_PSK:
- *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
- break;
-#ifdef FEATURE_WLAN_ESE
- case eCSR_AUTH_TYPE_CCKM_RSN:
- *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
- break;
-#endif
- case eCSR_AUTH_TYPE_RSN:
- *AuthType = eWDA_AUTH_TYPE_RSN;
- break;
- case eCSR_AUTH_TYPE_RSN_PSK:
- *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
- break;
-#if defined WLAN_FEATURE_VOWIFI_11R
- case eCSR_AUTH_TYPE_FT_RSN:
- *AuthType = eWDA_AUTH_TYPE_FT_RSN;
- break;
- case eCSR_AUTH_TYPE_FT_RSN_PSK:
- *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
- break;
-#endif
-#ifdef FEATURE_WLAN_WAPI
- case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
- *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
- break;
- case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
- *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
- break;
-#endif /* FEATURE_WLAN_WAPI */
- case eCSR_AUTH_TYPE_SHARED_KEY:
- case eCSR_AUTH_TYPE_AUTOSWITCH:
- *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
- break;
-#if 0
- case eCSR_AUTH_TYPE_SHARED_KEY:
- *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
- break;
- case eCSR_AUTH_TYPE_AUTOSWITCH:
- *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
-#endif
- default:
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Unknown Auth Type", __func__);
- break;
- }
-}
-void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
-{
- switch (csrEncrType)
- {
- case eCSR_ENCRYPT_TYPE_NONE:
- *EncrType = WDI_ED_NONE;
- break;
- case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
- case eCSR_ENCRYPT_TYPE_WEP40:
- *EncrType = WDI_ED_WEP40;
- break;
- case eCSR_ENCRYPT_TYPE_WEP104:
- case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
- *EncrType = WDI_ED_WEP104;
- break;
- case eCSR_ENCRYPT_TYPE_TKIP:
- *EncrType = WDI_ED_TKIP;
- break;
- case eCSR_ENCRYPT_TYPE_AES:
- *EncrType = WDI_ED_CCMP;
- break;
-#ifdef WLAN_FEATURE_11W
- case eCSR_ENCRYPT_TYPE_AES_CMAC:
- *EncrType = WDI_ED_AES_128_CMAC;
- break;
-#endif
-#ifdef FEATURE_WLAN_WAPI
- case eCSR_ENCRYPT_TYPE_WPI:
- *EncrType = WDI_ED_WPI;
- break;
-#endif
- case eCSR_ENCRYPT_TYPE_ANY:
- *EncrType = WDI_ED_ANY;
- break;
-
- default:
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Unknown Encryption Type", __func__);
- break;
- }
-}
-
-/*
- * FUNCTION: WDA_ProcessRoamScanOffloadReq
- * Request to WDI to set Roam Offload Scan
- */
-VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
- tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
-{
- WDI_Status status;
- WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
- (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
- tWDA_ReqParams *pWdaParams ;
- v_U8_t csrAuthType;
- WDI_RoamNetworkType *pwdiRoamNetworkType;
- WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if (NULL == pwdiRoamScanOffloadReqParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if (NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pwdiRoamScanOffloadReqParams);
- return VOS_STATUS_E_NOMEM;
- }
-
- pwdiRoamNetworkType =
- &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
- pwdiRoamOffloadScanInfo =
- &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
- vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
- csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
- pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
- pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
- vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
- pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
- sizeof(pwdiRoamNetworkType->currAPbssid));
- WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
- csrAuthType);
- WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
- pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
- WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
- pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
- pwdiRoamOffloadScanInfo->LookupThreshold =
- pRoamOffloadScanReqParams->LookupThreshold ;
- pwdiRoamOffloadScanInfo->RoamRssiDiff =
- pRoamOffloadScanReqParams->RoamRssiDiff ;
- pwdiRoamOffloadScanInfo->MAWCEnabled =
- pRoamOffloadScanReqParams->MAWCEnabled ;
- pwdiRoamOffloadScanInfo->Command =
- pRoamOffloadScanReqParams->Command ;
- pwdiRoamOffloadScanInfo->StartScanReason =
- pRoamOffloadScanReqParams->StartScanReason ;
- pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
- pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
- pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
- pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
- pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
- pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
- pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
- pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
- pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
- pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
- pwdiRoamOffloadScanInfo->IsESEEnabled =
- pRoamOffloadScanReqParams->IsESEEnabled ;
- vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
- &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
- pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
- pwdiRoamNetworkType->ssId.ucLength =
- pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
- vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
- pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
- pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
- pwdiRoamNetworkType->ChannelCount =
- pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
- pwdiRoamOffloadScanInfo->ChannelCacheType =
- pRoamOffloadScanReqParams->ChannelCacheType;
- vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
- pRoamOffloadScanReqParams->ValidChannelList,
- pRoamOffloadScanReqParams->ValidChannelCount);
- pwdiRoamOffloadScanInfo->ValidChannelCount =
- pRoamOffloadScanReqParams->ValidChannelCount;
- pwdiRoamOffloadScanInfo->us24GProbeSize =
- (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
- pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
- vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
- pRoamOffloadScanReqParams->p24GProbeTemplate,
- pwdiRoamOffloadScanInfo->us24GProbeSize);
- pwdiRoamOffloadScanInfo->us5GProbeSize =
- (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
- pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
- vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
- pRoamOffloadScanReqParams->p5GProbeTemplate,
- pwdiRoamOffloadScanInfo->us5GProbeSize);
- pwdiRoamOffloadScanInfo->MDID.mdiePresent =
- pRoamOffloadScanReqParams->MDID.mdiePresent;
- pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
- pRoamOffloadScanReqParams->MDID.mobilityDomain;
- pwdiRoamOffloadScanInfo->nProbes =
- pRoamOffloadScanReqParams->nProbes;
- pwdiRoamOffloadScanInfo->HomeAwayTime =
- pRoamOffloadScanReqParams->HomeAwayTime;
- pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
- status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
- (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- pWdaParams->wdaWdiApiMsgParam = NULL;
- pWdaParams->wdaMsgParam = NULL;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#endif
-
-/*
- * FUNCTION: WDA_RssiFilterRespCallback
- *
- */
-void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- return ;
-}
-/*
- * FUNCTION: WDA_RssiFilterReqCallback
- * Free memory.
- * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessSetPreferredNetworkList
- * Request to WDI to set Preferred Network List.Offload
- */
-VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
- tSirSetRSSIFilterReq* pRssiFilterParams)
-{
- WDI_Status status;
- WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
- (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == pwdiSetRssiFilterReqInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pwdiSetRssiFilterReqInfo);
- return VOS_STATUS_E_NOMEM;
- }
- pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
- pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
- pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
-
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pRssiFilterParams;
- status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
- (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- pWdaParams->wdaWdiApiMsgParam = NULL;
- pWdaParams->wdaMsgParam = NULL;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-/*
- * FUNCTION: WDA_ProcessUpdateScanParams
- * Request to WDI to update Scan Parameters
- */
-VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
- tSirUpdateScanParams *pUpdateScanParams)
-{
- WDI_Status status;
- WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
- (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
- sizeof(WDI_UpdateScanParamsInfoType)) ;
- tWDA_ReqParams *pWdaParams ;
- v_U8_t i;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == wdiUpdateScanParamsInfoType)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if ( NULL == pWdaParams )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiUpdateScanParamsInfoType);
- return VOS_STATUS_E_NOMEM;
- }
- //
- // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
- //
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Update Scan Parameters b11dEnabled %d b11dResolved %d "
- "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
- " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
- "sir struct %zu wdi struct %zu",
- pUpdateScanParams->b11dEnabled,
- pUpdateScanParams->b11dResolved,
- pUpdateScanParams->ucChannelCount,
- pUpdateScanParams->usPassiveMinChTime,
- pUpdateScanParams->usPassiveMaxChTime,
- pUpdateScanParams->usActiveMinChTime,
- pUpdateScanParams->usActiveMaxChTime,
- sizeof(tSirUpdateScanParams),
- sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
-
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
- pUpdateScanParams->b11dEnabled;
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
- pUpdateScanParams->b11dResolved;
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
- pUpdateScanParams->ucCBState;
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
- pUpdateScanParams->usActiveMaxChTime;
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
- pUpdateScanParams->usActiveMinChTime;
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
- pUpdateScanParams->usPassiveMaxChTime;
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
- pUpdateScanParams->usPassiveMinChTime;
-
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
- (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
- pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
-
- for ( i = 0; i <
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
- i++)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Update Scan Parameters channel: %d",
- pUpdateScanParams->aChannels[i]);
-
- wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
- pUpdateScanParams->aChannels[i];
- }
-
- wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
- wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
-
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pUpdateScanParams;
-
-
-
- status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
- (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Update Scan Params EQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#endif // FEATURE_WLAN_SCAN_PNO
-
-#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
-/*
- * FUNCTION: WDA_RoamOffloadScanReqCallback
- *
- */
-void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- vos_msg_t vosMsg;
- wpt_uint8 reason = 0;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if (NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
- if ( pWdaParams != NULL )
- {
- if ( pWdaParams->wdaWdiApiMsgParam != NULL )
- {
- reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- }
- if ( pWdaParams->wdaMsgParam != NULL)
- {
- vos_mem_free(pWdaParams->wdaMsgParam);
- }
-
- vos_mem_free(pWdaParams) ;
- }
- vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
- vosMsg.bodyptr = NULL;
- if (WDI_STATUS_SUCCESS != status)
- {
- reason = 0;
- }
- vosMsg.bodyval = reason;
- if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
- {
- /* free the mem and return */
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s: Failed to post the rsp to UMAC", __func__);
- }
-
- return ;
-}
-#endif
-
-/*
- * FUNCTION: WDA_SetPowerParamsRespCallback
- *
- */
-void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
-
- return;
-}
-/*
- * FUNCTION: WDA_SetPowerParamsReqCallback
- * Free memory.
- * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-
-#ifdef WLAN_FEATURE_PACKET_FILTERING
-/*
- * FUNCTION: WDA_8023MulticastListRespCallback
- *
- */
-void WDA_8023MulticastListRespCallback(
- WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
- void * pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- //print a msg, nothing else to do
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_8023MulticastListRespCallback invoked " );
- return ;
-}
-/*
- * FUNCTION: WDA_8023MulticastListReqCallback
- * Free memory.
- * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_Process8023MulticastListReq
- * Request to WDI to add 8023 Multicast List
- */
-VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
- tSirRcvFltMcAddrList *pRcvFltMcAddrList)
-{
- WDI_Status status;
- WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
- tWDA_ReqParams *pWdaParams ;
- tANI_U8 i;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- pwdiFltPktSetMcListReqParamsType =
- (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
- sizeof(WDI_RcvFltPktSetMcListReqParamsType)
- ) ;
- if(NULL == pwdiFltPktSetMcListReqParamsType)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- vos_mem_free(pwdiFltPktSetMcListReqParamsType);
- return VOS_STATUS_E_NOMEM;
- }
-
- //
- // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
- //
- pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
- pRcvFltMcAddrList->ulMulticastAddrCnt;
-
- vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
- pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
- vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
- pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
-
- for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
- {
- vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
- &(pRcvFltMcAddrList->multicastAddr[i]),
- sizeof(tSirMacAddr));
- }
- pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
- pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
-
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
- status = WDI_8023MulticastListReq(
- pwdiFltPktSetMcListReqParamsType,
- (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
- *
- */
-void WDA_ReceiveFilterSetFilterRespCallback(
- WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
- void * pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- //print a msg, nothing else to do
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_ReceiveFilterSetFilterRespCallback invoked " );
- return ;
-}
-
-/*
- * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
- * Free memory.
- * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
- void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d",
- __func__, wdiStatus);
-
- if (NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid pWdaParams pointer", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if (IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-
-/*
- * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
- * Request to WDI to set Receive Filters
- */
-VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
- tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
-{
- WDI_Status status;
- v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
- ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
- WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
- (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
- tWDA_ReqParams *pWdaParams ;
- tANI_U8 i;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == pwdiSetRcvPktFilterReqParamsType)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
- return VOS_STATUS_E_NOMEM;
- }
- pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
- pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
- pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
- pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
- vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
- pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
-
- vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
- pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "FID %d FT %d NParams %d CT %d",
- pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
- pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
- pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
- pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
- for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
- {
- wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
- &pRcvPktFilterCfg->paramsData[i],
- sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Proto %d Comp Flag %d",
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].protocolLayer,
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].cmpFlag);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Data Offset %d Data Len %d",
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].dataOffset,
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].dataLength);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "CData: %d:%d:%d:%d:%d:%d",
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].compareData[0],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].compareData[1],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].compareData[2],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].compareData[3],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].compareData[4],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].compareData[5]);
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "MData: %d:%d:%d:%d:%d:%d",
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].dataMask[0],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].dataMask[1],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].dataMask[2],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].dataMask[3],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].dataMask[4],
- pwdiSetRcvPktFilterReqParamsType->
- wdiPktFilterCfg.paramsData[i].dataMask[5]);
- }
- pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
- pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
- status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
- (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in SetFilter(),free all the memory,status %d ",status);
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_FilterMatchCountRespCallback
- *
- */
-void WDA_FilterMatchCountRespCallback(
- WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
- void * pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- tWDA_CbContext *pWDA;
- tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
- tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
- vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
- tANI_U8 i;
- vos_msg_t vosMsg;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
-
- if(NULL == pRcvFltPktMatchCntRsp)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
- VOS_ASSERT(0) ;
- vos_mem_free(pWdaParams);
- return ;
- }
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- vos_mem_free(pRcvFltPktMatchCntRsp);
- return ;
- }
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
- pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
- // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
- vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
-
- /* Message Header */
- pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
- pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
-
- pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
-
- for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
- {
- pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
- pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
- }
- /* VOS message wrapper */
- vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
- vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
- vosMsg.bodyval = 0;
- if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
- {
- /* free the mem and return */
- vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
- }
-
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
-
- return;
-}
-/*
- * FUNCTION: WDA_FilterMatchCountReqCallback
- * Free memory and send RSP back to SME.
- * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- vos_msg_t vosMsg;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- /* VOS message wrapper */
- vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
- vosMsg.bodyptr = NULL;
- vosMsg.bodyval = 0;
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
- * Request to WDI to get PC Filter Match Count
- */
-VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
-{
- WDI_Status status;
- WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
- (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
- return VOS_STATUS_E_NOMEM;
- }
-
- pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
- pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
-
- vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
- pRcvFltPktMatchRsp->bssId,
- sizeof(wpt_macAddr));
-
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
- status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
- (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- /* failure returned by WDI API */
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in WDI_FilterMatchCountReq(), free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
- WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-/*
- * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
- *
- */
-void WDA_ReceiveFilterClearFilterRespCallback(
- WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
- void * pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-/* WDA_VOS_ASSERT(NULL != pWdaParams); */
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- //print a msg, nothing else to do
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "WDA_ReceiveFilterClearFilterRespCallback invoked " );
- return ;
-}
-/*
- * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
- * Free memory.
- * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
- */
-void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s, wdiStatus: %d", __func__, wdiStatus);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid pWdaParams pointer", __func__);
- VOS_ASSERT(0);
- return;
- }
-
- if(IS_WDI_STATUS_FAILURE(wdiStatus))
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return;
-}
-/*
- * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
- * Request to WDI to clear Receive Filters
- */
-VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
- tSirRcvFltPktClearParam *pRcvFltPktClearParam)
-{
- WDI_Status status;
- WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
- (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == pwdiRcvFltPktClearReqParamsType)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pwdiRcvFltPktClearReqParamsType);
- return VOS_STATUS_E_NOMEM;
- }
- pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
- pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
- vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
- pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
- vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
- pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
-
- pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
- pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
- status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
- (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#endif // WLAN_FEATURE_PACKET_FILTERING
-
-/*
- * FUNCTION: WDA_ProcessSetPowerParamsReq
- * Request to WDI to set power params
- */
-VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
- tSirSetPowerParamsReq *pPowerParams)
-{
- WDI_Status status;
- WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
- (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
- tWDA_ReqParams *pWdaParams ;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if(NULL == pwdiSetPowerParamsReqInfo)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pwdiSetPowerParamsReqInfo);
- return VOS_STATUS_E_NOMEM;
- }
-
-
- pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
- pPowerParams->uIgnoreDTIM;
- pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
- pPowerParams->uDTIMPeriod;
- pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
- pPowerParams->uListenInterval;
- pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
- pPowerParams->uBcastMcastFilter;
- pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
- pPowerParams->uEnableBET;
- pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
- pPowerParams->uBETInterval;
- pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
- pPowerParams->uMaxLIModulatedDTIM;
- pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
- pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
-
- /* Store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
- pWdaParams->pWdaContext = pWDA;
- /* Store param pointer as passed in by caller */
- pWdaParams->wdaMsgParam = pPowerParams;
- status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
- (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
- pWdaParams);
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in Set power params REQ WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- pWdaParams->wdaWdiApiMsgParam = NULL;
- pWdaParams->wdaMsgParam = NULL;
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-/*
- * FUNCTION: WDA_SetTmLevelRspCallback
- * Set TM Level response
- */
-void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
-
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- /* Dose not need to send notification to upper layer
- * Just free allocated resources */
- if( pWdaParams != NULL )
- {
- if( pWdaParams->wdaWdiApiMsgParam != NULL )
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- }
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams) ;
- }
-}
-
-/*
- * FUNCTION: WDA_ProcessSetTmLevelReq
- * Set TM Level request
- */
-VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
- tAniSetTmLevelReq *setTmLevelReq)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- tWDA_ReqParams *pWdaParams ;
- WDI_SetTmLevelReqType *wdiSetTmLevelReq =
- (WDI_SetTmLevelReqType *)vos_mem_malloc(
- sizeof(WDI_SetTmLevelReqType)) ;
- if(NULL == wdiSetTmLevelReq)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiSetTmLevelReq);
- return VOS_STATUS_E_NOMEM;
- }
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
-
- wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
- wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
-
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = setTmLevelReq;
- pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
-
- status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
- (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure setting thermal mitigation level, freeing memory" );
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- }
-
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-
-VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
- tpTxControlParams pTxCtrlParam)
-{
- VOS_STATUS wdaStatus;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
- if( pTxCtrlParam == NULL )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Input tpTxControlParams is NULL", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
- {
- wdaStatus = WDA_SuspendDataTx(pWDA);
- }
- else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
- {
- wdaStatus = WDA_ResumeDataTx(pWDA);
- }
- return wdaStatus;
-}
-
- /* FUNCTION WDA_featureCapsExchange
- * WDA API to invoke capability exchange between host and FW.
- */
-void WDA_featureCapsExchange(v_PVOID_t pVosContext)
-{
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s:enter", __func__ );
- WDI_featureCapsExchangeReq( NULL, pVosContext);
-}
-
-/* FUNCTION WDA_disableCapablityFeature
- * WDA API to diable Active mode offload in host.
- */
-void WDA_disableCapablityFeature(tANI_U8 feature_index)
-{
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "%s:enter", __func__ );
- WDI_disableCapablityFeature(feature_index);
-}
-
- /* FUNCTION WDA_getHostWlanFeatCaps
- * Wrapper for WDI API, that will return if the feature (enum value).passed
- * to this API is supported or not in Host
- * return value
- * 0 - implies feature is NOT Supported
- * any non zero value - implies feature is SUPPORTED
- */
-tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
-{
- return WDI_getHostWlanFeatCaps(featEnumValue);
-}
-
- /* FUNCTION WDA_getFwWlanFeatCaps
- * Wrapper for WDI API, that will return if the feature (enum value).passed
- * to this API is supported or not in FW
- * return value
- * 0 - implies feature is NOT Supported
- * any non zero value - implies feature is SUPPORTED
- */
-tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
-{
- return WDI_getFwWlanFeatCaps(featEnumValue);
-}
-
-
-/*
- * FUNCTION: WDA_shutdown
- * Shutdown WDA/WDI without handshaking with Riva.
- * Synchronous function.
- */
-VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
-{
- WDI_Status wdiStatus;
- //tANI_U8 eventIdx = 0;
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
- if (NULL == pWDA)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: Invoked with invalid pWDA", __func__ );
- VOS_ASSERT(0);
- return VOS_STATUS_E_FAILURE;
- }
- /* FTM mode stay START_STATE */
- if( (WDA_READY_STATE != pWDA->wdaState) &&
- (WDA_INIT_STATE != pWDA->wdaState) &&
- (WDA_START_STATE != pWDA->wdaState) )
- {
- VOS_ASSERT(0);
- }
-
- if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
- (VOS_TRUE == pWDA->wdaTimersCreated))
- {
- wdaDestroyTimers(pWDA);
- pWDA->wdaTimersCreated = VOS_FALSE;
- }
- else
- {
- vos_event_destroy(&pWDA->ftmStopDoneEvent);
- }
-
- /* call WDI shutdown */
- wdiStatus = WDI_Shutdown(closeTransport);
- if (IS_WDI_STATUS_FAILURE(wdiStatus) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "error in WDA Stop" );
- status = VOS_STATUS_E_FAILURE;
- }
- /* WDI stop is synchrnous, shutdown is complete when it returns */
- pWDA->wdaState = WDA_STOP_STATE;
-
- /* shutdown should perform the stop & close actions. */
- /* Destroy the event */
- status = vos_event_destroy(&pWDA->txFrameEvent);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS Event destroy failed - status = %d", status);
- status = VOS_STATUS_E_FAILURE;
- }
- status = vos_event_destroy(&pWDA->suspendDataTxEvent);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS Event destroy failed - status = %d", status);
- status = VOS_STATUS_E_FAILURE;
- }
- status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "VOS Event destroy failed - status = %d", status);
- status = VOS_STATUS_E_FAILURE;
- }
- /* free WDA context */
- status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
- if ( !VOS_IS_STATUS_SUCCESS(status) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "error in WDA close " );
- status = VOS_STATUS_E_FAILURE;
- }
- return status;
-}
-
-/*
- * FUNCTION: WDA_setNeedShutdown
- * WDA stop failed or WDA NVDownload failed
- */
-
-void WDA_setNeedShutdown(v_PVOID_t pVosContext)
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
- if(pWDA == NULL)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Could not get the WDA Context pointer" );
- return;
- }
- pWDA->needShutdown = TRUE;
-}
-/*
- * FUNCTION: WDA_needShutdown
- * WDA needs a shutdown
- */
-
-v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
-{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
- if(pWDA == NULL)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Could not get the WDA Context pointer" );
- return 0;
- }
- return pWDA->needShutdown;
-}
-
-#ifdef WLAN_FEATURE_11AC
-/*
- * FUNCTION: WDA_SetBeaconFilterReqCallback
- *
- */
-void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- vos_mem_free(pWdaParams) ;
- /*
- * No respone required for SetBeaconFilter req so just free the request
- * param here
- */
-
- return ;
-}
-
-VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
- tUpdateVHTOpMode *pData)
-{
- WDI_Status status = WDI_STATUS_SUCCESS ;
- tWDA_ReqParams *pWdaParams ;
- WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
- sizeof(WDI_UpdateVHTOpMode)) ;
- if(NULL == wdiTemp)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- return VOS_STATUS_E_NOMEM;
- }
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if(NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(wdiTemp);
- return VOS_STATUS_E_NOMEM;
- }
-
- wdiTemp->opMode = pData->opMode;
- wdiTemp->staId = pData->staId;
-
- pWdaParams->pWdaContext = pWDA;
- /* Store Req pointer, as this will be used for response */
- pWdaParams->wdaMsgParam = (void *)pData;
- /* store Params pass it to WDI */
- pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
-
- status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
-
- if(IS_WDI_STATUS_FAILURE(status))
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
- return CONVERT_WDI2VOS_STATUS(status) ;
-}
-#endif
-
-/*==========================================================================
- FUNCTION WDA_TransportChannelDebug
-
- DESCRIPTION
- Display Transport Channel debugging information
- User may request to display DXE channel snapshot
- Or if host driver detects any abnormal stcuk may display
-
- PARAMETERS
- pMac : upper MAC context pointer
- displaySnapshot : Display DXE snapshot option
- enableStallDetect : Enable stall detect feature
- This feature will take effect to data performance
- Not integrate till fully verification
-
- RETURN VALUE
- NONE
-
-===========================================================================*/
-void WDA_TransportChannelDebug
-(
- tpAniSirGlobal pMac,
- v_BOOL_t displaySnapshot,
- v_BOOL_t toggleStallDetect
-)
-{
- WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
- return;
-}
-
-/*==========================================================================
- FUNCTION WDA_SetEnableSSR
-
- DESCRIPTION
- API to enable/disable SSR on WDI timeout
-
- PARAMETERS
- enableSSR : enable/disable SSR
-
- RETURN VALUE
- NONE
-
-===========================================================================*/
-void WDA_SetEnableSSR(v_BOOL_t enableSSR)
-{
- WDI_SetEnableSSR(enableSSR);
-}
-
-#ifdef FEATURE_WLAN_LPHB
-/*
- * FUNCTION: WDA_LPHBconfRspCallback
- *
- */
-void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
-{
- tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
-
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "<------ %s " ,__func__);
- if (NULL == pWdaParams)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: pWdaParams received NULL", __func__);
- VOS_ASSERT(0) ;
- return ;
- }
-
- /* Do not need to send notification to upper layer
- * Just free allocated resources */
- if (pWdaParams != NULL)
- {
- if (pWdaParams->wdaWdiApiMsgParam != NULL)
- {
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
- }
- vos_mem_free(pWdaParams->wdaMsgParam) ;
- vos_mem_free(pWdaParams) ;
- }
-
- return;
-}
-
-/*
- * FUNCTION: WDA_ProcessLPHBConfReq
- *
- */
-VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
- tSirLPHBReq *pData)
-{
- WDI_Status wdiStatus;
- tWDA_ReqParams *pWdaParams ;
-
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " , __func__);
-
- pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
- if (NULL == pWdaParams)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s: VOS MEM Alloc Failure", __func__);
- VOS_ASSERT(0);
- vos_mem_free(pData);
- return VOS_STATUS_E_NOMEM;
- }
-
- pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = (void *)pData;
- pWdaParams->wdaWdiApiMsgParam = NULL;
-
- wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
- if (WDI_STATUS_PENDING == wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "Pending received for %s:%d ", __func__, __LINE__);
- }
- else if (WDI_STATUS_SUCCESS != wdiStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
- vos_mem_free(pWdaParams->wdaMsgParam);
- vos_mem_free(pWdaParams);
- }
-
- return CONVERT_WDI2VOS_STATUS(wdiStatus);
-}
-#endif /* FEATURE_WLAN_LPHB */
-
-tANI_U8 WDA_MapChannel(tANI_U8 mapChannel)
-{
- if(mapChannel >0 && mapChannel <25){
-#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
- if(IS_ROAM_SCAN_OFFLOAD_FEATURE_ENABLE)
- return aUnsortedChannelList[mapChannel -1];
-#endif
- return abChannel[mapChannel -1];
- }
- else
- return 0;
-}
diff --git a/CORE/WDA/src/wlan_qct_wda_ds.c b/CORE/WDA/src/wlan_qct_wda_ds.c
deleted file mode 100644
index 01890c4617be..000000000000
--- a/CORE/WDA/src/wlan_qct_wda_ds.c
+++ /dev/null
@@ -1,1208 +0,0 @@
-/*
- * Copyright (c) 2011-2013 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-
-/*===========================================================================
-
-
- W L A N _ Q C T _ WDA _ DS . C
-
- OVERVIEW:
-
- This software unit holds the implementation of WLAN Data Abtraction APIs
- for the WLAN Transport Layer.
-
- DEPENDENCIES:
-
- Are listed for each API below.
-===========================================================================*/
-
-/*===========================================================================
-
- EDIT HISTORY FOR FILE
-
-
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
-
-
- $Header:$ $DateTime: $ $Author: $
-
-
-when who what, where, why
--------- --- ----------------------------------------------
-08/19/2013 rajekuma Added reliable multicast support in WDA
-12/08/2010 seokyoun Created. Move down HAL interfaces from TL to WDA
- for UMAC convergence btween Volans/Libra and Prima
-=========================================================================== */
-
-#include "wlan_qct_wda.h"
-#include "wlan_qct_tl.h"
-#include "wlan_qct_tli.h"
-#include "tlDebug.h"
-
-#define WDA_DS_DXE_RES_COUNT (WDA_TLI_MIN_RES_DATA + 20)
-
-/* macro's for acessing TL API/data structures */
-#define WDA_TL_SET_TX_XMIT_PENDING(a) WLANTL_SetTxXmitPending(a)
-#define WDA_TL_IS_TX_XMIT_PENDING(a) WLANTL_IsTxXmitPending(a)
-#define WDA_TL_CLEAR_TX_XMIT_PENDING(a) WLANTL_ClearTxXmitPending(a)
-
-#define WDA_HI_FLOW_MASK 0xF0
-#define WDA_LO_FLOW_MASK 0x0F
-
-static v_VOID_t
-WDA_DS_TxCompleteCB
-(
- v_PVOID_t pvosGCtx,
- v_PVOID_t pFrameDataBuff
-);
-
-
-#ifdef WLAN_PERF
-/*==========================================================================
- FUNCTION WDA_TLI_FastHwFwdDataFrame
-
- DESCRIPTION
- For NON integrated SOC, this function is called by TL.
-
- Fast path function to quickly forward a data frame if HAL determines BD
- signature computed here matches the signature inside current VOSS packet.
- If there is a match, HAL and TL fills in the swapped packet length into
- BD header and DxE header, respectively. Otherwise, packet goes back to
- normal (slow) path and a new BD signature would be tagged into BD in this
- VOSS packet later by the WLANHAL_FillTxBd() function.
-
- TODO For integrated SOC, this function does nothing yet. Pima SLM/HAL
- should provide the equivelant functionality.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pvosGCtx VOS context
- vosDataBuff Ptr to VOSS packet
- pMetaInfo For getting frame's TID
- pStaInfo For checking STA type
-
- OUT
- pvosStatus returned status
- puFastFwdOK Flag to indicate whether frame could be fast forwarded
-
- RETURN VALUE
- No return.
-
- SIDE EFFECTS
-
-============================================================================*/
-void WDA_TLI_FastHwFwdDataFrame
-(
- v_PVOID_t pvosGCtx,
- vos_pkt_t* vosDataBuff,
- VOS_STATUS* pvosStatus,
- v_U32_t* puFastFwdOK,
- WLANTL_MetaInfoType* pMetaInfo,
- WLAN_STADescType* pStaInfo
-)
-{
- /* FIXME WDI/WDA should support this function
- once HAL supports it
- */
-}
-#endif /*WLAN_PERF*/
-
-/*==========================================================================
- FUNCTION WDA_DS_Register
-
- DESCRIPTION
- Register TL client to WDA. This function registers TL RX/TX functions
- to WDI by calling WDI_DS_Register.
-
-
- For NON integrated SOC, this function calls WLANBAL_RegTlCbFunctions
- to register TL's RX/TX functions to BAL
-
- TODO
- For Prima, pfnResourceCB gets called in WDTS_OOResourceNotification.
- The uCount parameter is AC mask. It should be redefined to use the
- same resource callback function.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pvosGCtx VOS context
- pfnTxCompleteCallback TX complete callback upon TX completion
- pfnRxPacketCallback RX callback
- pfnTxPacketCallback TX callback
- pfnResourceCB gets called when updating TX PDU number
- uResTheshold minimum TX PDU size for a packet
- pCallbackContext WDI calls callback function with it
- VOS global context pointer
- OUT
- uAvailableTxBuf available TX PDU numbder.
- BAL returns it for NON integrated SOC
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS WDA_DS_Register
-(
- v_PVOID_t pvosGCtx,
- WDA_DS_TxCompleteCallback pfnTxCompleteCallback,
- WDA_DS_RxPacketCallback pfnRxPacketCallback,
- WDA_DS_TxPacketCallback pfnTxPacketCallback,
- WDA_DS_ResourceCB pfnResourceCB,
- v_U32_t uResTheshold,
- v_PVOID_t pCallbackContext,
- v_U32_t *uAvailableTxBuf
-)
-{
- tWDA_CbContext *wdaContext = NULL;
- WDI_Status wdiStatus;
-
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH,
- "WLAN WDA: WDA_DS_Register" );
-
- /*------------------------------------------------------------------------
- Sanity check
- ------------------------------------------------------------------------*/
- if ( ( NULL == pvosGCtx ) ||
- ( NULL == pfnTxPacketCallback ) ||
- ( NULL == pfnTxCompleteCallback ) ||
- ( NULL == pfnRxPacketCallback ) ||
- ( NULL == pfnResourceCB) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WLAN WDA:Invalid pointers on WDA_DS_Register" );
- return VOS_STATUS_E_FAULT;
- }
-
- /*------------------------------------------------------------------------
- Extract WDA context
- ------------------------------------------------------------------------*/
- wdaContext = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pvosGCtx );
- if ( NULL == wdaContext )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WLAN WDA:Invalid wda context pointer "
- "from pvosGCtx on WDA_DS_Register" );
- return VOS_STATUS_E_FAULT;
- }
-
- /*------------------------------------------------------------------------
- Register with WDI as transport layer client
- ------------------------------------------------------------------------*/
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WDA: WDA_DS_Register");
-
- wdaContext->pfnTxResourceCB = pfnResourceCB;
- wdaContext->pfnTxCompleteCallback = pfnTxCompleteCallback;
-
- wdiStatus = WDI_DS_Register( wdaContext->pWdiContext,
- (WDI_DS_TxCompleteCallback)WDA_DS_TxCompleteCB,
- (WDI_DS_RxPacketCallback)pfnRxPacketCallback,
- WDA_DS_TxFlowControlCallback,
- pvosGCtx );
-
- if ( WDI_STATUS_SUCCESS != wdiStatus )
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- "WLAN TL:TL failed to register with DAL, Err: %d", wdiStatus );
- return VOS_STATUS_E_FAILURE;
- }
-
- /* TODO Out-of-resource condition if PDU size is less than WLANTL_MIN_RES_MF
- Put hardcoded value not to put TL into OOR. Revisit it */
- *uAvailableTxBuf = WDA_DS_DXE_RES_COUNT;
-
- return VOS_STATUS_SUCCESS;
-}
-
-/*==========================================================================
- FUNCTION WDA_DS_StartXmit
-
- DESCRIPTION
- Serialize TX transmit reques to TX thread.
-
- TODO This sends TX transmit request to TL. It should send to WDI for
- abstraction.
-
- For NON integrated SOC, this function calls WLANBAL_StartXmit
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pvosGCtx VOS context
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_StartXmit
-(
- v_PVOID_t pvosGCtx
-)
-{
- vos_msg_t sMessage;
- VOS_STATUS status;
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- if ( NULL == pvosGCtx )
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- "WLAN WDA:Invalid pointers on WDA_DS_StartXmit" );
- return VOS_STATUS_E_FAULT;
- }
-
- if(WDA_TL_IS_TX_XMIT_PENDING( pvosGCtx ))
- {
- /*Already WDA_DS_TX_START_XMIT msg is pending in TL msg queue */
- return VOS_STATUS_SUCCESS;
- }
- /* Serialize our event */
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH,
- "Serializing WDA TX Start Xmit event" );
-
- vos_mem_zero( &sMessage, sizeof(vos_msg_t) );
-
- sMessage.bodyptr = NULL;
- sMessage.type = WDA_DS_TX_START_XMIT;
-
- WDA_TL_SET_TX_XMIT_PENDING(pvosGCtx);
-
- status = vos_tx_mq_serialize(VOS_MQ_ID_TL, &sMessage);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_FATAL,
- "Serializing WDA TX Start Xmit event FAILED" );
- WDA_TL_CLEAR_TX_XMIT_PENDING(pvosGCtx);
- }
- return status;
-}
-
-
-/*==========================================================================
- FUNCTION WDA_DS_FinishULA
-
- DESCRIPTION
- Serialize Finish Upper Level Authentication reques to TX thread.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- callbackRoutine routine to be called in TX thread
- callbackContext user data for the above routine
-
- RETURN VALUE
- please see vos_tx_mq_serialize
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_FinishULA
-(
- void (*callbackRoutine) (void *callbackContext),
- void *callbackContext
-)
-{
- vos_msg_t sMessage;
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- /* Serialize our event */
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH,
- "Serializing WDA_DS_FinishULA event" );
-
- vos_mem_zero( &sMessage, sizeof(vos_msg_t) );
-
- sMessage.callback = callbackRoutine;
- sMessage.bodyptr = callbackContext;
- sMessage.bodyval = 0;
- sMessage.type = WDA_DS_FINISH_ULA;
-
- return vos_tx_mq_serialize(VOS_MQ_ID_TL, &sMessage);
-}/*WDA_DS_FinishULA*/
-
-/*==========================================================================
- FUNCTION WDA_DS_BuildTxPacketInfo
-
- DESCRIPTION
- Build TX meta info for integrated SOC.
-
- Same function calls HAL for reserve BD header space into VOS packet and
- HAL function to fill it.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pvosGCtx VOS context
- vosDataBuff vos data buffer
- pvDestMacAddr destination MAC address ponter
- ucDisableFrmXtl Is frame xtl disabled?
- ucQosEnabled Is QoS enabled?
- ucWDSEnabled Is WDS enabled?
- extraHeadSpace Extra head bytes. If it's not 0 due to 4 bytes align
- of BD header.
- typeSubtype typeSubtype from MAC header or TX metainfo/BD
- pAddr2 address 2
- uTid tid
- txFlag
- timeStamp
- ucIsEapol
- ucUP
-
- OUT
- *pusPktLen Packet length
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_BuildTxPacketInfo
-(
- v_PVOID_t pvosGCtx,
- vos_pkt_t* vosDataBuff,
- v_MACADDR_t* pvDestMacAddr,
- v_U8_t ucDisableFrmXtl,
- v_U16_t* pusPktLen,
- v_U8_t ucQosEnabled,
- v_U8_t ucWDSEnabled,
- v_U8_t extraHeadSpace,
- v_U8_t typeSubtype,
- v_PVOID_t pAddr2,
- v_U8_t uTid,
- v_U8_t txFlag,
- v_U32_t timeStamp,
- v_U8_t ucIsEapol,
- v_U8_t ucUP
-)
-{
- VOS_STATUS vosStatus;
- WDI_DS_TxMetaInfoType* pTxMetaInfo = NULL;
- v_SIZE_t usMacAddrSize;
- wpt_FrameCtrl *pFrameControl;
- /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
-
- /*------------------------------------------------------------------------
- Sanity check
- Extract TL control block
- ------------------------------------------------------------------------*/
- if ( ( NULL == pvosGCtx ) || ( NULL == vosDataBuff ) || ( NULL == pvDestMacAddr ) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA:Invalid parameter sent on WDA_DS_BuildTxPacketInfo" );
- return VOS_STATUS_E_FAULT;
- }
-
- /*------------------------------------------------------------------------
- Extract TX Meta Info pointer from PAL packet
- ------------------------------------------------------------------------*/
- pTxMetaInfo = WDI_DS_ExtractTxMetaData( VOS_TO_WPAL_PKT(vosDataBuff) );
- if ( NULL == pTxMetaInfo )
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- "WLAN TL:Invalid RxMetaInfo pointer from PAL packet on WLANTL_RxFrames");
- VOS_ASSERT( 0 );
- return VOS_STATUS_E_FAULT;
- }
-
- /* Zero out memeory */
- vos_mem_zero( pTxMetaInfo, sizeof( WDI_DS_TxMetaInfoType ) );
-
- /* Fill the TX Meta info */
- pTxMetaInfo->txFlags = txFlag;
- pTxMetaInfo->qosEnabled = ucQosEnabled;
- pTxMetaInfo->fenableWDS = ucWDSEnabled;
- pTxMetaInfo->ac = ucUP;
- pTxMetaInfo->fUP = uTid;
- pTxMetaInfo->isEapol = ucIsEapol;
- pTxMetaInfo->fdisableFrmXlt = ucDisableFrmXtl;
- pTxMetaInfo->frmType = ( ( typeSubtype & 0x30 ) >> 4 );
- pTxMetaInfo->typeSubtype = typeSubtype;
-
- /* Length = MAC header + payload */
- vos_pkt_get_packet_length( vosDataBuff, pusPktLen);
- pTxMetaInfo->fPktlen = *pusPktLen;
-
- /* For management frames, peek into Frame Control
- field to get value of Protected Frame bit */
- pTxMetaInfo->fProtMgmtFrame = 0;
- if ( WDA_TLI_MGMT_FRAME_TYPE == pTxMetaInfo->frmType )
- {
- if ( 1 == ucDisableFrmXtl ) /* should be 802.11, but check */
- {
- vosStatus = vos_pkt_peek_data( vosDataBuff, 0, (v_PVOID_t)&pFrameControl,
- sizeof( wpt_FrameCtrl ));
- if ( VOS_STATUS_SUCCESS != vosStatus )
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- "WDA: Failed while attempting to extract Protect Bit in "
- "Frame Control, status %d", vosStatus );
- VOS_ASSERT( 0 );
- return VOS_STATUS_E_FAULT;
- }
- pTxMetaInfo->fProtMgmtFrame = pFrameControl->wep;
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_LOW,
- "WLAN TL: fProtMgmtFrame:%d", pTxMetaInfo->fProtMgmtFrame );
- }
- }
-
- // Dst address
- usMacAddrSize = VOS_MAC_ADDR_SIZE;
- vosStatus = vos_pkt_extract_data( vosDataBuff,
- WLANTL_MAC_ADDR_ALIGN( ucDisableFrmXtl ),
- (v_PVOID_t)pvDestMacAddr,
- &usMacAddrSize );
- if ((VOS_STATUS_SUCCESS != vosStatus) ||
- (usMacAddrSize != VOS_MAC_ADDR_SIZE))
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- "WDA:Failed while attempting to extract MAC Addr %d",
- vosStatus );
- VOS_ASSERT( 0 );
- return VOS_STATUS_E_FAULT;
- }
-
- vos_copy_macaddr( (v_MACADDR_t*)pTxMetaInfo->fSTAMACAddress, pvDestMacAddr );
-
- // ADDR2
- vos_copy_macaddr( (v_MACADDR_t*)pTxMetaInfo->addr2MACAddress, pAddr2 );
-
- /* Dump TX meta infro for debugging */
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_LOW,
- "WLAN TL: Dump TX meta info: "
- "txFlags:%d, qosEnabled:%d, ac:%d, "
- "isEapol:%d, fdisableFrmXlt:%d, frmType:%d",
- pTxMetaInfo->txFlags, ucQosEnabled, pTxMetaInfo->ac,
- pTxMetaInfo->isEapol, pTxMetaInfo->fdisableFrmXlt,
- pTxMetaInfo->frmType );
-
- return VOS_STATUS_SUCCESS;
-}
-
-
-/*==========================================================================
- FUNCTION WDS_DS_TrimRxPacketInfo
-
- DESCRIPTION
- Trim/Remove RX BD header for NON integrated SOC.
- It does nothing for integrated SOC.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- vosDataBuff vos data buffer
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_TrimRxPacketInfo
-(
- vos_pkt_t *vosDataBuff
-)
-{
- /* Nothing to trim
- * Do Nothing */
-
- return VOS_STATUS_SUCCESS;
-}
-
-
-
-/*==========================================================================
- FUNCTION WDA_DS_PeekRxPacketInfo
-
- DESCRIPTION
- Return RX metainfo pointer for for integrated SOC.
-
- Same function will return BD header pointer.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- vosDataBuff vos data buffer
-
- pvDestMacAddr destination MAC address ponter
- bSwap Want to swap BD header? For backward compatability
- It does nothing for integrated SOC
- OUT
- *ppRxHeader RX metainfo pointer
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_PeekRxPacketInfo
-(
- vos_pkt_t *vosDataBuff,
- v_PVOID_t *ppRxHeader,
- v_BOOL_t bSwap
-)
-{
- /*------------------------------------------------------------------------
- Sanity check
- ------------------------------------------------------------------------*/
- if ( NULL == vosDataBuff )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA:Invalid parameter sent on WDA_DS_PeekRxPacketInfo" );
- return VOS_STATUS_E_FAULT;
- }
-
- *ppRxHeader = WDI_DS_ExtractRxMetaData( (wpt_packet*)vosDataBuff );
-
- if ( NULL == *ppRxHeader )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA:Failed to get RX meta data from WDI" );
- return VOS_STATUS_E_FAILURE;
- }
-
- return VOS_STATUS_SUCCESS;
-}
-
-
-
-/*==========================================================================
- FUNCTION WDA_DS_GetFrameTypeSubType
-
- DESCRIPTION
- Get typeSubtype from the packet. The BD header should have this.
- But some reason, Libra/Volans read it from 802.11 header and save it
- back to BD header. So for NON integrated SOC, this function does
- the same.
-
- For integrated SOC, WDI does the same, not TL.
- It does return typeSubtype from RX meta info for integrated SOC.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pvosGCtx VOS context
- vosDataBuff vos data buffer
- pRxHeader RX meta info or BD header pointer
-
- OUT
- ucTypeSubtype typeSubtype
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_GetFrameTypeSubType
-(
- v_PVOID_t pvosGCtx,
- vos_pkt_t *vosDataBuff,
- v_PVOID_t pRxHeader,
- v_U8_t *ucTypeSubtype
-)
-{
- /*------------------------------------------------------------------------
- Sanity check
- ------------------------------------------------------------------------*/
- if ( NULL == pRxHeader )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA:Invalid parameter sent on WDA_DS_GetFrameTypeSubType" );
- return VOS_STATUS_E_FAULT;
- }
-
- *ucTypeSubtype = ( WDA_GET_RX_TYPE( pRxHeader ) << 4 ) | WDA_GET_RX_SUBTYPE( pRxHeader );
-
- return VOS_STATUS_SUCCESS;
-}
-
-
-/*==========================================================================
- FUNCTION WDA_DS_RxAmsduBdFix
-
- DESCRIPTION
- For backward compatability with Libra/Volans. Need to call HAL function
- for HW BD bug fix
-
- It does nothing for integrated SOC.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pvosGCtx VOS context
- pvBDHeader BD header pointer
-
- OUT
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_RxAmsduBdFix
-(
- v_PVOID_t pvosGCtx,
- v_PVOID_t pvBDHeader
-)
-{
- /* Do nothing for Prima */
- return VOS_STATUS_SUCCESS;
-}
-
-/*==========================================================================
- FUNCTION WDA_DS_GetRssi
-
- DESCRIPTION
- Get RSSI
-
- TODO It returns hardcoded value in the meantime since WDA/WDI does nothing
- support it yet for Prima.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- vosDataBuff vos data buffer
-
- OUT
- puRssi RSSI
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_GetRssi
-(
- v_PVOID_t pvosGCtx,
- v_S7_t* puRssi
-)
-{
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- "WDA:halPS_GetRssi no longer supported. Need replacement");
-
- *puRssi = -30;
-
- return VOS_STATUS_SUCCESS;
-}
-
-/*==========================================================================
- FUNCTION WDA_DS_GetTxResources
-
- DESCRIPTION
- It does return hardcoded value. It should bigger number than 0.
- Returning 0 will put TL in out-of-resource condition for TX.
-
- Return current PDU resources from BAL for NON integrated SOC.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- vosDataBuff vos data buffer
-
- OUT
- puResCount available PDU number for TX
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_GetTxResources
-(
- v_PVOID_t pvosGCtx,
- v_U32_t* puResCount
-)
-{
- /* Return minimum necessary number of packet(DXE descriptor) for data */
- /* TODO Need to get this from DXE??? */
- *puResCount = WDA_TLI_BD_PDU_RESERVE_THRESHOLD + 50;
- return VOS_STATUS_SUCCESS;
-}
-
-
-
-/*==========================================================================
- FUNCTION WDA_DS_GetReplayCounter
-
- DESCRIPTION
- Return replay counter from BD header or RX meta info
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pRxHeader RX meta info or BD header pointer
-
- OUT
-
- RETURN VALUE
- Replay Counter
-
- SIDE EFFECTS
-
-============================================================================*/
-v_U64_t
-WDA_DS_GetReplayCounter
-(
- v_PVOID_t pRxHeader
-)
-{
- return WDA_GET_RX_REPLAY_COUNT( pRxHeader );
-}
-
-/*==========================================================================
- FUNCTION WDA_DS_TxFrames
-
- DESCRIPTION
- Pull packets from TL and push them to WDI. It gets invoked upon
- WDA_DS_TX_START_XMIT.
-
- This function is equivelant of WLANSSC_Transmit in Libra/Volans.
-
- TODO
- This function should be implemented and moved in WDI.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pvosGCtx VOS context
-
- OUT
-
- RETURN VALUE
- VOS_STATUS_E_FAULT: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-
-VOS_STATUS
-WDA_DS_TxFrames
-(
- v_PVOID_t pvosGCtx
-)
-{
- VOS_STATUS vosStatus;
- vos_pkt_t *pTxMgmtChain = NULL;
- vos_pkt_t *pTxDataChain = NULL;
- vos_pkt_t *pTxPacket = NULL;
- v_BOOL_t bUrgent;
- wpt_uint32 ucTxResReq;
- WDI_Status wdiStatus;
- tWDA_CbContext *wdaContext = NULL;
- v_U32_t uMgmtAvailRes;
- v_U32_t uDataAvailRes;
- WLANTL_TxCompCBType pfnTxComp = NULL;
- v_U32_t uTxFailCount = 0;
-
- wdaContext = (tWDA_CbContext *)vos_get_context(VOS_MODULE_ID_WDA, pvosGCtx);
- if ( NULL == wdaContext )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA:Invalid wda context pointer from pvosGCtx on WDA_DS_TxFrames" );
- return VOS_STATUS_E_FAULT;
- }
-
- /*-------------------------------------------------------------------------
- Need to fetch separatelly for Mgmt and Data frames because TL is not
- aware of separate resource management at the lower levels
- -------------------------------------------------------------------------*/
- /*Mgmt tx*/
- uMgmtAvailRes = WDI_GetAvailableResCount(wdaContext->pWdiContext,
- WDI_MGMT_POOL_ID);
-
- ucTxResReq = WLANTL_GetFrames( pvosGCtx,
- &pTxMgmtChain,
- uMgmtAvailRes,
- (wdaContext->uTxFlowMask & WDA_HI_FLOW_MASK),
- &bUrgent );
-
- // We need to initialize vsoStatus in case we don't enter the "while"
- // loop. If we don't enter the loop, it means that there are no packets,
- // available, and that is considered success. If we enter the loop,
- // vosStatus will be set appropriately inside the loop
- vosStatus = VOS_STATUS_SUCCESS;
-
- while ( NULL != pTxMgmtChain )
- {
- /* Walk the chain and unchain the packet */
- pTxPacket = pTxMgmtChain;
- vosStatus = vos_pkt_walk_packet_chain( pTxMgmtChain, &pTxMgmtChain, VOS_TRUE );
-
- if( (VOS_STATUS_SUCCESS != vosStatus) &&
- (VOS_STATUS_E_EMPTY != vosStatus) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA Walking packet chain returned status : %d", vosStatus );
- VOS_ASSERT( 0 );
- vosStatus = VOS_STATUS_E_FAILURE;
- break;
- }
-
- if ( VOS_STATUS_E_EMPTY == vosStatus )
- {
- vosStatus = VOS_STATUS_SUCCESS;
- }
-
- wdiStatus = WDI_DS_TxPacket( wdaContext->pWdiContext,
- (wpt_packet*)pTxPacket,
- 0 /* more */ );
- if ( WDI_STATUS_SUCCESS != wdiStatus )
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN,
- "WDA : Pushing a packet to WDI failed." );
- if ( WDI_STATUS_E_NOT_ALLOWED != wdiStatus )
- {
- uTxFailCount++;
- }
- VOS_ASSERT( wdiStatus == WDI_STATUS_E_NOT_ALLOWED );
- //We need to free the packet here
- vos_pkt_get_user_data_ptr(pTxPacket, VOS_PKT_USER_DATA_ID_TL, (void **)&pfnTxComp);
- if(pfnTxComp)
- {
- pfnTxComp(pvosGCtx, pTxPacket, VOS_STATUS_E_FAILURE);
- }
- }
-
- };
-
- if ( uTxFailCount )
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- "WDA : Tx fail count for mgmt pkts: %d.", uTxFailCount);
- uTxFailCount = 0;
- }
-
- /*Data tx*/
- uDataAvailRes = WDI_GetAvailableResCount(wdaContext->pWdiContext,
- WDI_DATA_POOL_ID);
-
- ucTxResReq = WLANTL_GetFrames( pvosGCtx,
- &pTxDataChain,
- /*WDA_DS_DXE_RES_COUNT*/ uDataAvailRes,
- (wdaContext->uTxFlowMask & WDA_LO_FLOW_MASK),
- &bUrgent );
-
- // We need to initialize vsoStatus in case we don't enter the "while"
- // loop. If we don't enter the loop, it means that there are no packets,
- // available, and that is considered success. If we enter the loop,
- // vosStatus will be set appropriately inside the loop
- vosStatus = VOS_STATUS_SUCCESS;
-
- while ( NULL != pTxDataChain )
- {
- /* Walk the chain and unchain the packet */
- pTxPacket = pTxDataChain;
- vosStatus = vos_pkt_walk_packet_chain( pTxDataChain, &pTxDataChain, VOS_TRUE );
-
- if( (VOS_STATUS_SUCCESS != vosStatus) &&
- (VOS_STATUS_E_EMPTY != vosStatus) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA Walking packet chain returned status : %d", vosStatus );
- VOS_ASSERT( 0 );
- vosStatus = VOS_STATUS_E_FAILURE;
- break;
- }
-
- if ( VOS_STATUS_E_EMPTY == vosStatus )
- {
- vosStatus = VOS_STATUS_SUCCESS;
- }
-
- wdiStatus = WDI_DS_TxPacket( wdaContext->pWdiContext,
- (wpt_packet*)pTxPacket,
- 0 /* more */ );
- if ( WDI_STATUS_SUCCESS != wdiStatus )
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN,
- "WDA : Pushing a packet to WDI failed." );
- if ( WDI_STATUS_E_NOT_ALLOWED != wdiStatus )
- {
- uTxFailCount++;
- }
- VOS_ASSERT( wdiStatus == WDI_STATUS_E_NOT_ALLOWED );
- //We need to free the packet here
- vos_pkt_get_user_data_ptr(pTxPacket, VOS_PKT_USER_DATA_ID_TL, (void **)&pfnTxComp);
- if(pfnTxComp)
- {
- pfnTxComp(pvosGCtx, pTxPacket, VOS_STATUS_E_FAILURE);
- }
- }
-
- };
-
- if ( uTxFailCount )
- {
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- "WDA : Tx fail count for data pkts: %d.", uTxFailCount);
- }
-
-
- WDI_DS_TxComplete(wdaContext->pWdiContext, ucTxResReq);
-
- return vosStatus;
-}
-
-/*==========================================================================
- FUNCTION WDA_DS_TxFlowControlCallback
-
- DESCRIPTION
- Invoked by WDI to control TX flow.
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pvosGCtx VOS context
- uFlowMask TX channel mask for flow control
- Defined in WDA_TXFlowEnumType
-
- OUT
-
- RETURN VALUE
-
- SIDE EFFECTS
-
-============================================================================*/
-v_VOID_t
-WDA_DS_TxFlowControlCallback
-(
- v_PVOID_t pvosGCtx,
- v_U8_t ucFlowMask
-)
-{
- tWDA_CbContext* wdaContext = NULL;
- v_U8_t ucOldFlowMask;
- /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
-
- /*------------------------------------------------------------------------
- Sanity check
- ------------------------------------------------------------------------*/
- if ( NULL == pvosGCtx )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA: Invalid parameter sent on WDA_DS_TxFlowControlCallback" );
- return;
- }
-
- wdaContext = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pvosGCtx );
- if ( NULL == wdaContext )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA: Invalid context on WDA_DS_TxFlowControlCallback" );
- return;
- }
-
- /* two physical DXE channels
- 1) data packets(all four AC) and BAP for the low priority channel(lower 4 bits)
- 2) management packets for high priority channel(5th bit)
- */
-
-
- /*Save and reset */
- ucOldFlowMask = wdaContext->uTxFlowMask;
- wdaContext->uTxFlowMask = ucFlowMask;
-
- /*If the AC is being enabled - resume data xfer
-
- Assume previous value of wdaContext->uTxFlowMask:
-
- DATA\MGM | ON | OFF
- ----------------------
- ON | 1F | 0F *
- ----------------------
- OFF | 10 *| 00 *
-
- * - states in which a channel can be enabled
-
- ucFlowMask will tell which channel must be enabled
- to enable a channel a new bit must be turned on =>
- ucFlowMask > wdaContext->uTxFlowMask when enable happens
- */
-
- if ( ucFlowMask > ucOldFlowMask )
- {
- WDA_DS_StartXmit(pvosGCtx);
- }
-
-}
-
-/*==========================================================================
- FUNCTION WDA_DS_GetTxFlowMask
-
- DESCRIPTION
- return TX flow mask control value
-
- DEPENDENCIES
-
- PARAMETERS
-
- IN
- pvosGCtx VOS context
-
- OUT
- uFlowMask TX channel mask for flow control
- Defined in WDA_TXFlowEnumType
-
- RETURN VALUE
- VOS_STATUS_E_INVAL: pointer is NULL and other errors
- VOS_STATUS_SUCCESS: Everything is good :)
-
- SIDE EFFECTS
-
-============================================================================*/
-VOS_STATUS
-WDA_DS_GetTxFlowMask
-(
- v_PVOID_t pvosGCtx,
- v_U8_t* puFlowMask
-)
-{
- tWDA_CbContext* wdaContext = NULL;
- /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
-
- /*------------------------------------------------------------------------
- Sanity check
- ------------------------------------------------------------------------*/
- if ( ( NULL == pvosGCtx ) || ( NULL == puFlowMask ) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA: Invalid parameter sent on WDA_DS_GetTxFlowMask" );
- return VOS_STATUS_E_INVAL;
- }
-
- wdaContext = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pvosGCtx );
- if ( NULL == wdaContext )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA: Invalid context on WDA_DS_GetTxFlowMask" );
- return VOS_STATUS_E_INVAL;
- }
-
- *puFlowMask = wdaContext->uTxFlowMask;
-
- return VOS_STATUS_SUCCESS;
-}
-
-v_VOID_t
-WDA_DS_TxCompleteCB
-(
- v_PVOID_t pvosGCtx,
- v_PVOID_t pFrameDataBuff
-)
-{
- tWDA_CbContext* wdaContext = NULL;
- WDI_DS_TxMetaInfoType* pTxMetadata;
- VOS_STATUS vosStatus;
- /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
-
- /*------------------------------------------------------------------------
- Sanity check
- ------------------------------------------------------------------------*/
-
- if ( ( NULL == pvosGCtx ) || ( NULL == pFrameDataBuff ) )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA: Invalid parameter sent on WDA_DS_TxCompleteCB" );
- return;
- }
-
- wdaContext = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pvosGCtx );
- if ( NULL == wdaContext )
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "WDA: Invalid context on WDA_DS_TxCompleteCB" );
- return;
- }
-
- // extract metadata from PAL packet
- pTxMetadata = WDI_DS_ExtractTxMetaData( (wpt_packet*)pFrameDataBuff );
-
- if ( eWLAN_PAL_STATUS_SUCCESS == pTxMetadata->txCompleteStatus )
- vosStatus = VOS_STATUS_SUCCESS;
- else
- vosStatus = VOS_STATUS_E_FAILURE;
-
- wdaContext->pfnTxCompleteCallback( pvosGCtx, pFrameDataBuff, vosStatus );
-}
diff --git a/CORE/WDA/src/wlan_qct_wda_legacy.c b/CORE/WDA/src/wlan_qct_wda_legacy.c
index 9803ed190cb5..6ef18cf50206 100644
--- a/CORE/WDA/src/wlan_qct_wda_legacy.c
+++ b/CORE/WDA/src/wlan_qct_wda_legacy.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -208,25 +208,3 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb)
return eSIR_SUCCESS;
} // uMacPostCtrlMsg()
-
-
-/* ---------------------------------------------------------
- * FUNCTION: wdaGetGlobalSystemRole()
- *
- * Get the global HAL system role.
- * ---------------------------------------------------------
- */
-tBssSystemRole wdaGetGlobalSystemRole(tpAniSirGlobal pMac)
-{
- v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
- tWDA_CbContext *wdaContext =
- vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
- if(NULL == wdaContext)
- {
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
- "%s:WDA context is NULL", __func__);
- VOS_ASSERT(0);
- return eSYSTEM_UNKNOWN_ROLE;
- }
- return wdaContext->wdaGlobalSystemRole;
-}
diff --git a/Kbuild b/Kbuild
index f7c2c0d74716..e602e4bf3ee7 100644
--- a/Kbuild
+++ b/Kbuild
@@ -321,46 +321,11 @@ HIF_INC := -I$(WLAN_ROOT)/$(HIF_COMMON_DIR) \
-I$(WLAN_ROOT)/$(HIF_SDIO_NATIVE_INC_DIR) \
-I$(WLAN_ROOT)/$(HIF_SDIO_NATIVE_SRC_DIR)
-HIF_OBJS := $(HIF_DIR_OBJS)\
- $(HIF_COMMON_OBJS)\
- $(HIF_SDIO_OBJS)\
- $(HIF_SDIO_LINUX_OBJS)\
- $(HIF_SDIO_NATIVE_OBJS)
-else
-############ DXE ############
-DXE_DIR := CORE/DXE
-DXE_INC_DIR := $(DXE_DIR)/inc
-DXE_SRC_DIR := $(DXE_DIR)/src
-
-DXE_INC := -I$(WLAN_ROOT)/$(DXE_INC_DIR) \
- -I$(WLAN_ROOT)/$(DXE_SRC_DIR)
-
-HIF_DXE_DIR := CORE/SERVICES/HIF/DXE
-HIF_DXE_INC := -I$(WLAN_ROOT)/$(HIF_DXE_DIR)
-
-ifeq ($(CONFIG_QCA_WIFI_2_0), 0)
-DXE_OBJS = $(DXE_SRC_DIR)/wlan_qct_dxe.o \
- $(DXE_SRC_DIR)/wlan_qct_dxe_cfg_i.o
-else
-ifeq ($(CONFIG_QCA_WIFI_ISOC), 1)
-HIF_DXE_INC := -I$(WLAN_ROOT)/$(HIF_DXE_DIR) \
- -I$(WLAN_ROOT)/$(HIF_DXE_DIR)/linux
-
-HIF_DXE_OBJS:= $(HIF_DXE_DIR)/hif_dxe.o \
- $(HIF_DXE_DIR)/hif_dxe_config.o \
- $(HIF_DXE_DIR)/linux/hif_dxe_os.o \
- $(HIF_DXE_DIR)/dmux_dxe.o \
- $(DXE_DIR)/htt_dxe_tx.o \
- $(DXE_DIR)/htt_dxe_fw_stats.o \
- $(DXE_DIR)/htt_dxe_h2t.o \
- $(DXE_DIR)/htt_dxe_t2h.o \
- $(DXE_DIR)/htt_dxe.o \
- $(DXE_DIR)/htt_dxe_rx.o
-
-DXE_INC += $(HIF_DXE_INC)
-DXE_OBJS := $(HIF_DXE_OBJS)
-endif
-endif
+HIF_OBJS := $(HIF_DIR_OBJS) \
+ $(HIF_COMMON_OBJS) \
+ $(HIF_SDIO_OBJS) \
+ $(HIF_SDIO_LINUX_OBJS) \
+ $(HIF_SDIO_NATIVE_OBJS)
endif
############ HDD ############
@@ -843,17 +808,12 @@ WDA_OBJS := $(WDA_SRC_DIR)/wlan_qct_wda_debug.o \
$(WDA_SRC_DIR)/wlan_qct_wda_legacy.o \
$(WDA_SRC_DIR)/wlan_nv.o
-ifeq ($(CONFIG_QCA_WIFI_2_0), 0)
-WDA_OBJS += $(WDA_SRC_DIR)/wlan_qct_wda.o \
- $(WDA_SRC_DIR)/wlan_qct_wda_ds.o
-endif
-
############ WDI ############
WDI_DIR := CORE/WDI
WDI_CP_INC := -I$(WLAN_ROOT)/$(WDI_DIR)/CP/inc/
-WDI_DP_INC := -I$(WLAN_ROOT)/$(WDI_DIR)/DP/inc/
+WDI_DP_INC := -I$(WLAN_ROOT)/$(WDI_DIR)/DP/inc/
WDI_TRP_INC := -I$(WLAN_ROOT)/$(WDI_DIR)/TRP/CTS/inc/ \
-I$(WLAN_ROOT)/$(WDI_DIR)/TRP/DTS/inc/
@@ -875,7 +835,6 @@ WCNSS_INC := -I$(WLAN_ROOT)/wcnss/inc
LINUX_INC := -Iinclude/linux
INCS := $(BAP_INC) \
- $(DXE_INC) \
$(HDD_INC) \
$(EPPING_INC) \
$(LINUX_INC) \
@@ -891,9 +850,7 @@ INCS := $(BAP_INC) \
$(WDI_INC) \
$(DFS_INC)
-ifeq ($(CONFIG_QCA_WIFI_2_0), 0)
-INCS += $(DXE_INC)
-else
+ifeq ($(CONFIG_QCA_WIFI_2_0), 1)
INCS += $(WMA_INC) \
$(COMMON_INC) \
$(WMI_INC) \
@@ -914,8 +871,6 @@ ifeq ($(CONFIG_REMOVE_PKT_LOG), 0)
INCS += $(PKTLOG_INC)
endif
-else
-INCS += $(DXE_INC)
endif
endif
@@ -934,8 +889,7 @@ OBJS := $(BAP_OBJS) \
$(DFS_OBJS)
ifeq ($(CONFIG_QCA_WIFI_2_0), 0)
-OBJS += $(DXE_OBJS) \
- $(TL_OBJS)
+OBJS += $(TL_OBJS)
else
OBJS += $(WMA_OBJS) \
$(TLSHIM_OBJS) \
@@ -955,8 +909,6 @@ ifeq ($(CONFIG_REMOVE_PKT_LOG), 0)
OBJS += $(PKTLOG_OBJS)
endif
-else
-OBJS += $(DXE_OBJS)
endif
endif
diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini
index bd171d65fb61..bd5e48cdd47b 100755
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -582,6 +582,9 @@ gEnableLpassSupport=0
# Whether userspace country code setting shld have priority
gCountryCodePriority=1
+# Enable(1)/Disable(0) SIFS burst
+gEnableSifsBurst=1
+
END
# Note: Configuration parser would not read anything past the END marker
diff --git a/tools/fwdebuglog/nan-parser.c b/tools/fwdebuglog/nan-parser.c
index 7def50bebec7..5f00bd867a8f 100644
--- a/tools/fwdebuglog/nan-parser.c
+++ b/tools/fwdebuglog/nan-parser.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*