18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org> 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include "mt7601u.h" 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_civoid mt76_remove_hdr_pad(struct sk_buff *skb) 98c2ecf20Sopenharmony_ci{ 108c2ecf20Sopenharmony_ci int len = ieee80211_get_hdrlen_from_skb(skb); 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci memmove(skb->data + 2, skb->data, len); 138c2ecf20Sopenharmony_ci skb_pull(skb, 2); 148c2ecf20Sopenharmony_ci} 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ciint mt76_insert_hdr_pad(struct sk_buff *skb) 178c2ecf20Sopenharmony_ci{ 188c2ecf20Sopenharmony_ci int len = ieee80211_get_hdrlen_from_skb(skb); 198c2ecf20Sopenharmony_ci int ret; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci if (len % 4 == 0) 228c2ecf20Sopenharmony_ci return 0; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci ret = skb_cow(skb, 2); 258c2ecf20Sopenharmony_ci if (ret) 268c2ecf20Sopenharmony_ci return ret; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci skb_push(skb, 2); 298c2ecf20Sopenharmony_ci memmove(skb->data, skb->data + 2, len); 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci skb->data[len] = 0; 328c2ecf20Sopenharmony_ci skb->data[len + 1] = 0; 338c2ecf20Sopenharmony_ci return 0; 348c2ecf20Sopenharmony_ci} 35