Lines Matching refs:msdu

1776 	/* As the msdu is spread across multiple rx buffers,
1777 * find the offset to the start of msdu for computing
1778 * the length of the msdu in the first buffer.
1866 static void ath11k_dp_rx_h_csum_offload(struct ath11k *ar, struct sk_buff *msdu)
1868 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
1876 msdu->ip_summed = (ip_csum_fail || l4_csum_fail) ?
1960 struct sk_buff *msdu,
1965 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
1975 hdr = (struct ieee80211_hdr *)msdu->data;
1979 skb_pull(msdu, ieee80211_hdrlen(hdr->frame_control));
1982 /* original 802.11 header is valid for the first msdu
1996 /* Rebuild qos header if this is a middle/last msdu */
2014 memcpy(skb_push(msdu,
2021 memcpy(skb_push(msdu,
2024 memcpy(skb_push(msdu, hdr_len), decap_hdr, hdr_len);
2028 memcpy(skb_push(msdu, hdr_len), hdr, hdr_len);
2033 hdr = (struct ieee80211_hdr *)msdu->data;
2038 static void ath11k_dp_rx_h_undecap_raw(struct ath11k *ar, struct sk_buff *msdu,
2043 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
2054 skb_trim(msdu, msdu->len - FCS_LEN);
2059 hdr = (void *)msdu->data;
2063 skb_trim(msdu, msdu->len -
2066 skb_trim(msdu, msdu->len -
2071 skb_trim(msdu, msdu->len -
2076 skb_trim(msdu, msdu->len -
2084 skb_trim(msdu, msdu->len - IEEE80211_CCMP_MIC_LEN);
2091 memmove((void *)msdu->data + crypto_len,
2092 (void *)msdu->data, hdr_len);
2093 skb_pull(msdu, crypto_len);
2098 struct sk_buff *msdu,
2101 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
2125 struct sk_buff *msdu,
2137 rfc1042 = ath11k_dp_rx_h_find_rfc1042(ar, msdu, enctype);
2142 eth = (struct ethhdr *)msdu->data;
2145 skb_pull(msdu, sizeof(struct ethhdr));
2148 memcpy(skb_push(msdu, sizeof(struct ath11k_dp_rfc1042_hdr)), rfc1042,
2156 memcpy(skb_push(msdu,
2162 memcpy(skb_push(msdu, hdr_len), hdr, hdr_len);
2167 hdr = (struct ieee80211_hdr *)msdu->data;
2172 static void ath11k_dp_rx_h_undecap(struct ath11k *ar, struct sk_buff *msdu,
2187 ath11k_dp_rx_h_undecap_nwifi(ar, msdu, first_hdr,
2191 ath11k_dp_rx_h_undecap_raw(ar, msdu, enctype, status,
2195 ehdr = (struct ethhdr *)msdu->data;
2199 ATH11K_SKB_RXCB(msdu)->is_eapol = true;
2200 ath11k_dp_rx_h_undecap_eth(ar, msdu, first_hdr,
2208 if (ATH11K_SKB_RXCB(msdu)->is_mcbc && decrypted)
2209 ath11k_dp_rx_h_undecap_eth(ar, msdu, first_hdr,
2219 ath11k_dp_rx_h_find_peer(struct ath11k_base *ab, struct sk_buff *msdu)
2221 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
2242 struct sk_buff *msdu,
2256 rxcb = ATH11K_SKB_RXCB(msdu);
2266 peer = ath11k_dp_rx_h_find_peer(ar->ab, msdu);
2305 ath11k_dp_rx_h_csum_offload(ar, msdu);
2306 ath11k_dp_rx_h_undecap(ar, msdu, rx_desc,
2314 hdr = (void *)msdu->data;
2437 struct sk_buff *msdu,
2449 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
2457 he = skb_push(msdu, sizeof(known));
2466 peer = ath11k_dp_rx_h_find_peer(ar->ab, msdu);
2473 msdu,
2474 msdu->len,
2495 ath11k_dbg_dump(ar->ab, ATH11K_DBG_DP_RX, NULL, "dp rx msdu: ",
2496 msdu->data, msdu->len);
2498 rx_status = IEEE80211_SKB_RXCB(msdu);
2512 ieee80211_rx_napi(ar->hw, pubsta, msdu, napi);
2516 struct sk_buff *msdu,
2531 last_buf = ath11k_dp_rx_get_msdu_last_buf(msdu_list, msdu);
2539 rx_desc = (struct hal_rx_desc *)msdu->data;
2541 ath11k_warn(ar->ab, "msdu len not valid\n");
2554 rxcb = ATH11K_SKB_RXCB(msdu);
2560 skb_pull(msdu, hal_rx_desc_sz);
2565 ath11k_warn(ab, "invalid msdu len %u\n", msdu_len);
2572 skb_put(msdu, hal_rx_desc_sz + l3_pad_bytes + msdu_len);
2573 skb_pull(msdu, hal_rx_desc_sz + l3_pad_bytes);
2576 msdu, last_buf,
2580 "failed to coalesce msdu rx buffer%d\n", ret);
2586 ath11k_dp_rx_h_mpdu(ar, msdu, rx_desc, rx_status);
2601 struct sk_buff *msdu;
2620 while ((msdu = __skb_dequeue(msdu_list))) {
2621 ret = ath11k_dp_rx_process_msdu(ar, msdu, msdu_list, &rx_status);
2624 "Unable to process msdu %d", ret);
2625 dev_kfree_skb_any(msdu);
2629 ath11k_dp_rx_deliver_msdu(ar, napi, msdu, &rx_status);
2643 struct sk_buff *msdu;
2677 msdu = idr_find(&rx_ring->bufs_idr, buf_id);
2678 if (unlikely(!msdu)) {
2688 rxcb = ATH11K_SKB_RXCB(msdu);
2690 msdu->len + skb_tailroom(msdu),
2699 dev_kfree_skb_any(msdu);
2718 __skb_queue_tail(&msdu_list[mac_id], msdu);
3274 struct sk_buff *msdu)
3276 struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)msdu->data;
3277 struct ieee80211_rx_status *rxs = IEEE80211_SKB_RXCB(msdu);
3291 hdr = (struct ieee80211_hdr *)(msdu->data + hal_rx_desc_sz);
3303 data = msdu->data + head_len;
3304 data_len = msdu->len - head_len - tail_len;
3314 (ATH11K_SKB_RXCB(msdu))->is_first_msdu = true;
3315 (ATH11K_SKB_RXCB(msdu))->is_last_msdu = true;
3319 skb_pull(msdu, hal_rx_desc_sz);
3322 ath11k_dp_rx_h_undecap(ar, msdu, rx_desc,
3324 ieee80211_rx(ar->hw, msdu);
3328 static void ath11k_dp_rx_h_undecap_frag(struct ath11k *ar, struct sk_buff *msdu,
3339 hdr = (struct ieee80211_hdr *)(msdu->data + hal_rx_desc_sz);
3342 skb_trim(msdu, msdu->len -
3346 skb_trim(msdu, msdu->len -
3353 memmove((void *)msdu->data + hal_rx_desc_sz + crypto_len,
3354 (void *)msdu->data + hal_rx_desc_sz, hdr_len);
3355 skb_pull(msdu, crypto_len);
3468 /* change msdu len in hal rx desc */
3624 struct sk_buff *msdu,
3639 rx_desc = (struct hal_rx_desc *)msdu->data;
3643 frag_no = ath11k_dp_rx_h_mpdu_start_frag_no(ar->ab, msdu);
3644 more_frags = ath11k_dp_rx_h_mpdu_start_more_frags(ar->ab, msdu);
3695 __skb_queue_tail(&rx_tid->rx_frags, msdu);
3697 ath11k_dp_rx_h_sort_frags(ar, &rx_tid->rx_frags, msdu);
3759 struct sk_buff *msdu;
3767 msdu = idr_find(&rx_ring->bufs_idr, buf_id);
3768 if (!msdu) {
3778 rxcb = ATH11K_SKB_RXCB(msdu);
3780 msdu->len + skb_tailroom(msdu),
3784 dev_kfree_skb_any(msdu);
3790 dev_kfree_skb_any(msdu);
3795 dev_kfree_skb_any(msdu);
3799 rx_desc = (struct hal_rx_desc *)msdu->data;
3803 ath11k_warn(ar->ab, "invalid msdu leng %u", msdu_len);
3808 dev_kfree_skb_any(msdu);
3812 skb_put(msdu, hal_rx_desc_sz + msdu_len);
3814 if (ath11k_dp_rx_frag_h_mpdu(ar, msdu, ring_desc)) {
3815 dev_kfree_skb_any(msdu);
3886 /* Process only rx fragments with one msdu per link desc below, and drop
3887 * msdu's indicated due to error reasons.
3962 static int ath11k_dp_rx_h_null_q_desc(struct ath11k *ar, struct sk_buff *msdu,
3967 struct hal_rx_desc *desc = (struct hal_rx_desc *)msdu->data;
3970 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
4003 skb_pull(msdu, hal_rx_desc_sz);
4010 skb_put(msdu, hal_rx_desc_sz + l3pad_bytes + msdu_len);
4011 skb_pull(msdu, hal_rx_desc_sz + l3pad_bytes);
4015 ath11k_dp_rx_h_mpdu(ar, msdu, desc, status);
4019 /* Please note that caller will having the access to msdu and completing
4026 static bool ath11k_dp_rx_h_reo_err(struct ath11k *ar, struct sk_buff *msdu,
4030 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
4037 if (ath11k_dp_rx_h_null_q_desc(ar, msdu, status, msdu_list))
4057 static void ath11k_dp_rx_h_tkip_mic_err(struct ath11k *ar, struct sk_buff *msdu,
4061 struct hal_rx_desc *desc = (struct hal_rx_desc *)msdu->data;
4063 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
4071 skb_put(msdu, hal_rx_desc_sz + l3pad_bytes + msdu_len);
4072 skb_pull(msdu, hal_rx_desc_sz + l3pad_bytes);
4079 ath11k_dp_rx_h_undecap(ar, msdu, desc,
4083 static bool ath11k_dp_rx_h_rxdma_err(struct ath11k *ar, struct sk_buff *msdu,
4086 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
4093 ath11k_dp_rx_h_tkip_mic_err(ar, msdu, status);
4108 struct sk_buff *msdu,
4111 struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
4117 drop = ath11k_dp_rx_h_reo_err(ar, msdu, &rxs, msdu_list);
4120 drop = ath11k_dp_rx_h_rxdma_err(ar, msdu, &rxs);
4123 /* msdu will get freed */
4128 dev_kfree_skb_any(msdu);
4132 ath11k_dp_rx_deliver_msdu(ar, napi, msdu, &rxs);
4143 struct sk_buff *msdu;
4181 msdu = idr_find(&rx_ring->bufs_idr, buf_id);
4182 if (!msdu) {
4192 rxcb = ATH11K_SKB_RXCB(msdu);
4194 msdu->len + skb_tailroom(msdu),
4203 dev_kfree_skb_any(msdu);
4209 rxcb->rx_desc = (struct hal_rx_desc *)msdu->data;
4210 __skb_queue_tail(&msdu_list[mac_id], msdu);
4245 while ((msdu = __skb_dequeue(&msdu_list[i])) != NULL)
4246 ath11k_dp_rx_wbm_err(ar, napi, msdu, &msdu_list[i]);
4704 struct sk_buff *msdu = NULL, *last = NULL;
4781 msdu = idr_find(&rx_ring->bufs_idr, buf_id);
4783 if (!msdu) {
4788 rxcb = ATH11K_SKB_RXCB(msdu);
4791 msdu->len +
4792 skb_tailroom(msdu),
4798 "i %d drop msdu %p *ppdu_id %x\n",
4799 i, msdu, *ppdu_id);
4800 dev_kfree_skb_any(msdu);
4801 msdu = NULL;
4805 rx_desc = (struct hal_rx_desc *)msdu->data;
4813 dev_kfree_skb_any(msdu);
4814 msdu = NULL;
4827 dev_kfree_skb_any(msdu);
4828 msdu = NULL;
4841 ath11k_dp_pkt_set_pktlen(msdu, rx_buf_size);
4844 *head_msdu = msdu;
4846 last->next = msdu;
4848 last = msdu;
4881 *tail_msdu = msdu;
4889 static void ath11k_dp_rx_msdus_set_payload(struct ath11k *ar, struct sk_buff *msdu)
4895 (struct hal_rx_desc *)msdu->data);
4896 skb_pull(msdu, rx_pkt_offset + l2_hdr_offset);
4906 struct sk_buff *msdu, *prev_buf;
4935 msdu = head_msdu->next;
4937 while (msdu) {
4938 ath11k_dp_rx_msdus_set_payload(ar, msdu);
4940 prev_buf = msdu;
4941 msdu = msdu->next;
4959 msdu = head_msdu;
4961 while (msdu) {
4962 ath11k_dp_rx_msdus_set_payload(ar, msdu);
4964 dest = skb_push(msdu, sizeof(__le16));
4969 prev_buf = msdu;
4970 msdu = msdu->next;
5347 struct sk_buff *msdu = NULL, *last = NULL;
5407 msdu = idr_find(&rx_ring->bufs_idr, buf_id);
5408 if (!msdu) {
5418 rxcb = ATH11K_SKB_RXCB(msdu);
5421 msdu->len +
5422 skb_tailroom(msdu),
5428 "full mon: i %d drop msdu %p *ppdu_id %x\n",
5429 i, msdu, sw_mon_entries->ppdu_id);
5430 dev_kfree_skb_any(msdu);
5435 rx_desc = (struct hal_rx_desc *)msdu->data;
5443 dev_kfree_skb_any(msdu);
5444 msdu = NULL;
5456 ath11k_dp_pkt_set_pktlen(msdu, rx_buf_size);
5459 *head_msdu = msdu;
5461 last->next = msdu;
5463 last = msdu;
5487 *tail_msdu = msdu;