qcacmn: WEP bit set for RAW Mode Workaround

Set WEP bit for protection disabled VAP, to avoid
Hardware crash

Change-Id: I4121d04de9465e07aae2ba24930b1045fb8addf8
CRs-Fixed: 2132317
This commit is contained in:
ruchi agrawal 2017-10-25 09:03:28 +05:30 • committed by snandini
commit 45f3ac45c9
4 changed files with 27 additions and 3 deletions

View file

@ -549,6 +549,7 @@ enum cdp_pdev_param_type {
* @CDP_ENABLE_PROXYSTA: proxy sta
* @CDP_UPDATE_TDLS_FLAGS: tdls link flags
* @CDP_ENABLE_AP_BRIDGE: set ap_bridging enable/disable
* @CDP_ENABLE_CIPHER : set cipher type based on security
*/
enum cdp_vdev_param_type {
CDP_ENABLE_NAWDS,
@ -558,6 +559,7 @@ enum cdp_vdev_param_type {
CDP_UPDATE_TDLS_FLAGS,
CDP_CFG_WDS_AGING_TIMER,
CDP_ENABLE_AP_BRIDGE,
CDP_ENABLE_CIPHER
};
#define TXRX_FW_STATS_TXSTATS 1

View file

@ -2726,6 +2726,7 @@ static struct cdp_vdev *dp_vdev_attach_wifi3(struct cdp_pdev *txrx_pdev,
vdev->delete.pending = 0;
vdev->safemode = 0;
vdev->drop_unenc = 1;
vdev->sec_type = cdp_sec_type_none;
#ifdef notyet
vdev->filters_num = 0;
#endif
@ -4817,6 +4818,9 @@ static void dp_set_vdev_param(struct cdp_vdev *vdev_handle,
else
vdev->ap_bridge_enabled = false;
break;
case CDP_ENABLE_CIPHER:
vdev->sec_type = val;
break;
default:
break;
}

View file

@ -55,6 +55,22 @@
/* invalid peer id for reinject*/
#define DP_INVALID_PEER 0XFFFE
/*mapping between hal encrypt type and cdp_sec_type*/
#define MAX_CDP_SEC_TYPE 12
static const uint8_t sec_type_map[MAX_CDP_SEC_TYPE] = {
HAL_TX_ENCRYPT_TYPE_NO_CIPHER,
HAL_TX_ENCRYPT_TYPE_WEP_128,
HAL_TX_ENCRYPT_TYPE_WEP_104,
HAL_TX_ENCRYPT_TYPE_WEP_40,
HAL_TX_ENCRYPT_TYPE_TKIP_WITH_MIC,
HAL_TX_ENCRYPT_TYPE_TKIP_NO_MIC,
HAL_TX_ENCRYPT_TYPE_AES_CCMP_128,
HAL_TX_ENCRYPT_TYPE_WAPI,
HAL_TX_ENCRYPT_TYPE_AES_CCMP_256,
HAL_TX_ENCRYPT_TYPE_AES_GCMP_128,
HAL_TX_ENCRYPT_TYPE_AES_GCMP_256,
HAL_TX_ENCRYPT_TYPE_WAPI_GCM_SM4};
/**
* dp_tx_get_queue() - Returns Tx queue IDs to be used for this Tx frame
* @vdev: DP Virtual device handle
@ -716,10 +732,8 @@ static qdf_nbuf_t dp_tx_prepare_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
DP_STATS_INC_PKT(vdev, tx_i.raw.raw_pkt, 1, qdf_nbuf_len(nbuf));
/* SWAR for HW: Enable WEP bit in the AMSDU frames for RAW mode */
if ((qos_wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_QOS)
&& (qos_wh->i_qos[0] & IEEE80211_QOS_AMSDU)) {
if (qos_wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_QOS)
qos_wh->i_fc[1] |= IEEE80211_FC1_WEP;
}
if (QDF_STATUS_SUCCESS != qdf_nbuf_map(vdev->osdev, nbuf,
QDF_DMA_TO_DEVICE)) {
@ -800,6 +814,8 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
hal_tx_desc_set_encap_type(hal_tx_desc_cached, tx_desc->tx_encap_type);
hal_tx_desc_set_dscp_tid_table_id(hal_tx_desc_cached,
vdev->dscp_tid_map_id);
hal_tx_desc_set_encrypt_type(hal_tx_desc_cached,
sec_type_map[vdev->sec_type]);
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s length:%d , type = %d, dma_addr %llx, offset %d desc id %u",

View file

@ -1192,6 +1192,8 @@ struct dp_vdev {
/* AP BRIDGE enabled */
uint32_t ap_bridge_enabled;
enum cdp_sec_type sec_type;
};