Loading core/cds/src/cds_concurrency.c +5 −0 Original line number Diff line number Diff line Loading @@ -3036,6 +3036,11 @@ bool cds_is_connection_in_progress(uint8_t *session_id, } if (hdd_ctx->connection_in_progress) { cds_debug("AP/GO: connection is in progress"); if (session_id && reason) { *session_id = adapter->sessionId; *reason = eHDD_SAP_CONNECTION_IN_PROGRESS; } return true; } } Loading core/dp/htt/htt_t2h.c +75 −2 Original line number Diff line number Diff line Loading @@ -186,6 +186,12 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, uint16_t seq_num_start, seq_num_end; enum htt_rx_flush_action action; if (qdf_nbuf_len(htt_t2h_msg) < HTT_RX_FLUSH_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_FLUSH_PEER_ID_GET(*msg_word); tid = HTT_RX_FLUSH_TID_GET(*msg_word); seq_num_start = Loading Loading @@ -228,7 +234,13 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, { uint16_t peer_id; uint8_t tid; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_RX_FRAG_IND_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_FRAG_IND_PEER_ID_GET(*msg_word); tid = HTT_RX_FRAG_IND_EXT_TID_GET(*msg_word); htt_rx_frag_set_last_msdu(pdev, htt_t2h_msg); Loading Loading @@ -289,6 +301,12 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, uint16_t peer_id; uint8_t vdev_id; if (qdf_nbuf_len(htt_t2h_msg) < HTT_RX_PEER_MAP_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_PEER_MAP_PEER_ID_GET(*msg_word); vdev_id = HTT_RX_PEER_MAP_VDEV_ID_GET(*msg_word); peer_mac_addr = htt_t2h_mac_addr_deswizzle( Loading @@ -312,6 +330,12 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, { uint16_t peer_id; if (qdf_nbuf_len(htt_t2h_msg) < HTT_RX_PEER_UNMAP_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_PEER_UNMAP_PEER_ID_GET(*msg_word); if (peer_id > ol_cfg_max_peer_id(pdev->ctrl_pdev)) { qdf_print("%s: HTT_T2H_MSG_TYPE_PEER_UNMAP," Loading @@ -330,6 +354,12 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, enum htt_sec_type sec_type; int is_unicast; if (qdf_nbuf_len(htt_t2h_msg) < HTT_SEC_IND_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_SEC_IND_PEER_ID_GET(*msg_word); sec_type = HTT_SEC_IND_SEC_TYPE_GET(*msg_word); is_unicast = HTT_SEC_IND_UNICAST_GET(*msg_word); Loading Loading @@ -417,6 +447,13 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, uint32_t htt_credit_delta_abs; int32_t htt_credit_delta; int sign, old_credit; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_TX_CREDIT_MSG_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } htt_credit_delta_abs = HTT_TX_CREDIT_DELTA_ABS_GET(*msg_word); Loading Loading @@ -544,8 +581,16 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, struct ol_error_info err_info; struct ol_txrx_vdev_t *vdev; struct ol_txrx_peer_t *peer; uint16_t peer_id = HTT_RX_OFLD_PKT_ERR_MIC_ERR_PEER_ID_GET uint16_t peer_id; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_RX_OFLD_PKT_ERR_MIC_ERR_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_OFLD_PKT_ERR_MIC_ERR_PEER_ID_GET (*(msg_word + 1)); peer = ol_txrx_peer_find_by_id(pdev->txrx_pdev, Loading Loading @@ -849,6 +894,13 @@ void htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) uint16_t peer_id; uint8_t tid, pn_ie_cnt, *pn_ie = NULL; uint16_t seq_num_start, seq_num_end; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_RX_PN_IND_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } /*First dword */ peer_id = HTT_RX_PN_IND_PEER_ID_GET(*msg_word); Loading @@ -861,6 +913,13 @@ void htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) seq_num_end = HTT_RX_PN_IND_SEQ_NUM_END_GET(*msg_word); pn_ie_cnt = HTT_RX_PN_IND_PN_IE_CNT_GET(*msg_word); if (msg_len - HTT_RX_PN_IND_BYTES < pn_ie_cnt * sizeof(uint8_t)) { qdf_print("invalid pn_ie count"); WARN_ON(1); break; } msg_word++; /*Third dword */ if (pn_ie_cnt) Loading Loading @@ -1138,6 +1197,13 @@ void htt_t2h_msg_handler_fast(void *context, qdf_nbuf_t *cmpl_msdus, u_int16_t peer_id; u_int8_t tid, pn_ie_cnt, *pn_ie = NULL; int seq_num_start, seq_num_end; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_RX_PN_IND_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } /*First dword */ peer_id = HTT_RX_PN_IND_PEER_ID_GET(*msg_word); Loading @@ -1152,6 +1218,13 @@ void htt_t2h_msg_handler_fast(void *context, qdf_nbuf_t *cmpl_msdus, pn_ie_cnt = HTT_RX_PN_IND_PN_IE_CNT_GET(*msg_word); if (msg_len - HTT_RX_PN_IND_BYTES < pn_ie_cnt * sizeof(uint8_t)) { qdf_print("invalid pn_ie len"); WARN_ON(1); break; } msg_word++; /*Third dword*/ if (pn_ie_cnt) Loading core/dp/txrx/ol_txrx.c +37 −1 Original line number Diff line number Diff line Loading @@ -5857,6 +5857,8 @@ ol_txrx_update_tx_status(struct ol_txrx_pdev_t *pdev, tx_status->chan_flags = channel_flags; tx_status->ant_signal_db = mon_hdr->rssi_comb; tx_status->tx_status = mon_hdr->status; tx_status->add_rtap_ext = true; } /** Loading Loading @@ -5945,6 +5947,7 @@ ol_txrx_mon_tx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, mon_hdr.sgi = cmpl_desc->sgi; mon_hdr.ldpc = cmpl_desc->ldpc; mon_hdr.beamformed = cmpl_desc->beamformed; mon_hdr.status = status; qdf_nbuf_pull_head( msdu, Loading Loading @@ -6158,6 +6161,9 @@ ol_txrx_mon_rx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, ol_htt_mon_note_chan(pdev, chan); htt_rx_mon_get_rx_status(pdev->htt_pdev, rx_desc, &rx_status); rx_status.tx_status = status; rx_status.add_rtap_ext = true; /* clear IEEE80211_RADIOTAP_F_FCS flag*/ rx_status.rtap_flags &= ~(BIT(4)); rx_status.rtap_flags &= ~(BIT(2)); Loading Loading @@ -6194,6 +6200,36 @@ free_buf: drop_count = ol_txrx_drop_nbuf_list(buf_list); } /** * ol_txrx_pktcapture_status_map() - map Tx status for data packets * with packet capture Tx status * @status: Tx status * * Return: pktcapture_tx_status enum */ static enum pktcapture_tx_status ol_txrx_pktcapture_status_map(uint8_t status) { enum pktcapture_tx_status tx_status; switch (status) { case htt_tx_status_ok: tx_status = pktcapture_tx_status_ok; break; case htt_tx_status_discard: tx_status = pktcapture_tx_status_discard; break; case htt_tx_status_no_ack: tx_status = pktcapture_tx_status_no_ack; break; default: tx_status = pktcapture_tx_status_discard; break; } return tx_status; } void ol_txrx_mon_data_process(uint8_t vdev_id, qdf_nbuf_t mon_buf_list, enum mon_data_process_type type, Loading Loading @@ -6233,7 +6269,7 @@ void ol_txrx_mon_data_process(uint8_t vdev_id, pkt->monpkt = (void *)mon_buf_list; pkt->vdev_id = vdev_id; pkt->tid = tid; pkt->status = status; pkt->status = ol_txrx_pktcapture_status_map(status); pkt->pkt_format = pkt_format; cds_indicate_monpkt(sched_ctx, pkt); return; Loading core/dp/txrx/ol_txrx.h +13 −0 Original line number Diff line number Diff line Loading @@ -212,4 +212,17 @@ struct ol_txrx_fw_stats_desc_t struct ol_txrx_stats_req_internal *ol_txrx_fw_stats_desc_get_req(struct ol_txrx_pdev_t *pdev, uint8_t desc_id); /** * enum pktcapture_tx_status - packet capture tx status * @pktcapture_tx_status_ok: successfully sent + acked * @pktcapture_tx_status_discard: discard - not sent * @pktcapture_tx_status_no_ack: no_ack - sent, but no ack * * This enum has tx status types for packet capture mode */ enum pktcapture_tx_status { pktcapture_tx_status_ok, pktcapture_tx_status_discard, pktcapture_tx_status_no_ack, }; #endif /* _OL_TXRX__H_ */ core/hdd/inc/wlan_hdd_main.h +2 −0 Original line number Diff line number Diff line Loading @@ -363,6 +363,7 @@ enum { * @eHDD_REASSOC_IN_PROGRESS: reassociation is in progress * @eHDD_EAPOL_IN_PROGRESS: STA/P2P-CLI is in middle of EAPOL/WPS exchange * @eHDD_SAP_EAPOL_IN_PROGRESS: SAP/P2P-GO is in middle of EAPOL/WPS exchange * @eHDD_SAP_CONNECTION_IN_PROGRESS: SAP/P2P-GO is in middle of connection. */ typedef enum { eHDD_SCAN_REJECT_DEFAULT = 0, Loading @@ -370,6 +371,7 @@ typedef enum { eHDD_REASSOC_IN_PROGRESS, eHDD_EAPOL_IN_PROGRESS, eHDD_SAP_EAPOL_IN_PROGRESS, eHDD_SAP_CONNECTION_IN_PROGRESS, } scan_reject_states; #define MAX_PROBE_REQ_OUIS 16 Loading Loading
core/cds/src/cds_concurrency.c +5 −0 Original line number Diff line number Diff line Loading @@ -3036,6 +3036,11 @@ bool cds_is_connection_in_progress(uint8_t *session_id, } if (hdd_ctx->connection_in_progress) { cds_debug("AP/GO: connection is in progress"); if (session_id && reason) { *session_id = adapter->sessionId; *reason = eHDD_SAP_CONNECTION_IN_PROGRESS; } return true; } } Loading
core/dp/htt/htt_t2h.c +75 −2 Original line number Diff line number Diff line Loading @@ -186,6 +186,12 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, uint16_t seq_num_start, seq_num_end; enum htt_rx_flush_action action; if (qdf_nbuf_len(htt_t2h_msg) < HTT_RX_FLUSH_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_FLUSH_PEER_ID_GET(*msg_word); tid = HTT_RX_FLUSH_TID_GET(*msg_word); seq_num_start = Loading Loading @@ -228,7 +234,13 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, { uint16_t peer_id; uint8_t tid; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_RX_FRAG_IND_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_FRAG_IND_PEER_ID_GET(*msg_word); tid = HTT_RX_FRAG_IND_EXT_TID_GET(*msg_word); htt_rx_frag_set_last_msdu(pdev, htt_t2h_msg); Loading Loading @@ -289,6 +301,12 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, uint16_t peer_id; uint8_t vdev_id; if (qdf_nbuf_len(htt_t2h_msg) < HTT_RX_PEER_MAP_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_PEER_MAP_PEER_ID_GET(*msg_word); vdev_id = HTT_RX_PEER_MAP_VDEV_ID_GET(*msg_word); peer_mac_addr = htt_t2h_mac_addr_deswizzle( Loading @@ -312,6 +330,12 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, { uint16_t peer_id; if (qdf_nbuf_len(htt_t2h_msg) < HTT_RX_PEER_UNMAP_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_PEER_UNMAP_PEER_ID_GET(*msg_word); if (peer_id > ol_cfg_max_peer_id(pdev->ctrl_pdev)) { qdf_print("%s: HTT_T2H_MSG_TYPE_PEER_UNMAP," Loading @@ -330,6 +354,12 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, enum htt_sec_type sec_type; int is_unicast; if (qdf_nbuf_len(htt_t2h_msg) < HTT_SEC_IND_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_SEC_IND_PEER_ID_GET(*msg_word); sec_type = HTT_SEC_IND_SEC_TYPE_GET(*msg_word); is_unicast = HTT_SEC_IND_UNICAST_GET(*msg_word); Loading Loading @@ -417,6 +447,13 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, uint32_t htt_credit_delta_abs; int32_t htt_credit_delta; int sign, old_credit; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_TX_CREDIT_MSG_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } htt_credit_delta_abs = HTT_TX_CREDIT_DELTA_ABS_GET(*msg_word); Loading Loading @@ -544,8 +581,16 @@ static void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, struct ol_error_info err_info; struct ol_txrx_vdev_t *vdev; struct ol_txrx_peer_t *peer; uint16_t peer_id = HTT_RX_OFLD_PKT_ERR_MIC_ERR_PEER_ID_GET uint16_t peer_id; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_RX_OFLD_PKT_ERR_MIC_ERR_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } peer_id = HTT_RX_OFLD_PKT_ERR_MIC_ERR_PEER_ID_GET (*(msg_word + 1)); peer = ol_txrx_peer_find_by_id(pdev->txrx_pdev, Loading Loading @@ -849,6 +894,13 @@ void htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) uint16_t peer_id; uint8_t tid, pn_ie_cnt, *pn_ie = NULL; uint16_t seq_num_start, seq_num_end; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_RX_PN_IND_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } /*First dword */ peer_id = HTT_RX_PN_IND_PEER_ID_GET(*msg_word); Loading @@ -861,6 +913,13 @@ void htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) seq_num_end = HTT_RX_PN_IND_SEQ_NUM_END_GET(*msg_word); pn_ie_cnt = HTT_RX_PN_IND_PN_IE_CNT_GET(*msg_word); if (msg_len - HTT_RX_PN_IND_BYTES < pn_ie_cnt * sizeof(uint8_t)) { qdf_print("invalid pn_ie count"); WARN_ON(1); break; } msg_word++; /*Third dword */ if (pn_ie_cnt) Loading Loading @@ -1138,6 +1197,13 @@ void htt_t2h_msg_handler_fast(void *context, qdf_nbuf_t *cmpl_msdus, u_int16_t peer_id; u_int8_t tid, pn_ie_cnt, *pn_ie = NULL; int seq_num_start, seq_num_end; int msg_len = qdf_nbuf_len(htt_t2h_msg); if (msg_len < HTT_RX_PN_IND_BYTES) { qdf_print("invalid nbuff len"); WARN_ON(1); break; } /*First dword */ peer_id = HTT_RX_PN_IND_PEER_ID_GET(*msg_word); Loading @@ -1152,6 +1218,13 @@ void htt_t2h_msg_handler_fast(void *context, qdf_nbuf_t *cmpl_msdus, pn_ie_cnt = HTT_RX_PN_IND_PN_IE_CNT_GET(*msg_word); if (msg_len - HTT_RX_PN_IND_BYTES < pn_ie_cnt * sizeof(uint8_t)) { qdf_print("invalid pn_ie len"); WARN_ON(1); break; } msg_word++; /*Third dword*/ if (pn_ie_cnt) Loading
core/dp/txrx/ol_txrx.c +37 −1 Original line number Diff line number Diff line Loading @@ -5857,6 +5857,8 @@ ol_txrx_update_tx_status(struct ol_txrx_pdev_t *pdev, tx_status->chan_flags = channel_flags; tx_status->ant_signal_db = mon_hdr->rssi_comb; tx_status->tx_status = mon_hdr->status; tx_status->add_rtap_ext = true; } /** Loading Loading @@ -5945,6 +5947,7 @@ ol_txrx_mon_tx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, mon_hdr.sgi = cmpl_desc->sgi; mon_hdr.ldpc = cmpl_desc->ldpc; mon_hdr.beamformed = cmpl_desc->beamformed; mon_hdr.status = status; qdf_nbuf_pull_head( msdu, Loading Loading @@ -6158,6 +6161,9 @@ ol_txrx_mon_rx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, ol_htt_mon_note_chan(pdev, chan); htt_rx_mon_get_rx_status(pdev->htt_pdev, rx_desc, &rx_status); rx_status.tx_status = status; rx_status.add_rtap_ext = true; /* clear IEEE80211_RADIOTAP_F_FCS flag*/ rx_status.rtap_flags &= ~(BIT(4)); rx_status.rtap_flags &= ~(BIT(2)); Loading Loading @@ -6194,6 +6200,36 @@ free_buf: drop_count = ol_txrx_drop_nbuf_list(buf_list); } /** * ol_txrx_pktcapture_status_map() - map Tx status for data packets * with packet capture Tx status * @status: Tx status * * Return: pktcapture_tx_status enum */ static enum pktcapture_tx_status ol_txrx_pktcapture_status_map(uint8_t status) { enum pktcapture_tx_status tx_status; switch (status) { case htt_tx_status_ok: tx_status = pktcapture_tx_status_ok; break; case htt_tx_status_discard: tx_status = pktcapture_tx_status_discard; break; case htt_tx_status_no_ack: tx_status = pktcapture_tx_status_no_ack; break; default: tx_status = pktcapture_tx_status_discard; break; } return tx_status; } void ol_txrx_mon_data_process(uint8_t vdev_id, qdf_nbuf_t mon_buf_list, enum mon_data_process_type type, Loading Loading @@ -6233,7 +6269,7 @@ void ol_txrx_mon_data_process(uint8_t vdev_id, pkt->monpkt = (void *)mon_buf_list; pkt->vdev_id = vdev_id; pkt->tid = tid; pkt->status = status; pkt->status = ol_txrx_pktcapture_status_map(status); pkt->pkt_format = pkt_format; cds_indicate_monpkt(sched_ctx, pkt); return; Loading
core/dp/txrx/ol_txrx.h +13 −0 Original line number Diff line number Diff line Loading @@ -212,4 +212,17 @@ struct ol_txrx_fw_stats_desc_t struct ol_txrx_stats_req_internal *ol_txrx_fw_stats_desc_get_req(struct ol_txrx_pdev_t *pdev, uint8_t desc_id); /** * enum pktcapture_tx_status - packet capture tx status * @pktcapture_tx_status_ok: successfully sent + acked * @pktcapture_tx_status_discard: discard - not sent * @pktcapture_tx_status_no_ack: no_ack - sent, but no ack * * This enum has tx status types for packet capture mode */ enum pktcapture_tx_status { pktcapture_tx_status_ok, pktcapture_tx_status_discard, pktcapture_tx_status_no_ack, }; #endif /* _OL_TXRX__H_ */
core/hdd/inc/wlan_hdd_main.h +2 −0 Original line number Diff line number Diff line Loading @@ -363,6 +363,7 @@ enum { * @eHDD_REASSOC_IN_PROGRESS: reassociation is in progress * @eHDD_EAPOL_IN_PROGRESS: STA/P2P-CLI is in middle of EAPOL/WPS exchange * @eHDD_SAP_EAPOL_IN_PROGRESS: SAP/P2P-GO is in middle of EAPOL/WPS exchange * @eHDD_SAP_CONNECTION_IN_PROGRESS: SAP/P2P-GO is in middle of connection. */ typedef enum { eHDD_SCAN_REJECT_DEFAULT = 0, Loading @@ -370,6 +371,7 @@ typedef enum { eHDD_REASSOC_IN_PROGRESS, eHDD_EAPOL_IN_PROGRESS, eHDD_SAP_EAPOL_IN_PROGRESS, eHDD_SAP_CONNECTION_IN_PROGRESS, } scan_reject_states; #define MAX_PROBE_REQ_OUIS 16 Loading