Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / net / ieee802154 / 6lowpan / 6lowpan_i.h
1 #ifndef __IEEE802154_6LOWPAN_I_H__
2 #define __IEEE802154_6LOWPAN_I_H__
3
4 #include <linux/list.h>
5
6 #include <net/ieee802154_netdev.h>
7 #include <net/inet_frag.h>
8
9 struct lowpan_create_arg {
10         u16 tag;
11         u16 d_size;
12         const struct ieee802154_addr *src;
13         const struct ieee802154_addr *dst;
14 };
15
16 /* Equivalent of ipv4 struct ip
17  */
18 struct lowpan_frag_queue {
19         struct inet_frag_queue  q;
20
21         u16                     tag;
22         u16                     d_size;
23         struct ieee802154_addr  saddr;
24         struct ieee802154_addr  daddr;
25 };
26
27 static inline u32 ieee802154_addr_hash(const struct ieee802154_addr *a)
28 {
29         switch (a->mode) {
30         case IEEE802154_ADDR_LONG:
31                 return (((__force u64)a->extended_addr) >> 32) ^
32                         (((__force u64)a->extended_addr) & 0xffffffff);
33         case IEEE802154_ADDR_SHORT:
34                 return (__force u32)(a->short_addr);
35         default:
36                 return 0;
37         }
38 }
39
40 struct lowpan_dev_record {
41         struct net_device *ldev;
42         struct list_head list;
43 };
44
45 /* private device info */
46 struct lowpan_dev_info {
47         struct net_device       *real_dev; /* real WPAN device ptr */
48         struct mutex            dev_list_mtx; /* mutex for list ops */
49         u16                     fragment_tag;
50 };
51
52 static inline struct
53 lowpan_dev_info *lowpan_dev_info(const struct net_device *dev)
54 {
55         return netdev_priv(dev);
56 }
57
58 extern struct list_head lowpan_devices;
59
60 int lowpan_frag_rcv(struct sk_buff *skb, const u8 frag_type);
61 void lowpan_net_frag_exit(void);
62 int lowpan_net_frag_init(void);
63
64 void lowpan_rx_init(void);
65 void lowpan_rx_exit(void);
66
67 int lowpan_header_create(struct sk_buff *skb, struct net_device *dev,
68                          unsigned short type, const void *_daddr,
69                          const void *_saddr, unsigned int len);
70 netdev_tx_t lowpan_xmit(struct sk_buff *skb, struct net_device *dev);
71
72 #endif /* __IEEE802154_6LOWPAN_I_H__ */