1010f540 |
1 | /* |
2 | * Copyright (C) 2007-2012 Siemens AG |
3 | * |
4 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU General Public License version 2 |
6 | * as published by the Free Software Foundation. |
7 | * |
8 | * This program is distributed in the hope that it will be useful, |
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 | * GNU General Public License for more details. |
12 | * |
13 | * You should have received a copy of the GNU General Public License along |
14 | * with this program; if not, write to the Free Software Foundation, Inc., |
15 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
16 | * |
17 | * Written by: |
18 | * Pavel Smolenskiy <pavel.smolenskiy@gmail.com> |
19 | * Maxim Gorbachyov <maxim.gorbachev@siemens.com> |
20 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
21 | * Alexander Smirnov <alex.bluesman.smirnov@gmail.com> |
22 | */ |
23 | #ifndef MAC802154_H |
24 | #define MAC802154_H |
25 | |
26 | /* mac802154 device private data */ |
27 | struct mac802154_priv { |
28 | struct ieee802154_dev hw; |
29 | struct ieee802154_ops *ops; |
30 | |
31 | /* ieee802154 phy */ |
32 | struct wpan_phy *phy; |
33 | |
34 | int open_count; |
35 | |
36 | /* As in mac80211 slaves list is modified: |
37 | * 1) under the RTNL |
38 | * 2) protected by slaves_mtx; |
39 | * 3) in an RCU manner |
40 | * |
41 | * So atomic readers can use any of this protection methods. |
42 | */ |
43 | struct list_head slaves; |
44 | struct mutex slaves_mtx; |
45 | |
46 | /* This one is used for scanning and other jobs not to be interfered |
47 | * with serial driver. |
48 | */ |
49 | struct workqueue_struct *dev_workqueue; |
50 | |
51 | /* SoftMAC device is registered and running. One can add subinterfaces. |
52 | * This flag should be modified under slaves_mtx and RTNL, so you can |
53 | * read them using any of protection methods. |
54 | */ |
55 | bool running; |
56 | }; |
57 | |
58 | #define MAC802154_DEVICE_STOPPED 0x00 |
59 | #define MAC802154_DEVICE_RUN 0x01 |
60 | |
4d23c9cc |
61 | /* Slave interface definition. |
62 | * |
63 | * Slaves represent typical network interfaces available from userspace. |
64 | * Each ieee802154 device/transceiver may have several slaves and able |
65 | * to be associated with several networks at the same time. |
66 | */ |
67 | struct mac802154_sub_if_data { |
68 | struct list_head list; /* the ieee802154_priv->slaves list */ |
69 | |
70 | struct mac802154_priv *hw; |
71 | struct net_device *dev; |
72 | |
73 | int type; |
74 | |
75 | spinlock_t mib_lock; |
76 | |
77 | __le16 pan_id; |
78 | __le16 short_addr; |
79 | |
80 | u8 chan; |
81 | u8 page; |
82 | |
83 | /* MAC BSN field */ |
84 | u8 bsn; |
85 | /* MAC DSN field */ |
86 | u8 dsn; |
87 | }; |
88 | |
1010f540 |
89 | #define mac802154_to_priv(_hw) container_of(_hw, struct mac802154_priv, hw) |
90 | |
5b641ebe |
91 | #define MAC802154_MAX_XMIT_ATTEMPTS 3 |
92 | |
0606069d |
93 | #define MAC802154_CHAN_NONE (~(u8)0) /* No channel is assigned */ |
94 | |
6e2128d4 |
95 | extern struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced; |
32bad7e3 |
96 | extern struct ieee802154_mlme_ops mac802154_mlme_wpan; |
6e2128d4 |
97 | |
62610ad2 |
98 | int mac802154_slave_open(struct net_device *dev); |
99 | int mac802154_slave_close(struct net_device *dev); |
100 | |
0606069d |
101 | void mac802154_monitors_rx(struct mac802154_priv *priv, struct sk_buff *skb); |
102 | void mac802154_monitor_setup(struct net_device *dev); |
103 | |
32bad7e3 |
104 | void mac802154_wpans_rx(struct mac802154_priv *priv, struct sk_buff *skb); |
105 | void mac802154_wpan_setup(struct net_device *dev); |
106 | |
5b641ebe |
107 | netdev_tx_t mac802154_tx(struct mac802154_priv *priv, struct sk_buff *skb, |
108 | u8 page, u8 chan); |
109 | |
ef2486f5 |
110 | /* MIB callbacks */ |
48e44d50 |
111 | void mac802154_dev_set_short_addr(struct net_device *dev, u16 val); |
e885a47a |
112 | u16 mac802154_dev_get_short_addr(const struct net_device *dev); |
ef2486f5 |
113 | void mac802154_dev_set_ieee_addr(struct net_device *dev); |
dcbe4f93 |
114 | u16 mac802154_dev_get_pan_id(const struct net_device *dev); |
115 | void mac802154_dev_set_pan_id(struct net_device *dev, u16 val); |
66b69d4d |
116 | void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan); |
ef2486f5 |
117 | |
1010f540 |
118 | #endif /* MAC802154_H */ |