qcacmn: Handling MIC failures for QCN9224 target
For QCN9224 target, All the MIC failures are reported as decrypt error from FW. So, added changes to handle MIC failures for QCN9224 target . Change-Id: I32e616e01e3cd6e76ef105d73fd8a87ce2c81cb9 CRs-Fixed: 3192749
这个提交包含在:
@@ -2665,6 +2665,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
struct dp_srng *dp_rxdma_srng;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
uint8_t *rx_tlv_hdr;
|
||||
bool is_tkip_mic_err;
|
||||
qdf_nbuf_t nbuf_head = NULL;
|
||||
qdf_nbuf_t nbuf_tail = NULL;
|
||||
qdf_nbuf_t nbuf, next;
|
||||
@@ -3062,6 +3063,20 @@ done:
|
||||
break;
|
||||
|
||||
case HAL_RXDMA_ERR_DECRYPT:
|
||||
/* All the TKIP-MIC failures are treated as Decrypt Errors
|
||||
* for QCN9224 Targets
|
||||
*/
|
||||
is_tkip_mic_err = hal_rx_msdu_end_is_tkip_mic_err(hal_soc, rx_tlv_hdr);
|
||||
|
||||
if (is_tkip_mic_err && txrx_peer) {
|
||||
dp_rx_process_mic_error(soc, nbuf,
|
||||
rx_tlv_hdr,
|
||||
txrx_peer);
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer,
|
||||
rx.err.mic_err,
|
||||
1);
|
||||
break;
|
||||
}
|
||||
|
||||
if (txrx_peer) {
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer,
|
||||
|
@@ -274,6 +274,9 @@ struct rx_pkt_tlvs {
|
||||
#define HAL_RX_TLV_DA_IS_MCBC_GET(_rx_pkt_tlv) \
|
||||
HAL_RX_MSDU_END(_rx_pkt_tlv).da_is_mcbc
|
||||
|
||||
#define HAL_RX_TLV_IS_TKIP_MIC_ERR_GET(_rx_pkt_tlv) \
|
||||
HAL_RX_MSDU_END(_rx_pkt_tlv).tkip_mic_err
|
||||
|
||||
#define HAL_RX_TLV_SA_IS_VALID_GET(_rx_pkt_tlv) \
|
||||
HAL_RX_MSDU_END(_rx_pkt_tlv).sa_is_valid
|
||||
|
||||
@@ -963,6 +966,21 @@ hal_rx_tlv_da_is_mcbc_get_be(uint8_t *buf)
|
||||
return HAL_RX_TLV_DA_IS_MCBC_GET(rx_pkt_tlvs);
|
||||
}
|
||||
|
||||
/**
|
||||
* hal_rx_tlv_is_tkip_mic_err_get_be(): API to get tkip Mic error
|
||||
* from rx_msdu_end TLV
|
||||
*
|
||||
* @ buf: pointer to the start of RX PKT TLV headers
|
||||
* Return: tkip_mic_err
|
||||
*/
|
||||
static inline uint8_t
|
||||
hal_rx_tlv_is_tkip_mic_err_get_be(uint8_t *buf)
|
||||
{
|
||||
struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
|
||||
|
||||
return HAL_RX_TLV_IS_TKIP_MIC_ERR_GET(rx_pkt_tlvs);
|
||||
}
|
||||
|
||||
/**
|
||||
* hal_rx_tlvd_sa_is_valid_get_be(): API to get the sa_is_valid bit from
|
||||
* rx_msdu_end TLV
|
||||
|
@@ -840,6 +840,7 @@ struct hal_hw_txrx_ops {
|
||||
/* rx */
|
||||
uint8_t (*hal_rx_get_rx_fragment_number)(uint8_t *buf);
|
||||
uint8_t (*hal_rx_msdu_end_da_is_mcbc_get)(uint8_t *buf);
|
||||
uint8_t (*hal_rx_msdu_end_is_tkip_mic_err)(uint8_t *buf);
|
||||
uint8_t (*hal_rx_msdu_end_sa_is_valid_get)(uint8_t *buf);
|
||||
uint16_t (*hal_rx_msdu_end_sa_idx_get)(uint8_t *buf);
|
||||
uint32_t (*hal_rx_desc_is_first_msdu)(void *hw_desc_addr);
|
||||
|
@@ -1124,6 +1124,26 @@ hal_rx_msdu_end_da_is_mcbc_get(hal_soc_handle_t hal_soc_hdl, uint8_t *buf)
|
||||
return hal_soc->ops->hal_rx_msdu_end_da_is_mcbc_get(buf);
|
||||
}
|
||||
|
||||
/**
|
||||
* hal_rx_msdu_end_is_tkip_mic_err: API to check if pkt has mic error
|
||||
* from rx_msdu_end TLV
|
||||
*
|
||||
* @buf: pointer to the start of RX PKT TLV headers
|
||||
*
|
||||
* Return: tkip_mic_err
|
||||
*/
|
||||
static inline uint8_t
|
||||
hal_rx_msdu_end_is_tkip_mic_err(hal_soc_handle_t hal_soc_hdl,
|
||||
uint8_t *buf)
|
||||
{
|
||||
struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
|
||||
|
||||
if (hal_soc->ops->hal_rx_msdu_end_is_tkip_mic_err)
|
||||
return hal_soc->ops->hal_rx_msdu_end_is_tkip_mic_err(buf);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* hal_rx_msdu_end_first_msdu_get: API to get first msdu status
|
||||
* from rx_msdu_end TLV
|
||||
|
@@ -985,6 +985,7 @@ static void hal_rx_dump_msdu_end_tlv_9224(void *msduend,
|
||||
"sa_is_valid: %d "
|
||||
"da_is_valid: %d "
|
||||
"da_is_mcbc: %d "
|
||||
"tkip_mic_err: %d "
|
||||
"l3_header_padding: %d "
|
||||
"first_msdu: %d "
|
||||
"last_msdu: %d "
|
||||
@@ -1010,6 +1011,7 @@ static void hal_rx_dump_msdu_end_tlv_9224(void *msduend,
|
||||
msdu_end->sa_is_valid,
|
||||
msdu_end->da_is_valid,
|
||||
msdu_end->da_is_mcbc,
|
||||
msdu_end->tkip_mic_err,
|
||||
msdu_end->l3_header_padding,
|
||||
msdu_end->first_msdu,
|
||||
msdu_end->last_msdu,
|
||||
@@ -1782,6 +1784,8 @@ static void hal_hw_txrx_ops_attach_qcn9224(struct hal_soc *hal_soc)
|
||||
hal_rx_get_rx_fragment_number_be,
|
||||
hal_soc->ops->hal_rx_msdu_end_da_is_mcbc_get =
|
||||
hal_rx_tlv_da_is_mcbc_get_be;
|
||||
hal_soc->ops->hal_rx_msdu_end_is_tkip_mic_err =
|
||||
hal_rx_tlv_is_tkip_mic_err_get_be;
|
||||
hal_soc->ops->hal_rx_msdu_end_sa_is_valid_get =
|
||||
hal_rx_tlv_sa_is_valid_get_be;
|
||||
hal_soc->ops->hal_rx_msdu_end_sa_idx_get = hal_rx_tlv_sa_idx_get_be;
|
||||
|
在新工单中引用
屏蔽一个用户