14a9a816aSAlexander Aring #ifndef __CFG802154_RDEV_OPS 24a9a816aSAlexander Aring #define __CFG802154_RDEV_OPS 34a9a816aSAlexander Aring 44a9a816aSAlexander Aring #include <net/cfg802154.h> 54a9a816aSAlexander Aring 64a9a816aSAlexander Aring #include "core.h" 71cc800e7SGuido Günther #include "trace.h" 84a9a816aSAlexander Aring 94a9a816aSAlexander Aring static inline struct net_device * 104a9a816aSAlexander Aring rdev_add_virtual_intf_deprecated(struct cfg802154_registered_device *rdev, 115b4a1039SVarka Bhadram const char *name, 125b4a1039SVarka Bhadram unsigned char name_assign_type, 135b4a1039SVarka Bhadram int type) 144a9a816aSAlexander Aring { 154a9a816aSAlexander Aring return rdev->ops->add_virtual_intf_deprecated(&rdev->wpan_phy, name, 165b4a1039SVarka Bhadram name_assign_type, type); 174a9a816aSAlexander Aring } 184a9a816aSAlexander Aring 194a9a816aSAlexander Aring static inline void 204a9a816aSAlexander Aring rdev_del_virtual_intf_deprecated(struct cfg802154_registered_device *rdev, 214a9a816aSAlexander Aring struct net_device *dev) 224a9a816aSAlexander Aring { 234a9a816aSAlexander Aring rdev->ops->del_virtual_intf_deprecated(&rdev->wpan_phy, dev); 244a9a816aSAlexander Aring } 254a9a816aSAlexander Aring 26ab0bd561SAlexander Aring static inline int 27a6cb869bSVarka Bhadram rdev_suspend(struct cfg802154_registered_device *rdev) 28a6cb869bSVarka Bhadram { 29a6cb869bSVarka Bhadram int ret; 30a6cb869bSVarka Bhadram trace_802154_rdev_suspend(&rdev->wpan_phy); 31a6cb869bSVarka Bhadram ret = rdev->ops->suspend(&rdev->wpan_phy); 32a6cb869bSVarka Bhadram trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 33a6cb869bSVarka Bhadram return ret; 34a6cb869bSVarka Bhadram } 35a6cb869bSVarka Bhadram 36a6cb869bSVarka Bhadram static inline int 37a6cb869bSVarka Bhadram rdev_resume(struct cfg802154_registered_device *rdev) 38a6cb869bSVarka Bhadram { 39a6cb869bSVarka Bhadram int ret; 40a6cb869bSVarka Bhadram trace_802154_rdev_resume(&rdev->wpan_phy); 41a6cb869bSVarka Bhadram ret = rdev->ops->resume(&rdev->wpan_phy); 42a6cb869bSVarka Bhadram trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 43a6cb869bSVarka Bhadram return ret; 44a6cb869bSVarka Bhadram } 45a6cb869bSVarka Bhadram 46a6cb869bSVarka Bhadram static inline int 47f3ea5e44SAlexander Aring rdev_add_virtual_intf(struct cfg802154_registered_device *rdev, char *name, 485b4a1039SVarka Bhadram unsigned char name_assign_type, 490e57547eSAlexander Aring enum nl802154_iftype type, __le64 extended_addr) 50f3ea5e44SAlexander Aring { 511cc800e7SGuido Günther int ret; 521cc800e7SGuido Günther 531cc800e7SGuido Günther trace_802154_rdev_add_virtual_intf(&rdev->wpan_phy, name, type, 540e57547eSAlexander Aring extended_addr); 555b4a1039SVarka Bhadram ret = rdev->ops->add_virtual_intf(&rdev->wpan_phy, name, 565b4a1039SVarka Bhadram name_assign_type, type, 571cc800e7SGuido Günther extended_addr); 581cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 591cc800e7SGuido Günther return ret; 60f3ea5e44SAlexander Aring } 61f3ea5e44SAlexander Aring 62f3ea5e44SAlexander Aring static inline int 63b821ecd4SAlexander Aring rdev_del_virtual_intf(struct cfg802154_registered_device *rdev, 64b821ecd4SAlexander Aring struct wpan_dev *wpan_dev) 65b821ecd4SAlexander Aring { 661cc800e7SGuido Günther int ret; 671cc800e7SGuido Günther 681cc800e7SGuido Günther trace_802154_rdev_del_virtual_intf(&rdev->wpan_phy, wpan_dev); 691cc800e7SGuido Günther ret = rdev->ops->del_virtual_intf(&rdev->wpan_phy, wpan_dev); 701cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 711cc800e7SGuido Günther return ret; 72b821ecd4SAlexander Aring } 73b821ecd4SAlexander Aring 74b821ecd4SAlexander Aring static inline int 75628b1e11SAlexander Aring rdev_set_channel(struct cfg802154_registered_device *rdev, u8 page, u8 channel) 76ab0bd561SAlexander Aring { 771cc800e7SGuido Günther int ret; 781cc800e7SGuido Günther 791cc800e7SGuido Günther trace_802154_rdev_set_channel(&rdev->wpan_phy, page, channel); 801cc800e7SGuido Günther ret = rdev->ops->set_channel(&rdev->wpan_phy, page, channel); 811cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 821cc800e7SGuido Günther return ret; 83ab0bd561SAlexander Aring } 84ab0bd561SAlexander Aring 85702bf371SAlexander Aring static inline int 86ba2a9506SAlexander Aring rdev_set_cca_mode(struct cfg802154_registered_device *rdev, 87ba2a9506SAlexander Aring const struct wpan_phy_cca *cca) 88ba2a9506SAlexander Aring { 891cc800e7SGuido Günther int ret; 901cc800e7SGuido Günther 911cc800e7SGuido Günther trace_802154_rdev_set_cca_mode(&rdev->wpan_phy, cca); 921cc800e7SGuido Günther ret = rdev->ops->set_cca_mode(&rdev->wpan_phy, cca); 931cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 941cc800e7SGuido Günther return ret; 95ba2a9506SAlexander Aring } 96ba2a9506SAlexander Aring 97ba2a9506SAlexander Aring static inline int 98b69644c1SAlexander Aring rdev_set_cca_ed_level(struct cfg802154_registered_device *rdev, s32 ed_level) 99b69644c1SAlexander Aring { 100b69644c1SAlexander Aring int ret; 101b69644c1SAlexander Aring 102b69644c1SAlexander Aring trace_802154_rdev_set_cca_ed_level(&rdev->wpan_phy, ed_level); 103b69644c1SAlexander Aring ret = rdev->ops->set_cca_ed_level(&rdev->wpan_phy, ed_level); 104b69644c1SAlexander Aring trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 105b69644c1SAlexander Aring return ret; 106b69644c1SAlexander Aring } 107b69644c1SAlexander Aring 108b69644c1SAlexander Aring static inline int 1090f999b09SVarka Bhadram rdev_set_tx_power(struct cfg802154_registered_device *rdev, 1100f999b09SVarka Bhadram s32 power) 1110f999b09SVarka Bhadram { 1120f999b09SVarka Bhadram int ret; 1130f999b09SVarka Bhadram 1140f999b09SVarka Bhadram trace_802154_rdev_set_tx_power(&rdev->wpan_phy, power); 1150f999b09SVarka Bhadram ret = rdev->ops->set_tx_power(&rdev->wpan_phy, power); 1160f999b09SVarka Bhadram trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 1170f999b09SVarka Bhadram return ret; 1180f999b09SVarka Bhadram } 1190f999b09SVarka Bhadram 1200f999b09SVarka Bhadram static inline int 121702bf371SAlexander Aring rdev_set_pan_id(struct cfg802154_registered_device *rdev, 122ee7b9053SAlexander Aring struct wpan_dev *wpan_dev, __le16 pan_id) 123702bf371SAlexander Aring { 1241cc800e7SGuido Günther int ret; 1251cc800e7SGuido Günther 1261cc800e7SGuido Günther trace_802154_rdev_set_pan_id(&rdev->wpan_phy, wpan_dev, pan_id); 1271cc800e7SGuido Günther ret = rdev->ops->set_pan_id(&rdev->wpan_phy, wpan_dev, pan_id); 1281cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 1291cc800e7SGuido Günther return ret; 130702bf371SAlexander Aring } 131702bf371SAlexander Aring 1329830c62aSAlexander Aring static inline int 1339830c62aSAlexander Aring rdev_set_short_addr(struct cfg802154_registered_device *rdev, 134ee7b9053SAlexander Aring struct wpan_dev *wpan_dev, __le16 short_addr) 1359830c62aSAlexander Aring { 1361cc800e7SGuido Günther int ret; 1371cc800e7SGuido Günther 1381cc800e7SGuido Günther trace_802154_rdev_set_short_addr(&rdev->wpan_phy, wpan_dev, short_addr); 1391cc800e7SGuido Günther ret = rdev->ops->set_short_addr(&rdev->wpan_phy, wpan_dev, short_addr); 1401cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 1411cc800e7SGuido Günther return ret; 1429830c62aSAlexander Aring } 1439830c62aSAlexander Aring 144656a999eSAlexander Aring static inline int 145656a999eSAlexander Aring rdev_set_backoff_exponent(struct cfg802154_registered_device *rdev, 146628b1e11SAlexander Aring struct wpan_dev *wpan_dev, u8 min_be, u8 max_be) 147656a999eSAlexander Aring { 1481cc800e7SGuido Günther int ret; 1491cc800e7SGuido Günther 1501cc800e7SGuido Günther trace_802154_rdev_set_backoff_exponent(&rdev->wpan_phy, wpan_dev, 151656a999eSAlexander Aring min_be, max_be); 1521cc800e7SGuido Günther ret = rdev->ops->set_backoff_exponent(&rdev->wpan_phy, wpan_dev, 1531cc800e7SGuido Günther min_be, max_be); 1541cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 1551cc800e7SGuido Günther return ret; 156656a999eSAlexander Aring } 157656a999eSAlexander Aring 158a01ba765SAlexander Aring static inline int 159a01ba765SAlexander Aring rdev_set_max_csma_backoffs(struct cfg802154_registered_device *rdev, 160628b1e11SAlexander Aring struct wpan_dev *wpan_dev, u8 max_csma_backoffs) 161a01ba765SAlexander Aring { 1621cc800e7SGuido Günther int ret; 1631cc800e7SGuido Günther 1641cc800e7SGuido Günther trace_802154_rdev_set_csma_backoffs(&rdev->wpan_phy, wpan_dev, 165a01ba765SAlexander Aring max_csma_backoffs); 1661cc800e7SGuido Günther ret = rdev->ops->set_max_csma_backoffs(&rdev->wpan_phy, wpan_dev, 1671cc800e7SGuido Günther max_csma_backoffs); 1681cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 1691cc800e7SGuido Günther return ret; 170a01ba765SAlexander Aring } 171a01ba765SAlexander Aring 17217a3a46bSAlexander Aring static inline int 17317a3a46bSAlexander Aring rdev_set_max_frame_retries(struct cfg802154_registered_device *rdev, 174628b1e11SAlexander Aring struct wpan_dev *wpan_dev, s8 max_frame_retries) 17517a3a46bSAlexander Aring { 1761cc800e7SGuido Günther int ret; 1771cc800e7SGuido Günther 1781cc800e7SGuido Günther trace_802154_rdev_set_max_frame_retries(&rdev->wpan_phy, wpan_dev, 17917a3a46bSAlexander Aring max_frame_retries); 1801cc800e7SGuido Günther ret = rdev->ops->set_max_frame_retries(&rdev->wpan_phy, wpan_dev, 1811cc800e7SGuido Günther max_frame_retries); 1821cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 1831cc800e7SGuido Günther return ret; 18417a3a46bSAlexander Aring } 18517a3a46bSAlexander Aring 186c8937a1dSAlexander Aring static inline int 187c8937a1dSAlexander Aring rdev_set_lbt_mode(struct cfg802154_registered_device *rdev, 188628b1e11SAlexander Aring struct wpan_dev *wpan_dev, bool mode) 189c8937a1dSAlexander Aring { 1901cc800e7SGuido Günther int ret; 1911cc800e7SGuido Günther 1921cc800e7SGuido Günther trace_802154_rdev_set_lbt_mode(&rdev->wpan_phy, wpan_dev, mode); 1931cc800e7SGuido Günther ret = rdev->ops->set_lbt_mode(&rdev->wpan_phy, wpan_dev, mode); 1941cc800e7SGuido Günther trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 1951cc800e7SGuido Günther return ret; 196c8937a1dSAlexander Aring } 197c8937a1dSAlexander Aring 198c91208d8SAlexander Aring static inline int 199c91208d8SAlexander Aring rdev_set_ackreq_default(struct cfg802154_registered_device *rdev, 200c91208d8SAlexander Aring struct wpan_dev *wpan_dev, bool ackreq) 201c91208d8SAlexander Aring { 202c91208d8SAlexander Aring int ret; 203c91208d8SAlexander Aring 204c91208d8SAlexander Aring trace_802154_rdev_set_ackreq_default(&rdev->wpan_phy, wpan_dev, 205c91208d8SAlexander Aring ackreq); 206c91208d8SAlexander Aring ret = rdev->ops->set_ackreq_default(&rdev->wpan_phy, wpan_dev, ackreq); 207c91208d8SAlexander Aring trace_802154_rdev_return_int(&rdev->wpan_phy, ret); 208c91208d8SAlexander Aring return ret; 209c91208d8SAlexander Aring } 210c91208d8SAlexander Aring 211a26c5fd7SAlexander Aring #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL 212a26c5fd7SAlexander Aring /* TODO this is already a nl802154, so move into ieee802154 */ 213a26c5fd7SAlexander Aring static inline void 214a26c5fd7SAlexander Aring rdev_get_llsec_table(struct cfg802154_registered_device *rdev, 215a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, 216a26c5fd7SAlexander Aring struct ieee802154_llsec_table **table) 217a26c5fd7SAlexander Aring { 218a26c5fd7SAlexander Aring rdev->ops->get_llsec_table(&rdev->wpan_phy, wpan_dev, table); 219a26c5fd7SAlexander Aring } 220a26c5fd7SAlexander Aring 221a26c5fd7SAlexander Aring static inline void 222a26c5fd7SAlexander Aring rdev_lock_llsec_table(struct cfg802154_registered_device *rdev, 223a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev) 224a26c5fd7SAlexander Aring { 225a26c5fd7SAlexander Aring rdev->ops->lock_llsec_table(&rdev->wpan_phy, wpan_dev); 226a26c5fd7SAlexander Aring } 227a26c5fd7SAlexander Aring 228a26c5fd7SAlexander Aring static inline void 229a26c5fd7SAlexander Aring rdev_unlock_llsec_table(struct cfg802154_registered_device *rdev, 230a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev) 231a26c5fd7SAlexander Aring { 232a26c5fd7SAlexander Aring rdev->ops->unlock_llsec_table(&rdev->wpan_phy, wpan_dev); 233a26c5fd7SAlexander Aring } 234a26c5fd7SAlexander Aring 235a26c5fd7SAlexander Aring static inline int 236a26c5fd7SAlexander Aring rdev_get_llsec_params(struct cfg802154_registered_device *rdev, 237a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, 238a26c5fd7SAlexander Aring struct ieee802154_llsec_params *params) 239a26c5fd7SAlexander Aring { 240a26c5fd7SAlexander Aring return rdev->ops->get_llsec_params(&rdev->wpan_phy, wpan_dev, params); 241a26c5fd7SAlexander Aring } 242a26c5fd7SAlexander Aring 243a26c5fd7SAlexander Aring static inline int 244a26c5fd7SAlexander Aring rdev_set_llsec_params(struct cfg802154_registered_device *rdev, 245a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, 246a26c5fd7SAlexander Aring const struct ieee802154_llsec_params *params, 247a26c5fd7SAlexander Aring u32 changed) 248a26c5fd7SAlexander Aring { 249a26c5fd7SAlexander Aring return rdev->ops->set_llsec_params(&rdev->wpan_phy, wpan_dev, params, 250a26c5fd7SAlexander Aring changed); 251a26c5fd7SAlexander Aring } 252a26c5fd7SAlexander Aring 253a26c5fd7SAlexander Aring static inline int 254a26c5fd7SAlexander Aring rdev_add_llsec_key(struct cfg802154_registered_device *rdev, 255a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, 256a26c5fd7SAlexander Aring const struct ieee802154_llsec_key_id *id, 257a26c5fd7SAlexander Aring const struct ieee802154_llsec_key *key) 258a26c5fd7SAlexander Aring { 259a26c5fd7SAlexander Aring return rdev->ops->add_llsec_key(&rdev->wpan_phy, wpan_dev, id, key); 260a26c5fd7SAlexander Aring } 261a26c5fd7SAlexander Aring 262a26c5fd7SAlexander Aring static inline int 263a26c5fd7SAlexander Aring rdev_del_llsec_key(struct cfg802154_registered_device *rdev, 264a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, 265a26c5fd7SAlexander Aring const struct ieee802154_llsec_key_id *id) 266a26c5fd7SAlexander Aring { 267a26c5fd7SAlexander Aring return rdev->ops->del_llsec_key(&rdev->wpan_phy, wpan_dev, id); 268a26c5fd7SAlexander Aring } 269a26c5fd7SAlexander Aring 270a26c5fd7SAlexander Aring static inline int 271a26c5fd7SAlexander Aring rdev_add_seclevel(struct cfg802154_registered_device *rdev, 272a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, 273a26c5fd7SAlexander Aring const struct ieee802154_llsec_seclevel *sl) 274a26c5fd7SAlexander Aring { 275a26c5fd7SAlexander Aring return rdev->ops->add_seclevel(&rdev->wpan_phy, wpan_dev, sl); 276a26c5fd7SAlexander Aring } 277a26c5fd7SAlexander Aring 278a26c5fd7SAlexander Aring static inline int 279a26c5fd7SAlexander Aring rdev_del_seclevel(struct cfg802154_registered_device *rdev, 280a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, 281a26c5fd7SAlexander Aring const struct ieee802154_llsec_seclevel *sl) 282a26c5fd7SAlexander Aring { 283a26c5fd7SAlexander Aring return rdev->ops->del_seclevel(&rdev->wpan_phy, wpan_dev, sl); 284a26c5fd7SAlexander Aring } 285a26c5fd7SAlexander Aring 286a26c5fd7SAlexander Aring static inline int 287a26c5fd7SAlexander Aring rdev_add_device(struct cfg802154_registered_device *rdev, 288a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, 289a26c5fd7SAlexander Aring const struct ieee802154_llsec_device *dev_desc) 290a26c5fd7SAlexander Aring { 291a26c5fd7SAlexander Aring return rdev->ops->add_device(&rdev->wpan_phy, wpan_dev, dev_desc); 292a26c5fd7SAlexander Aring } 293a26c5fd7SAlexander Aring 294a26c5fd7SAlexander Aring static inline int 295a26c5fd7SAlexander Aring rdev_del_device(struct cfg802154_registered_device *rdev, 296a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, __le64 extended_addr) 297a26c5fd7SAlexander Aring { 298a26c5fd7SAlexander Aring return rdev->ops->del_device(&rdev->wpan_phy, wpan_dev, extended_addr); 299a26c5fd7SAlexander Aring } 300a26c5fd7SAlexander Aring 301a26c5fd7SAlexander Aring static inline int 302a26c5fd7SAlexander Aring rdev_add_devkey(struct cfg802154_registered_device *rdev, 303a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, __le64 extended_addr, 304a26c5fd7SAlexander Aring const struct ieee802154_llsec_device_key *devkey) 305a26c5fd7SAlexander Aring { 306a26c5fd7SAlexander Aring return rdev->ops->add_devkey(&rdev->wpan_phy, wpan_dev, extended_addr, 307a26c5fd7SAlexander Aring devkey); 308a26c5fd7SAlexander Aring } 309a26c5fd7SAlexander Aring 310a26c5fd7SAlexander Aring static inline int 311a26c5fd7SAlexander Aring rdev_del_devkey(struct cfg802154_registered_device *rdev, 312a26c5fd7SAlexander Aring struct wpan_dev *wpan_dev, __le64 extended_addr, 313a26c5fd7SAlexander Aring const struct ieee802154_llsec_device_key *devkey) 314a26c5fd7SAlexander Aring { 315a26c5fd7SAlexander Aring return rdev->ops->del_devkey(&rdev->wpan_phy, wpan_dev, extended_addr, 316a26c5fd7SAlexander Aring devkey); 317a26c5fd7SAlexander Aring } 318a26c5fd7SAlexander Aring #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */ 319a26c5fd7SAlexander Aring 3204a9a816aSAlexander Aring #endif /* __CFG802154_RDEV_OPS */ 321