summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnjaneedevi Kapparapu <akappa@codeaurora.org>2014-11-05 18:26:17 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2014-11-05 18:27:36 +0530
commit8358b68a2eb9ba279bdfdf25cd8f06111bf20f3b (patch)
tree652610133a5b5705c71d349308ff6f18dbc7e5ab
parentec247b030b96674441cdd785f6b626759aa2402c (diff)
parent5235cf97475998d44721d05113cf174dfc4859ec (diff)
Release 1.0.0.227 QCACLD WLAN Drive
Merge remote-tracking branch 'origin/caf/caf-wlan/master' into HEAD * origin/caf/caf-wlan/master: Cafstaging Release 1.0.0.227 wlan: handle the MIRACAST command in GO mode. wlan: qca-cld: MIC Error Fix qcacld: Update default DSCP to UP mapping qcacld SAP: Ignore DFS ch from ACS if DFS disabled Change-Id: I2aeaf9ab2c14128e1f509915a82060933fe58480
-rw-r--r--CORE/CLD_TXRX/HTT/htt_rx.c50
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx.c32
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx.h8
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c6
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c69
-rw-r--r--CORE/HDD/src/wlan_hdd_wmm.c17
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/SAP/src/sapChSelect.c15
-rw-r--r--CORE/SERVICES/COMMON/ol_htt_rx_api.h1
-rw-r--r--CORE/SERVICES/COMMON/wal_rx_desc.h4
11 files changed, 158 insertions, 49 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt_rx.c b/CORE/CLD_TXRX/HTT/htt_rx.c
index ab8af1642749..4443d8321693 100644
--- a/CORE/CLD_TXRX/HTT/htt_rx.c
+++ b/CORE/CLD_TXRX/HTT/htt_rx.c
@@ -1294,7 +1294,7 @@ htt_rx_amsdu_rx_in_order_pop_ll(
adf_nbuf_t *head_msdu,
adf_nbuf_t *tail_msdu)
{
- adf_nbuf_t msdu, next;
+ adf_nbuf_t msdu, next, prev = NULL;
u_int8_t *rx_ind_data;
u_int32_t *msg_word;
unsigned int msdu_count = 0;
@@ -1316,6 +1316,7 @@ htt_rx_amsdu_rx_in_order_pop_ll(
if (offload_ind) {
ol_rx_offload_paddr_deliver_ind_handler(pdev, msdu_count,
msg_word);
+ *head_msdu = *tail_msdu = NULL;
return 0;
}
@@ -1325,6 +1326,7 @@ htt_rx_amsdu_rx_in_order_pop_ll(
if (adf_os_unlikely(NULL == msdu)) {
adf_os_print("%s: netbuf pop failed!\n", __FUNCTION__);
+ *tail_msdu = NULL;
return 0;
}
@@ -1359,6 +1361,50 @@ htt_rx_amsdu_rx_in_order_pop_ll(
msdu_count--;
+ if (adf_os_unlikely((*((u_int8_t *) &rx_desc->fw_desc.u.val)) &
+ FW_RX_DESC_MIC_ERR_M)) {
+ u_int8_t tid =
+ HTT_RX_IN_ORD_PADDR_IND_EXT_TID_GET(*(u_int32_t *)rx_ind_data);
+ u_int16_t peer_id =
+ HTT_RX_IN_ORD_PADDR_IND_PEER_ID_GET(*(u_int32_t *)rx_ind_data);
+ ol_rx_mic_error_handler(pdev->txrx_pdev, tid, peer_id, rx_desc, msdu);
+
+ htt_rx_desc_frame_free(pdev, msdu);
+
+ /* if this is the last msdu */
+ if (!msdu_count) {
+ /* if this is the only msdu */
+ if (!prev) {
+ *head_msdu = *tail_msdu = NULL;
+ return 0;
+ } else {
+ *tail_msdu = prev;
+ adf_nbuf_set_next(prev, NULL);
+ return 1;
+ }
+ } else { /* if this is not the last msdu */
+ /* get the next msdu */
+ msg_word += HTT_RX_IN_ORD_PADDR_IND_MSDU_DWORDS;
+ next = htt_rx_in_order_netbuf_pop(pdev,
+ HTT_RX_IN_ORD_PADDR_IND_PADDR_GET(*msg_word));
+ if (adf_os_unlikely(NULL == next)) {
+ adf_os_print("%s: netbuf pop failed!\n", __FUNCTION__);
+ *tail_msdu = NULL;
+ return 0;
+ }
+
+ /* if this is not the first msdu, update the next pointer of the
+ preceding msdu */
+ if (prev) {
+ adf_nbuf_set_next(prev, next);
+ } else {/* if this is the first msdu, update the head pointer */
+ *head_msdu = next;
+ }
+ msdu = next;
+ continue;
+ }
+ }
+
/* check if this is the last msdu */
if (msdu_count) {
msg_word += HTT_RX_IN_ORD_PADDR_IND_MSDU_DWORDS;
@@ -1366,9 +1412,11 @@ htt_rx_amsdu_rx_in_order_pop_ll(
HTT_RX_IN_ORD_PADDR_IND_PADDR_GET(*msg_word));
if (adf_os_unlikely(NULL == next)) {
adf_os_print("%s: netbuf pop failed!\n", __FUNCTION__);
+ *tail_msdu = NULL;
return 0;
}
adf_nbuf_set_next(msdu, next);
+ prev = msdu;
msdu = next;
}
else {
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.c b/CORE/CLD_TXRX/TXRX/ol_rx.c
index a88985056521..fe1fe504dccf 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_rx.c
@@ -1166,6 +1166,38 @@ ol_rx_offload_paddr_deliver_ind_handler(
}
htt_rx_msdu_buff_replenish(htt_pdev);
}
+
+void
+ol_rx_mic_error_handler(
+ ol_txrx_pdev_handle pdev,
+ u_int8_t tid,
+ u_int16_t peer_id,
+ void * msdu_desc,
+ adf_nbuf_t msdu )
+{
+ union htt_rx_pn_t pn = {0};
+ u_int8_t key_id = 0;
+
+ struct ol_txrx_peer_t *peer = NULL;
+ struct ol_txrx_vdev_t *vdev = NULL;
+
+ if (pdev) {
+ peer = ol_txrx_peer_find_by_id(pdev, peer_id);
+ if (peer) {
+ vdev = peer->vdev;
+ if (vdev) {
+ htt_rx_mpdu_desc_pn(vdev->pdev->htt_pdev, msdu_desc, &pn, 48);
+
+ if (htt_rx_msdu_desc_key_id(vdev->pdev->htt_pdev, msdu_desc, &key_id)
+ == A_TRUE) {
+ ol_rx_err(vdev->pdev->ctrl_pdev, vdev->vdev_id,
+ peer->mac_addr.raw, tid, 0,
+ OL_RX_ERR_TKIP_MIC, msdu, &pn.pn48, key_id);
+ }
+ }
+ }
+ }
+}
#if 0
/**
* @brief populates vow ext stats in given network buffer.
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.h b/CORE/CLD_TXRX/TXRX/ol_rx.h
index bed29eb0c56e..db4a0fabf3f3 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx.h
+++ b/CORE/CLD_TXRX/TXRX/ol_rx.h
@@ -69,4 +69,12 @@ ol_rx_offload_paddr_deliver_ind_handler(
u_int32_t msdu_count,
u_int32_t * msg_word );
+void
+ol_rx_mic_error_handler(
+ ol_txrx_pdev_handle pdev,
+ u_int8_t tid,
+ u_int16_t peer_id,
+ void * msdu_desc,
+ adf_nbuf_t msdu );
+
#endif /* _OL_RX__H_ */
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 9a26862b1543..2af68af189f7 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1715,4 +1715,5 @@ void hdd_update_macaddr(hdd_config_t *cfg_ini, v_MACADDR_t hw_macaddr);
void wlan_hdd_disable_roaming(hdd_adapter_t *pAdapter);
void wlan_hdd_enable_roaming(hdd_adapter_t *pAdapter);
#endif
+int hdd_set_miracast_mode(hdd_adapter_t *pAdapter, tANI_U8 *command);
#endif // end #if !defined( WLAN_HDD_MAIN_H )
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 9d7bd519c2a5..f4aaf180dbfa 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -410,7 +410,11 @@ static int hdd_hostapd_driver_command(hdd_adapter_t *pAdapter,
ret = sapSetPreferredChannel(command);
#endif
}
-
+ else if (strncmp(command, "MIRACAST", 8) == 0)
+ {
+ hddLog(VOS_TRACE_LEVEL_INFO, "%s: Received MIRACAST command", __func__);
+ ret = hdd_set_miracast_mode(pAdapter, command);
+ }
exit:
if (command)
{
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 1172b2b75748..959b3607d638 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -3932,6 +3932,44 @@ static void hdd_wma_send_fastreassoc_cmd(int sessionId, tSirMacAddr bssid,
}
#endif
+/**
+ * hdd_set_miracast_mode() - function used to set the miracast mode value
+ * @pAdapter: pointer to the adapter of the interface.
+ * @command: pointer to the command buffer "MIRACAST <value>".
+ * Return: 0 on success -EINVAL on failure.
+ */
+int hdd_set_miracast_mode(hdd_adapter_t *pAdapter, tANI_U8 *command)
+{
+ tHalHandle hHal = WLAN_HDD_GET_CTX(pAdapter)->hHal;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ tANI_U8 filterType = 0;
+ tANI_U8 *value;
+ int ret;
+
+ value = command + 9;
+
+ /* Convert the value from ascii to integer */
+ ret = kstrtou8(value, 10, &filterType);
+ if (ret < 0) {
+ /* If the input value is greater than max value of datatype,
+ * then also kstrtou8 fails
+ */
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s: kstrtou8 failed range", __func__);
+ return -EINVAL;
+ }
+
+ /* Filtertype value should be either 0-Disabled, 1-Source, 2-sink */
+ if ((filterType < WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL ) ||
+ (filterType > WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Accepted Values are 0 to 2."
+ "0-Disabled, 1-Source, 2-Sink", __func__);
+ return -EINVAL;
+ }
+ hddLog(VOS_TRACE_LEVEL_INFO, "%s: miracast mode %hu", __func__, filterType);
+ pMac->fMiracastSessionPresent = filterType;
+ return 0;
+}
+
static int hdd_driver_command(hdd_adapter_t *pAdapter,
hdd_priv_data_t *ppriv_data)
{
@@ -5528,35 +5566,10 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter,
}
else if ( strncasecmp(command, "MIRACAST", 8) == 0 )
{
- tHalHandle hHal = WLAN_HDD_GET_CTX(pAdapter)->hHal;
- tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
- tANI_U8 filterType = 0;
- tANI_U8 *value;
- value = command + 9;
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ "%s: Received MIRACAST command", __func__);
- /* Convert the value from ascii to integer */
- ret = kstrtou8(value, 10, &filterType);
- if (ret < 0)
- {
- /* If the input value is greater than max value of datatype,
- * then also kstrtou8 fails
- */
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: kstrtou8 failed range ", __func__);
- ret = -EINVAL;
- goto exit;
- }
- if ((filterType < WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL ) ||
- (filterType > WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL))
- {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: Accepted Values are 0 to 2. 0-Disabled, 1-Source,"
- " 2-Sink ", __func__);
- ret = -EINVAL;
- goto exit;
- }
- //Filtertype value should be either 0-Disabled, 1-Source, 2-sink
- pMac->fMiracastSessionPresent = filterType;
+ ret = hdd_set_miracast_mode(pAdapter, command);
}
else if (strncmp(command, "SETRMCTXRATE", 12) == 0)
{
diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c
index 3db29261a70f..a43b3a30d7b7 100644
--- a/CORE/HDD/src/wlan_hdd_wmm.c
+++ b/CORE/HDD/src/wlan_hdd_wmm.c
@@ -1468,18 +1468,13 @@ VOS_STATUS hdd_wmm_init ( hdd_adapter_t *pAdapter )
VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_INFO_LOW,
"%s: Entered", __func__);
- // DSCP to User Priority Lookup Table
- for (dscp = 0; dscp <= WLAN_HDD_MAX_DSCP; dscp++)
- {
- hddWmmDscpToUpMap[dscp] = SME_QOS_WMM_UP_BE;
+ /*
+ * DSCP to User Priority Lookup Table
+ * By default use the 3 Precedence bits of DSCP as the User Priority
+ */
+ for (dscp = 0; dscp <= WLAN_HDD_MAX_DSCP; dscp++) {
+ hddWmmDscpToUpMap[dscp] = dscp >> 3;
}
- hddWmmDscpToUpMap[8] = SME_QOS_WMM_UP_BK;
- hddWmmDscpToUpMap[16] = SME_QOS_WMM_UP_RESV;
- hddWmmDscpToUpMap[24] = SME_QOS_WMM_UP_EE;
- hddWmmDscpToUpMap[32] = SME_QOS_WMM_UP_CL;
- hddWmmDscpToUpMap[40] = SME_QOS_WMM_UP_VI;
- hddWmmDscpToUpMap[48] = SME_QOS_WMM_UP_VO;
- hddWmmDscpToUpMap[56] = SME_QOS_WMM_UP_NC;
return VOS_STATUS_SUCCESS;
}
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index a999058cbb8f..604ff745a8c6 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 226
+#define QWLAN_VERSION_BUILD 227
-#define QWLAN_VERSIONSTR "1.0.0.226"
+#define QWLAN_VERSIONSTR "1.0.0.227"
#define AR6320_REV1_VERSION 0x5000000
diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c
index 7ab4756b1f80..021b709e4d79 100644
--- a/CORE/SAP/src/sapChSelect.c
+++ b/CORE/SAP/src/sapChSelect.c
@@ -609,6 +609,8 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle,
#ifdef FEATURE_WLAN_CH_AVOID
v_U16_t i;
#endif
+ v_U32_t dfs_master_cap_enabled;
+ v_BOOL_t include_dfs_ch = VOS_TRUE;
VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s", __func__);
@@ -629,6 +631,14 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle,
pSpectInfoParams->pSpectCh = pSpectCh;
pChans = pMac->scan.base20MHzChannels.channelList;
+#if defined(FEATURE_WLAN_STA_AP_MODE_DFS_DISABLE) || defined(WLAN_FEATURE_MBSSID)
+ if (pSapCtx->dfs_ch_disable == VOS_TRUE)
+ include_dfs_ch = VOS_FALSE;
+#endif
+ ccmCfgGetInt(halHandle, WNI_CFG_DFS_MASTER_ENABLED,
+ &dfs_master_cap_enabled);
+ if (dfs_master_cap_enabled == 0)
+ include_dfs_ch = VOS_FALSE;
// Fill the channel number in the spectrum in the operating freq band
for (channelnum = 0;
@@ -646,8 +656,7 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle,
continue;
}
-#if defined(FEATURE_WLAN_STA_AP_MODE_DFS_DISABLE) || defined(WLAN_FEATURE_MBSSID)
- if (pSapCtx->dfs_ch_disable == VOS_TRUE) {
+ if (include_dfs_ch == VOS_FALSE) {
if (VOS_IS_DFS_CH(*pChans)) {
chSafe = VOS_FALSE;
VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
@@ -656,7 +665,7 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle,
continue;
}
}
-#endif
+
#ifdef FEATURE_WLAN_CH_AVOID
for(i = 0; i < NUM_20MHZ_RF_CHANNELS; i++) {
if((safeChannels[i].channelNumber == *pChans) &&
diff --git a/CORE/SERVICES/COMMON/ol_htt_rx_api.h b/CORE/SERVICES/COMMON/ol_htt_rx_api.h
index f0983c277ad0..f9a325a9cc7c 100644
--- a/CORE/SERVICES/COMMON/ol_htt_rx_api.h
+++ b/CORE/SERVICES/COMMON/ol_htt_rx_api.h
@@ -506,7 +506,6 @@ htt_rx_msdu_forward(htt_pdev_handle pdev, void *msdu_desc);
int
htt_rx_msdu_inspect(htt_pdev_handle pdev, void *msdu_desc);
-
/**
* @brief Provide all action specifications for a rx MSDU
* @details
diff --git a/CORE/SERVICES/COMMON/wal_rx_desc.h b/CORE/SERVICES/COMMON/wal_rx_desc.h
index ecdca1181828..d35120c7da69 100644
--- a/CORE/SERVICES/COMMON/wal_rx_desc.h
+++ b/CORE/SERVICES/COMMON/wal_rx_desc.h
@@ -90,8 +90,8 @@ struct fw_rx_desc_base {
#define FW_RX_DESC_DISCARD_S 0
#define FW_RX_DESC_FORWARD_M 0x2
#define FW_RX_DESC_FORWARD_S 1
-#define FW_RX_DESC_ANY_ERR_M 0x4
-#define FW_RX_DESC_ANY_ERR_S 2
+#define FW_RX_DESC_MIC_ERR_M 0x4
+#define FW_RX_DESC_MIC_ERR_S 2
#define FW_RX_DESC_DUP_ERR_M 0x8
#define FW_RX_DESC_DUP_ERR_S 3
#define FW_RX_DESC_INSPECT_M 0x20