1c869f77dSJakub Kicinski /*
2c869f77dSJakub Kicinski  * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
3c869f77dSJakub Kicinski  *
4c869f77dSJakub Kicinski  * This program is free software; you can redistribute it and/or modify
5c869f77dSJakub Kicinski  * it under the terms of the GNU General Public License version 2
6c869f77dSJakub Kicinski  * as published by the Free Software Foundation
7c869f77dSJakub Kicinski  *
8c869f77dSJakub Kicinski  * This program is distributed in the hope that it will be useful,
9c869f77dSJakub Kicinski  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10c869f77dSJakub Kicinski  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11c869f77dSJakub Kicinski  * GNU General Public License for more details.
12c869f77dSJakub Kicinski  */
13c869f77dSJakub Kicinski 
14c869f77dSJakub Kicinski #include "mt7601u.h"
15c869f77dSJakub Kicinski 
16c869f77dSJakub Kicinski void mt76_remove_hdr_pad(struct sk_buff *skb)
17c869f77dSJakub Kicinski {
18c869f77dSJakub Kicinski 	int len = ieee80211_get_hdrlen_from_skb(skb);
19c869f77dSJakub Kicinski 
20c869f77dSJakub Kicinski 	memmove(skb->data + 2, skb->data, len);
21c869f77dSJakub Kicinski 	skb_pull(skb, 2);
22c869f77dSJakub Kicinski }
23c869f77dSJakub Kicinski 
24c869f77dSJakub Kicinski int mt76_insert_hdr_pad(struct sk_buff *skb)
25c869f77dSJakub Kicinski {
26c869f77dSJakub Kicinski 	int len = ieee80211_get_hdrlen_from_skb(skb);
27c869f77dSJakub Kicinski 	int ret;
28c869f77dSJakub Kicinski 
29c869f77dSJakub Kicinski 	if (len % 4 == 0)
30c869f77dSJakub Kicinski 		return 0;
31c869f77dSJakub Kicinski 
32c869f77dSJakub Kicinski 	ret = skb_cow(skb, 2);
33c869f77dSJakub Kicinski 	if (ret)
34c869f77dSJakub Kicinski 		return ret;
35c869f77dSJakub Kicinski 
36c869f77dSJakub Kicinski 	skb_push(skb, 2);
37c869f77dSJakub Kicinski 	memmove(skb->data, skb->data + 2, len);
38c869f77dSJakub Kicinski 
39c869f77dSJakub Kicinski 	skb->data[len] = 0;
40c869f77dSJakub Kicinski 	skb->data[len + 1] = 0;
41c869f77dSJakub Kicinski 	return 0;
42c869f77dSJakub Kicinski }
43