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