Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc1a92d0 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge ec8b5286 on remote branch

Change-Id: I84f43b5425c2b638bcb8e08332030d7b619575ee
parents a7f68bb9 ec8b5286
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -58,6 +58,17 @@ enum cdp_nac_param_cmd {
	CDP_NAC_PARAM_LIST,
};

#define CDP_DELBA_INTERVAL_MS 3000
/**
 * enum cdp_delba_rcode - CDP reason code for sending DELBA
 * @CDP_DELBA_REASON_NONE: None
 * @CDP_DELBA_2K_JUMP: Sending DELBA from 2k_jump_handle
 */
enum cdp_delba_rcode {
	CDP_DELBA_REASON_NONE = 0,
	CDP_DELBA_2K_JUMP,
};

/**
 * enum vdev_peer_protocol_enter_exit - whether ingress or egress
 * @CDP_VDEV_PEER_PROTOCOL_IS_INGRESS: ingress
@@ -1097,12 +1108,14 @@ struct ol_if_ops {
	 * @vdev_id: dp vdev id
	 * @peer_macaddr: Peer mac addr
	 * @tid: Tid number
	 * @reason_code: Reason code
	 * @cdp_rcode: CDP reason code for sending DELBA
	 *
	 * Return: 0 for success, non-zero for failure
	 */
	int (*send_delba)(struct cdp_ctrl_objmgr_psoc *psoc, uint8_t vdev_id,
			  uint8_t *peer_macaddr, uint8_t tid,
			  uint8_t reason_code);
			  uint8_t reason_code, uint8_t cdp_rcode);

	int
	(*peer_delete_multiple_wds_entries)(struct cdp_ctrl_objmgr_psoc *psoc,
+3 −1
Original line number Diff line number Diff line
@@ -2311,11 +2311,13 @@ dp_get_pdev_from_soc_pdev_id_wifi3(struct dp_soc *soc,
 * @tid: TID
 * @ba_window_size: BlockAck window size
 * @start_seq: Starting sequence number
 * @bar_update: BAR update triggered
 *
 * Return: QDF_STATUS code
 */
QDF_STATUS dp_rx_tid_update_wifi3(struct dp_peer *peer, int tid, uint32_t
					 ba_window_size, uint32_t start_seq);
					 ba_window_size, uint32_t start_seq,
					 bool bar_update);

/**
 * dp_get_peer_mac_list(): function to get peer mac list of vdev
+28 −6
Original line number Diff line number Diff line
@@ -1650,6 +1650,27 @@ static void dp_srng_free(struct dp_soc *soc, struct dp_srng *srng)
	srng->hal_srng = NULL;
}

#ifdef DISABLE_MON_RING_MSI_CFG
/*
 * dp_skip_msi_cfg() - Check if msi cfg has to be skipped for ring_type
 * @ring_type: sring type
 *
 * Return: True if msi cfg should be skipped for srng type else false
 */
static inline bool dp_skip_msi_cfg(int ring_type)
{
	if (ring_type == RXDMA_MONITOR_STATUS)
		return true;

	return false;
}
#else
static inline bool dp_skip_msi_cfg(int ring_type)
{
	return false;
}
#endif

/*
 * dp_srng_init() - Initialize SRNG
 * @soc  : Data path soc handle
@@ -1688,11 +1709,10 @@ static QDF_STATUS dp_srng_init(struct dp_soc *soc, struct dp_srng *srng,
		(void *)ring_params.ring_base_paddr,
		ring_params.num_entries);

	if (soc->intr_mode == DP_INTR_MSI) {
	if (soc->intr_mode == DP_INTR_MSI && !dp_skip_msi_cfg(ring_type)) {
		dp_srng_msi_setup(soc, &ring_params, ring_type, ring_num);
		dp_verbose_debug("Using MSI for ring_type: %d, ring_num %d",
				 ring_type, ring_num);

	} else {
		ring_params.msi_data = 0;
		ring_params.msi_addr = 0;
@@ -5974,6 +5994,8 @@ static QDF_STATUS dp_vdev_detach_wifi3(struct cdp_soc_t *cdp_soc,
	else if (hif_get_target_status(soc->hif_handle) == TARGET_STATUS_RESET)
		dp_vdev_flush_peers((struct cdp_vdev *)vdev, true);

	/* indicate that the vdev needs to be deleted */
	vdev->delete.pending = 1;
	dp_rx_vdev_detach(vdev);
	/*
	 * move it after dp_rx_vdev_detach(),
@@ -6004,8 +6026,6 @@ static QDF_STATUS dp_vdev_detach_wifi3(struct cdp_soc_t *cdp_soc,
		qdf_mem_free(vdev->vdev_dp_ext_handle);
		vdev->vdev_dp_ext_handle = NULL;
	}
	/* indicate that the vdev needs to be deleted */
	vdev->delete.pending = 1;
	vdev->delete.callback = callback;
	vdev->delete.context = cb_context;

@@ -7321,9 +7341,11 @@ void dp_get_os_rx_handles_from_vdev_wifi3(struct cdp_soc_t *soc_hdl,
	struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, vdev_id,
						     DP_MOD_ID_CDP);

	if (!vdev)
	if (qdf_unlikely(!vdev)) {
		*stack_fn_p = NULL;
		*osif_vdev_p = NULL;
		return;

	}
	*stack_fn_p = vdev->osif_rx_stack;
	*osif_vdev_p = vdev->osif_vdev;
	dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP);
+17 −12
Original line number Diff line number Diff line
@@ -2325,7 +2325,8 @@ static bool dp_get_peer_vdev_roaming_in_progress(struct dp_peer *peer)
}

QDF_STATUS dp_rx_tid_update_wifi3(struct dp_peer *peer, int tid, uint32_t
					 ba_window_size, uint32_t start_seq)
					 ba_window_size, uint32_t start_seq,
					 bool bar_update)
{
	struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
	struct dp_soc *soc = peer->vdev->pdev->soc;
@@ -2357,7 +2358,7 @@ QDF_STATUS dp_rx_tid_update_wifi3(struct dp_peer *peer, int tid, uint32_t
	if (dp_get_peer_vdev_roaming_in_progress(peer))
		return QDF_STATUS_E_PERM;

	if (soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup)
	if (soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup && !bar_update)
		soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup(
			soc->ctrl_psoc, peer->vdev->pdev->pdev_id,
			peer->vdev->vdev_id, peer->mac_addr.raw,
@@ -2548,7 +2549,7 @@ QDF_STATUS dp_rx_tid_setup_wifi3(struct dp_peer *peer, int tid,
	rx_tid->ba_win_size = ba_window_size;
	if (rx_tid->hw_qdesc_vaddr_unaligned)
		return dp_rx_tid_update_wifi3(peer, tid, ba_window_size,
			start_seq);
			start_seq, false);
	rx_tid->delba_tx_status = 0;
	rx_tid->ppdu_id_2k = 0;
	rx_tid->num_of_addba_req = 0;
@@ -3256,7 +3257,8 @@ static void dp_teardown_256_ba_sessions(struct dp_peer *peer)
							peer->vdev->pdev->soc->ctrl_psoc,
							peer->vdev->vdev_id,
							peer->mac_addr.raw,
							tid, delba_rcode);
							tid, delba_rcode,
							CDP_DELBA_REASON_NONE);
				} else {
					qdf_spin_unlock_bh(&rx_tid->tid_lock);
				}
@@ -3297,7 +3299,7 @@ int dp_addba_resp_tx_completion_wifi3(struct cdp_soc_t *cdp_soc,
	if (status) {
		rx_tid->num_addba_rsp_failed++;
		dp_rx_tid_update_wifi3(peer, tid, 1,
				       IEEE80211_SEQ_MAX);
				       IEEE80211_SEQ_MAX, false);
		rx_tid->ba_status = DP_RX_BA_INACTIVE;
		qdf_spin_unlock_bh(&rx_tid->tid_lock);
		dp_err("RxTid- %d addba rsp tx completion failed", tid);
@@ -3324,7 +3326,8 @@ int dp_addba_resp_tx_completion_wifi3(struct cdp_soc_t *cdp_soc,

	if (dp_rx_tid_update_wifi3(peer, tid,
				   rx_tid->ba_win_size,
				   rx_tid->startseqnum)) {
				   rx_tid->startseqnum,
				   false)) {
		dp_err("Failed update REO SSN");
	}

@@ -3493,7 +3496,7 @@ int dp_addba_requestprocess_wifi3(struct cdp_soc_t *cdp_soc,
	rx_tid->num_of_addba_req++;
	if ((rx_tid->ba_status == DP_RX_BA_ACTIVE &&
	     rx_tid->hw_qdesc_vaddr_unaligned)) {
		dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
		dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX, false);
		rx_tid->ba_status = DP_RX_BA_INACTIVE;
		peer->active_ba_session_cnt--;
		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
@@ -3632,7 +3635,7 @@ int dp_delba_process_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
	 */
	rx_tid->delba_rcode = reasoncode;
	rx_tid->num_of_delba_req++;
	dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
	dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX, false);

	rx_tid->ba_status = DP_RX_BA_INACTIVE;
	peer->active_ba_session_cnt--;
@@ -3686,7 +3689,8 @@ int dp_delba_tx_completion_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
					peer->vdev->pdev->soc->ctrl_psoc,
					peer->vdev->vdev_id,
					peer->mac_addr.raw, tid,
					rx_tid->delba_rcode);
					rx_tid->delba_rcode,
					CDP_DELBA_REASON_NONE);
		}
		goto end;
	} else {
@@ -3695,12 +3699,12 @@ int dp_delba_tx_completion_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
		rx_tid->delba_tx_status = 0;
	}
	if (rx_tid->ba_status == DP_RX_BA_ACTIVE) {
		dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
		dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX, false);
		rx_tid->ba_status = DP_RX_BA_INACTIVE;
		peer->active_ba_session_cnt--;
	}
	if (rx_tid->ba_status == DP_RX_BA_IN_PROGRESS) {
		dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
		dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX, false);
		rx_tid->ba_status = DP_RX_BA_INACTIVE;
	}
	qdf_spin_unlock_bh(&rx_tid->tid_lock);
@@ -4073,7 +4077,8 @@ dp_rx_delba_ind_handler(void *soc_handle, uint16_t peer_id,
					peer->vdev->vdev_id,
					peer->mac_addr.raw,
					tid,
					rx_tid->delba_rcode);
					rx_tid->delba_rcode,
					CDP_DELBA_REASON_NONE);
		}
	} else {
		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
+4 −4
Original line number Diff line number Diff line
@@ -2261,7 +2261,6 @@ void dp_rx_deliver_to_pkt_capture_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf,
	uint16_t peer_id, vdev_id;
	uint32_t pkt_len = 0;
	uint8_t *rx_tlv_hdr;
	uint32_t l2_hdr_offset = 0;
	struct hal_rx_msdu_metadata msdu_metadata;

	peer_id = QDF_NBUF_CB_RX_PEER_ID(nbuf);
@@ -2271,14 +2270,15 @@ void dp_rx_deliver_to_pkt_capture_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf,
	msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf);
	pkt_len = msdu_len + msdu_metadata.l3_hdr_pad +
		  RX_PKT_TLVS_LEN;
	l2_hdr_offset =
		hal_rx_msdu_end_l3_hdr_padding_get(soc->hal_soc, rx_tlv_hdr);

	qdf_nbuf_set_pktlen(nbuf, pkt_len);
	dp_rx_skip_tlvs(nbuf, msdu_metadata.l3_hdr_pad);

	dp_wdi_event_handler(WDI_EVENT_PKT_CAPTURE_RX_DATA, soc, nbuf,
			     HTT_INVALID_VDEV, is_offload, 0);

	qdf_nbuf_push_head(nbuf, msdu_metadata.l3_hdr_pad +
			   RX_PKT_TLVS_LEN);
}

#endif
@@ -2459,7 +2459,7 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl,
					   ring_desc, rx_desc);
		if (QDF_IS_STATUS_ERROR(status)) {
			if (qdf_unlikely(rx_desc && rx_desc->nbuf)) {
				qdf_assert_always(rx_desc->unmapped);
				qdf_assert_always(!rx_desc->unmapped);
				dp_ipa_reo_ctx_buf_mapping_lock(
							soc,
							reo_ring_num);
Loading