Linux 4.1.16
[linux/fpc-iii.git] / net / mac802154 / driver-ops.h
bloba0533357b9eaca22df9e7b105f17ce3440b03d4e
1 #ifndef __MAC802154_DRIVER_OPS
2 #define __MAC802154_DRIVER_OPS
4 #include <linux/types.h>
5 #include <linux/rtnetlink.h>
7 #include <net/mac802154.h>
9 #include "ieee802154_i.h"
11 static inline int
12 drv_xmit_async(struct ieee802154_local *local, struct sk_buff *skb)
14 return local->ops->xmit_async(&local->hw, skb);
17 static inline int
18 drv_xmit_sync(struct ieee802154_local *local, struct sk_buff *skb)
20 /* don't allow other operations while sync xmit */
21 ASSERT_RTNL();
23 might_sleep();
25 return local->ops->xmit_sync(&local->hw, skb);
28 static inline int drv_start(struct ieee802154_local *local)
30 might_sleep();
32 local->started = true;
33 smp_mb();
35 return local->ops->start(&local->hw);
38 static inline void drv_stop(struct ieee802154_local *local)
40 might_sleep();
42 local->ops->stop(&local->hw);
44 /* sync away all work on the tasklet before clearing started */
45 tasklet_disable(&local->tasklet);
46 tasklet_enable(&local->tasklet);
48 barrier();
50 local->started = false;
53 static inline int
54 drv_set_channel(struct ieee802154_local *local, u8 page, u8 channel)
56 might_sleep();
58 return local->ops->set_channel(&local->hw, page, channel);
61 static inline int drv_set_tx_power(struct ieee802154_local *local, s8 dbm)
63 might_sleep();
65 if (!local->ops->set_txpower) {
66 WARN_ON(1);
67 return -EOPNOTSUPP;
70 return local->ops->set_txpower(&local->hw, dbm);
73 static inline int drv_set_cca_mode(struct ieee802154_local *local,
74 const struct wpan_phy_cca *cca)
76 might_sleep();
78 if (!local->ops->set_cca_mode) {
79 WARN_ON(1);
80 return -EOPNOTSUPP;
83 return local->ops->set_cca_mode(&local->hw, cca);
86 static inline int drv_set_lbt_mode(struct ieee802154_local *local, bool mode)
88 might_sleep();
90 if (!local->ops->set_lbt) {
91 WARN_ON(1);
92 return -EOPNOTSUPP;
95 return local->ops->set_lbt(&local->hw, mode);
98 static inline int
99 drv_set_cca_ed_level(struct ieee802154_local *local, s32 ed_level)
101 might_sleep();
103 if (!local->ops->set_cca_ed_level) {
104 WARN_ON(1);
105 return -EOPNOTSUPP;
108 return local->ops->set_cca_ed_level(&local->hw, ed_level);
111 static inline int drv_set_pan_id(struct ieee802154_local *local, __le16 pan_id)
113 struct ieee802154_hw_addr_filt filt;
115 might_sleep();
117 if (!local->ops->set_hw_addr_filt) {
118 WARN_ON(1);
119 return -EOPNOTSUPP;
122 filt.pan_id = pan_id;
124 return local->ops->set_hw_addr_filt(&local->hw, &filt,
125 IEEE802154_AFILT_PANID_CHANGED);
128 static inline int
129 drv_set_extended_addr(struct ieee802154_local *local, __le64 extended_addr)
131 struct ieee802154_hw_addr_filt filt;
133 might_sleep();
135 if (!local->ops->set_hw_addr_filt) {
136 WARN_ON(1);
137 return -EOPNOTSUPP;
140 filt.ieee_addr = extended_addr;
142 return local->ops->set_hw_addr_filt(&local->hw, &filt,
143 IEEE802154_AFILT_IEEEADDR_CHANGED);
146 static inline int
147 drv_set_short_addr(struct ieee802154_local *local, __le16 short_addr)
149 struct ieee802154_hw_addr_filt filt;
151 might_sleep();
153 if (!local->ops->set_hw_addr_filt) {
154 WARN_ON(1);
155 return -EOPNOTSUPP;
158 filt.short_addr = short_addr;
160 return local->ops->set_hw_addr_filt(&local->hw, &filt,
161 IEEE802154_AFILT_SADDR_CHANGED);
164 static inline int
165 drv_set_pan_coord(struct ieee802154_local *local, bool is_coord)
167 struct ieee802154_hw_addr_filt filt;
169 might_sleep();
171 if (!local->ops->set_hw_addr_filt) {
172 WARN_ON(1);
173 return -EOPNOTSUPP;
176 filt.pan_coord = is_coord;
178 return local->ops->set_hw_addr_filt(&local->hw, &filt,
179 IEEE802154_AFILT_PANC_CHANGED);
182 static inline int
183 drv_set_csma_params(struct ieee802154_local *local, u8 min_be, u8 max_be,
184 u8 max_csma_backoffs)
186 might_sleep();
188 if (!local->ops->set_csma_params) {
189 WARN_ON(1);
190 return -EOPNOTSUPP;
193 return local->ops->set_csma_params(&local->hw, min_be, max_be,
194 max_csma_backoffs);
197 static inline int
198 drv_set_max_frame_retries(struct ieee802154_local *local, s8 max_frame_retries)
200 might_sleep();
202 if (!local->ops->set_frame_retries) {
203 WARN_ON(1);
204 return -EOPNOTSUPP;
207 return local->ops->set_frame_retries(&local->hw, max_frame_retries);
210 static inline int
211 drv_set_promiscuous_mode(struct ieee802154_local *local, bool on)
213 might_sleep();
215 if (!local->ops->set_promiscuous_mode) {
216 WARN_ON(1);
217 return -EOPNOTSUPP;
220 return local->ops->set_promiscuous_mode(&local->hw, on);
223 #endif /* __MAC802154_DRIVER_OPS */