|
@@ -3177,104 +3177,6 @@ QDF_STATUS wma_lro_config_cmd(void *handle,
|
|
|
&wmi_lro_cmd);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * wma_indicate_err() - indicate an error to the protocol stack
|
|
|
- * @err_type: error type
|
|
|
- * @err_info: information associated with the error
|
|
|
- *
|
|
|
- * This function indicates an error encountered in the data path
|
|
|
- * to the protocol stack
|
|
|
- *
|
|
|
- * Return: none
|
|
|
- */
|
|
|
-void
|
|
|
-wma_indicate_err(
|
|
|
- enum ol_rx_err_type err_type,
|
|
|
- struct ol_error_info *err_info)
|
|
|
-{
|
|
|
- switch (err_type) {
|
|
|
- case OL_RX_ERR_TKIP_MIC:
|
|
|
- {
|
|
|
- tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
|
|
|
- struct mic_failure_ind *mic_err_ind;
|
|
|
- struct scheduler_msg cds_msg = {0};
|
|
|
- uint8_t vdev_id;
|
|
|
-
|
|
|
- if (!wma) {
|
|
|
- WMA_LOGE("%s: Failed to get wma context",
|
|
|
- __func__);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- mic_err_ind = qdf_mem_malloc(sizeof(*mic_err_ind));
|
|
|
- if (!mic_err_ind)
|
|
|
- return;
|
|
|
-
|
|
|
- qdf_mem_zero((void *)mic_err_ind,
|
|
|
- sizeof(*mic_err_ind));
|
|
|
- mic_err_ind->messageType = eWNI_SME_MIC_FAILURE_IND;
|
|
|
- mic_err_ind->length = sizeof(*mic_err_ind);
|
|
|
- vdev_id = err_info->u.mic_err.vdev_id;
|
|
|
- qdf_copy_macaddr(&mic_err_ind->bssId,
|
|
|
- (struct qdf_mac_addr *) &wma->interfaces[vdev_id].bssid);
|
|
|
- wma_err("MIC error: BSSID:"QDF_MAC_ADDR_STR,
|
|
|
- QDF_MAC_ADDR_ARRAY(mic_err_ind->bssId.bytes));
|
|
|
- qdf_mem_copy(mic_err_ind->info.taMacAddr,
|
|
|
- (struct qdf_mac_addr *) err_info->u.mic_err.ta,
|
|
|
- sizeof(tSirMacAddr));
|
|
|
- qdf_mem_copy(mic_err_ind->info.srcMacAddr,
|
|
|
- (struct qdf_mac_addr *) err_info->u.mic_err.sa,
|
|
|
- sizeof(tSirMacAddr));
|
|
|
- qdf_mem_copy(mic_err_ind->info.dstMacAddr,
|
|
|
- (struct qdf_mac_addr *) err_info->u.mic_err.da,
|
|
|
- sizeof(tSirMacAddr));
|
|
|
- mic_err_ind->info.keyId = err_info->u.mic_err.key_id;
|
|
|
- mic_err_ind->info.multicast =
|
|
|
- IEEE80211_IS_MULTICAST(err_info->u.mic_err.da);
|
|
|
- qdf_mem_copy(mic_err_ind->info.TSC,
|
|
|
- (void *)&err_info->
|
|
|
- u.mic_err.pn, SIR_CIPHER_SEQ_CTR_SIZE);
|
|
|
-
|
|
|
- qdf_mem_zero(&cds_msg, sizeof(struct scheduler_msg));
|
|
|
- cds_msg.type = eWNI_SME_MIC_FAILURE_IND;
|
|
|
- cds_msg.bodyptr = (void *) mic_err_ind;
|
|
|
- if (QDF_STATUS_SUCCESS !=
|
|
|
- scheduler_post_message(QDF_MODULE_ID_WMA,
|
|
|
- QDF_MODULE_ID_SME,
|
|
|
- QDF_MODULE_ID_SME,
|
|
|
- &cds_msg)) {
|
|
|
- WMA_LOGE("%s: mic failure ind post to SME failed",
|
|
|
- __func__);
|
|
|
- qdf_mem_free((void *)mic_err_ind);
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- default:
|
|
|
- {
|
|
|
- WMA_LOGE("%s: unhandled ol error type %d", __func__, err_type);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void wma_rx_mic_error_ind(void *scn_handle, uint16_t vdev_id, void *wh)
|
|
|
-{
|
|
|
- struct ieee80211_frame *w = (struct ieee80211_frame *)wh;
|
|
|
- struct ol_error_info err_info;
|
|
|
-
|
|
|
- err_info.u.mic_err.vdev_id = vdev_id;
|
|
|
- qdf_mem_copy(err_info.u.mic_err.da, w->i_addr1, QDF_MAC_ADDR_SIZE);
|
|
|
- qdf_mem_copy(err_info.u.mic_err.ta, w->i_addr2, QDF_MAC_ADDR_SIZE);
|
|
|
-
|
|
|
- WMA_LOGD("MIC vdev_id %d\n", vdev_id);
|
|
|
- wma_debug("MIC DA: "QDF_MAC_ADDR_STR,
|
|
|
- QDF_MAC_ADDR_ARRAY(err_info.u.mic_err.da));
|
|
|
- wma_debug("MIC TA: "QDF_MAC_ADDR_STR,
|
|
|
- QDF_MAC_ADDR_ARRAY(err_info.u.mic_err.ta));
|
|
|
-
|
|
|
- wma_indicate_err(OL_RX_ERR_TKIP_MIC, &err_info);
|
|
|
-}
|
|
|
-
|
|
|
uint8_t wma_rx_invalid_peer_ind(uint8_t vdev_id, void *wh)
|
|
|
{
|
|
|
struct ol_rx_inv_peer_params *rx_inv_msg;
|