Lines Matching refs:msdu
1827 /* As the msdu is spread across multiple rx buffers,
1828 * find the offset to the start of msdu for computing
1829 * the length of the msdu in the first buffer.
1917 static void ath12k_dp_rx_h_csum_offload(struct ath12k *ar, struct sk_buff *msdu)
1919 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
1926 msdu->ip_summed = (ip_csum_fail || l4_csum_fail) ?
2011 struct sk_buff *msdu,
2016 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
2024 hdr = (struct ieee80211_hdr *)msdu->data;
2026 skb_pull(msdu, hdr_len);
2046 crypto_hdr = skb_push(msdu, ath12k_dp_rx_crypto_param_len(ar, enctype));
2052 memcpy(skb_push(msdu,
2055 memcpy(skb_push(msdu, hdr_len), decap_hdr, hdr_len);
2058 static void ath12k_dp_rx_h_undecap_raw(struct ath12k *ar, struct sk_buff *msdu,
2063 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
2074 skb_trim(msdu, msdu->len - FCS_LEN);
2079 hdr = (void *)msdu->data;
2083 skb_trim(msdu, msdu->len -
2086 skb_trim(msdu, msdu->len -
2091 skb_trim(msdu, msdu->len -
2096 skb_trim(msdu, msdu->len -
2104 skb_trim(msdu, msdu->len - IEEE80211_CCMP_MIC_LEN);
2111 memmove(msdu->data + crypto_len, msdu->data, hdr_len);
2112 skb_pull(msdu, crypto_len);
2117 struct sk_buff *msdu,
2132 crypto_hdr = skb_push(msdu, crypto_len);
2138 skb_push(msdu, hdr_len);
2139 hdr = (struct ieee80211_hdr *)msdu->data;
2155 memcpy(msdu->data + (hdr_len - IEEE80211_QOS_CTL_LEN),
2161 struct sk_buff *msdu,
2169 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
2172 eth = (struct ethhdr *)msdu->data;
2176 skb_pull(msdu, sizeof(*eth));
2177 memcpy(skb_push(msdu, sizeof(rfc)), &rfc,
2179 ath12k_get_dot11_hdr_from_rx_desc(ar, msdu, rxcb, status, enctype);
2184 hdr = (struct ieee80211_hdr *)msdu->data;
2189 static void ath12k_dp_rx_h_undecap(struct ath12k *ar, struct sk_buff *msdu,
2203 ath12k_dp_rx_h_undecap_nwifi(ar, msdu, enctype, status);
2206 ath12k_dp_rx_h_undecap_raw(ar, msdu, enctype, status,
2210 ehdr = (struct ethhdr *)msdu->data;
2214 ATH12K_SKB_RXCB(msdu)->is_eapol = true;
2215 ath12k_dp_rx_h_undecap_eth(ar, msdu, enctype, status);
2222 if (ATH12K_SKB_RXCB(msdu)->is_mcbc && decrypted)
2223 ath12k_dp_rx_h_undecap_eth(ar, msdu, enctype, status);
2232 ath12k_dp_rx_h_find_peer(struct ath12k_base *ab, struct sk_buff *msdu)
2234 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
2256 struct sk_buff *msdu,
2270 rxcb = ATH12K_SKB_RXCB(msdu);
2278 peer = ath12k_dp_rx_h_find_peer(ar->ab, msdu);
2316 ath12k_dp_rx_h_csum_offload(ar, msdu);
2317 ath12k_dp_rx_h_undecap(ar, msdu, rx_desc,
2325 hdr = (void *)msdu->data;
2448 struct sk_buff *msdu,
2461 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
2468 he = skb_push(msdu, sizeof(known));
2477 peer = ath12k_dp_rx_h_find_peer(ab, msdu);
2490 msdu,
2491 msdu->len,
2513 ath12k_dbg_dump(ab, ATH12K_DBG_DP_RX, NULL, "dp rx msdu: ",
2514 msdu->data, msdu->len);
2516 rx_status = IEEE80211_SKB_RXCB(msdu);
2530 ieee80211_rx_napi(ath12k_ar_to_hw(ar), pubsta, msdu, napi);
2534 struct sk_buff *msdu,
2547 last_buf = ath12k_dp_rx_get_msdu_last_buf(msdu_list, msdu);
2555 rx_desc = (struct hal_rx_desc *)msdu->data;
2563 rxcb = ATH12K_SKB_RXCB(msdu);
2569 skb_pull(msdu, hal_rx_desc_sz);
2573 ath12k_warn(ab, "invalid msdu len %u\n", msdu_len);
2578 skb_put(msdu, hal_rx_desc_sz + l3_pad_bytes + msdu_len);
2579 skb_pull(msdu, hal_rx_desc_sz + l3_pad_bytes);
2582 msdu, last_buf,
2586 "failed to coalesce msdu rx buffer%d\n", ret);
2592 ath12k_dp_rx_h_mpdu(ar, msdu, rx_desc, rx_status);
2610 struct sk_buff *msdu;
2622 while ((msdu = __skb_dequeue(msdu_list))) {
2623 rxcb = ATH12K_SKB_RXCB(msdu);
2631 dev_kfree_skb_any(msdu);
2636 dev_kfree_skb_any(msdu);
2640 ret = ath12k_dp_rx_process_msdu(ar, msdu, msdu_list, &rx_status);
2643 "Unable to process msdu %d", ret);
2644 dev_kfree_skb_any(msdu);
2648 ath12k_dp_rx_deliver_msdu(ar, napi, msdu, &rx_status);
2694 struct sk_buff *msdu;
2750 msdu = desc_info->skb;
2755 rxcb = ATH12K_SKB_RXCB(msdu);
2757 msdu->len + skb_tailroom(msdu),
2766 dev_kfree_skb_any(msdu);
2786 __skb_queue_tail(&msdu_list, msdu);
2934 struct sk_buff *msdu)
2937 struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)msdu->data;
2938 struct ieee80211_rx_status *rxs = IEEE80211_SKB_RXCB(msdu);
2951 hdr = (struct ieee80211_hdr *)(msdu->data + hal_rx_desc_sz);
2963 data = msdu->data + head_len;
2964 data_len = msdu->len - head_len - tail_len;
2974 (ATH12K_SKB_RXCB(msdu))->is_first_msdu = true;
2975 (ATH12K_SKB_RXCB(msdu))->is_last_msdu = true;
2979 skb_pull(msdu, hal_rx_desc_sz);
2982 ath12k_dp_rx_h_undecap(ar, msdu, rx_desc,
2984 ieee80211_rx(ath12k_ar_to_hw(ar), msdu);
2988 static void ath12k_dp_rx_h_undecap_frag(struct ath12k *ar, struct sk_buff *msdu,
2999 hdr = (struct ieee80211_hdr *)(msdu->data + hal_rx_desc_sz);
3002 skb_trim(msdu, msdu->len -
3006 skb_trim(msdu, msdu->len -
3013 memmove(msdu->data + hal_rx_desc_sz + crypto_len,
3014 msdu->data + hal_rx_desc_sz, hdr_len);
3015 skb_pull(msdu, crypto_len);
3135 /* change msdu len in hal rx desc */
3310 struct sk_buff *msdu,
3324 rx_desc = (struct hal_rx_desc *)msdu->data;
3328 frag_no = ath12k_dp_rx_h_frag_no(ab, msdu);
3329 more_frags = ath12k_dp_rx_h_more_frags(ab, msdu);
3376 __skb_queue_tail(&rx_tid->rx_frags, msdu);
3378 ath12k_dp_rx_h_sort_frags(ab, &rx_tid->rx_frags, msdu);
3441 struct sk_buff *msdu;
3466 msdu = desc_info->skb;
3471 rxcb = ATH12K_SKB_RXCB(msdu);
3473 msdu->len + skb_tailroom(msdu),
3477 dev_kfree_skb_any(msdu);
3483 dev_kfree_skb_any(msdu);
3488 dev_kfree_skb_any(msdu);
3492 rx_desc = (struct hal_rx_desc *)msdu->data;
3495 ath12k_warn(ar->ab, "invalid msdu leng %u", msdu_len);
3498 dev_kfree_skb_any(msdu);
3502 skb_put(msdu, hal_rx_desc_sz + msdu_len);
3504 if (ath12k_dp_rx_frag_h_mpdu(ar, msdu, desc)) {
3505 dev_kfree_skb_any(msdu);
3593 /* Process only rx fragments with one msdu per link desc below, and drop
3594 * msdu's indicated due to error reasons.
3669 static int ath12k_dp_rx_h_null_q_desc(struct ath12k *ar, struct sk_buff *msdu,
3675 struct hal_rx_desc *desc = (struct hal_rx_desc *)msdu->data;
3677 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
3689 /* Even after cleaning up the sg buffers in the msdu list with above check
3690 * any msdu received with continuation flag needs to be dropped as invalid.
3713 skb_pull(msdu, hal_rx_desc_sz);
3720 skb_put(msdu, hal_rx_desc_sz + l3pad_bytes + msdu_len);
3721 skb_pull(msdu, hal_rx_desc_sz + l3pad_bytes);
3725 ath12k_dp_rx_h_mpdu(ar, msdu, desc, status);
3729 /* Please note that caller will having the access to msdu and completing
3736 static bool ath12k_dp_rx_h_reo_err(struct ath12k *ar, struct sk_buff *msdu,
3740 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
3747 if (ath12k_dp_rx_h_null_q_desc(ar, msdu, status, msdu_list))
3767 static void ath12k_dp_rx_h_tkip_mic_err(struct ath12k *ar, struct sk_buff *msdu,
3772 struct hal_rx_desc *desc = (struct hal_rx_desc *)msdu->data;
3774 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
3782 skb_put(msdu, hal_rx_desc_sz + l3pad_bytes + msdu_len);
3783 skb_pull(msdu, hal_rx_desc_sz + l3pad_bytes);
3790 ath12k_dp_rx_h_undecap(ar, msdu, desc,
3794 static bool ath12k_dp_rx_h_rxdma_err(struct ath12k *ar, struct sk_buff *msdu,
3798 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
3799 struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)msdu->data;
3810 ath12k_dp_rx_h_tkip_mic_err(ar, msdu, status);
3827 struct sk_buff *msdu,
3830 struct ath12k_skb_rxcb *rxcb = ATH12K_SKB_RXCB(msdu);
3836 drop = ath12k_dp_rx_h_reo_err(ar, msdu, &rxs, msdu_list);
3839 drop = ath12k_dp_rx_h_rxdma_err(ar, msdu, &rxs);
3842 /* msdu will get freed */
3847 dev_kfree_skb_any(msdu);
3851 ath12k_dp_rx_deliver_msdu(ar, napi, msdu, &rxs);
3864 struct sk_buff *msdu;
3916 msdu = desc_info->skb;
3922 dev_kfree_skb_any(msdu);
3933 rxcb = ATH12K_SKB_RXCB(msdu);
3935 msdu->len + skb_tailroom(msdu),
3946 dev_kfree_skb_any(msdu);
3950 msdu_data = (struct hal_rx_desc *)msdu->data;
3959 __skb_queue_tail(&scatter_msdu_list, msdu);
3966 dev_kfree_skb_any(msdu);
3976 struct sk_buff *msdu;
3978 skb_queue_walk(&scatter_msdu_list, msdu) {
3979 rxcb = ATH12K_SKB_RXCB(msdu);
3987 rxcb = ATH12K_SKB_RXCB(msdu);
3989 __skb_queue_tail(&msdu_list, msdu);
4017 while ((msdu = __skb_dequeue(&msdu_list))) {
4018 rxcb = ATH12K_SKB_RXCB(msdu);
4025 "Unable to process WBM error msdu due to invalid hw link id %d device id %d\n",
4027 dev_kfree_skb_any(msdu);
4036 dev_kfree_skb_any(msdu);
4041 dev_kfree_skb_any(msdu);
4044 ath12k_dp_rx_wbm_err(ar, napi, msdu, &msdu_list);