1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef __CFG802154_RDEV_OPS |
3 | #define __CFG802154_RDEV_OPS |
4 | |
5 | #include <net/cfg802154.h> |
6 | |
7 | #include "core.h" |
8 | #include "trace.h" |
9 | |
10 | static inline struct net_device * |
11 | rdev_add_virtual_intf_deprecated(struct cfg802154_registered_device *rdev, |
12 | const char *name, |
13 | unsigned char name_assign_type, |
14 | int type) |
15 | { |
16 | return rdev->ops->add_virtual_intf_deprecated(&rdev->wpan_phy, name, |
17 | name_assign_type, type); |
18 | } |
19 | |
20 | static inline void |
21 | rdev_del_virtual_intf_deprecated(struct cfg802154_registered_device *rdev, |
22 | struct net_device *dev) |
23 | { |
24 | rdev->ops->del_virtual_intf_deprecated(&rdev->wpan_phy, dev); |
25 | } |
26 | |
27 | static inline int |
28 | rdev_suspend(struct cfg802154_registered_device *rdev) |
29 | { |
30 | int ret; |
31 | trace_802154_rdev_suspend(wpan_phy: &rdev->wpan_phy); |
32 | ret = rdev->ops->suspend(&rdev->wpan_phy); |
33 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
34 | return ret; |
35 | } |
36 | |
37 | static inline int |
38 | rdev_resume(struct cfg802154_registered_device *rdev) |
39 | { |
40 | int ret; |
41 | trace_802154_rdev_resume(wpan_phy: &rdev->wpan_phy); |
42 | ret = rdev->ops->resume(&rdev->wpan_phy); |
43 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
44 | return ret; |
45 | } |
46 | |
47 | static inline int |
48 | rdev_add_virtual_intf(struct cfg802154_registered_device *rdev, char *name, |
49 | unsigned char name_assign_type, |
50 | enum nl802154_iftype type, __le64 extended_addr) |
51 | { |
52 | int ret; |
53 | |
54 | trace_802154_rdev_add_virtual_intf(wpan_phy: &rdev->wpan_phy, name, type, |
55 | extended_addr); |
56 | ret = rdev->ops->add_virtual_intf(&rdev->wpan_phy, name, |
57 | name_assign_type, type, |
58 | extended_addr); |
59 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
60 | return ret; |
61 | } |
62 | |
63 | static inline int |
64 | rdev_del_virtual_intf(struct cfg802154_registered_device *rdev, |
65 | struct wpan_dev *wpan_dev) |
66 | { |
67 | int ret; |
68 | |
69 | trace_802154_rdev_del_virtual_intf(wpan_phy: &rdev->wpan_phy, wpan_dev); |
70 | ret = rdev->ops->del_virtual_intf(&rdev->wpan_phy, wpan_dev); |
71 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
72 | return ret; |
73 | } |
74 | |
75 | static inline int |
76 | rdev_set_channel(struct cfg802154_registered_device *rdev, u8 page, u8 channel) |
77 | { |
78 | int ret; |
79 | |
80 | trace_802154_rdev_set_channel(wpan_phy: &rdev->wpan_phy, page, channel); |
81 | ret = rdev->ops->set_channel(&rdev->wpan_phy, page, channel); |
82 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
83 | return ret; |
84 | } |
85 | |
86 | static inline int |
87 | rdev_set_cca_mode(struct cfg802154_registered_device *rdev, |
88 | const struct wpan_phy_cca *cca) |
89 | { |
90 | int ret; |
91 | |
92 | trace_802154_rdev_set_cca_mode(wpan_phy: &rdev->wpan_phy, cca); |
93 | ret = rdev->ops->set_cca_mode(&rdev->wpan_phy, cca); |
94 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
95 | return ret; |
96 | } |
97 | |
98 | static inline int |
99 | rdev_set_cca_ed_level(struct cfg802154_registered_device *rdev, s32 ed_level) |
100 | { |
101 | int ret; |
102 | |
103 | trace_802154_rdev_set_cca_ed_level(wpan_phy: &rdev->wpan_phy, ed_level); |
104 | ret = rdev->ops->set_cca_ed_level(&rdev->wpan_phy, ed_level); |
105 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
106 | return ret; |
107 | } |
108 | |
109 | static inline int |
110 | rdev_set_tx_power(struct cfg802154_registered_device *rdev, |
111 | s32 power) |
112 | { |
113 | int ret; |
114 | |
115 | trace_802154_rdev_set_tx_power(wpan_phy: &rdev->wpan_phy, power); |
116 | ret = rdev->ops->set_tx_power(&rdev->wpan_phy, power); |
117 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
118 | return ret; |
119 | } |
120 | |
121 | static inline int |
122 | rdev_set_pan_id(struct cfg802154_registered_device *rdev, |
123 | struct wpan_dev *wpan_dev, __le16 pan_id) |
124 | { |
125 | int ret; |
126 | |
127 | trace_802154_rdev_set_pan_id(wpan_phy: &rdev->wpan_phy, wpan_dev, le16arg: pan_id); |
128 | ret = rdev->ops->set_pan_id(&rdev->wpan_phy, wpan_dev, pan_id); |
129 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
130 | return ret; |
131 | } |
132 | |
133 | static inline int |
134 | rdev_set_short_addr(struct cfg802154_registered_device *rdev, |
135 | struct wpan_dev *wpan_dev, __le16 short_addr) |
136 | { |
137 | int ret; |
138 | |
139 | trace_802154_rdev_set_short_addr(wpan_phy: &rdev->wpan_phy, wpan_dev, le16arg: short_addr); |
140 | ret = rdev->ops->set_short_addr(&rdev->wpan_phy, wpan_dev, short_addr); |
141 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
142 | return ret; |
143 | } |
144 | |
145 | static inline int |
146 | rdev_set_backoff_exponent(struct cfg802154_registered_device *rdev, |
147 | struct wpan_dev *wpan_dev, u8 min_be, u8 max_be) |
148 | { |
149 | int ret; |
150 | |
151 | trace_802154_rdev_set_backoff_exponent(wpan_phy: &rdev->wpan_phy, wpan_dev, |
152 | min_be, max_be); |
153 | ret = rdev->ops->set_backoff_exponent(&rdev->wpan_phy, wpan_dev, |
154 | min_be, max_be); |
155 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
156 | return ret; |
157 | } |
158 | |
159 | static inline int |
160 | rdev_set_max_csma_backoffs(struct cfg802154_registered_device *rdev, |
161 | struct wpan_dev *wpan_dev, u8 max_csma_backoffs) |
162 | { |
163 | int ret; |
164 | |
165 | trace_802154_rdev_set_csma_backoffs(wpan_phy: &rdev->wpan_phy, wpan_dev, |
166 | max_csma_backoffs); |
167 | ret = rdev->ops->set_max_csma_backoffs(&rdev->wpan_phy, wpan_dev, |
168 | max_csma_backoffs); |
169 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
170 | return ret; |
171 | } |
172 | |
173 | static inline int |
174 | rdev_set_max_frame_retries(struct cfg802154_registered_device *rdev, |
175 | struct wpan_dev *wpan_dev, s8 max_frame_retries) |
176 | { |
177 | int ret; |
178 | |
179 | trace_802154_rdev_set_max_frame_retries(wpan_phy: &rdev->wpan_phy, wpan_dev, |
180 | max_frame_retries); |
181 | ret = rdev->ops->set_max_frame_retries(&rdev->wpan_phy, wpan_dev, |
182 | max_frame_retries); |
183 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
184 | return ret; |
185 | } |
186 | |
187 | static inline int |
188 | rdev_set_lbt_mode(struct cfg802154_registered_device *rdev, |
189 | struct wpan_dev *wpan_dev, bool mode) |
190 | { |
191 | int ret; |
192 | |
193 | trace_802154_rdev_set_lbt_mode(wpan_phy: &rdev->wpan_phy, wpan_dev, mode); |
194 | ret = rdev->ops->set_lbt_mode(&rdev->wpan_phy, wpan_dev, mode); |
195 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
196 | return ret; |
197 | } |
198 | |
199 | static inline int |
200 | rdev_set_ackreq_default(struct cfg802154_registered_device *rdev, |
201 | struct wpan_dev *wpan_dev, bool ackreq) |
202 | { |
203 | int ret; |
204 | |
205 | trace_802154_rdev_set_ackreq_default(wpan_phy: &rdev->wpan_phy, wpan_dev, |
206 | ackreq); |
207 | ret = rdev->ops->set_ackreq_default(&rdev->wpan_phy, wpan_dev, ackreq); |
208 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
209 | return ret; |
210 | } |
211 | |
212 | static inline int rdev_trigger_scan(struct cfg802154_registered_device *rdev, |
213 | struct cfg802154_scan_request *request) |
214 | { |
215 | int ret; |
216 | |
217 | if (!rdev->ops->trigger_scan) |
218 | return -EOPNOTSUPP; |
219 | |
220 | trace_802154_rdev_trigger_scan(wpan_phy: &rdev->wpan_phy, request); |
221 | ret = rdev->ops->trigger_scan(&rdev->wpan_phy, request); |
222 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
223 | return ret; |
224 | } |
225 | |
226 | static inline int rdev_abort_scan(struct cfg802154_registered_device *rdev, |
227 | struct wpan_dev *wpan_dev) |
228 | { |
229 | int ret; |
230 | |
231 | if (!rdev->ops->abort_scan) |
232 | return -EOPNOTSUPP; |
233 | |
234 | trace_802154_rdev_abort_scan(wpan_phy: &rdev->wpan_phy, wpan_dev); |
235 | ret = rdev->ops->abort_scan(&rdev->wpan_phy, wpan_dev); |
236 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
237 | return ret; |
238 | } |
239 | |
240 | static inline int rdev_send_beacons(struct cfg802154_registered_device *rdev, |
241 | struct cfg802154_beacon_request *request) |
242 | { |
243 | int ret; |
244 | |
245 | if (!rdev->ops->send_beacons) |
246 | return -EOPNOTSUPP; |
247 | |
248 | trace_802154_rdev_send_beacons(wpan_phy: &rdev->wpan_phy, request); |
249 | ret = rdev->ops->send_beacons(&rdev->wpan_phy, request); |
250 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
251 | return ret; |
252 | } |
253 | |
254 | static inline int rdev_stop_beacons(struct cfg802154_registered_device *rdev, |
255 | struct wpan_dev *wpan_dev) |
256 | { |
257 | int ret; |
258 | |
259 | if (!rdev->ops->stop_beacons) |
260 | return -EOPNOTSUPP; |
261 | |
262 | trace_802154_rdev_stop_beacons(wpan_phy: &rdev->wpan_phy, wpan_dev); |
263 | ret = rdev->ops->stop_beacons(&rdev->wpan_phy, wpan_dev); |
264 | trace_802154_rdev_return_int(wpan_phy: &rdev->wpan_phy, ret); |
265 | return ret; |
266 | } |
267 | |
268 | #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL |
269 | /* TODO this is already a nl802154, so move into ieee802154 */ |
270 | static inline void |
271 | rdev_get_llsec_table(struct cfg802154_registered_device *rdev, |
272 | struct wpan_dev *wpan_dev, |
273 | struct ieee802154_llsec_table **table) |
274 | { |
275 | rdev->ops->get_llsec_table(&rdev->wpan_phy, wpan_dev, table); |
276 | } |
277 | |
278 | static inline void |
279 | rdev_lock_llsec_table(struct cfg802154_registered_device *rdev, |
280 | struct wpan_dev *wpan_dev) |
281 | { |
282 | rdev->ops->lock_llsec_table(&rdev->wpan_phy, wpan_dev); |
283 | } |
284 | |
285 | static inline void |
286 | rdev_unlock_llsec_table(struct cfg802154_registered_device *rdev, |
287 | struct wpan_dev *wpan_dev) |
288 | { |
289 | rdev->ops->unlock_llsec_table(&rdev->wpan_phy, wpan_dev); |
290 | } |
291 | |
292 | static inline int |
293 | rdev_get_llsec_params(struct cfg802154_registered_device *rdev, |
294 | struct wpan_dev *wpan_dev, |
295 | struct ieee802154_llsec_params *params) |
296 | { |
297 | return rdev->ops->get_llsec_params(&rdev->wpan_phy, wpan_dev, params); |
298 | } |
299 | |
300 | static inline int |
301 | rdev_set_llsec_params(struct cfg802154_registered_device *rdev, |
302 | struct wpan_dev *wpan_dev, |
303 | const struct ieee802154_llsec_params *params, |
304 | u32 changed) |
305 | { |
306 | return rdev->ops->set_llsec_params(&rdev->wpan_phy, wpan_dev, params, |
307 | changed); |
308 | } |
309 | |
310 | static inline int |
311 | rdev_add_llsec_key(struct cfg802154_registered_device *rdev, |
312 | struct wpan_dev *wpan_dev, |
313 | const struct ieee802154_llsec_key_id *id, |
314 | const struct ieee802154_llsec_key *key) |
315 | { |
316 | return rdev->ops->add_llsec_key(&rdev->wpan_phy, wpan_dev, id, key); |
317 | } |
318 | |
319 | static inline int |
320 | rdev_del_llsec_key(struct cfg802154_registered_device *rdev, |
321 | struct wpan_dev *wpan_dev, |
322 | const struct ieee802154_llsec_key_id *id) |
323 | { |
324 | return rdev->ops->del_llsec_key(&rdev->wpan_phy, wpan_dev, id); |
325 | } |
326 | |
327 | static inline int |
328 | rdev_add_seclevel(struct cfg802154_registered_device *rdev, |
329 | struct wpan_dev *wpan_dev, |
330 | const struct ieee802154_llsec_seclevel *sl) |
331 | { |
332 | return rdev->ops->add_seclevel(&rdev->wpan_phy, wpan_dev, sl); |
333 | } |
334 | |
335 | static inline int |
336 | rdev_del_seclevel(struct cfg802154_registered_device *rdev, |
337 | struct wpan_dev *wpan_dev, |
338 | const struct ieee802154_llsec_seclevel *sl) |
339 | { |
340 | return rdev->ops->del_seclevel(&rdev->wpan_phy, wpan_dev, sl); |
341 | } |
342 | |
343 | static inline int |
344 | rdev_add_device(struct cfg802154_registered_device *rdev, |
345 | struct wpan_dev *wpan_dev, |
346 | const struct ieee802154_llsec_device *dev_desc) |
347 | { |
348 | return rdev->ops->add_device(&rdev->wpan_phy, wpan_dev, dev_desc); |
349 | } |
350 | |
351 | static inline int |
352 | rdev_del_device(struct cfg802154_registered_device *rdev, |
353 | struct wpan_dev *wpan_dev, __le64 extended_addr) |
354 | { |
355 | return rdev->ops->del_device(&rdev->wpan_phy, wpan_dev, extended_addr); |
356 | } |
357 | |
358 | static inline int |
359 | rdev_add_devkey(struct cfg802154_registered_device *rdev, |
360 | struct wpan_dev *wpan_dev, __le64 extended_addr, |
361 | const struct ieee802154_llsec_device_key *devkey) |
362 | { |
363 | return rdev->ops->add_devkey(&rdev->wpan_phy, wpan_dev, extended_addr, |
364 | devkey); |
365 | } |
366 | |
367 | static inline int |
368 | rdev_del_devkey(struct cfg802154_registered_device *rdev, |
369 | struct wpan_dev *wpan_dev, __le64 extended_addr, |
370 | const struct ieee802154_llsec_device_key *devkey) |
371 | { |
372 | return rdev->ops->del_devkey(&rdev->wpan_phy, wpan_dev, extended_addr, |
373 | devkey); |
374 | } |
375 | #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */ |
376 | |
377 | #endif /* __CFG802154_RDEV_OPS */ |
378 | |