1e35e4d28SHila Gonen #ifndef __CFG80211_RDEV_OPS 2e35e4d28SHila Gonen #define __CFG80211_RDEV_OPS 3e35e4d28SHila Gonen 4e35e4d28SHila Gonen #include <linux/rtnetlink.h> 5e35e4d28SHila Gonen #include <net/cfg80211.h> 6e35e4d28SHila Gonen #include "core.h" 714e8a3c4SBeni Lev #include "trace.h" 8e35e4d28SHila Gonen 981256969SStanislaw Gruszka static inline int rdev_suspend(struct cfg80211_registered_device *rdev, 1081256969SStanislaw Gruszka struct cfg80211_wowlan *wowlan) 11e35e4d28SHila Gonen { 1214e8a3c4SBeni Lev int ret; 1381256969SStanislaw Gruszka trace_rdev_suspend(&rdev->wiphy, wowlan); 1481256969SStanislaw Gruszka ret = rdev->ops->suspend(&rdev->wiphy, wowlan); 1514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 1614e8a3c4SBeni Lev return ret; 17e35e4d28SHila Gonen } 18e35e4d28SHila Gonen 19e35e4d28SHila Gonen static inline int rdev_resume(struct cfg80211_registered_device *rdev) 20e35e4d28SHila Gonen { 2114e8a3c4SBeni Lev int ret; 2214e8a3c4SBeni Lev trace_rdev_resume(&rdev->wiphy); 2314e8a3c4SBeni Lev ret = rdev->ops->resume(&rdev->wiphy); 2414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 2514e8a3c4SBeni Lev return ret; 26e35e4d28SHila Gonen } 27e35e4d28SHila Gonen 28e35e4d28SHila Gonen static inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev, 29e35e4d28SHila Gonen bool enabled) 30e35e4d28SHila Gonen { 3114e8a3c4SBeni Lev trace_rdev_set_wakeup(&rdev->wiphy, enabled); 32e35e4d28SHila Gonen rdev->ops->set_wakeup(&rdev->wiphy, enabled); 3314e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 34e35e4d28SHila Gonen } 35e35e4d28SHila Gonen 36e35e4d28SHila Gonen static inline struct wireless_dev 37e35e4d28SHila Gonen *rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name, 386bab2e19STom Gundersen unsigned char name_assign_type, 39e35e4d28SHila Gonen enum nl80211_iftype type, u32 *flags, 40e35e4d28SHila Gonen struct vif_params *params) 41e35e4d28SHila Gonen { 4214e8a3c4SBeni Lev struct wireless_dev *ret; 4314e8a3c4SBeni Lev trace_rdev_add_virtual_intf(&rdev->wiphy, name, type); 446bab2e19STom Gundersen ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, name_assign_type, 456bab2e19STom Gundersen type, flags, params); 4614e8a3c4SBeni Lev trace_rdev_return_wdev(&rdev->wiphy, ret); 4714e8a3c4SBeni Lev return ret; 48e35e4d28SHila Gonen } 49e35e4d28SHila Gonen 50e35e4d28SHila Gonen static inline int 51e35e4d28SHila Gonen rdev_del_virtual_intf(struct cfg80211_registered_device *rdev, 52e35e4d28SHila Gonen struct wireless_dev *wdev) 53e35e4d28SHila Gonen { 5414e8a3c4SBeni Lev int ret; 5514e8a3c4SBeni Lev trace_rdev_del_virtual_intf(&rdev->wiphy, wdev); 5614e8a3c4SBeni Lev ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev); 5714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 5814e8a3c4SBeni Lev return ret; 59e35e4d28SHila Gonen } 60e35e4d28SHila Gonen 61e35e4d28SHila Gonen static inline int 62e35e4d28SHila Gonen rdev_change_virtual_intf(struct cfg80211_registered_device *rdev, 63e35e4d28SHila Gonen struct net_device *dev, enum nl80211_iftype type, 64e35e4d28SHila Gonen u32 *flags, struct vif_params *params) 65e35e4d28SHila Gonen { 6614e8a3c4SBeni Lev int ret; 6714e8a3c4SBeni Lev trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type); 6814e8a3c4SBeni Lev ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, flags, 69e35e4d28SHila Gonen params); 7014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 7114e8a3c4SBeni Lev return ret; 72e35e4d28SHila Gonen } 73e35e4d28SHila Gonen 74e35e4d28SHila Gonen static inline int rdev_add_key(struct cfg80211_registered_device *rdev, 75e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 76e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr, 77e35e4d28SHila Gonen struct key_params *params) 78e35e4d28SHila Gonen { 7914e8a3c4SBeni Lev int ret; 8014e8a3c4SBeni Lev trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 8114e8a3c4SBeni Lev ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise, 82e35e4d28SHila Gonen mac_addr, params); 8314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 8414e8a3c4SBeni Lev return ret; 85e35e4d28SHila Gonen } 86e35e4d28SHila Gonen 87e35e4d28SHila Gonen static inline int 88e35e4d28SHila Gonen rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev, 89e35e4d28SHila Gonen u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, 90e35e4d28SHila Gonen void (*callback)(void *cookie, struct key_params*)) 91e35e4d28SHila Gonen { 9214e8a3c4SBeni Lev int ret; 9314e8a3c4SBeni Lev trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 9414e8a3c4SBeni Lev ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise, 95e35e4d28SHila Gonen mac_addr, cookie, callback); 9614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 9714e8a3c4SBeni Lev return ret; 98e35e4d28SHila Gonen } 99e35e4d28SHila Gonen 100e35e4d28SHila Gonen static inline int rdev_del_key(struct cfg80211_registered_device *rdev, 101e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 102e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr) 103e35e4d28SHila Gonen { 10414e8a3c4SBeni Lev int ret; 10514e8a3c4SBeni Lev trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 10614e8a3c4SBeni Lev ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise, 107e35e4d28SHila Gonen mac_addr); 10814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 10914e8a3c4SBeni Lev return ret; 110e35e4d28SHila Gonen } 111e35e4d28SHila Gonen 112e35e4d28SHila Gonen static inline int 113e35e4d28SHila Gonen rdev_set_default_key(struct cfg80211_registered_device *rdev, 114e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, bool unicast, 115e35e4d28SHila Gonen bool multicast) 116e35e4d28SHila Gonen { 11714e8a3c4SBeni Lev int ret; 11814e8a3c4SBeni Lev trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index, 119e35e4d28SHila Gonen unicast, multicast); 12014e8a3c4SBeni Lev ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index, 12114e8a3c4SBeni Lev unicast, multicast); 12214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 12314e8a3c4SBeni Lev return ret; 124e35e4d28SHila Gonen } 125e35e4d28SHila Gonen 126e35e4d28SHila Gonen static inline int 127e35e4d28SHila Gonen rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev, 128e35e4d28SHila Gonen struct net_device *netdev, u8 key_index) 129e35e4d28SHila Gonen { 13014e8a3c4SBeni Lev int ret; 13114e8a3c4SBeni Lev trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index); 13214e8a3c4SBeni Lev ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, 133e35e4d28SHila Gonen key_index); 13414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 13514e8a3c4SBeni Lev return ret; 136e35e4d28SHila Gonen } 137e35e4d28SHila Gonen 138e35e4d28SHila Gonen static inline int rdev_start_ap(struct cfg80211_registered_device *rdev, 139e35e4d28SHila Gonen struct net_device *dev, 140e35e4d28SHila Gonen struct cfg80211_ap_settings *settings) 141e35e4d28SHila Gonen { 14214e8a3c4SBeni Lev int ret; 14314e8a3c4SBeni Lev trace_rdev_start_ap(&rdev->wiphy, dev, settings); 14414e8a3c4SBeni Lev ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings); 14514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 14614e8a3c4SBeni Lev return ret; 147e35e4d28SHila Gonen } 148e35e4d28SHila Gonen 149e35e4d28SHila Gonen static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev, 150e35e4d28SHila Gonen struct net_device *dev, 151e35e4d28SHila Gonen struct cfg80211_beacon_data *info) 152e35e4d28SHila Gonen { 15314e8a3c4SBeni Lev int ret; 15414e8a3c4SBeni Lev trace_rdev_change_beacon(&rdev->wiphy, dev, info); 15514e8a3c4SBeni Lev ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info); 15614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 15714e8a3c4SBeni Lev return ret; 158e35e4d28SHila Gonen } 159e35e4d28SHila Gonen 160e35e4d28SHila Gonen static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev, 161e35e4d28SHila Gonen struct net_device *dev) 162e35e4d28SHila Gonen { 16314e8a3c4SBeni Lev int ret; 16414e8a3c4SBeni Lev trace_rdev_stop_ap(&rdev->wiphy, dev); 16514e8a3c4SBeni Lev ret = rdev->ops->stop_ap(&rdev->wiphy, dev); 16614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 16714e8a3c4SBeni Lev return ret; 168e35e4d28SHila Gonen } 169e35e4d28SHila Gonen 170e35e4d28SHila Gonen static inline int rdev_add_station(struct cfg80211_registered_device *rdev, 171e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 172e35e4d28SHila Gonen struct station_parameters *params) 173e35e4d28SHila Gonen { 17414e8a3c4SBeni Lev int ret; 17514e8a3c4SBeni Lev trace_rdev_add_station(&rdev->wiphy, dev, mac, params); 17614e8a3c4SBeni Lev ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params); 17714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 17814e8a3c4SBeni Lev return ret; 179e35e4d28SHila Gonen } 180e35e4d28SHila Gonen 181e35e4d28SHila Gonen static inline int rdev_del_station(struct cfg80211_registered_device *rdev, 18289c771e5SJouni Malinen struct net_device *dev, 18389c771e5SJouni Malinen struct station_del_parameters *params) 184e35e4d28SHila Gonen { 18514e8a3c4SBeni Lev int ret; 18689c771e5SJouni Malinen trace_rdev_del_station(&rdev->wiphy, dev, params); 18789c771e5SJouni Malinen ret = rdev->ops->del_station(&rdev->wiphy, dev, params); 18814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 18914e8a3c4SBeni Lev return ret; 190e35e4d28SHila Gonen } 191e35e4d28SHila Gonen 192e35e4d28SHila Gonen static inline int rdev_change_station(struct cfg80211_registered_device *rdev, 193e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 194e35e4d28SHila Gonen struct station_parameters *params) 195e35e4d28SHila Gonen { 19614e8a3c4SBeni Lev int ret; 19714e8a3c4SBeni Lev trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 19814e8a3c4SBeni Lev ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 19914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 20014e8a3c4SBeni Lev return ret; 201e35e4d28SHila Gonen } 202e35e4d28SHila Gonen 203e35e4d28SHila Gonen static inline int rdev_get_station(struct cfg80211_registered_device *rdev, 2047406353dSAntonio Quartulli struct net_device *dev, const u8 *mac, 205e35e4d28SHila Gonen struct station_info *sinfo) 206e35e4d28SHila Gonen { 20714e8a3c4SBeni Lev int ret; 20814e8a3c4SBeni Lev trace_rdev_get_station(&rdev->wiphy, dev, mac); 20914e8a3c4SBeni Lev ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo); 21014e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 21114e8a3c4SBeni Lev return ret; 212e35e4d28SHila Gonen } 213e35e4d28SHila Gonen 214e35e4d28SHila Gonen static inline int rdev_dump_station(struct cfg80211_registered_device *rdev, 215e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *mac, 216e35e4d28SHila Gonen struct station_info *sinfo) 217e35e4d28SHila Gonen { 21814e8a3c4SBeni Lev int ret; 21914e8a3c4SBeni Lev trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 22014e8a3c4SBeni Lev ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 22114e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 22214e8a3c4SBeni Lev return ret; 223e35e4d28SHila Gonen } 224e35e4d28SHila Gonen 225e35e4d28SHila Gonen static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev, 226e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop) 227e35e4d28SHila Gonen { 22814e8a3c4SBeni Lev int ret; 22914e8a3c4SBeni Lev trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 23014e8a3c4SBeni Lev ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 23114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 23214e8a3c4SBeni Lev return ret; 233e35e4d28SHila Gonen } 234e35e4d28SHila Gonen 235e35e4d28SHila Gonen static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev, 236e35e4d28SHila Gonen struct net_device *dev, u8 *dst) 237e35e4d28SHila Gonen { 23814e8a3c4SBeni Lev int ret; 23914e8a3c4SBeni Lev trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 24014e8a3c4SBeni Lev ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 24114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 24214e8a3c4SBeni Lev return ret; 243e35e4d28SHila Gonen } 244e35e4d28SHila Gonen 245e35e4d28SHila Gonen static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev, 246e35e4d28SHila Gonen struct net_device *dev, u8 *dst, 247e35e4d28SHila Gonen u8 *next_hop) 248e35e4d28SHila Gonen { 24914e8a3c4SBeni Lev int ret; 25014e8a3c4SBeni Lev trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 25114e8a3c4SBeni Lev ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 25214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 25314e8a3c4SBeni Lev return ret; 254e35e4d28SHila Gonen } 255e35e4d28SHila Gonen 256e35e4d28SHila Gonen static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev, 257e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop, 258e35e4d28SHila Gonen struct mpath_info *pinfo) 259e35e4d28SHila Gonen { 26014e8a3c4SBeni Lev int ret; 26114e8a3c4SBeni Lev trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 26214e8a3c4SBeni Lev ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 26314e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 26414e8a3c4SBeni Lev return ret; 26514e8a3c4SBeni Lev 266e35e4d28SHila Gonen } 267e35e4d28SHila Gonen 26866be7d2bSHenning Rogge static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev, 26966be7d2bSHenning Rogge struct net_device *dev, u8 *dst, u8 *mpp, 27066be7d2bSHenning Rogge struct mpath_info *pinfo) 27166be7d2bSHenning Rogge { 27266be7d2bSHenning Rogge int ret; 27366be7d2bSHenning Rogge 27466be7d2bSHenning Rogge trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp); 27566be7d2bSHenning Rogge ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo); 27666be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 27766be7d2bSHenning Rogge return ret; 27866be7d2bSHenning Rogge } 27966be7d2bSHenning Rogge 280e35e4d28SHila Gonen static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev, 281e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *dst, 282e35e4d28SHila Gonen u8 *next_hop, struct mpath_info *pinfo) 283e35e4d28SHila Gonen 284e35e4d28SHila Gonen { 28514e8a3c4SBeni Lev int ret; 28614e8a3c4SBeni Lev trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 28714e8a3c4SBeni Lev ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 288e35e4d28SHila Gonen pinfo); 28914e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 29014e8a3c4SBeni Lev return ret; 291e35e4d28SHila Gonen } 292e35e4d28SHila Gonen 29366be7d2bSHenning Rogge static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev, 29466be7d2bSHenning Rogge struct net_device *dev, int idx, u8 *dst, 29566be7d2bSHenning Rogge u8 *mpp, struct mpath_info *pinfo) 29666be7d2bSHenning Rogge 29766be7d2bSHenning Rogge { 29866be7d2bSHenning Rogge int ret; 29966be7d2bSHenning Rogge 30066be7d2bSHenning Rogge trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp); 30166be7d2bSHenning Rogge ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo); 30266be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 30366be7d2bSHenning Rogge return ret; 30466be7d2bSHenning Rogge } 30566be7d2bSHenning Rogge 306e35e4d28SHila Gonen static inline int 307e35e4d28SHila Gonen rdev_get_mesh_config(struct cfg80211_registered_device *rdev, 308e35e4d28SHila Gonen struct net_device *dev, struct mesh_config *conf) 309e35e4d28SHila Gonen { 31014e8a3c4SBeni Lev int ret; 31114e8a3c4SBeni Lev trace_rdev_get_mesh_config(&rdev->wiphy, dev); 31214e8a3c4SBeni Lev ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 31314e8a3c4SBeni Lev trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 31414e8a3c4SBeni Lev return ret; 315e35e4d28SHila Gonen } 316e35e4d28SHila Gonen 317e35e4d28SHila Gonen static inline int 318e35e4d28SHila Gonen rdev_update_mesh_config(struct cfg80211_registered_device *rdev, 319e35e4d28SHila Gonen struct net_device *dev, u32 mask, 320e35e4d28SHila Gonen const struct mesh_config *nconf) 321e35e4d28SHila Gonen { 32214e8a3c4SBeni Lev int ret; 32314e8a3c4SBeni Lev trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 32414e8a3c4SBeni Lev ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 32514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 32614e8a3c4SBeni Lev return ret; 327e35e4d28SHila Gonen } 328e35e4d28SHila Gonen 329e35e4d28SHila Gonen static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev, 330e35e4d28SHila Gonen struct net_device *dev, 331e35e4d28SHila Gonen const struct mesh_config *conf, 332e35e4d28SHila Gonen const struct mesh_setup *setup) 333e35e4d28SHila Gonen { 33414e8a3c4SBeni Lev int ret; 33514e8a3c4SBeni Lev trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 33614e8a3c4SBeni Lev ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 33714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 33814e8a3c4SBeni Lev return ret; 339e35e4d28SHila Gonen } 340e35e4d28SHila Gonen 341e35e4d28SHila Gonen 342e35e4d28SHila Gonen static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev, 343e35e4d28SHila Gonen struct net_device *dev) 344e35e4d28SHila Gonen { 34514e8a3c4SBeni Lev int ret; 34614e8a3c4SBeni Lev trace_rdev_leave_mesh(&rdev->wiphy, dev); 34714e8a3c4SBeni Lev ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 34814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 34914e8a3c4SBeni Lev return ret; 350e35e4d28SHila Gonen } 351e35e4d28SHila Gonen 3526e0bd6c3SRostislav Lisovy static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev, 3536e0bd6c3SRostislav Lisovy struct net_device *dev, 3546e0bd6c3SRostislav Lisovy struct ocb_setup *setup) 3556e0bd6c3SRostislav Lisovy { 3566e0bd6c3SRostislav Lisovy int ret; 3576e0bd6c3SRostislav Lisovy trace_rdev_join_ocb(&rdev->wiphy, dev, setup); 3586e0bd6c3SRostislav Lisovy ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup); 3596e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3606e0bd6c3SRostislav Lisovy return ret; 3616e0bd6c3SRostislav Lisovy } 3626e0bd6c3SRostislav Lisovy 3636e0bd6c3SRostislav Lisovy static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev, 3646e0bd6c3SRostislav Lisovy struct net_device *dev) 3656e0bd6c3SRostislav Lisovy { 3666e0bd6c3SRostislav Lisovy int ret; 3676e0bd6c3SRostislav Lisovy trace_rdev_leave_ocb(&rdev->wiphy, dev); 3686e0bd6c3SRostislav Lisovy ret = rdev->ops->leave_ocb(&rdev->wiphy, dev); 3696e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3706e0bd6c3SRostislav Lisovy return ret; 3716e0bd6c3SRostislav Lisovy } 3726e0bd6c3SRostislav Lisovy 373e35e4d28SHila Gonen static inline int rdev_change_bss(struct cfg80211_registered_device *rdev, 374e35e4d28SHila Gonen struct net_device *dev, 375e35e4d28SHila Gonen struct bss_parameters *params) 376e35e4d28SHila Gonen 377e35e4d28SHila Gonen { 37814e8a3c4SBeni Lev int ret; 37914e8a3c4SBeni Lev trace_rdev_change_bss(&rdev->wiphy, dev, params); 38014e8a3c4SBeni Lev ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 38114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 38214e8a3c4SBeni Lev return ret; 383e35e4d28SHila Gonen } 384e35e4d28SHila Gonen 385e35e4d28SHila Gonen static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev, 386e35e4d28SHila Gonen struct net_device *dev, 387e35e4d28SHila Gonen struct ieee80211_txq_params *params) 388e35e4d28SHila Gonen 389e35e4d28SHila Gonen { 39014e8a3c4SBeni Lev int ret; 39114e8a3c4SBeni Lev trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 39214e8a3c4SBeni Lev ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 39314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 39414e8a3c4SBeni Lev return ret; 395e35e4d28SHila Gonen } 396e35e4d28SHila Gonen 397e35e4d28SHila Gonen static inline int 398e35e4d28SHila Gonen rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev, 399e35e4d28SHila Gonen struct net_device *dev, 400e35e4d28SHila Gonen struct ieee80211_channel *chan) 401e35e4d28SHila Gonen { 40214e8a3c4SBeni Lev int ret; 40314e8a3c4SBeni Lev trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 40414e8a3c4SBeni Lev ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 40514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 40614e8a3c4SBeni Lev return ret; 407e35e4d28SHila Gonen } 408e35e4d28SHila Gonen 409e35e4d28SHila Gonen static inline int 410e35e4d28SHila Gonen rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 411683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 412e35e4d28SHila Gonen { 41314e8a3c4SBeni Lev int ret; 414683b6d3bSJohannes Berg trace_rdev_set_monitor_channel(&rdev->wiphy, chandef); 415683b6d3bSJohannes Berg ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef); 41614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 41714e8a3c4SBeni Lev return ret; 418e35e4d28SHila Gonen } 419e35e4d28SHila Gonen 420e35e4d28SHila Gonen static inline int rdev_scan(struct cfg80211_registered_device *rdev, 421e35e4d28SHila Gonen struct cfg80211_scan_request *request) 422e35e4d28SHila Gonen { 42314e8a3c4SBeni Lev int ret; 42414e8a3c4SBeni Lev trace_rdev_scan(&rdev->wiphy, request); 42514e8a3c4SBeni Lev ret = rdev->ops->scan(&rdev->wiphy, request); 42614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 42714e8a3c4SBeni Lev return ret; 428e35e4d28SHila Gonen } 429e35e4d28SHila Gonen 430*91d3ab46SVidyullatha Kanchanapally static inline void rdev_abort_scan(struct cfg80211_registered_device *rdev, 431*91d3ab46SVidyullatha Kanchanapally struct wireless_dev *wdev) 432*91d3ab46SVidyullatha Kanchanapally { 433*91d3ab46SVidyullatha Kanchanapally trace_rdev_abort_scan(&rdev->wiphy, wdev); 434*91d3ab46SVidyullatha Kanchanapally rdev->ops->abort_scan(&rdev->wiphy, wdev); 435*91d3ab46SVidyullatha Kanchanapally trace_rdev_return_void(&rdev->wiphy); 436*91d3ab46SVidyullatha Kanchanapally } 437*91d3ab46SVidyullatha Kanchanapally 438e35e4d28SHila Gonen static inline int rdev_auth(struct cfg80211_registered_device *rdev, 439e35e4d28SHila Gonen struct net_device *dev, 440e35e4d28SHila Gonen struct cfg80211_auth_request *req) 441e35e4d28SHila Gonen { 44214e8a3c4SBeni Lev int ret; 44314e8a3c4SBeni Lev trace_rdev_auth(&rdev->wiphy, dev, req); 44414e8a3c4SBeni Lev ret = rdev->ops->auth(&rdev->wiphy, dev, req); 44514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 44614e8a3c4SBeni Lev return ret; 447e35e4d28SHila Gonen } 448e35e4d28SHila Gonen 449e35e4d28SHila Gonen static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 450e35e4d28SHila Gonen struct net_device *dev, 451e35e4d28SHila Gonen struct cfg80211_assoc_request *req) 452e35e4d28SHila Gonen { 45314e8a3c4SBeni Lev int ret; 45414e8a3c4SBeni Lev trace_rdev_assoc(&rdev->wiphy, dev, req); 45514e8a3c4SBeni Lev ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 45614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 45714e8a3c4SBeni Lev return ret; 458e35e4d28SHila Gonen } 459e35e4d28SHila Gonen 460e35e4d28SHila Gonen static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 461e35e4d28SHila Gonen struct net_device *dev, 462e35e4d28SHila Gonen struct cfg80211_deauth_request *req) 463e35e4d28SHila Gonen { 46414e8a3c4SBeni Lev int ret; 46514e8a3c4SBeni Lev trace_rdev_deauth(&rdev->wiphy, dev, req); 46614e8a3c4SBeni Lev ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 46714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 46814e8a3c4SBeni Lev return ret; 469e35e4d28SHila Gonen } 470e35e4d28SHila Gonen 471e35e4d28SHila Gonen static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 472e35e4d28SHila Gonen struct net_device *dev, 473e35e4d28SHila Gonen struct cfg80211_disassoc_request *req) 474e35e4d28SHila Gonen { 47514e8a3c4SBeni Lev int ret; 47614e8a3c4SBeni Lev trace_rdev_disassoc(&rdev->wiphy, dev, req); 47714e8a3c4SBeni Lev ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 47814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 47914e8a3c4SBeni Lev return ret; 480e35e4d28SHila Gonen } 481e35e4d28SHila Gonen 482e35e4d28SHila Gonen static inline int rdev_connect(struct cfg80211_registered_device *rdev, 483e35e4d28SHila Gonen struct net_device *dev, 484e35e4d28SHila Gonen struct cfg80211_connect_params *sme) 485e35e4d28SHila Gonen { 48614e8a3c4SBeni Lev int ret; 48714e8a3c4SBeni Lev trace_rdev_connect(&rdev->wiphy, dev, sme); 48814e8a3c4SBeni Lev ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 48914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 49014e8a3c4SBeni Lev return ret; 491e35e4d28SHila Gonen } 492e35e4d28SHila Gonen 493e35e4d28SHila Gonen static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 494e35e4d28SHila Gonen struct net_device *dev, u16 reason_code) 495e35e4d28SHila Gonen { 49614e8a3c4SBeni Lev int ret; 49714e8a3c4SBeni Lev trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 49814e8a3c4SBeni Lev ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 49914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 50014e8a3c4SBeni Lev return ret; 501e35e4d28SHila Gonen } 502e35e4d28SHila Gonen 503e35e4d28SHila Gonen static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 504e35e4d28SHila Gonen struct net_device *dev, 505e35e4d28SHila Gonen struct cfg80211_ibss_params *params) 506e35e4d28SHila Gonen { 50714e8a3c4SBeni Lev int ret; 50814e8a3c4SBeni Lev trace_rdev_join_ibss(&rdev->wiphy, dev, params); 50914e8a3c4SBeni Lev ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 51014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 51114e8a3c4SBeni Lev return ret; 512e35e4d28SHila Gonen } 513e35e4d28SHila Gonen 514e35e4d28SHila Gonen static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 515e35e4d28SHila Gonen struct net_device *dev) 516e35e4d28SHila Gonen { 51714e8a3c4SBeni Lev int ret; 51814e8a3c4SBeni Lev trace_rdev_leave_ibss(&rdev->wiphy, dev); 51914e8a3c4SBeni Lev ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 52014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 52114e8a3c4SBeni Lev return ret; 522e35e4d28SHila Gonen } 523e35e4d28SHila Gonen 524e35e4d28SHila Gonen static inline int 525e35e4d28SHila Gonen rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 526e35e4d28SHila Gonen { 52714e8a3c4SBeni Lev int ret; 52814e8a3c4SBeni Lev trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 52914e8a3c4SBeni Lev ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 53014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 53114e8a3c4SBeni Lev return ret; 532e35e4d28SHila Gonen } 533e35e4d28SHila Gonen 534e35e4d28SHila Gonen static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 535c8442118SJohannes Berg struct wireless_dev *wdev, 536e35e4d28SHila Gonen enum nl80211_tx_power_setting type, int mbm) 537e35e4d28SHila Gonen { 53814e8a3c4SBeni Lev int ret; 539c8442118SJohannes Berg trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm); 540c8442118SJohannes Berg ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm); 54114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 54214e8a3c4SBeni Lev return ret; 543e35e4d28SHila Gonen } 544e35e4d28SHila Gonen 545e35e4d28SHila Gonen static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 546c8442118SJohannes Berg struct wireless_dev *wdev, int *dbm) 547e35e4d28SHila Gonen { 54814e8a3c4SBeni Lev int ret; 549c8442118SJohannes Berg trace_rdev_get_tx_power(&rdev->wiphy, wdev); 550c8442118SJohannes Berg ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm); 55114e8a3c4SBeni Lev trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 55214e8a3c4SBeni Lev return ret; 553e35e4d28SHila Gonen } 554e35e4d28SHila Gonen 555e35e4d28SHila Gonen static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev, 556e35e4d28SHila Gonen struct net_device *dev, const u8 *addr) 557e35e4d28SHila Gonen { 55814e8a3c4SBeni Lev int ret; 55914e8a3c4SBeni Lev trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr); 56014e8a3c4SBeni Lev ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr); 56114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 56214e8a3c4SBeni Lev return ret; 563e35e4d28SHila Gonen } 564e35e4d28SHila Gonen 565e35e4d28SHila Gonen static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 566e35e4d28SHila Gonen { 56714e8a3c4SBeni Lev trace_rdev_rfkill_poll(&rdev->wiphy); 568e35e4d28SHila Gonen rdev->ops->rfkill_poll(&rdev->wiphy); 56914e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 570e35e4d28SHila Gonen } 571e35e4d28SHila Gonen 572e35e4d28SHila Gonen 573e35e4d28SHila Gonen #ifdef CONFIG_NL80211_TESTMODE 574e35e4d28SHila Gonen static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 575fc73f11fSDavid Spinadel struct wireless_dev *wdev, 576e35e4d28SHila Gonen void *data, int len) 577e35e4d28SHila Gonen { 57814e8a3c4SBeni Lev int ret; 579fc73f11fSDavid Spinadel trace_rdev_testmode_cmd(&rdev->wiphy, wdev); 580fc73f11fSDavid Spinadel ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len); 58114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 58214e8a3c4SBeni Lev return ret; 583e35e4d28SHila Gonen } 584e35e4d28SHila Gonen 585e35e4d28SHila Gonen static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 586e35e4d28SHila Gonen struct sk_buff *skb, 587e35e4d28SHila Gonen struct netlink_callback *cb, void *data, 588e35e4d28SHila Gonen int len) 589e35e4d28SHila Gonen { 59014e8a3c4SBeni Lev int ret; 59114e8a3c4SBeni Lev trace_rdev_testmode_dump(&rdev->wiphy); 59214e8a3c4SBeni Lev ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 59314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 59414e8a3c4SBeni Lev return ret; 595e35e4d28SHila Gonen } 596e35e4d28SHila Gonen #endif 597e35e4d28SHila Gonen 598e35e4d28SHila Gonen static inline int 599e35e4d28SHila Gonen rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 600e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 601e35e4d28SHila Gonen const struct cfg80211_bitrate_mask *mask) 602e35e4d28SHila Gonen { 60314e8a3c4SBeni Lev int ret; 60414e8a3c4SBeni Lev trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 60514e8a3c4SBeni Lev ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 60614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 60714e8a3c4SBeni Lev return ret; 608e35e4d28SHila Gonen } 609e35e4d28SHila Gonen 610e35e4d28SHila Gonen static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 611e35e4d28SHila Gonen struct net_device *netdev, int idx, 612e35e4d28SHila Gonen struct survey_info *info) 613e35e4d28SHila Gonen { 61414e8a3c4SBeni Lev int ret; 61514e8a3c4SBeni Lev trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 61614e8a3c4SBeni Lev ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 61714e8a3c4SBeni Lev if (ret < 0) 61814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 61914e8a3c4SBeni Lev else 62014e8a3c4SBeni Lev trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 62114e8a3c4SBeni Lev return ret; 622e35e4d28SHila Gonen } 623e35e4d28SHila Gonen 624e35e4d28SHila Gonen static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 625e35e4d28SHila Gonen struct net_device *netdev, 626e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 627e35e4d28SHila Gonen { 62814e8a3c4SBeni Lev int ret; 62914e8a3c4SBeni Lev trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 63014e8a3c4SBeni Lev ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 63114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 63214e8a3c4SBeni Lev return ret; 633e35e4d28SHila Gonen } 634e35e4d28SHila Gonen 635e35e4d28SHila Gonen static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 636e35e4d28SHila Gonen struct net_device *netdev, 637e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 638e35e4d28SHila Gonen { 63914e8a3c4SBeni Lev int ret; 64014e8a3c4SBeni Lev trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 64114e8a3c4SBeni Lev ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 64214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 64314e8a3c4SBeni Lev return ret; 644e35e4d28SHila Gonen } 645e35e4d28SHila Gonen 646e35e4d28SHila Gonen static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 647e35e4d28SHila Gonen struct net_device *netdev) 648e35e4d28SHila Gonen { 64914e8a3c4SBeni Lev int ret; 65014e8a3c4SBeni Lev trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 65114e8a3c4SBeni Lev ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 65214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 65314e8a3c4SBeni Lev return ret; 654e35e4d28SHila Gonen } 655e35e4d28SHila Gonen 656e35e4d28SHila Gonen static inline int 657e35e4d28SHila Gonen rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 658e35e4d28SHila Gonen struct wireless_dev *wdev, 659e35e4d28SHila Gonen struct ieee80211_channel *chan, 660e35e4d28SHila Gonen unsigned int duration, u64 *cookie) 661e35e4d28SHila Gonen { 66214e8a3c4SBeni Lev int ret; 66342d97a59SJohannes Berg trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 66414e8a3c4SBeni Lev ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 66542d97a59SJohannes Berg duration, cookie); 66614e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 66714e8a3c4SBeni Lev return ret; 668e35e4d28SHila Gonen } 669e35e4d28SHila Gonen 670e35e4d28SHila Gonen static inline int 671e35e4d28SHila Gonen rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 672e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 673e35e4d28SHila Gonen { 67414e8a3c4SBeni Lev int ret; 67514e8a3c4SBeni Lev trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 67614e8a3c4SBeni Lev ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 67714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 67814e8a3c4SBeni Lev return ret; 679e35e4d28SHila Gonen } 680e35e4d28SHila Gonen 681e35e4d28SHila Gonen static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 682e35e4d28SHila Gonen struct wireless_dev *wdev, 683b176e629SAndrei Otcheretianski struct cfg80211_mgmt_tx_params *params, 684b176e629SAndrei Otcheretianski u64 *cookie) 685e35e4d28SHila Gonen { 68614e8a3c4SBeni Lev int ret; 687b176e629SAndrei Otcheretianski trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); 688b176e629SAndrei Otcheretianski ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); 68914e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 69014e8a3c4SBeni Lev return ret; 691e35e4d28SHila Gonen } 692e35e4d28SHila Gonen 693e35e4d28SHila Gonen static inline int 694e35e4d28SHila Gonen rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 695e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 696e35e4d28SHila Gonen { 69714e8a3c4SBeni Lev int ret; 69814e8a3c4SBeni Lev trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 69914e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 70014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 70114e8a3c4SBeni Lev return ret; 702e35e4d28SHila Gonen } 703e35e4d28SHila Gonen 704e35e4d28SHila Gonen static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 705e35e4d28SHila Gonen struct net_device *dev, bool enabled, 706e35e4d28SHila Gonen int timeout) 707e35e4d28SHila Gonen { 70814e8a3c4SBeni Lev int ret; 70914e8a3c4SBeni Lev trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 71014e8a3c4SBeni Lev ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 71114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 71214e8a3c4SBeni Lev return ret; 713e35e4d28SHila Gonen } 714e35e4d28SHila Gonen 715e35e4d28SHila Gonen static inline int 716e35e4d28SHila Gonen rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 717e35e4d28SHila Gonen struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 718e35e4d28SHila Gonen { 71914e8a3c4SBeni Lev int ret; 72014e8a3c4SBeni Lev trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 721e35e4d28SHila Gonen rssi_hyst); 72214e8a3c4SBeni Lev ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 72314e8a3c4SBeni Lev rssi_hyst); 72414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 72514e8a3c4SBeni Lev return ret; 726e35e4d28SHila Gonen } 727e35e4d28SHila Gonen 728e35e4d28SHila Gonen static inline int 729e35e4d28SHila Gonen rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 730e35e4d28SHila Gonen struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 731e35e4d28SHila Gonen { 73214e8a3c4SBeni Lev int ret; 73314e8a3c4SBeni Lev trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 73414e8a3c4SBeni Lev ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 735e35e4d28SHila Gonen intvl); 73614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 73714e8a3c4SBeni Lev return ret; 738e35e4d28SHila Gonen } 739e35e4d28SHila Gonen 740e35e4d28SHila Gonen static inline void 741e35e4d28SHila Gonen rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev, 742e35e4d28SHila Gonen struct wireless_dev *wdev, u16 frame_type, bool reg) 743e35e4d28SHila Gonen { 74433d8783cSJohannes Berg might_sleep(); 74533d8783cSJohannes Berg 74614e8a3c4SBeni Lev trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 74714e8a3c4SBeni Lev rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 74814e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 749e35e4d28SHila Gonen } 750e35e4d28SHila Gonen 751e35e4d28SHila Gonen static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 752e35e4d28SHila Gonen u32 tx_ant, u32 rx_ant) 753e35e4d28SHila Gonen { 75414e8a3c4SBeni Lev int ret; 75514e8a3c4SBeni Lev trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 75614e8a3c4SBeni Lev ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 75714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 75814e8a3c4SBeni Lev return ret; 759e35e4d28SHila Gonen } 760e35e4d28SHila Gonen 761e35e4d28SHila Gonen static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 762e35e4d28SHila Gonen u32 *tx_ant, u32 *rx_ant) 763e35e4d28SHila Gonen { 76414e8a3c4SBeni Lev int ret; 76514e8a3c4SBeni Lev trace_rdev_get_antenna(&rdev->wiphy); 76614e8a3c4SBeni Lev ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 76714e8a3c4SBeni Lev if (ret) 76814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 76914e8a3c4SBeni Lev else 77014e8a3c4SBeni Lev trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 77114e8a3c4SBeni Lev *rx_ant); 77214e8a3c4SBeni Lev return ret; 773e35e4d28SHila Gonen } 774e35e4d28SHila Gonen 775e35e4d28SHila Gonen static inline int 776e35e4d28SHila Gonen rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 777e35e4d28SHila Gonen struct net_device *dev, 778e35e4d28SHila Gonen struct cfg80211_sched_scan_request *request) 779e35e4d28SHila Gonen { 78014e8a3c4SBeni Lev int ret; 78114e8a3c4SBeni Lev trace_rdev_sched_scan_start(&rdev->wiphy, dev, request); 78214e8a3c4SBeni Lev ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 78314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 78414e8a3c4SBeni Lev return ret; 785e35e4d28SHila Gonen } 786e35e4d28SHila Gonen 787e35e4d28SHila Gonen static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 788e35e4d28SHila Gonen struct net_device *dev) 789e35e4d28SHila Gonen { 79014e8a3c4SBeni Lev int ret; 79114e8a3c4SBeni Lev trace_rdev_sched_scan_stop(&rdev->wiphy, dev); 79214e8a3c4SBeni Lev ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev); 79314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 79414e8a3c4SBeni Lev return ret; 795e35e4d28SHila Gonen } 796e35e4d28SHila Gonen 797e35e4d28SHila Gonen static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 798e35e4d28SHila Gonen struct net_device *dev, 799e35e4d28SHila Gonen struct cfg80211_gtk_rekey_data *data) 800e35e4d28SHila Gonen { 80114e8a3c4SBeni Lev int ret; 80214e8a3c4SBeni Lev trace_rdev_set_rekey_data(&rdev->wiphy, dev); 80314e8a3c4SBeni Lev ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 80414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 80514e8a3c4SBeni Lev return ret; 806e35e4d28SHila Gonen } 807e35e4d28SHila Gonen 808e35e4d28SHila Gonen static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 809e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 810e35e4d28SHila Gonen u8 action_code, u8 dialog_token, 811df942e7bSSunil Dutt Undekari u16 status_code, u32 peer_capability, 81231fa97c5SArik Nemtsov bool initiator, const u8 *buf, size_t len) 813e35e4d28SHila Gonen { 81414e8a3c4SBeni Lev int ret; 81514e8a3c4SBeni Lev trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 816df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 81731fa97c5SArik Nemtsov initiator, buf, len); 81814e8a3c4SBeni Lev ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 819df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 82031fa97c5SArik Nemtsov initiator, buf, len); 82114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 82214e8a3c4SBeni Lev return ret; 823e35e4d28SHila Gonen } 824e35e4d28SHila Gonen 825e35e4d28SHila Gonen static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 826e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 827e35e4d28SHila Gonen enum nl80211_tdls_operation oper) 828e35e4d28SHila Gonen { 82914e8a3c4SBeni Lev int ret; 83014e8a3c4SBeni Lev trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 83114e8a3c4SBeni Lev ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 83214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 83314e8a3c4SBeni Lev return ret; 834e35e4d28SHila Gonen } 835e35e4d28SHila Gonen 836e35e4d28SHila Gonen static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 837e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 838e35e4d28SHila Gonen u64 *cookie) 839e35e4d28SHila Gonen { 84014e8a3c4SBeni Lev int ret; 84114e8a3c4SBeni Lev trace_rdev_probe_client(&rdev->wiphy, dev, peer); 84214e8a3c4SBeni Lev ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 84314e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 84414e8a3c4SBeni Lev return ret; 845e35e4d28SHila Gonen } 846e35e4d28SHila Gonen 847e35e4d28SHila Gonen static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 848e35e4d28SHila Gonen struct net_device *dev, u16 noack_map) 849e35e4d28SHila Gonen { 85014e8a3c4SBeni Lev int ret; 85114e8a3c4SBeni Lev trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 85214e8a3c4SBeni Lev ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 85314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 85414e8a3c4SBeni Lev return ret; 855e35e4d28SHila Gonen } 856e35e4d28SHila Gonen 857e35e4d28SHila Gonen static inline int 858683b6d3bSJohannes Berg rdev_get_channel(struct cfg80211_registered_device *rdev, 859683b6d3bSJohannes Berg struct wireless_dev *wdev, 860683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 861e35e4d28SHila Gonen { 862683b6d3bSJohannes Berg int ret; 863683b6d3bSJohannes Berg 86414e8a3c4SBeni Lev trace_rdev_get_channel(&rdev->wiphy, wdev); 865683b6d3bSJohannes Berg ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef); 866683b6d3bSJohannes Berg trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 867683b6d3bSJohannes Berg 86814e8a3c4SBeni Lev return ret; 869e35e4d28SHila Gonen } 870e35e4d28SHila Gonen 871eeb126e9SJohannes Berg static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 872eeb126e9SJohannes Berg struct wireless_dev *wdev) 873eeb126e9SJohannes Berg { 874eeb126e9SJohannes Berg int ret; 875eeb126e9SJohannes Berg 876eeb126e9SJohannes Berg trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 877eeb126e9SJohannes Berg ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 878eeb126e9SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 879eeb126e9SJohannes Berg return ret; 880eeb126e9SJohannes Berg } 881eeb126e9SJohannes Berg 882eeb126e9SJohannes Berg static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 883eeb126e9SJohannes Berg struct wireless_dev *wdev) 884eeb126e9SJohannes Berg { 885eeb126e9SJohannes Berg trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 886eeb126e9SJohannes Berg rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 887eeb126e9SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 888eeb126e9SJohannes Berg } 88977765eafSVasanthakumar Thiagarajan 89077765eafSVasanthakumar Thiagarajan static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 89177765eafSVasanthakumar Thiagarajan struct net_device *dev, 89277765eafSVasanthakumar Thiagarajan struct cfg80211_acl_data *params) 89377765eafSVasanthakumar Thiagarajan { 89477765eafSVasanthakumar Thiagarajan int ret; 89577765eafSVasanthakumar Thiagarajan 89677765eafSVasanthakumar Thiagarajan trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 89777765eafSVasanthakumar Thiagarajan ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 89877765eafSVasanthakumar Thiagarajan trace_rdev_return_int(&rdev->wiphy, ret); 89977765eafSVasanthakumar Thiagarajan return ret; 90077765eafSVasanthakumar Thiagarajan } 901355199e0SJouni Malinen 902355199e0SJouni Malinen static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 903355199e0SJouni Malinen struct net_device *dev, 904355199e0SJouni Malinen struct cfg80211_update_ft_ies_params *ftie) 905355199e0SJouni Malinen { 906355199e0SJouni Malinen int ret; 907355199e0SJouni Malinen 908355199e0SJouni Malinen trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 909355199e0SJouni Malinen ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 910355199e0SJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 911355199e0SJouni Malinen return ret; 9125de17984SArend van Spriel } 9135de17984SArend van Spriel 9145de17984SArend van Spriel static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev, 9155de17984SArend van Spriel struct wireless_dev *wdev, 9165de17984SArend van Spriel enum nl80211_crit_proto_id protocol, 9175de17984SArend van Spriel u16 duration) 9185de17984SArend van Spriel { 9195de17984SArend van Spriel int ret; 9205de17984SArend van Spriel 9215de17984SArend van Spriel trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration); 9225de17984SArend van Spriel ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev, 9235de17984SArend van Spriel protocol, duration); 9245de17984SArend van Spriel trace_rdev_return_int(&rdev->wiphy, ret); 9255de17984SArend van Spriel return ret; 9265de17984SArend van Spriel } 9275de17984SArend van Spriel 9285de17984SArend van Spriel static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev, 9295de17984SArend van Spriel struct wireless_dev *wdev) 9305de17984SArend van Spriel { 9315de17984SArend van Spriel trace_rdev_crit_proto_stop(&rdev->wiphy, wdev); 9325de17984SArend van Spriel rdev->ops->crit_proto_stop(&rdev->wiphy, wdev); 9335de17984SArend van Spriel trace_rdev_return_void(&rdev->wiphy); 934355199e0SJouni Malinen } 935355199e0SJouni Malinen 93616ef1fe2SSimon Wunderlich static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev, 93716ef1fe2SSimon Wunderlich struct net_device *dev, 93816ef1fe2SSimon Wunderlich struct cfg80211_csa_settings *params) 93916ef1fe2SSimon Wunderlich { 94016ef1fe2SSimon Wunderlich int ret; 94116ef1fe2SSimon Wunderlich 94216ef1fe2SSimon Wunderlich trace_rdev_channel_switch(&rdev->wiphy, dev, params); 94316ef1fe2SSimon Wunderlich ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params); 94416ef1fe2SSimon Wunderlich trace_rdev_return_int(&rdev->wiphy, ret); 94516ef1fe2SSimon Wunderlich return ret; 94616ef1fe2SSimon Wunderlich } 94716ef1fe2SSimon Wunderlich 948fa9ffc74SKyeyoon Park static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev, 949fa9ffc74SKyeyoon Park struct net_device *dev, 950fa9ffc74SKyeyoon Park struct cfg80211_qos_map *qos_map) 951fa9ffc74SKyeyoon Park { 952fa9ffc74SKyeyoon Park int ret = -EOPNOTSUPP; 953fa9ffc74SKyeyoon Park 954fa9ffc74SKyeyoon Park if (rdev->ops->set_qos_map) { 955fa9ffc74SKyeyoon Park trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map); 956fa9ffc74SKyeyoon Park ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map); 957fa9ffc74SKyeyoon Park trace_rdev_return_int(&rdev->wiphy, ret); 958fa9ffc74SKyeyoon Park } 959fa9ffc74SKyeyoon Park 960fa9ffc74SKyeyoon Park return ret; 961fa9ffc74SKyeyoon Park } 962fa9ffc74SKyeyoon Park 963e16821bcSJouni Malinen static inline int 964e16821bcSJouni Malinen rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev, 965e16821bcSJouni Malinen struct net_device *dev, struct cfg80211_chan_def *chandef) 966e16821bcSJouni Malinen { 967e16821bcSJouni Malinen int ret; 968e16821bcSJouni Malinen 969e16821bcSJouni Malinen trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef); 970e16821bcSJouni Malinen ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef); 971e16821bcSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 972e16821bcSJouni Malinen 973e16821bcSJouni Malinen return ret; 974e16821bcSJouni Malinen } 975e16821bcSJouni Malinen 976960d01acSJohannes Berg static inline int 977960d01acSJohannes Berg rdev_add_tx_ts(struct cfg80211_registered_device *rdev, 978960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer, 979960d01acSJohannes Berg u8 user_prio, u16 admitted_time) 980960d01acSJohannes Berg { 981960d01acSJohannes Berg int ret = -EOPNOTSUPP; 982960d01acSJohannes Berg 983960d01acSJohannes Berg trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer, 984960d01acSJohannes Berg user_prio, admitted_time); 985960d01acSJohannes Berg if (rdev->ops->add_tx_ts) 986960d01acSJohannes Berg ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer, 987960d01acSJohannes Berg user_prio, admitted_time); 988960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 989960d01acSJohannes Berg 990960d01acSJohannes Berg return ret; 991960d01acSJohannes Berg } 992960d01acSJohannes Berg 993960d01acSJohannes Berg static inline int 994960d01acSJohannes Berg rdev_del_tx_ts(struct cfg80211_registered_device *rdev, 995960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer) 996960d01acSJohannes Berg { 997960d01acSJohannes Berg int ret = -EOPNOTSUPP; 998960d01acSJohannes Berg 999960d01acSJohannes Berg trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1000960d01acSJohannes Berg if (rdev->ops->del_tx_ts) 1001960d01acSJohannes Berg ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1002960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1003960d01acSJohannes Berg 1004960d01acSJohannes Berg return ret; 1005960d01acSJohannes Berg } 1006960d01acSJohannes Berg 10071057d35eSArik Nemtsov static inline int 10081057d35eSArik Nemtsov rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev, 10091057d35eSArik Nemtsov struct net_device *dev, const u8 *addr, 10101057d35eSArik Nemtsov u8 oper_class, struct cfg80211_chan_def *chandef) 10111057d35eSArik Nemtsov { 10121057d35eSArik Nemtsov int ret; 10131057d35eSArik Nemtsov 10141057d35eSArik Nemtsov trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class, 10151057d35eSArik Nemtsov chandef); 10161057d35eSArik Nemtsov ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr, 10171057d35eSArik Nemtsov oper_class, chandef); 10181057d35eSArik Nemtsov trace_rdev_return_int(&rdev->wiphy, ret); 10191057d35eSArik Nemtsov return ret; 10201057d35eSArik Nemtsov } 10211057d35eSArik Nemtsov 10221057d35eSArik Nemtsov static inline void 10231057d35eSArik Nemtsov rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev, 10241057d35eSArik Nemtsov struct net_device *dev, const u8 *addr) 10251057d35eSArik Nemtsov { 10261057d35eSArik Nemtsov trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 10271057d35eSArik Nemtsov rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 10281057d35eSArik Nemtsov trace_rdev_return_void(&rdev->wiphy); 10291057d35eSArik Nemtsov } 10301057d35eSArik Nemtsov 1031a1056b1bSIlan Peer static inline int 1032a1056b1bSIlan Peer rdev_start_radar_detection(struct cfg80211_registered_device *rdev, 1033a1056b1bSIlan Peer struct net_device *dev, 1034a1056b1bSIlan Peer struct cfg80211_chan_def *chandef, 1035a1056b1bSIlan Peer u32 cac_time_ms) 1036a1056b1bSIlan Peer { 1037a1056b1bSIlan Peer int ret = -ENOTSUPP; 1038a1056b1bSIlan Peer 1039a1056b1bSIlan Peer trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef, 1040a1056b1bSIlan Peer cac_time_ms); 1041a1056b1bSIlan Peer if (rdev->ops->start_radar_detection) 1042a1056b1bSIlan Peer ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev, 1043a1056b1bSIlan Peer chandef, cac_time_ms); 1044a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1045a1056b1bSIlan Peer return ret; 1046a1056b1bSIlan Peer } 1047a1056b1bSIlan Peer 1048a1056b1bSIlan Peer static inline int 1049a1056b1bSIlan Peer rdev_set_mcast_rate(struct cfg80211_registered_device *rdev, 1050a1056b1bSIlan Peer struct net_device *dev, 1051a1056b1bSIlan Peer int mcast_rate[IEEE80211_NUM_BANDS]) 1052a1056b1bSIlan Peer { 1053a1056b1bSIlan Peer int ret = -ENOTSUPP; 1054a1056b1bSIlan Peer 1055a1056b1bSIlan Peer trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1056a1056b1bSIlan Peer if (rdev->ops->set_mcast_rate) 1057a1056b1bSIlan Peer ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1058a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1059a1056b1bSIlan Peer return ret; 1060a1056b1bSIlan Peer } 1061a1056b1bSIlan Peer 1062a1056b1bSIlan Peer static inline int 1063a1056b1bSIlan Peer rdev_set_coalesce(struct cfg80211_registered_device *rdev, 1064a1056b1bSIlan Peer struct cfg80211_coalesce *coalesce) 1065a1056b1bSIlan Peer { 1066a1056b1bSIlan Peer int ret = -ENOTSUPP; 1067a1056b1bSIlan Peer 1068a1056b1bSIlan Peer trace_rdev_set_coalesce(&rdev->wiphy, coalesce); 1069a1056b1bSIlan Peer if (rdev->ops->set_coalesce) 1070a1056b1bSIlan Peer ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce); 1071a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1072a1056b1bSIlan Peer return ret; 1073a1056b1bSIlan Peer } 1074e35e4d28SHila Gonen #endif /* __CFG80211_RDEV_OPS */ 1075